ホームページ >バックエンド開発 >Golang >Go 構造体リテラル内で Bool ポインターを True に効率的に設定するにはどうすればよいですか?

Go 構造体リテラル内で Bool ポインターを True に効率的に設定するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-02 09:21:12157ブラウズ

How Can I Efficiently Set a Bool Pointer to True within a Go Struct Literal?

構造体リテラルに 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。