标签:struct blank ack blog package ring little type error
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
标签:struct blank ack blog package ring little type error
原文地址:http://www.cnblogs.com/ahui2017/p/6687113.html