以下是有效的代码:
package main
import (
"fmt"
)
type Base struct {
Field int
}
type Derived struct {
Base
}
func main() {
d := &Derived{}
d.Field = 10
fmt.Println(d.Field)
}
这里的代码无法使用./main.go:17: unknown Derived field 'Field' in struct literal
package main
import (
"fmt"
)
type Base struct {
Field int
}
type Derived struct {
Base
}
func main() {
d := &Derived{
Field: 10,
}
fmt.Println(d.Field)
}
这到底发生了什么?对不起,如果它很明显,但我只是不明白。
答案 0 :(得分:4)
使用语言specification:
提升字段的作用类似于结构的普通字段,除了它们不能用作结构的复合文字中的字段名称。
这就是无法工作的原因。
以下是解决该限制的两种可能方法,每种方法都在以下函数中说明:
func main() {
d := &Derived{
Base{Field: 10},
}
e := new(Derived)
e.Field = 20
fmt.Println(d.Field)
fmt.Println(e.Field)
}
答案 1 :(得分:1)
要初始化组合对象,您必须像其他任何对象一样初始化嵌入字段:
package main
import (
"fmt"
)
type Base struct {
Field int
}
type Derived struct {
Base
}
func main() {
d := &Derived{
Base{10},
}
fmt.Println(d.Field)
}