当前位置: 首页 > 面试题库 >

如何在golang中返回int或nil?

陶征
2023-03-14
问题内容

我是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中的惯用解决方案是定义您的方法以返回多个值,例如

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
}

看看逗号吧,成语。



 类似资料:
  • 问题内容: 我正在将Golang Revel用于某些Web项目,到目前为止,我确实喜欢12个项目。由于返回类型,在所有这些代码中我都有很多代码冗余。看一下这两个功能: 如您所见,它们都返回相同类型的数据(类型struct)。我的想法只是像这样传递字符串var: 像这样,我只能使用一个助手来返回数据类型,而不是一遍又一遍地对不同的模型但相同的数据类型执行同一操作。 我的问题是: 这有可能吗 如果是,

  • 问题内容: 在执行简单程序时,我注意到了这个问题。 编译错误返回为。但是在Java中是不允许的,为什么会出现这种编译错误? 我没有在这里问关于自动装箱的问题,我只是想知道如何返回。 asList的实现是 因此,将int []视为T才是这种情况的原因。 问题答案: 中的基础int没有自动自动装箱。 实际上是一个对象,而不是原始对象。 在这里返回。确实是无效的语法。 您可以使用: List examp

  • 问题内容: 基本上,我想要Android中的EditText,可以在其中输入一个整数值。也许有比EditText更合适的对象了吗? 问题答案: 现在,使用。使用强制它是数字。将结果字符串转换为整数(例如)。 将来,您可能会考虑使用可用的小部件(计划在Honeycomb中使用)。

  • 问题内容: 我创建了一个自定义错误类型来包装错误,以便更轻松地在Golang中进行调试。当有打印错误时它可以工作,但是现在引起了恐慌。 演示版 当我调用一个函数时,它不会返回错误,我仍然应该能够包装该错误。 预期的行为是,如果错误为nil,则应该简单地忽略它,不幸的是,它会做相反的事情。 我希望它能打印出来。而是即使错误为nil也会打印。 问题答案: 正在将err变量与nil进行比较,但实际上它是

  • 我有以下模式: 模式反映了一个事实,即我必须返回一个对象。然而,我不能总是这样做,有时我需要返回null。例如,如果我向数据库发出请求,它将返回return object或null(如果找不到用户)。 在我的GraphQL模式中,我为特定字段设置了类型。如果我试图返回一个不同于我设置的类型,我会得到一个错误。如何允许字段返回对象或null?

  • 问题内容: 有什么方法可以追溯到Eclipse吗?基本上,当我按照执行流程(Ctrl +单击等)在一个大项目中跳来跳去时,有没有办法追溯步骤?如果我的代码调用一个方法,然后转到方法定义,是否有组合键可以将我带回到调用代码? 问题答案: 像在网络浏览器中一样按+ 和+ 。