On Mon, 3 Dec 2018 at 07:40, robert engels <reng...@ix.netcom.com> wrote:
> Roger,
>
> I experimented with the import name (rather than dot import), and came up
with this:
>
> type Order struct {
>    sync.RWMutex
>    Instrument
>    Id         OrderID
>    ExchangeId string
>    Price      n.Fixed
>    Side
>    Quantity   n.Fixed
>    Remaining  n.Fixed
>    OrderType
>    OrderState
>    RejectReason string
> }
>
> But I’m still not sure it’s great. The n (number) has some meaning, and
it definitely reads easier than fixed.Fixed, but I what I’m really trying
to convey is that “Fixed” is a top-level type, on equal footing with
‘string’.

But it really *isn't* a top-level type on an equal footing with string.
Type "string" is defined by the language and is common with every other Go
program in existence. Your "Fixed" type may be one of many implementations,
each with its own particular set of operations and conventions.

That said, you could do:

     type fixed = fixed.Fixed

> OrderID is declared in this package, so it reads with the desired
simplicity, and it just seems wrong that I can’t declare Fixed to have the
same treatment just because it comes from another package.

Knowing which things come from external packages is an important part of
understanding the code.

BTW I wonder if a single capital letter might work well for single letter
import identifiers, because that's a space that's not commonly used (with
the exception of the "C" pseudo import). e.g. N.Fixed. Then it wouldn't
clash with commonly used single letter identifiers such as "n".
> Anyway, I’ve read through your proposal, and I didn’t even think it was
possible… :)
>
> I thought the last segment needed to match the package name. What would
be the rationale for not having that be the case (i.e. why is that even
supported ?)

Trivially, every "main" package has this issue, as does any package with a
trailing major version (e.g. google.golang.org/api/compute/v1,
gopkg.in/yaml.v2, cloud.google.com/go/container/apiv1). There are quite a
few packages that use a punctuation-separated last component (e.g.
github.com/juju/persistent-cookiejar, code.google.com/p/biogo.llrb) and
others that just seem to use a different identifier anyway (e.g.
upspin.io/pack/eeintegrity has name "ei" not "eeintegrity").

I don't think it's a good idea to encapsulate some of the above conventions
in the language spec; better just to define a simple rule and an easy way
to get around it when it doesn't fit, I think.

  cheers,
    rog.

PS embedding Mutex into a public is generally considered not to be a good
idea, as it means that external code can break mutex invariants. It's
considered better to keep mutex-manipulating code encapsulated inside
methods or functions - that way, all lock manipulations can easily be
audited.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to