2011-08-12 13 views
5

複数の戻り値を持つ関数を呼び出すための正しい構文は何ですか、そのうちの1つ(またはそれ以上)は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 
    } 
} 

ので、正しい呼び出し規約は何ですか?

答えて

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を適用することができます。

関連する問題