我还没有找到使用interface{}资源类型好。- x3 W! p' f b5 ]/ i: k: N
package mainimport "fmt"func weirdFunc(i int) interface{}{ if i == 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)}7 D8 M6 K( r; S% U3 C- ?: K
你知道如何使用 Go 介绍得很好interface{}吗? 3 t5 h2 s2 P: a+ B: |具体问题: ( W5 m+ U; t$ Z7 `8 N# w( B% y如何获得 w 真实类型? 5 ]) _5 A' P9 k' R2 ^1 C/ R e有没有办法获得字符串的类型? 4 S5 H6 k+ f3 S T有没有办法用类型的字符串来表示转换值? ) ?4 Q; `4 ^, ~解决方案: [- e2 {9 t2 d3 o4 @2 a4 t* ^
也可以做类型切换:* o U# G/ r7 ?. E
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.")} ; y% g7 _. _, C