go语言中首字母大写表示public
go语言中首字母小写表示private
结构定义的方法必须放在同一个包内
一个目录只能放一个包
如何扩充系统的类型或别人的类型:
1.定义别名
2.使用组合
使用组合
目录结构:
入口:entry.go
package main import ( "learngo/tree" ) func main() { var root tree.Node //fmt.Println(root) root = tree.Node{Value:3} root.Left = &tree.Node{} root.Right = &tree.Node{5,nil,nil} root.Right.Left = new(tree.Node) root.Left.Right = tree.CreateNode(2) //fmt.Println(root) root.Traverse() //nodes :=[]TreeNode{ // {value:5}, // {}, // {6,nil,&root}, //} //fmt.Println(nodes) //root.print() //root.right.left.setValue(8) //root.right.left.print() //fmt.Println() // //root.print() //root.setValue(100) //root.print() // //var pRoot *TreeNode //pRoot.setValue(120) //pRoot =&root //pRoot.setValue(220) //pRoot.print() //root.print() }
函数体:node.go
package tree import "fmt" //结构体,相当于对象,实体 type Node struct { Value int Left,Right * Node } //(node TreeNode)相当于其他语言的this,表示print()是给node接收的 func (node Node) Print(){ fmt.Print(node.Value," ") } func (node *Node) SetValue(value int){ if node == nil{ fmt.Println("Setting nil value") return } node.Value = value } //使用工厂函数来构造结构体 func CreateNode(value int) *Node{ return &Node{Value:value} }
定义别名
函数体:queue.go
package queue type Queue []int func (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{ return len(*q) == 0 }
入口:entry.go
package main import ( "learngo/queue" "fmt" ) ////通过别名的方式扩充系统的类型或别人的类型 func main() { q:=queue.Queue{1} q.Push(2) q.Push(3) fmt.Println(q.Pop()) fmt.Println(q.Pop()) fmt.Println(q.IsEmpty()) fmt.Println(q.Pop()) fmt.Println(q.IsEmpty()) }