我是一名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)
这是好风格吗?
由于数字不能,因此除非将返回值定义为指针,否则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)
看看逗号,好的成语.
| 归档时间: |
|
| 查看次数: |
13950 次 |
| 最近记录: |