go - 如何在golang中返回int或nil?

标签 go

我是一名 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/

相关文章:

c# - 本地 TCP 服务器使用哪个地址?

json - Marshal []byte 到 JSON,给出一个奇怪的字符串

templates - html/template if 范围索引子句

security - 如何在 Golang 二进制文件中混淆变量、函数和包名称的字符串?

svg - 如何/在何处执行生成 svg 的 golang 二进制文件

go - 嵌套结构中的访问字段

go - ctx.Err() vs ctx.Done() chan 关闭检查 : Is there a difference?

go - 如果包文件夹中存在多个文件且其中一个文件包含 "package main",如何指定包名称?

parsing - 如何将具有可变结构的消息扁平化为 protobuf?

json - 戈朗 : best way to unmarshal following json with string as keys