2011-08-12 2 views
5

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을 적용 할 수 있습니다.