Несколько возвращаемых типов с интерфейсом {} и утверждениями типа (в Go)

Мне интересно, каков правильный синтаксис для вызова функций с несколькими возвращаемыми значениями, одно (или несколько) из которых имеет тип interface {} .

Функцию, которая возвращает интерфейс {} , можно вызвать следующим образом:

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

, но следующий код не работает с ошибкой многозначной foobar () в одном -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
    }
}

Итак, каково правильное соглашение о вызовах?

5
задан snim2 12 August 2011 в 20:18
поделиться