我有一个带*int64字段的结构类型.
type SomeType struct {
SomeField *int64
}
Run Code Online (Sandbox Code Playgroud)
在我的代码中的某个时刻,我想声明一个这样的文字(比如,当我知道所述值应为0,或者指向0时,你知道我的意思)
instance := SomeType{
SomeField: &0,
}
Run Code Online (Sandbox Code Playgroud)
...除了这不起作用
./main.go:xx: cannot use &0 (type *int) as type *int64 in field value
Run Code Online (Sandbox Code Playgroud)
所以我试试这个
instance := SomeType{
SomeField: &int64(0),
}
Run Code Online (Sandbox Code Playgroud)
......但这也行不通
./main.go:xx: cannot take the address of int64(0)
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我能想出的唯一解决方案是使用占位符变量
var placeholder int64
placeholder = 0
instance := SomeType{
SomeField: &placeholder,
}
Run Code Online (Sandbox Code Playgroud)
注意:当它是*int而不是a时,编辑:不,不.为此表示歉意.&0语法工作正常*int64.
编辑:
显然,我的问题含糊不清.我正在寻找一种方法来说明一个*int64.这可以在构造函数中使用,或者用于表示文字结构值,或者甚至作为其他函数的参数.但帮助函数或使用不同的类型不是我正在寻找的解决方案.
我希望建模一个可以有两种可能形式的值:缺席或字符串.
执行此操作的自然方式是with Maybe String,or Optional<String>,or string option等.但是,Go没有这样的变体类型.
然后我想,在Java,C等之后,替代方案将是可空性,或者nil在Go中.但是,nil不是stringGo 中的类型成员.
搜索,然后我想使用该类型*string.这可能有效,但看起来很尴尬(例如,我不能采用字符串文字的地址,就像我可以获取结构文字的地址一样).
在Go中模拟这样一个值的惯用方法是什么?
我是一名java开发人员,我正在学习Go.我正在为LIFO堆栈编写简单的'pop'操作.问题是当堆栈中没有值时返回值.在java中,我能够在正例中返回一个包装器(Integer),在没有值时返回null.从我的角度来看这很自然.
我怎样才能在Go中做类似的事情?原语是否有任何结构包装器?我是否需要返回两个值(第二个将指示错误代码)?或者我需要抛出异常吗?
以下是它现在的样子:
func (s *stack) Pop() (int, bool) {
if s.size == 0 {
return 0, true
}
s.size--
val := s.stack[s.size]
return val, false
}
Run Code Online (Sandbox Code Playgroud)
这是好风格吗?