top | item 41280777

(no title)

kzs0 | 1 year ago

In the cases where this is important, you can use pointers. Go allows you to make pointers to primitives as well (making the zero value nil) so you can explicitly define those edge cases.

You’d be surprised how infrequently that’s actually a concern though.

discuss

order

deergomoo|1 year ago

Using pointers feels horrible as a workaround though because it completely muddies the intent. Is it a pointer because it could be zero or <not set>, is it a pointer for performance reasons, is it a pointer because the function mutates it? To me it flies directly in the face of Go's desire to keep things simple and easy to reason about.

> You’d be surprised how infrequently that’s actually a concern though

I admittedly don't write a huge amount of Go, but I run into this fairly often any time I'm dealing with user input. Something like an optional numeric input is not at all uncommon.

Neikius|1 year ago

What? That is actually an everyday concern and devs assuming that information is not needed will bring pain down the road.

Just two cases of the top of my head: working with databases and json interop with other systems that actually do differentiate. And the second one should not happen, but people do make assumptions and sometimes those are inherently incompatible with how golang works.

metaltyphoon|1 year ago

How do you have a PUT on an API to “unset a field”?