这篇文章主要介绍了golang语言如何将interface转为int, string,slice,struct等类型,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
interface{}intstringstructsliceinterface{}
package main import ( "fmt" ) type User struct{ Name string } func main() { any := User{ Name: "fidding", } test(any) any2 := "fidding" test(any2) any3 := int32(123) test(any3) any4 := int64(123) test(any4) any5 := []int{1, 2, 3, 4, 5} test(any5) } // value 允许为任意值 func test(value interface{}) { ... }
User结构体Nametype assertionstype switches
举个栗子:
package main import ( "fmt" ) type User struct{ Name string } func main() { any := User{ Name: "fidding", } test(any) any2 := "fidding" test(any2) any3 := int32(123) test(any3) any4 := int64(123) test(any4) any5 := []int{1, 2, 3, 4, 5} test(any5) } func test(value interface{}) { switch value.(type) { case string: // 将interface转为string字符串类型 op, ok := value.(string) fmt.Println(op, ok) case int32: // 将interface转为int32类型 op, ok := value.(int32) fmt.Println(op, ok) case int64: // 将interface转为int64类型 op, ok := value.(int64) fmt.Println(op, ok) case User: // 将interface转为User struct类型,并使用其Name对象 op, ok := value.(User) fmt.Println(op.Name, ok) case []int: // 将interface转为切片类型 op := make([]int, 0) op = value.([]int) fmt.Println(op) default: fmt.Println("unknown") } }
执行输出结果为
fidding true
fidding true
123 true
123 true
[1 2 3 4 5]
.()
// 如果转换失败ok=false,转换成功ok=true res, ok := anyInterface.(someType)
anyInterface.(type)switch case
现在再回过头看上面的栗子,是不是更清楚了呢