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}