当前位置: 首页 > 面试题库 >

golang反映价值的一种切片

宋明亮
2023-03-14
问题内容
fmt.Println(v.Kind())
fmt.Println(reflect.TypeOf(v))

如何找出切片的反射值的类型?

以上结果

v.Kind = slice
typeof = reflect.Value

当我尝试Set创建错误的切片时会崩溃

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

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


问题答案:

首先,我们需要通过测试来确保我们正在处理切片: reflect.TypeOf(<var>).Kind() == reflect.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.
}


 类似资料:
  • 问题内容: 如果我有地图m,有没有更好的方法来获取值v的一部分,则 有地图的内置功能吗?Go包中是否有函数,或者如果需要的话,这是最好的代码吗? 问题答案: 抱歉不行。没有内置的方法可以做到这一点。 附带说明一下,您可以在切片创建中省略容量参数: 这里的容量暗示与长度相同。

  • 问题内容: 在Golang中,我试图为我的旅行推销员问题创建一个加扰切片函数。在执行此操作时,我注意到当我开始编辑切片时,每次传递时,我赋予的加密功能都是不同的。 经过一些调试后,我发现这是由于我在函数内部编辑了切片。但是既然Golang被认为是一种“价值传递”的语言,那怎么可能呢? https://play.golang.org/p/mMivoH0TuV 我提供了一个游乐场链接来显示我的意思。通

  • 问题内容: 在这里,我试图从包含字符串的切片中为我的API创建查询字符串。 即。 这是goplayground链接。 获得结果的最佳方法是什么? 问题答案: 由于串联,您的解决方案使用了太多分配。 我们将创建一些替代的,更快的和/或更优雅的解决方案。请注意,以下解决方案不检查节点值是否包含引号字符。如果愿意,则必须以某种方式对其进行转义(否则结果将是无效的查询字符串)。 完整的可运行代码可以在Go

  • 本文向大家介绍golang修改结构体中的切片值方法,包括了golang修改结构体中的切片值方法的使用技巧和注意事项,需要的朋友参考一下 golang修改结构体中的切片值,直接传结构体地址就可以 到此这篇关于golang修改结构体中的切片值方法的文章就介绍到这了,更多相关golang 修改结构体切片值内容请搜索呐喊教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持呐喊教程!

  • 问题内容: 请检查代码 结果: 为什么要到达关闭函数的相同地址!或如何获得唯一的地址! 问题答案: 函数指针表示函数的代码。由函数文字创建的匿名函数的代码仅在内存中存储一​​次,无论返回匿名函数值的代码运行了多少次。这意味着所有函数值(或更确切地说,函数指针)将相同。 因此,您无法区分存储在和中的值:它们表示调用它们时要执行的同一代码块。 由存储在变量中的函数值返回的函数值是一个闭包。只要可访问,

  • 问题内容: 我有这个简单的代码: 我期望它可以打印,但是可以打印。这里发生了什么? 问题答案: 这是因为在循环中,您使用 副本 而不是slice / array元素本身进行操作。 将使得它遍历元素的副本,并追加此一时,循环变量的地址- 这是在所有的迭代相同。因此,您将相同的指针添加3次。而且此临时变量将在最后一次迭代(数组的最后一个元素)中设置为,因此这就是为什么您看到该变量打印了3次的原因。 修