带有interface{}和类型Assert的多个返回类型(在Go中)

zpqajqem  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(90)

我想知道调用具有多个返回值的函数的正确语法是什么,其中一个(或多个)是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
    }
}


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

k7fdbhmy

k7fdbhmy1#

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")
    }
}

字符串
只能将类型Assert应用于单个表达式。

t9aqgxwy

t9aqgxwy2#

后通用支持golang。

package main

func foobar[T int | string]() T {
    var a T
    return a
}

func main() {
    foobar[int]()
    foobar[string]()
}

字符串

相关问题