go语言通过反射创建结构体、赋值、并调用对应方法
时间: 2023-08-05 19:04:16 浏览: 322
Go系列教程之反射的用法
可以通过 Go 语言的反射包 `reflect` 来创建结构体、赋值和调用对应方法。以下是一个简单的示例:
```go
package main
import (
"fmt"
"reflect"
)
type Person struct {
Name string
Age int
}
func (p Person) SayHello() {
fmt.Println("Hello, my name is", p.Name)
}
func main() {
// 创建结构体实例
p := reflect.New(reflect.TypeOf(Person{})).Elem()
// 设置结构体字段值
nameField := p.FieldByName("Name")
nameField.SetString("Alice")
ageField := p.FieldByName("Age")
ageField.SetInt(25)
// 调用结构体方法
method := p.MethodByName("SayHello")
method.Call(nil)
}
```
在上面的示例中,`reflect.New(reflect.TypeOf(Person{})).Elem()` 创建了一个 `Person` 类型的结构体实例,并使用 `Elem()` 方法获取了指向该结构体的指针,以便后续进行字段赋值和方法调用。`FieldByName` 方法可以根据字段名获取对应的字段值,并使用 `SetString` 和 `SetInt` 方法分别设置字符串和整数类型的字段值。`MethodByName` 方法可以根据方法名获取对应的方法,并使用 `Call` 方法进行调用。需要注意的是,`Call` 方法的参数必须是一个 `[]reflect.Value` 类型的切片,如果方法无参数,则可以传入 `nil`。
阅读全文