码迷,mamicode.com
首页 > 其他好文 > 详细

Embedding

时间:2017-04-10 00:19:12      阅读:185      评论:0      收藏:0      [点我收藏+]

标签: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

 

Embedding

标签:struct   blank   ack   blog   package   ring   little   type   error   

原文地址:http://www.cnblogs.com/ahui2017/p/6687113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!