In the Go language, we often encounter situations where we need to access subtype properties in parent type objects. This may be because we use nested structures when defining the structure. However, since there is no concept of inheritance in the Go language, subtype properties cannot be accessed directly through the parent type object. So, how to implement this requirement in Go? Below, I will introduce you to several commonly used methods.
I am creating a file storage. I'm trying to create different types of files. To simulate this I use the code:
<code>package main import ( "fmt" "time" ) type File interface{} type Audio struct { File Duration time.Duration } type Image struct { File Width uint Height uint } func main() { var files = map[string]File{ "1": Audio{ Duration: 14 * time.Second, }, "2": Image{ Height: 9989, Width: 1111, }, "3": Image{ Width: 1234, Height: 5678, }, } for k, v := range files { switch v.(type) { case Audio: fmt.Printf("%s: Audio %d seconds", k, v.Duration / time.Second) case Image: fmt.Printf("%s: Image %dx%d", k, v.Width, v.Height) } } } </code>
I am expecting this output:
1: Audio 14 seconds 2: Image 1111x9989 3: Image 1234x5678
But the Go compiler gave me this error:
./main.go:38:44: v.Duration is undefined (type File has no field or method Duration)
./main.go:40:39: v.Width is undefined (type File has no field or method Width)
./main.go:40:48: v.Height is undefined (type File has no field or method Height)
How to fix the error?
switch v := v.(type) {
will declare a new v
with the type you expect.
The above is the detailed content of How to access subtype properties in parent type object in Go?. For more information, please follow other related articles on the PHP Chinese website!