如何在struct literal中将bool指针设置为true?

The*_*hat 22 struct pointers literals go

我有下面的函数接受一个bool指针.我想知道是否有任何符号允许我在结构文字中设置is字段的值true; 基本上没有定义新的标识符(i.e. var x := true ; handler{is: &x} )

package main

import "fmt"

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


type handler struct{
    is *bool
}

func check(is handler){}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 26

你可以这样做,但它不是最佳的:

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

基本上它创建一个带有一个bool值的切片true,索引其第一个元素并获取其地址.没有创建新的变量,但是有很多样板(并且支持数组将保留在内存中,直到其第一个元素的地址存在).

更好的解决方案是编写辅助函数:

func newTrue() *bool {
    b := true
    return &b
}
Run Code Online (Sandbox Code Playgroud)

并使用它:

h := handler{is: newTrue()}
fmt.Println(*h.is) // Prints true
Run Code Online (Sandbox Code Playgroud)

您也可以使用单行匿名函数:

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

或变种:

h := handler{is: func(b bool) *bool { return &b }(true)}
Run Code Online (Sandbox Code Playgroud)

要查看所有选项,请查看我的其他答案:如何在Go中执行文字*int64?

  • 哈,我忘记了那招!(不是我会用它) (4认同)

小智 7

最简单的方法是编写一个短函数将 a 转换bool为 a *bool

func BoolPointer(b bool) *bool {
    return &b
}

h := handler{is: BoolPointer(true)}
Run Code Online (Sandbox Code Playgroud)


Jim*_*imB 5

不。

除了 所返回的零值之外,没有任何语法可以定义指向基本类型的指针new。数字类型和字符串也是如此。

您要么需要事先创建一个值来获取地址,要么创建一个零值的指针,并在事后分配一个新值。