go 获取指针指向的结构体
时间: 2023-09-26 14:09:41 浏览: 37
在 Go 语言中,可以使用 `&` 符号获取一个变量的指针,使用 `*` 符号获取指针指向的变量。对于一个指向结构体的指针,可以使用 `*` 将其解引用,获取指针指向的结构体。示例代码如下:
```go
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
// 创建结构体实例
p := &Person{
Name: "Alice",
Age: 18,
}
// 获取指针指向的结构体
s := *p
// 输出结构体字段值
fmt.Println(s.Name)
fmt.Println(s.Age)
}
```
在上面的代码中,我们创建了一个指向 `Person` 结构体的指针 `p`,然后使用 `*p` 获取指针指向的结构体,将其赋值给变量 `s`,最后可以使用 `s` 访问结构体的字段值。
相关问题
go 利用反射获取指针指向的结构体
在 Go 语言中,可以使用反射的方式获取指针指向的结构体。示例代码如下:
```go
package main
import (
"reflect"
"fmt"
)
type Person struct {
Name string
Age int
}
func main() {
// 创建结构体实例的指针
p := &Person{
Name: "Alice",
Age: 18,
}
// 获取指针指向的结构体类型
t := reflect.TypeOf(*p)
// 创建结构体实例
s := reflect.New(t).Elem().Interface()
// 将指针指向的结构体的值拷贝到新创建的结构体实例中
reflect.ValueOf(s).Elem().Set(reflect.ValueOf(*p))
// 输出结构体字段值
fmt.Println(s.(Person).Name)
fmt.Println(s.(Person).Age)
}
```
在上面的代码中,我们首先创建了一个指向 `Person` 结构体的指针 `p`,然后使用反射的方式获取指针指向的结构体类型,并创建新的结构体实例。接着,我们使用 `reflect.ValueOf` 获取指针指向的结构体的值,并将其拷贝到新创建的结构体实例中。最后可以通过新创建的结构体实例访问结构体的字段值。
go 获取指针背后的结构体
在 Go 中,可以使用反射来获取指针背后的结构体。具体来说,您可以使用 reflect 包中的 TypeOf 和 ValueOf 方法来获取值的类型和值的 reflect.Value 对象。然后,您可以使用 reflect.Value 中的 Elem 方法获取指向的元素,并使用 Interface 方法将其转换为原始类型。
下面是一个示例代码,演示如何获取指针背后的结构体:
```go
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func main() {
p := &Person{Name: "Tom", Age: 30}
v := reflect.ValueOf(p)
if v.Kind() == reflect.Ptr {
v = v.Elem()
}
fmt.Println(v.Type()) // 输出:main.Person
fmt.Println(v.Interface()) // 输出:{Tom 30}
}
```
在这个示例中,我们创建了一个名为 Person 的结构体,并使用 & 运算符创建了一个指向该结构体的指针 p。我们然后使用 reflect.ValueOf 方法获取 p 的 reflect.Value 对象。由于 p 是一个指针,所以我们使用 Kind 方法检查其是否为指针,并使用 Elem 方法获取指向的元素。最后,我们使用 Type 和 Interface 方法分别获取值的类型和原始值。
希望这个示例能够帮助您了解如何在 Go 中获取指针背后的结构体。