为了账号安全,请及时绑定邮箱和手机立即绑定

Go:派生类型中嵌入类型的字段初始化

Go:派生类型中嵌入类型的字段初始化

Go
跃然一笑 2021-11-08 19:24:52
这是有效的代码: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)

}


查看完整回答
反对 回复 2021-11-08
?
呼啦一阵风

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)

}


查看完整回答
反对 回复 2021-11-08
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信