interface - 具有接口(interface){}和类型断言的多个返回类型(在 Go 中)

标签 interface go

我想知道调用具有多个返回值的函数的正确语法是什么,其中一个(或多个)类型为 interface{}

返回 interface{} 的函数可以这样调用:

foobar, ok := myfunc().(string)
if ok { fmt.Println(foobar) }

但以下代码失败并出现错误 multiple-value foobar() in single-value context:

func foobar()(interface{}, string) {
    return "foo", "bar"
}


func main() {
    a, b, ok := foobar().(string)
    if ok {
        fmt.Printf(a + " " + b + "\n") // This line fails
    }
}

那么,正确的调用约定是什么?

最佳答案

package main

import "fmt"

func foobar() (interface{}, string) {
    return "foo", "bar"
}

func main() {
    a, b := foobar()
    if a, ok := a.(string); ok {
        fmt.Printf(a + " " + b + "\n")
    }
}

您只能申请 type assertion到单个表达式。

关于interface - 具有接口(interface){}和类型断言的多个返回类型(在 Go 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7045848/

相关文章:

pointers - 如果它作为接口(interface)传递,则访问指针值{}

不同包的Golang函数泛化

java - 接口(interface)不足以让其背后的对象工作?

git - 如何使用语义版本构建 Go Module?

go - 使用包变量而不是创建局部变量

Go,%v 格式为嵌套结构调用 String()

interface - 六边形体系结构和交易概念

C# 如何设置自动属性的默认值?

go - golang 如何创建缓冲区以传递给 C dll 函数?

在返回 Go Runtime 之前,Cgo 在 x_cgo_notify_runtime_init_done 中被阻塞