1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * @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()
- // }
|