首页 > 代码库 > Embedding
Embedding
The Little Go Book http://openmymind.net/The-Little-Go-Book/ 里面介绍了 Embedding 的实现方法,
示例程序如下(有修改):
package main import "fmt" type Person struct { Name string } func (p *Person) Introduce() { fmt.Println("Hi, I‘m", p.Name) } type Saiyan struct { *Person Power int } func main() { goku := new(Saiyan) goku.Person = new(Person) // 必须先有 Person goku.Name = "Goku" // 然后才有 Name goku.Power = 9001 goku.Introduce() }
其中,特别需要注意的是,虽然 goku 可以“免费”获得 Person 的全部能力(比如 .Name 和 .Introduce() ),但前提是必须先给 goku.Person 赋值。如果删掉那句 goku.Person = new(Person)
即,变成这样:
func main() { goku := new(Saiyan) goku.Name = "Goku" // 此时,还没有 goku.Name goku.Power = 9001 goku.Introduce() }
那么,就会产生 panic: runtime error
Embedding
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。