有一个类型:
type A struct {
B int, C *int
}
如何在不创建临时对象的情况下将指针成员内联初始化为非零值?
a := A{
B: 42,
C: ?,
}
对于您给出的具体示例,您在不引入额外语句的情况下可以做的事情是有限的。
如果您想C
指向一个初始化的整数变量,您将需要一个附加语句来定义该变量,因为您不能获取整数文字的地址(即&42
会出错)。
如果您只想初始化C
为指向新零值的指针,那么您很幸运并且可以将其设置为new(int)
.
如果您正在处理具有初始化程序语法的不同类型,那么您也会很幸运。例如,如果C
是指向结构的指针,则可以将其初始化为&TheStruct{...}
.
如果这些都不合适,并且您实际上只是在初始化*int
变量的代码清晰之后,辅助函数可能符合您的要求。例如:
func makeIntPointer(v int) *int {
return &v
}
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)
}