一尘不染

Golang中的不变结构

go

可以在Golang中定义一个不变的结构吗?一旦初始化,则只能对struct的字段进行读取操作,而无需修改字段值。如果是这样,该怎么做。


阅读 209

收藏
2020-07-02

共1个答案

一尘不染

通过使其成员不导出并提供阅读器,可以在其程序包外部将结构设为只读。例如:

package mypackage

type myReadOnly struct {
  value int
}

func (s myReadOnly) Value() int {
  return s.value
}

func NewMyReadonly(value int) myReadOnly{
  return myReadOnly{value: value}
}

和用法:

myReadonly := mypackage.NewMyReadonly(3)
fmt.Println(myReadonly.Value())  // Prints 3
2020-07-02