golang类型断言
一、第一种
package main
import (
"fmt"
)
func main() {
var a float32 = 3.14
var x interface{}
x = a
b, ok := x.(float32)
if ok {
fmt.Printf("类型断言成功,b类型为%T\n", b)
} else {
fmt.Println("类型断言不成功")
}
}
输出结果:
类型断言成功,b类型为float32
二、第二种
写一个方法循环判断传入参数的类型
package main
import (
"fmt"
)
func TypeJudge(items ...interface{}) {
for i, item := range items {
switch x := item.(type) {
case bool:
fmt.Printf("第%d个参数是bool类型,值是%v\n", i+1, x)
case float32, float64:
fmt.Printf("第%d个参数是float类型,值是%v\n", i+1, x)
case int, int8, int16, int32, int64:
fmt.Printf("第%d个参数是int类型,值是%v\n", i+1, x)
case nil:
fmt.Printf("第%d个参数是nil,值是%v\n", i+1, x)
case string:
fmt.Printf("第%d个参数是string类型,值是%v\n", i+1, x)
default:
fmt.Printf("第%d个参数是unknow,值是%v\n", i+1, x)
}
}
}
func main() {
var a float32 = 10.25
var b float64 = 50.41
var flag bool = true
var name string = "小明"
var c int = 20
var d int8 = 21
TypeJudge(nil, a, b, flag, name, c, d)
}
输出结果:
第1个参数是nil,值是<nil>
第2个参数是float类型,值是10.25
第3个参数是float类型,值是50.41
第4个参数是bool类型,值是true
第5个参数是string类型,值是小明
第6个参数是int类型,值是20
第7个参数是int类型,值是21