如何在golang中返回int或nil?

the*_*aba 5 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)

这是好风格吗?

put*_*utu 9

由于数字不能,因此除非将返回值定义为指针,否则nil不能返回nil整数.Go中的惯用解决方案是定义返回多个值的方法,例如

func (s *stack) Pop() (int, bool) {
    //does not exists
    if ... {
        return 0, false
    }

    //...

    //v is the integer value
    return v, true
}
Run Code Online (Sandbox Code Playgroud)

然后,什么地方可以拨打Pop作为

s := &stack{}
if v, ok := s.Pop(); ok {
    //the value exists
}
Run Code Online (Sandbox Code Playgroud)

看看逗号,好的成语.

  • @the_kaba第一个返回应该是:`return 0,false`,第二个返回应该是`return val,true`. (3认同)