type Blah interface { Var string }
wont work, but type Blah interface { GetVar() string }
does. I'm sure theres a reason for this. Can someone shed some light? type Blah interface { Var string }
wont work, but type Blah interface { GetVar() string }
does. I'm sure theres a reason for this. Can someone shed some light?In your example, GetVar() can be implemented in a number of ways. Returning Var field of Blah struct is only one such way (and if there was only one implementation, there would be no need for an interface).
In that light, adding variables as part of interface doesn't make sense. Variables are fixing the thing that interface is meant to make flexible.
In Go, you can achieve re-using of a bunch of variables (and their methods) by embedding - put the variables you want to re-use into a separate struct and embed that struct in other structs. See https://golang.org/doc/effective_go.html#embedding
If you want to guarantee that two structs contain a set of the same required fields, I believe the best practice would be to include an anonymous field for a struct with the fields across both. [1]
[0] http://play.golang.org/p/0zMqPUicgq [1] http://play.golang.org/p/cM3XPfitxH
Methods can be defined on any type declared in the package.
A type in go can be a lot more that just a struct; it can be any type in the language. So while it may make sense to have values on interfaces for structs, values don't make any sense for functions, pointers, interfaces, or extensions to built in types.