如何获取地址以使用反射字段?

我得到了 a.two 的地址。

我想获得相同的地址以使用反射字段。


package main


import (

    "fmt"

    "reflect"

)


type A struct {

    one   int

    two   int

    three int

}


func main() {

    a := &A{1, 2, 3}

    fmt.Println(&a.two)


    ap := reflect.ValueOf(a)

    av := ap.Elem()

    twoField := av.Field(1)


    f := twoField.UnsafeAddr()

    fmt.Printf("%v <- want to the same value(address) as the line above.\n", f)

}

我试图调用 UnsafeAddr、Addr、...但是,我无法获得期望值。


动漫人物
浏览 193回答 1
1回答

繁花不似锦

您有正确的地址,只是格式不正确。如果将其转换为十六进制,则会得到您想要的结果:package mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "reflect")type A struct {&nbsp; &nbsp; one&nbsp; &nbsp;int&nbsp; &nbsp; two&nbsp; &nbsp;int&nbsp; &nbsp; three int}func main() {&nbsp; &nbsp; a := &A{1, 2, 3}&nbsp; &nbsp; fmt.Println(&a.two)&nbsp; &nbsp; ap := reflect.ValueOf(a)&nbsp; &nbsp; av := ap.Elem()&nbsp; &nbsp; twoField := av.Field(1)&nbsp; &nbsp; f := twoField.UnsafeAddr()&nbsp; &nbsp; // %x prints as hexadecimal, prefixing with '0x' to emphasize it&nbsp; &nbsp; fmt.Printf("0x%x", f)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go