猿问

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

这是有效的代码:


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)

}

这里到底发生了什么?对不起,如果它很明显,但我只是不明白。


跃然一笑
浏览 130回答 2
2回答

收到一只叮咚

从语言规范:提升字段的作用类似于结构的普通字段,只是它们不能用作结构的复合文字中的字段名称。所以这就是它不起作用的原因。以下是解决该限制的两种可能方法,每种方法都在以下函数中进行了说明:func main() {    d := &Derived{        Base{Field: 10},    }    e := new(Derived)    e.Field = 20    fmt.Println(d.Field)    fmt.Println(e.Field)}

呼啦一阵风

要初始化组合对象,您必须像任何其他对象一样初始化嵌入字段:package mainimport (    "fmt")type Base struct {    Field int}type Derived struct {    Base}func main() {    d := &Derived{        Base{10},    }    fmt.Println(d.Field)}
随时随地看视频慕课网APP

相关分类

Go
我要回答