Golangで不変構造体を定義することは可能ですか?一度初期化されると、構造体のフィールドの読み取り操作のみが行われ、フィールド値は変更されません。もしそうなら、それを行う方法。Golangの不変構造体
3
A
答えて
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
唯一の汎用的な方法で読み取るようにフィールド/変数をマークする方法はありません。あなたが行うことができる唯一のことは、フィールド/変数を未記入(最初の文字は小さい)としてマークし、パブリックゲッターを提供して他のパッケージの変数を編集しないようにすることです。
関連する問題
- 1. Golang変数構造体フィールド
- 2. golang構造体
- 3. Golang構造体/インタフェース
- 4. コレクションで不変構造体
- 5. Golang JSONの構造体は、
- 6. Golang構造体の比較
- 7. Golang RethinkDB ChangeFeed構造体
- 8. Golang構造体定義パターン
- 9. SecurityTransparentアセンブリで不変構造体をシリアライズ
- 10. Beego/Golang - 構造体へのクエリ値
- 11. golangのフォームフィールドに構造体を送る
- 12. 構造体プロパティへのGolang動的アクセス
- 13. Golang:構造体エラーの未定義フィールド
- 14. PostgreSQLの構造体のGolangスライス、構造体、スライスの保存と取り出し
- 15. 構造体変数と構造体メンバ
- 16. boxed構造体をboxedポインタにキャスト - golang
- 17. Golangで構造体を返す
- 18. Golangマップ/配列(非構造体)シリアライズ
- 19. golangネストされた構造体とマップ
- 20. Golang:構造体のフィールドをループして構造体を返します。
- 21. golang構造体のプロパティが変更されない
- 22. Golang、カスタムクライアントの構造体を変更するMaxIdleConnsPerHost
- 23. GoLangの構造
- 24. 別の構造体のメソッドの内部で構造体の値を変更するGolang
- 25. Golang return map [string] interface {}可変構造体を返す
- 26. バイト配列をsyscall.InotifyEvent構造体をGolangに変換する
- 27. C構造体内の構造体内部の構造体
- 28. Matlab構造体のベクトル構造体への変換
- 29. 構造体のC型不完全型
- 30. 構造体リテラルの不明なフィールド
これは参考になります。構造体をパッケージ内で読み取り専用にすることは可能ですか? –
いいえ、パッケージ内のコードを制御するので、作成した構造に書き込むことは一切ありません。 –
@VIKRAMSINGHCHOUDHARYこれは残忍かもしれませんが、あなただけのタイプ、それがエクスポートされたメソッドとコンストラクタ以外は自分のパッケージに移動することもできます。 – mkopriva