使用嵌入的结构构造struct literal

时间:2014-09-24 06:18:06

标签: go literals

如何使用嵌入式结构构建结构文字?

转到:

package main

import "fmt"

type Ping struct {
    Content struct {
        name string
    }
}

func main() {
   p := Ping{Content{"hello"}}
   fmt.Println(p)
}

http://play.golang.org/p/UH4YO6CAFv

如果我用这种方式编写结构,这是有效的:

转到:

type Ping struct {
   Content
}

type Content struct {
    name string
}

http://play.golang.org/p/ERGsO4CMEN

如何在第一个代码版本中使用嵌入式结构版本?

2 个答案:

答案 0 :(得分:2)

你不能,但你真的不应该,但如果你坚持,你可以使用类似的东西:

p := Ping{struct{ name string }{"don't do it"}}

p := Ping{}
p.Content.name = "hello"

playground

答案 1 :(得分:2)

spec for Struct type

似乎不支持此功能
  

使用类型但没有显式字段名称声明的字段是匿名字段,也称为嵌入字段或在结构中嵌入类型。
  必须将嵌入类型指定为类型名称T 或指定为非接口类型名称* T的指针,并且T本身可能不是指针类型。

这意味着T必须在其他地方定义。