Go中没有C++/Java等语言中的class的概念,要想在Go中实现面向对象的功能,我们需要借助struct实现。
类的定义
type UnionFind struct {
Count int
fa []int
rank []int
}
注意在Go中访问权限的区分是通过变量/方法首字母的大小写进行区分的。 在上边的例子中,Count有public权限,可以在包外使用;fa和rank有private权限,只能在包内使用,如果想访问和修改这些变量的值,需要自己添加'getter' 'setter'函数进行访问和修改。
类的构造函数
有两种较为常见的构造函数的创建方法
方法1
func NewUnionFind(grid [][]byte) *UnionFind {
unionFind := new(UnionFind)
// something else
return unionFind
}
方法2
func NewUnionFind(grid [][]byte) *UnionFind {
return &NewUnionFin{
Count: 0,
// something else
}
}
函数的返回值是创建的类对象的地址
类的成员函数
成员函数的创建方法为
func (recv receiver_type) methodName(parameter_list) (return_value_list) { ... }
例如
func (p *UnionFind) find(i int) int {
if p.fa[i] != i{
// 向根节点进行查找,同时沿路将节点的父节点设置为根节点
p.fa[i] = p.find(p.fa[i])
}
return p.fa[i]
}