4 ms·
I prefer immediately initialized struct vars var Animal = struct { Cat string Dog string Dodo string
by lenkite 4y ago
I prefer immediately initialized struct vars
var Animal = struct {
Cat string
Dog string
Dodo string
} {
"Cat",
"Dog",
"Dodo",
}
- xaduha 4y agoDitto, surely this is better than what this blog post suggests? var Constants = struct { FooBar string FizzBuzz string } { "FooBar", "FizzBuzz", } If you must have type FlagID string then this should work also var Constants = struct { FooBar FlagID FizzBuzz FlagID } { "FooBar", "FizzBuzz", }
- atombender 4y agoThat's not a type. That's just some string constants. You cannot define a variable of type Animal, which is kind of the point of enums. Worse, they're not constants, they're mutable. So how is that different from this? var ( Cat = "Cat" Dog = "Dog" Dodo = "Dodo" )
- xaduha 4y agoIn my example it would be accessible as Constants.FooBar and it would be of a type FlagID just as required. What else do you need? Mutability was dismissed in the blog post too and if you're modifying something called Constants.FooBar it's kinda on you anyway.
- atombender 4y agoYour example does not use a type, so I fail to see how it's an equivalent example. What does your example give you aside from "namespacing" the values under a generic struct?
- xaduha 4y agoRead the whole comment, FlagID is there and function signature func IsEnabled(id FlagID) bool { would be satisfied just fine
- atombender 4y agoI was not replying to your proposal, but to the comment by "lenkite", which only defines "var Animal" and no type.
- xaduha 4y agoIt is the same thing, just needs a bit of imagination.
- goodoldneon 4y agoYour example wouldn't work for function param types, right? The following code compiles even though I'm not passing a valid flag ID: type FlagID string var Constants = struct { FooBar FlagID FizzBuzz FlagID }{ "FooBar", "FizzBuzz", } func p(flag FlagID) { fmt.Println(flag) } func main() { p("hi") }
- xaduha 4y agoYou're right and OP mentioned it at the start too. I guess your editor would show you what is expected there and that should be good enough for most cases. If it is some sort of a library though, then there should be a better way to do this that to pass some enums as parameters to functions. But yes, it is a shortcoming that Go should probably fix.
- goodoldneon 4y agoThis type of thing has been surprising to me as I've learned Go. It seems like Go makes a great effort around safety in a lot of ways, but sometimes will avoid safety and say "just be careful" instead