Par*_*aub 1 struct embedding type-conversion go
是否旁边Box用手工复制内部值一个语言功能向下RatedBox转换为Box?
type Box struct {
Name string
}
type RatedBox struct {
Box
Points int
}
func main() {
rated := RatedBox{Box: Box{Name: "foo"}, Points: 10}
box := Box(rated) // does not work
}
Run Code Online (Sandbox Code Playgroud)
// works, but is quite verbose for structs with more members
box := Box{Name: rated.Name}
Run Code Online (Sandbox Code Playgroud)
在结构中嵌入类型会在结构中添加一个字段,您可以使用非限定类型名称来引用它(不合格意味着省略包名称和可选指针符号).
例如:
box := rated.Box
fmt.Printf("%T %+v", box, box)
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上试试):
main.Box {Name:foo}
Run Code Online (Sandbox Code Playgroud)
请注意,赋值会复制该值,因此box局部变量将保存该RatedBox.Box字段值的副本.如果您希望它们是"相同"(指向相同的Box值),请使用指针,例如:
box := &rated.Box
fmt.Printf("%T %+v", box, box)
Run Code Online (Sandbox Code Playgroud)
但这里当然box会有类型*Box.
或者您可以选择嵌入指针类型:
type RatedBox struct {
*Box
Points int
}
Run Code Online (Sandbox Code Playgroud)
然后(在Go Playground上试试):
rated := RatedBox{Box: &Box{Name: "foo"}, Points: 10}
box := rated.Box
fmt.Printf("%T %+v", box, box)
Run Code Online (Sandbox Code Playgroud)
最后2的输出:
*main.Box &{Name:foo}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |