Golang reflect.Addr()函数的使用方法及示例
Go语言提供内置的运行时反射支持(reflection),通过反射包(reflect package),允许程序操作任意类型的对象。Golang 中的 reflect.Addr() 函数用于获取表示v地址的指针值。要使用此函数,需要在程序中导入reflect包。
语法:
func (v Value) Addr() Value
参数: 此函数不接受任何参数。
返回值: 此函数返回表示v地址的指针值。
以下示例说明了在Golang中使用以上方法的用法:
示例1:
// Golang程序说明
// reflect.Addr() 函数
package main
import (
"fmt"
"reflect"
)
// 主函数
func main() {
typ := reflect.StructOf([]reflect.StructField{
{
Name: "Height",
Type: reflect.TypeOf(float64(0)),
Tag: `json:"height"`,
},
{
Name: "Age",
Type: reflect.TypeOf(int(0)),
Tag: `json:"age"`,
},
})
v := reflect.New(typ).Elem()
v.Field(0).SetFloat(0.4)
v.Field(1).SetInt(2)
s := v.Addr().Interface()
fmt.Printf("value:+%v\n", s)
} ```
输出:
value: &{Height:0.4 Age:2}
示例2:
// Golang程序说明
// reflect.Addr() 函数
package main
import (
"fmt"
"reflect"
)
// 主函数
type superint struct {
A int
B int
}
func (s *superint) lol() {}
type a interface{ lol() }
func main() {
i := superint{A: 1, B: 9}
valPtr := reflect.ValueOf(&i)
fmt.Printf("%v \n", i.A)
// 使用Addr()方法
fmt.Printf("%v \n", valPtr.Elem().Addr().Interface())
}
输出:
1
&{1 9}
极客教程