/* * @description:struct相关知识 * @Author: CP * @Date: 2020-08-21 09:34:47 * @FilePath: \construction_management\learn\struct.go */ package learn import ( "fmt" ) /* 没有class,只有struct结构体 没有构造函数,可以加工厂函数来构造 结构体过大也考虑使用指针接收者 结构体的方法的封装 首字母大写:public 首字母小写:private 只是针对包 包 每个目录一个包,为结构体定义的方法必须在同一个包内 结构体的方法可以分散在不同的文件内,同一个包内 扩展其他人写的包-学习go语言4-3 */ type TreeNode struct { Value int // *类型是指针 Left, Right *TreeNode } //为结构定义方法-方法名称前 定义好 (node treeNode) //显示定义和命名方法接收者 func (node TreeNode) Print() { fmt.Println(node.Value) } //这里不使用指针是改不掉里面的值 node treeNode,需要指针 //只有使用指针才可以改变结构内容 nil指针也能调用方法 func (node *TreeNode) SetValue(value int) { node.Value = value } //遍历结构体treeNode func (node *TreeNode) Traveres() { if node == nil { return } //如果在其他语言node.left是nil调用traveres()会挂掉,在go语言中不会 node.Left.Traveres() node.Print() node.Left.Traveres() node.Print() } //工厂函数来构造treeNode func CreateTreeNode(value int) *TreeNode { return &TreeNode{Value: value} } // func main() { // // 创建结构的方式1 // var root2 treeNode // fmt.Println(root2) // // 创建结构的方式2 // root := treeNode{value: 3} // //&取地址 // root.left = &treeNode{} // // 创建结构的方式3 // root.left.right = new(treeNode) // // 创建结构的方式4 // root.left.left = createTreeNode(2) // // 创建结构的方式5 // node := []treeNode{ // {value: 3}, // {}, // {6, nil, nil}, // } // fmt.Println(node) // //调用结构体方法 // root.print() // root.right.left.setValue(2) // root.right.left.print() // root.traveres() // }