gpt4 book ai didi

golang 反射(reflect)值(value)类型的 slice

转载 作者:IT王子 更新时间:2023-10-29 01:54:28 24 4
gpt4 key购买 nike

fmt.Println(v.Kind())
fmt.Println(reflect.TypeOf(v))

如何找出 slice 的反射值的类型?

以上结果

v.Kind = slice
typeof = reflect.Value

当我尝试 Set 时,如果我创建了错误的 slice ,它将崩溃

t := reflect.TypeOf([]int{})
s := reflect.MakeSlice(t, 0, 0)
v.Set(s)

例如 []int{} 而不是 []string{} 所以我需要在创建反射值之前知道反射值的确切 slice 类型。

最佳答案

首先,我们需要通过测试确保我们正在处理一个 slice :reflect.TypeOf(<var>).Kind() == reflect.Slice

如果没有该检查,您将面临运行时 panic 的风险。所以,既然我们知道我们正在使用一个 slice ,找到元素类型就很简单:typ := reflect.TypeOf(<var>).Elem()

因为我们可能期望有许多不同的元素类型,所以我们可以使用 switch 语句来区分:

t := reflect.TypeOf(<var>)
if t.Kind() != reflect.Slice {
// handle non-slice vars
}
switch t.Elem().Kind() { // type of the slice element
case reflect.Int:
// Handle int case
case reflect.String:
// Handle string case
...
default:
// custom types or structs must be explicitly typed
// using calls to reflect.TypeOf on the defined type.
}

关于golang 反射(reflect)值(value)类型的 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com