Struct 在Go中传递带匿名字段的结构
来吧,菜鸟。我有两个结构,父结构和子结构。子项包含父项作为匿名字段。我想知道如何将该结构传递给一个需要父级(但对子级一无所知)的函数。下面的代码说明了我想做什么:Struct 在Go中传递带匿名字段的结构,struct,go,Struct,Go,来吧,菜鸟。我有两个结构,父结构和子结构。子项包含父项作为匿名字段。我想知道如何将该结构传递给一个需要父级(但对子级一无所知)的函数。下面的代码说明了我想做什么: package main import "fmt" type Parent struct { Dad string } type Child struct { Parent Son string } func myfunc(data Parent) { fmt.Printf("Dad is %s
package main
import "fmt"
type Parent struct {
Dad string
}
type Child struct {
Parent
Son string
}
func myfunc(data Parent) {
fmt.Printf("Dad is %s\n", data.Dad)
}
func main() {
var data Child
data.Dad = "pappy"
data.Son = "sonny"
myfunc(data)
}
myfunc()的神奇声明是什么?如果您只需将第二行更改为最后一行,则代码将变为:
myfunc(data.Parent)
您不应该期望仅通过更改myfunc
就能使其正常工作,因为您说过myfunc
无法了解子类的任何信息。如果您只需将从第二行到最后一行更改为:
myfunc(data.Parent)
您不应该期望仅通过更改myfunc
就能使其正常工作,因为您说过myfunc
对Child
类一无所知。非常好,谢谢。我在文档或其他地方找不到任何关于此的内容。您作为参数传递给函数的对象类型与它期望的对象类型完全匹配。若它期望父级,而您传递给子级,那个么大多数严格类型的语言都并没有办法处理这个问题,您不应该期望它工作。于是问题变成了“我怎样才能把父母从孩子身上弄出来”,我猜了一下就明白了。太好了,谢谢。我在文档或其他地方找不到任何关于此的内容。您作为参数传递给函数的对象类型与它期望的对象类型完全匹配。若它期望父级,而您传递给子级,那个么大多数严格类型的语言都并没有办法处理这个问题,您不应该期望它工作。于是问题变成了“我怎样才能让父母从孩子身上解脱出来”,我猜了一下就明白了。