Go中类的成员函数,构造函数实现

192 阅读1分钟

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]
}