type treeNode struct{
value int
left, right *treeNode
}funccreateTreeNode(value int)*TreeNode {return&TreeNode{ value : value }}
root := TreeNode{ value :3}
root.left =&TreeNode{}
root.right =&TreeNode{5,nil,nil}
root.right.left =new( TreeNode )//
root.left.right =createTreeNode(2)
func(node *TreeNode)setValue(value int){
node.value = value
}
nil指针也可以调用方法
var root *TreeNode
// 这里不会报错, 但是在setValue函数里 node.value = value 的时候就会报错了
root.setValue(100)
外部调用函数的时候, 不用在意对象是否为nil, 但是函数实现内部一定要注意
值接收者 vs 指针接收者
要改变内容必须使用指针接收者
结构过大也考虑使用指针接收者
一致性 : 如有指针接收者, 最好都是指针接收者
值接收者是go语言特有
值/指针接收者均可接收值/指针
封装
Public方法首字母大写
Private方法首字母小写
包
每个目录一个包
main包包含可执行入口
为结构定义的方法必须放在同一个包内, 但是可以是不同的文件
1. 如何扩充系统类型或者别人的类型
定义别名
type Queue []intfunc(q *Queue)Push(v int){*q =append(*q, v)}func(q *Queue)Pop()int{
head :=(*q)[0]*q =(*q)[1:]return head
}func(q *Queue)IsEmpty()bool{returnlen(*q)==0}