面试题答案
一键面试- 关键步骤:
- 导入反射包:在Go语言中,反射相关功能在
reflect
包中,首先要导入这个包。 - 获取类型信息:使用
reflect.TypeOf
获取类型的reflect.Type
对象,这是反射的基础,通过它可以知道类型的各种信息,如字段、方法等。 - 创建对象:利用
reflect.New
函数根据reflect.Type
创建一个指向新分配的零值的指针。如果需要获取实际的对象,而不是指针,可以通过Elem
方法获取指针指向的值。
- 导入反射包:在Go语言中,反射相关功能在
- 示例代码:
package main
import (
"fmt"
"reflect"
)
// 定义一个结构体
type Person struct {
Name string
Age int
}
func main() {
// 获取Person结构体的类型
personType := reflect.TypeOf(Person{})
// 创建一个Person类型的对象(这里创建的是指针)
newPersonPtr := reflect.New(personType)
// 获取指针指向的值
newPerson := newPersonPtr.Elem()
// 通过反射设置字段值
nameField := newPerson.FieldByName("Name")
if nameField.IsValid() {
nameField.SetString("John")
}
ageField := newPerson.FieldByName("Age")
if ageField.IsValid() {
ageField.SetInt(30)
}
// 将反射值转换回实际类型
actualPerson := newPerson.Interface().(Person)
fmt.Printf("Name: %s, Age: %d\n", actualPerson.Name, actualPerson.Age)
}
在上述代码中,首先获取Person
结构体的类型,然后创建一个该类型的对象(指针形式),接着获取指针指向的值,通过反射设置结构体字段的值,最后将反射值转换回实际的Person
结构体类型并打印。