如何在golang中返回int或nil?

时间:2017-10-13 09:34:20

标签: 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
}

风格好吗?

2 个答案:

答案 0 :(得分: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
}

然后在某处您可以将Pop称为

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

看看comma, ok idiom

答案 1 :(得分:2)

Go中没有try/catch个构造,所以你不能依赖它。

Go有一个很好的功能,允许多个返回值。他们的error handling建立在此基础之上。

因此,处理异常可能性的规范方法是返回值和错误。在操作之后,检查错误并对其起作用,忽略该值。在您的情况下,您可以将值保留为int,并在出现错误时使用默认值0。由于客户希望忽略该情况下的值并对错误采取一些措施。

相关问题