如何在golang中初始化指针指针?

时间:2018-02-15 21:57:25

标签: go

如何使用双指针字段初始化结构? 我正在尝试初始化一个结构如下:

type atype struct {
  val string
}

a := &struct {
    StringValue string
    Pointer **atype
}{
    StringValue: "FOO",
//this is the relevant bit
    Pointer : &(&atype{ 
      val: "test"
    })
}

这给了我一个错误:invalid pointer type **basicAppConfig for composite literal

我的逻辑有什么问题?我把指针指向一个指向值的指针。

我也尝试使用

reflect.PtrTo(&atype{
    val: "string"
})

没有成功......

1 个答案:

答案 0 :(得分:6)

除非指定给变量,否则指针不可寻址。获取复合文字的地址而不将其分配给变量的能力仅限于结构,数组,切片和映射。

要执行您想要执行的操作,您必须先将指针指定给变量,然后您可以在struct literal中指定该(指针)变量的地址:

https://play.golang.org/p/7WyS732H3cZ

package main

type atype struct {
    val string
}

func main() {
    at := &atype{
        val: "test",
    }

    a := &struct {
        StringValue string
        Pointer     **atype
    }{
        StringValue: "FOO",
        Pointer:     &at,
    }

    _ = a
}

参考文献: