我是一名 Java 开发人员,我正在学习 Go。 我正在为后进先出堆栈编写简单的“弹出”操作。当堆栈中没有值时,问题在于返回值。在 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
}
风格好吗?
最佳答案
因为一个数字不能是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 .
关于go - 如何在golang中返回int或nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46726832/