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 = `` }