Skip to content

Latest commit

 

History

History
58 lines (48 loc) · 1.14 KB

13.md

File metadata and controls

58 lines (48 loc) · 1.14 KB

结构体和方法

面向对象

  • go语言仅支持封装,不支持继承和多态
  • go语言没有class,只有struct

结构的定义

type TreeNode struct
{
    Left, Right *TreeNode
    Value int
}

结构的创建

// 方法 1
var root TreeNode
root.Value = 1

// 方法 2
root := TreeNode{Value: 3}

root.Left = &TreeNode{}
root.Right = &TreeNode{5, nill, nill}
root.Right.Left = new(TreeNode)
  • 无论地址还是结构体本身,一律用 . 来访问成员
func createTreeNode(value int) *TreeNode
{
    return &TreeNode{Value: value}
}
  • 使用自定义工厂函数;
  • 注意返回了局部变量的地址!

成员函数/方法的定义

// func (接收者) 成员函数名(参数){}
func (node *treeNode) setValue(value int)
{
    node.Value = value
}
  • 显示定义和命名方法的接受者
  • 只有使用指针才可以改变结构内容
  • nil指针也可以调用方法
  • 值接收者 VS 指针接收者
    • 要改变内容必须使用指针接收者
    • 结构过大也可以考虑使用指针接收者
    • 值接收者时go语言特有
    • 值/指针接收者均可接收值/指针