構造体リテラルに Bool ポインターを設定する
Go では、bool へのポインターを関数に渡すときに、構造体リテラルの bool フィールドの値を直接取得します。ただし、標準構文では、以下に示すように、新しい識別子を定義する必要があります。
func check(is handler){} type handler struct{ is *bool } func main() { var x bool = true check(handler{is: &x}) }
この要件を回避して、構造体リテラルで bool ポインタを直接 true に設定するには、いくつかの方法があります。
オプション 1: スライスを使用する
この方法true の単一ブール値を持つスライスを作成し、その最初の要素にインデックスを付け、そのアドレスを取得します:
h := handler{is: &[]bool{true}[0]}
この手法では新しい変数の定義が回避されますが、不必要なボイラープレートが導入され、メモリ内にバッキング配列が残ります。 .
オプション 2: ヘルパー関数の使用
より最適なソリューションtrue 値を持つ bool ポインターを生成するヘルパー関数を作成することです:
func newTrue() *bool { b := true return &b }
この関数を使用すると、構造体リテラルに bool ポインターを設定することは次のようになります:
h := handler{is: newTrue()}
オプション 3: ワンライナーの匿名関数を使用する
もう 1 つの方法では、匿名を使用します。同じタスクを 1 行で実行する関数:
h := handler{is: func() *bool { b := true; return &b }()}
オプション 4: 匿名関数を使用したバリアント
前のアプローチのわずかなバリエーション:
h := handler{is: func(b bool) *bool { return &b }(true)}
これらの手法は、追加の処理を必要とせずに、構造体リテラルで bool ポインターを true に設定するための代替手段を提供します。識別子や不要なオーバーヘッド。開発者は、ニーズやスタイルの好みに最も適したアプローチを選択できます。
以上がGo 構造体リテラル内で Bool ポインターを True に効率的に設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。