目录

6.1 go 的封装

优质
小牛编辑
134浏览
2023-12-01

Go的封装

go中的封装和java的不太一样,在go里面是没有java中的class,不过可以把struct看成一个类,封装可以简单地看作对struct的封装,如下

type EnvelopeA struct {
    envelope string
}
type EnvelopeB struct {
    envelope string
}

封装有一个最重要的优点,是阻止了外部调用方对对象内部的值任意地进行修改。因为对象内部变量只可以被同一个包内的函数修改,所以包的作者可以让这些函数确保对象内部的一些值的不变性。比如下面的Envelope类型允许调用方来增加paper变量的值,并且允许将这个值reset为``,但是不允许随便设置这个值(译注:因为压根就访问不到):

type Envelope struct {
    paper string
}
func (c *Envelope) GetVal()string     { return c.paper }
func (c *Envelope) Join(s string) { c.paper=c.paper+s }
func (c *Envelope) Reset()     { c.paper = `` }