Golangで不変の構造体を定義することは可能ですか?初期化すると、構造体のフィールドの読み取り操作のみが行われ、フィールド値の変更は行われません。もしそうなら、それを行う方法。
構造体のメンバーを非エクスポートにし、リーダーを提供することにより、パッケージ外で構造体を読み取り専用にすることができます。例えば:
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.NewMyReaonly(3)
fmt.Println(myReadonly.Value()) // Prints 3
一般的な方法でフィールド/変数を読み取り専用としてマークする方法はありません。できることは、フィールド/変数を未エクスポート(最初の文字は小さい)としてマークし、他のパッケージが変数を編集するのを防ぐためのパブリックゲッターを提供することだけです。