2011-08-12 53 views
5

我想知道正確的語法是用於調用具有多個返回值的函數,其中一個(或多個)類型爲interface{}具有接口{}和類型斷言的多個返回類型(在Go中)

返回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到一個單一的表達。