在 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
将指针设置为 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中文网其他相关文章!