我还没有找到使用interface{}类型的好资源。例如
interface{}
package main import "fmt" func weirdFunc(i int) interface{} { if i == 0 { return "zero" } return i } func main() { var i = 5 var w = weirdFunc(5) // this example works! if tmp, ok := w.(int); ok { i += tmp } fmt.Println("i =", i) }
你知道使用 Go 的一个很好的介绍interface{}吗?
具体问题:
你也可以做类型切换:
switch v := myInterface.(type) { case int: // v is an int here, so e.g. v + 1 is possible. fmt.Printf("Integer: %v", v) case float64: // v is a float64 here, so e.g. v + 1.0 is possible. fmt.Printf("Float64: %v", v) case string: // v is a string here, so e.g. v + " Yeah!" is possible. fmt.Printf("String: %v", v) default: // And here I'm feeling dumb. ;) fmt.Printf("I don't know, ask stackoverflow.") }
你的例子确实有效。这是一个简化版本。
package main import "fmt" func weird(i int) interface{} { if i < 0 { return "negative" } return i } func main() { var i = 42 if w, ok := weird(7).(int); ok { i += w } if w, ok := weird(-100).(int); ok { i += w } fmt.Println("i =", i) } Output: i = 49
它使用类型断言。