gpt4 book ai didi

pointers - 对指针 slice 的反射(reflection)

转载 作者:IT王子 更新时间:2023-10-29 01:43:59 26 4
gpt4 key购买 nike

我正在尝试在存储在接口(interface)中的结构上反射(reflect)一段指针{}

我认为我做的还不错,直到是时候反省指向结构上的内容了。看下面的例子

package main

import (
"fmt"
"reflect"
)

type teststruct struct {
prop1 string
prop2 string
}

func main() {
test := teststruct{"test", "12"}

var container interface{}

var testcontainer []*teststruct

testcontainer = append(testcontainer, &test)

container = testcontainer

rcontainer := reflect.ValueOf(container)
fmt.Println(rcontainer.Kind())

rtest := rcontainer.Index(0).Elem()
fmt.Println(rtest)

rteststruct := reflect.ValueOf(rtest)
fmt.Println(rteststruct.Kind())

typeOfT := rteststruct.Type()

for i := 0; i < rteststruct.NumField(); i++ {
f := rteststruct.Field(i)
fmt.Printf("%d: %s %s = %v\n", i, typeOfT.Field(i).Name, f.Type(), f.String())
}
}

哪些结果

slice
{test 12}
struct
0: typ *reflect.rtype = <*reflect.rtype Value>
1: ptr unsafe.Pointer = <unsafe.Pointer Value>
2: flag reflect.flag = <reflect.flag Value>

我肯定在这里遗漏了一些东西,有人可以向我解释什么吗?

最佳答案

rtest := rcontainer.Index(0).Elem() 已经是值,所以当你这样做时:rteststruct := reflect.ValueOf(rtest) ,你实际上得到了一个 reflect.Value,它当然是一个 struct

将代码末尾替换为:

typeOfT := rtest.Type()

for i := 0; i < rtest.NumField(); i++ {
f := rtest.Field(i)
fmt.Printf("%d: %s %s = %v\n", i, typeOfT.Field(i).Name, f.Type(), f.String())
}

Playground

关于pointers - 对指针 slice 的反射(reflection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439713/

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