检查 Golang 中切片的类型

huangapple go评论87阅读模式
英文:

Checking types of slices in golang

问题

我使用reflect包来检查变量的类型。例如,如果我想检查var是否为整数,我可以这样做:

reflect.TypeOf(var).Kind == reflect.Int

那么,我如何检查变量是否为int或float切片呢?

我只能看到Slice作为Kind()返回的类型之一,但是这个切片可以是任何类型。

英文:

I use the reflect package to check the type of my variables. For example if I want to check if var is an integer I do:

reflect.TypeOf(var).Kind == reflect.Int

How can I check if my variable is an int or float slice?

I can only see Slice as one of the types returned by Kind() but this slice could be of any type

答案1

得分: 9

如果类型是切片(slice),Elem()将返回底层类型:

func main() {
    foo := []int{1,2,3}
    fmt.Println(reflect.TypeOf(foo).Elem()) //输出 "int"
    fmt.Println(reflect.TypeOf(foo).Elem().Kind() == reflect.Int) //true!
}

当然,在使用之前最好检查它是否是切片类型。

英文:

If a type is slice,Elem() will return the underlying type:

func main() {
	foo := []int{1,2,3}
	fmt.Println(reflect.TypeOf(foo).Elem()) //prints "int"
    fmt.Println(reflect.TypeOf(foo).Elem().Kind() == reflect.Int) //true!
}

You better check that it's a slice before, of course.

huangapple
  • 本文由 发表于 2014年6月15日 15:39:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/24227551.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定