ホームページ >バックエンド開発 >Golang >Go 構造体リテラルで Bool ポインターに True を割り当てる方法は?

Go 構造体リテラルで Bool ポインターに True を割り当てる方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-08 10:49:10928ブラウズ

How to Assign True to a Bool Pointer in Go Struct Literals?

構造体リテラルでのポインターの割り当て: 簡潔なガイド

Go では、構造体リテラル内のポインターに値を割り当てるのは難しい場合があります。具体的には、ブール ポインターを true に設定するには、回避策が必要になる場合があります。

ブール ポインターを受け入れる次の関数を検討してください。

import "fmt"

func main() {
    fmt.Println("Hello, playground")
    check(handler{is: new(bool)})
}

type handler struct{
    is *bool
}

func check(is handler){}

構造体リテラルで is フィールドを true に割り当てるには、次のようにします。

handler{is: &true}  // This is invalid

残念ながら、これは有効な Go ではありません。構文。ブール ポインタを true に設定するには、回避策が必要です。

スライス ラッパーの作成

1 つの方法は、単一のブール値 true を含むスライスを作成し、その最初の要素にインデックスを付けることです。

h := handler{is: &[]bool{true}[0]}
fmt.Println(*h.is) // Prints true

これによりポインタを true に設定できますが、アドレスが指定されるまでメモリ内に残るスライス配列が不必要に作成されます。

ヘルパー関数の使用

より明確な解決策は、true に初期化された bool 変数へのポインターを返すヘルパー関数を作成することです:

func newTrue() *bool {
    b := true
    return &b
}

この関数は構造体リテラルで使用できます:

h := handler{is: newTrue()}
fmt.Println(*h.is) // Prints true

匿名関数ワンライナー

ポインタを true に設定する他のオプションには、匿名関数が含まれます:

h := handler{is: func() *bool { b := true; return &b }()}
fmt.Println(*h.is) // Prints true

またはバリアント:

h := handler{is: func(b bool) *bool { return &b }(true)}

これらは簡潔な構文を可能にしますが、ヘルパー関数のアプローチよりも読みにくくなります。

結論

一方構造体リテラルで bool ポインターを true に設定することは簡単な作業のように思えるかもしれませんが、特定の構文または回避策の使用が必要です。これらのメソッドを理解すると、Go プログラマーはさまざまな状況で効果的にポインターに値を割り当てることができるようになります。

以上がGo 構造体リテラルで Bool ポインターに True を割り当てる方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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