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

在Go中对多个返回值进行转换/类型声明的惯用方式

鲁宏爽
2023-03-14
问题内容

在Go中强制转换多个返回值的惯用方式是什么?

您可以单行执行吗,还是需要使用临时变量(例如我在下面的示例中所做的那样)?

package main

import "fmt"

func oneRet() interface{} {
    return "Hello"
}

func twoRet() (interface{}, error) {
    return "Hejsan", nil
}

func main() {
    // With one return value, you can simply do this
    str1 := oneRet().(string)
    fmt.Println("String 1: " + str1)

    // It is not as easy with two return values
    //str2, err := twoRet().(string) // Not possible
    // Do I really have to use a temp variable instead?
    temp, err := twoRet()
    str2 := temp.(string)
    fmt.Println("String 2: " + str2 )


    if err != nil {
        panic("unreachable")
    }   
}

顺便说一句,casting当涉及到接口时会调用它吗?

i := interface.(int)

问题答案:

您不能单行执行。您的临时变量方法是可行的方法。

顺便说一句,当涉及到接口时,它是否称为转换?

它实际上称为类型断言。A型 铸造 转换不同的是:

var a int
var b int64

a = 5
b = int64(a)


 类似资料:
  • 问题内容: 我一直在玩Go,想知道在Go中执行惯用的类型转换的最佳方法是什么。基本上我的问题之间的自动类型转换中规定,和。根据我在其他语言中的经验,a 与a 的乘积会产生一个值,但并非总是如此。 这是我构建的示例,请问这是编写此代码的惯用方式还是缺少重要的语言构造。 在我看来,由于所有显式类型转换,计算上限值似乎不必要。 谢谢! 问题答案: 对于非常量值,没有隐式类型转换。 你可以写 但是你不能写

  • 我在这里查过了https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md这是TypeScript语言规范,但我找不到如何声明函数的返回类型。 我在下面的代码中展示了我所期望的: 我知道我可以用

  • 问题内容: 假设您需要执行一些依赖于某些临时文件的操作。既然我们在这里谈论Node,那么这些操作显然是异步的。为了知道何时可以删除临时文件,等待所有操作完成的惯用方式是什么? 这是一些代码,显示我想做什么: 但是,如果我这样编写,则可以在前两个调用有机会使用该文件之前执行第三个调用。我需要某种方法来确保前两个调用在结束之前已经完成(调用了它们的回调),而没有嵌套这些调用(并使它们在实践中保持同步)

  • 问题内容: 有没有一种方法可以将对象强制转换为方法的返回值?我尝试过这种方式,但在“ instanceof”部分给出了编译时异常: 我也尝试过这个,但是它给出了运行时异常ClassCastException: 有没有一种简便的方法可以做到这一点: 编辑:我写了正确答案的工作副本: 问题答案: 您必须使用实例,因为在编译过程中会擦除通用类型。 该方法的声明是: 这也可以用于数组类型。它看起来像这样:

  • 问题内容: 有了这个代码 我得到以下异常 我的猜测是,由于缺少Jackson,该对象无法转换为JSON。我不明白为什么,因为我以为杰克逊内置弹簧靴。 然后我试图将Jackson添加到pom.xml中,但是我仍然遇到相同的错误 我是否需要更改任何Spring Boot属性才能使其正常工作? 谢谢 问题答案: 问题是Foo中的一个嵌套对象没有任何对象

  • 1)当语句按此顺序时,可以: 已执行: 已记录: 有人能告诉你为什么会发生这种情况,如何修复它,或者有什么其他方法可以解决吗?