如何在结构类型内联中初始化指针成员?

时间:2013-10-22 03:15:15

标签: go

使用类型:

type A struct {
   B int, C *int
}

如何在不创建临时值的情况下将指针成员初始化为非零值内联?

a := A{
    B: 42,
    C: ?,
}

2 个答案:

答案 0 :(得分:10)

对于您给出的具体示例,您可以在不引入其他声明的情况下进行限制。

如果希望C指向初始化的整数变量,则需要一个额外的语句来定义该变量,因为您不能获取整数文本的地址(即&42将是错误)。

如果您只想将C初始化为指向新零值的指针,那么您很幸运,可以将其设置为new(int)

如果您正在处理具有初始化语法的其他类型,那么您也会很幸运。例如,如果C是指向结构的指针,则可以将其初始化为&TheStruct{...}

如果这些都不合适,并且您真的只是在初始化*int变量的代码清晰度之后,辅助函数可能符合您的要求。例如:

func makeIntPointer(v int) *int {
    return &v
}

答案 1 :(得分:2)

package main

import "fmt"

type A struct {
    B int 
    C *int
}

func newint(i int) *int{
    return &i
}

func main() {
    c := newint(5)
    a := &A{
            B: 42,
            C: c,
         }

    fmt.Printf(" %v" , *a.C)
    fmt.Printf(" %#v" , a.C)
}

http://play.golang.org/p/s0HIMHoMRo