通过名称访问结构属性

通过名称访问结构属性,第1张

通过名称访问结构属性

大多数代码都不需要这种动态查找。与直接访问相比,它效率低下(编译器知道Vertex结构中X字段的偏移量,可以将vX编译为单个机器指令,而动态查找则需要某种哈希表实现或类似方法)。它还禁止静态类型输入:编译器无法检查您是否没有尝试动态访问未知字段,并且它不知道结果类型应该是什么。

但是…语言为您很少需要的时候提供了一个反射模块。

package mainimport "fmt"import "reflect"type Vertex struct {    X int    Y int}func main() {    v := Vertex{1, 2}    fmt.Println(getField(&v, "X"))}func getField(v *Vertex, field string) int {    r := reflect.ValueOf(v)    f := reflect.Indirect(r).FieldByName(field)    return int(f.Int())}

这里没有错误检查,因此如果您请求不存在的字段或者该字段的类型不是int,您将感到恐慌。检查文档以了解更多详细信息。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4909819.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-12

发表评论

登录后才能评论

评论列表(0条)

    保存