面向对象
- 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语言特有
- 值/指针接收者均可接收值/指针