首頁 >後端開發 >Golang >如何在 Go 結構體文字中將 True 指派給布林指標?

如何在 Go 結構體文字中將 True 指派給布林指標?

Susan Sarandon
Susan Sarandon原創
2024-12-08 10:49:10975瀏覽

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

結構體文字中的指標賦值:簡明指南

在 Go 中,為結構體文字中的指標賦值可能很棘手。具體來說,將 bool 指標設為 true 可能需要解決方法。

考慮以下接受bool 指標的函數:

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 語法。要將 bool 指標設為 true,需要解決方法。

建立切片包裝器

一種方法是建立一個包含單一bool 值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

匿名函數和One-Liners

將指標設為 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 結構體文字中將 True 指派給布林指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn