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
类一无所知。

非常好,谢谢。我在文档或其他地方找不到任何关于此的内容。您作为参数传递给函数的对象类型与它期望的对象类型完全匹配。若它期望父级,而您传递给子级,那个么大多数严格类型的语言都并没有办法处理这个问题,您不应该期望它工作。于是问题变成了“我怎样才能把父母从孩子身上弄出来”,我猜了一下就明白了。太好了,谢谢。我在文档或其他地方找不到任何关于此的内容。您作为参数传递给函数的对象类型与它期望的对象类型完全匹配。若它期望父级,而您传递给子级,那个么大多数严格类型的语言都并没有办法处理这个问题,您不应该期望它工作。于是问题变成了“我怎样才能让父母从孩子身上解脱出来”,我猜了一下就明白了。