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 サイトの他の関連記事を参照してください。