一尘不染

如何在golang中返回int或nil?

go

我是Java开发人员,正在学习Go。我正在为LIFO堆栈编写简单的“
pop”操作。问题是堆栈中没有值时的返回值。在Java中,我可以在肯定的情况下返回wrapper(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
}

是好的风格吗?


阅读 923

收藏
2020-07-02

共1个答案

一尘不染

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

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

    //...

    //v is the integer value
    return v, true
}

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

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

看看逗号吧,成语

2020-07-02