这是有效的代码:package mainimport ( "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 literalpackage mainimport ( "fmt")type Base struct { Field int}type Derived struct { Base}func main() { d := &Derived{ Field: 10, } fmt.Println(d.Field)}这里到底发生了什么?对不起,如果它很明显,但我只是不明白。
2 回答
收到一只叮咚
TA贡献1821条经验 获得超4个赞
从语言规范:
提升字段的作用类似于结构的普通字段,只是它们不能用作结构的复合文字中的字段名称。
所以这就是它不起作用的原因。
以下是解决该限制的两种可能方法,每种方法都在以下函数中进行了说明:
func main() {
d := &Derived{
Base{Field: 10},
}
e := new(Derived)
e.Field = 20
fmt.Println(d.Field)
fmt.Println(e.Field)
}
呼啦一阵风
TA贡献1802条经验 获得超6个赞
要初始化组合对象,您必须像任何其他对象一样初始化嵌入字段:
package main
import (
"fmt"
)
type Base struct {
Field int
}
type Derived struct {
Base
}
func main() {
d := &Derived{
Base{10},
}
fmt.Println(d.Field)
}
- 2 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消