面向对象
★ go语言仅支持封装,不支持继承和多态 
★ go语言没有class,只有struct
结构的定义
type treeNode struct {
value int
left, right *treeNode
}
结构的创建
var root treeNode
root = treeNode{value:3}
root.left = &treeNode{}
root.right = &treeNode{5, nil, nil}
root.right.left = new(treeNode)

★ 不论地址还是结构本身,一律使用.来访问成员
func createTreeNode(value int) *treeNode {
return &treeNode{value: value}
}

root.left.right = createTreeNode(2)

★使用自定义工厂函数
★注意返回了局部变量的地址!
架构创建在堆上还是在栈上?
为结构定义方法
func (node treeNode) print() {
fmt.Print(node.value, " ")
}

★显示定义和命名方法接收者
使用指针作为方法接收者
func (node *treeNode) setValue(value int) {
node.value = value
}

★ 只有使用指针才可以改变结构内容
★ nil指针也可以调用方法!
值接收者VS指针接收者
★要改变内容必须使用指针接收者  
★结构过大也考虑使用指针接收者
★一致性:如有指针接收者,最好都是指针接收者
值接收者 是go语言特有
★值/指针接收者均可接收值/指针