I encourage people to use the later form because of the duality of a bool
(true or false) and the fact that it implies meaning. When you see the bool
you have to start considering the false path. I'd much prefer the extra few
bytes for the longer inclusion checks because there is no ambiguity in the
check.

On Tue, Jul 26, 2016 at 9:27 AM Tyler Compton <xavi...@gmail.com> wrote:

> In my opinion, struct{} should always be used for placeholders. I also use
> it when sending to a channel where the data itself doesn't matter. struct{}
> looks gross but it's very expressive in this case and I think most all Go
> programmers are familiar with its meaning.
>
> map[string]bool suggests that the bool value has some kind of
> significance. Sure, the documentation you put in probably says otherwise,
> but the bool type is still unnecessary indirection.
>
> This issue is made worse if one uses the if m[key] { ... } idiom for the
> reason that Sam Whited brought up. Plus, then the bool has a meaning, but
> it's only for the purpose of slightly shortening code instead of using a
> well-known Go pattern. Why bother making the meaning of the map more
> complicated?
>
> if _, ok = m[key]; ok {
> }
>
> Is something Go programmers are used to.
>
> if m[ok] {
> }
>
> Requires that the programmer take a look at the map and its documentation
> to see what's going on unless they're already used to that pattern in the
> code base.
>
> On Tuesday, July 26, 2016 at 7:07:08 AM UTC-7, Sam Whited wrote:
>
>> On Tue, Jul 26, 2016 at 6:35 AM, Dave Cheney <da...@cheney.net> wrote:
>> > If saving one byte per entry is important for your application, the
>> latter is your choice. The former has nicer properties that you can use the
>> single value form of map access,
>> >
>> > if m[key] {
>> >    // found
>> > }
>> >
>> > I'd say the former is the right choice for 97.25% of general use cases.
>>
>> I'd agree with this, except that I don't trust that one guy in the
>> office not to sneak past something that somehow puts a false in the
>> map and causes bugs later. Arguably that's a review problem, but even
>> so one or two extra bytes of code (`_, ok = m[key]; ok') seems like a
>> small price to pay for safety guarantees and to save a few bytes of
>> memory.
>>
>> (though as you said, it hardly matters either way; I just prefer to
>> recommend the struct{} version to new people)
>>
>> —Sam
>>
>>
>> --
>> Sam Whited
>> pub 4096R/54083AE104EA7AD3
>>
> --
> 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.
>

-- 
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