1.结构的定义
type identifier struct {field1 type1field2 type2...}
2.结构体的创建
表达式 new(Type) 和 &Type{} 是等价的
& 不是必须的
root := TreeNode{Value: 3}root.Left = &TreeNode{}root.Right = &TreeNode{5, nil, nil}root.Left.Right = new(TreeNode)
3.为结构体定义方法
func (node treeNode) print() {fmt.Print(node.value)}func (node *treeNode) setValue(value int) {node.value = value}
只有使用指针才可以改变结内容
nil指针也可以调用方法
func (node *treeNode) setValue(value int) {if node == nil {fmt.Println("setting value to nil node,ignored")return}node.value = value}
二叉树
package mainimport "fmt"type treeNode struct {value intleft, right *treeNode}func (node treeNode) print() {fmt.Print(node.value)fmt.Print(" ")}func (node *treeNode) setValue(value int) {if node == nil {fmt.Println("setting value to nil node,ignored")}node.value = value}func (node *treeNode) traverse() {if node == nil {return}node.left.traverse()node.print()node.right.traverse()}func createNode(value int) *treeNode {return &treeNode{value: value}}func main() {var root treeNode// fmt.Println(root)root = treeNode{value: 3}root.left = &treeNode{}root.right = &treeNode{5, nil, nil}root.right.left = new(treeNode)// nodes := []treeNode {// {value: 3},// {},// {6, nil, &root},// }// fmt.Println(nodes)root.left.right = createNode(2)root.print()root.right.left.setValue(4)root.right.left.print()fmt.Println()root.print()root.setValue(100)pRoot := &rootpRoot.print()pRoot.setValue(200)pRoot.print()root.traverse()}
