首页 >后端开发 >Golang >如何在 Go 结构体文字中将 True 分配给布尔指针?

如何在 Go 结构体文字中将 True 分配给布尔指针?

Susan Sarandon
Susan Sarandon原创
2024-12-08 10:49:10928浏览

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