Go で不変の構造体を作成できますか?

Mary-Kate Olsen
リリース: 2024-11-12 03:32:02
オリジナル
1054 人が閲覧しました

Can You Create Immutable Structs in Go?

Go における不変の構造体

質問: Go で不変の構造体を作成し、一度確実に初期化されている場合、フィールドの値を変更せずに読み取り操作のみを実行できますか?もしそうなら、それはどのように達成できますか?

答え:

Go では、構造体は本質的に変更可能です。ただし、特定の手法を使用すると、パッケージの外部で構造体を読み取り専用にすることができます。その方法は次のとおりです:

不変構造体の定義:

エクスポートされていないフィールド (小文字で始まるフィールド) を含む構造体を定義します。これにより、パッケージの外部からフィールドに直接アクセスできなくなります。

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
ログイン後にコピー

この例では、myReadOnly インスタンスの値フィールドを変更しようとすると、フィールドがエクスポートされないため、コンパイル エラーが発生します。リーダー関数 Value は、フィールドを変更せずにアクセスする方法を提供します。このアプローチは、Go で不変の構造体を効果的に作成します。

以上がGo で不変の構造体を作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート