结构体和方法
函数的定义和声明
type treeNode struct {
value int
left, right *treeNode
}
func main() {
var root treeNode
root = treeNode{value: 3}
root.left = &treeNode{}
root.right = &treeNode{5, nil, nil}
root.right.left = new(treeNode)
// struct slice
nodes := []treeNode {
{value: 3},
{},
{5, nil, nil}
}
}
Goang
中可以将局部变量的地址返回使用
结构的方法
func (node treeNode) print() {
//...
}
func main() {
node.print()
}
go语言中结构方法的接收参数也是值传递,如果想修改则需要传递地址指针;但是在结构方法调用时不需要取地址,编译器会自动判断转换的;在结构方法内部也不需要使用
*
进行转换,直接使用.
进行访问属性就可以
只有使用指针才可以改变结构内容
nil指针也可以调用方法
值接收者 vs 指针接收者
- 要改变内容必须使用指针接收者
- 结构过大也考虑使用指针接收者
- 一致性:如有指针接收者,最好都是指针接收者
包和封装
- 每个目录有且只能有一个包(包名字可以与目录名不同)
- 为结构体定义的方法可以在不同的文件,但是必须在同一个包内
Golang
中结构体的名字不需要重复包的名字
扩展已有类型
- 定义别名
- 使用组合
有疑问加站长微信联系(非本文作者)