4 ms·
Well, but this again works: type pair struct { x, y int } func main() { var p pair fmt.Printf("%d\n", p.x) fmt.Pr
by dan00 13y ago
Well, but this again works:
type pair struct {
x, y int
}
func main() {
var p pair
fmt.Printf("%d\n", p.x)
fmt.Printf("%d\n", p.y)
}
That's just wrong, that declaration and initialization behaves differently depending on the type.
- zemo 13y agoThe zero value for a map is nil. The zero value for a struct is a valid struct whose fields are all zeroed. So for pair, that would be (0, 0). The zero value for a pointer is nil. If you had said `var p *pair`, then it would be a pointer to pair, and it would be nil, and you would get a nil panic error.
- brnstz 13y agoYou can do: m1 := map[string]int{} m1["a"] = 1
- jerf 13y agoIf I could unilaterally make just one change to Go, I'd adopt C#-style nullable types, and change everything to be nonnullable without the extra sigil (or whatever, I have no passion about the syntax itself, just the feature). This would produce, say, map[string]string vs. map?[string]string. The first would not be permitted to be null, the second would. It would be my choice because unlike a lot of other pet ideas which would radically change Go into a new language, I'm pretty sure this would have hardly any effect... excepting of course to remove the Billion Dollar Mistake from the next up-and-coming language.
- dan00 13y agoWell, I'm more or less a programming language nerd and these kind of things just hurt =). Just try to pass a 'map' or a 'struct' to an other function. The 'map' behaves like passed by reference and the 'struct' behaves like passed by value. If you want to pass a 'struct' by reference than you have to use a pointer to a 'struct'. Seriously? What kind of ad hoc programming language design is this?