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

时间:2011-08-12 20:18:59

标签: 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
    }
}

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

1 个答案:

答案 0 :(得分:5)

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应用于单个表达式。