2017-12-04 19 views
3

Golangで不変構造体を定義することは可能ですか?一度初期化されると、構造体のフィールドの読み取り操作のみが行われ、フィールド値は変更されません。もしそうなら、それを行う方法。Golangの不変構造体

答えて

7

構造体をパッケージの外部に読み込み専用にするには、構造体を非エクスポート型にしてリーダを提供することができます。たとえば:

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 
+0

これは参考になります。構造体をパッケージ内で読み取り専用にすることは可能ですか? –

+4

いいえ、パッケージ内のコードを制御するので、作成した構造に書き込むことは一切ありません。 –

+3

@VIKRAMSINGHCHOUDHARYこれは残忍かもしれませんが、あなただけのタイプ、それがエクスポートされたメソッドとコンストラクタ以外は自分のパッケージに移動することもできます。 – mkopriva

0

唯一の汎用的な方法で読み取るようにフィールド/変数をマークする方法はありません。あなたが行うことができる唯一のことは、フィールド/変数を未記入(最初の文字は小さい)としてマークし、パブリックゲッターを提供して他のパッケージの変数を編集しないようにすることです。

関連する問題