我是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 }
是好的风格吗?
由于数字不能为,除非将返回值定义为指针,否则nil无法返回nil整数。Go中的惯用解决方案是定义您的方法以返回多个值,例如
nil
func (s *stack) Pop() (int, bool) { //does not exists if ... { return 0, false } //... //v is the integer value return v, true }
然后,什么地方可以拨打Pop作为
Pop
s := &stack{} if v, ok := s.Pop(); ok { //the value exists }
看看逗号吧,成语。