【发布时间】:2016-04-01 11:57:32
【问题描述】:
我有一个带有 *int64 字段的结构类型。
type SomeType struct {
SomeField *int64
}
在我的代码中,我想声明一个字面值(比如说,当我知道所说的值应该是 0 或指向 0 时,你知道我的意思)
instance := SomeType{
SomeField: &0,
}
...除了这不起作用
./main.go:xx: cannot use &0 (type *int) as type *int64 in field value
所以我试试这个
instance := SomeType{
SomeField: &int64(0),
}
...但这也行不通
./main.go:xx: cannot take the address of int64(0)
我该怎么做?我能想出的唯一解决方案是使用占位符变量
var placeholder int64
placeholder = 0
instance := SomeType{
SomeField: &placeholder,
}
注意:编辑:不,它没有。对此感到抱歉。&0 语法在它是 *int 而不是 *int64 时工作很好。
编辑:
显然我的问题含糊不清。我正在寻找一种字面意思*int64 的方法。这可以在构造函数中使用,或者用于声明文字结构值,甚至可以作为其他函数的参数。但辅助函数或使用其他类型不是我正在寻找的解决方案。
【问题讨论】:
-
指向 int 的指针是不幸的,因为 int 占用的空间与指针相同,因此您不会节省空间。它只是添加了一个 NULL 值,这通常比它的价值更复杂。在大多数情况下,0 就可以了。如果您需要一个额外的值,“IsValidSomeField”布尔也可以工作,如果您给该布尔取一个更好的名称,它可以更多地说明您为什么需要该额外值,这有利于可读性。
-
可以使用包pointer,例如:
var _ *int64 = pointer.Int64(64) -
这真是太可惜了,我们必须编写一个函数甚至一个库才能做到这一点。
标签: pointers go struct literals