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

Мне интересно, каков правильный синтаксис для вызова функций с несколькими возвращаемыми значениями, одно (или более) из которых имеет тип 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 Ответ

5 голосов
/ 13 августа 2011
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")
    }
}

Вы можете применить утверждение типа только к одному выражению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...