2011-08-12 30 views
5

Tôi tự hỏi cú pháp chính xác là gì khi gọi hàm với nhiều giá trị trả về, một (hoặc nhiều) trong số đó là loại interface{}.Nhiều kiểu trả về với giao diện {} và xác nhận kiểu (trong Go)

Một chức năng mà trả interface{} có thể được gọi như thế này:

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

nhưng đoạn mã sau thất bại với lỗi 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 
    } 
} 

Vì vậy, quy ước gọi chính xác là gì?

Trả lời

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") 
    } 
} 

Bạn chỉ có thể áp dụng type assertion cho một biểu thức duy nhất.

Các vấn đề liên quan