Go 언어의 리플렉션 기능을 사용하면 프로그램이 런타임에 유형의 구조를 검사하고 수정할 수 있습니다. Type, Value, Reflect.Kind를 이용하여 객체의 타입 정보, 필드 값, 메소드를 얻을 수 있고, 객체를 생성하고 수정할 수도 있습니다. 구체적인 작업 방법에는 유형 확인(TypeOf()), 필드 값 가져오기(ValueOf(), FieldByName()), 필드 값 수정(Set()), 객체 생성(New())이 포함됩니다.
Go Reflection: 종합 분석 및 실제 전투
Introduction
Reflection은 프로그램이 런타임에 유형의 구조를 검사하고 수정할 수 있게 해주는 Go 언어의 강력한 기능입니다. 리플렉션을 통해 객체의 유형 정보, 필드 값 및 메소드를 얻을 수 있으며 런타임에 객체를 생성하고 수정할 수도 있습니다.
기본 개념
Reflection 연산 방법
Reflection을 사용하기 위해서는 reflect
패키지를 import해야 합니다. 다음은 일반적으로 사용되는 몇 가지 작업 방법입니다. reflect
包。以下是常用的一些操作方法:
实战案例
检查类型
我们可以使用 TypeOf() 方法检查一个变量的类型。以下示例检查变量 num
的类型:
import "reflect" var num int = 10 t := reflect.TypeOf(num) fmt.Println(t.Kind()) // 输出:int
获取字段值
我们可以使用 ValueOf() 方法获取对象的实际值,并通过 Field() 方法访问字段值。以下示例获取结构体 Person
的 "Name" 字段值:
type Person struct { Name string Age int } p := Person{Name: "John", Age: 30} v := reflect.ValueOf(p) nameField := v.FieldByName("Name") name := nameField.Interface().(string) fmt.Println(name) // 输出:John
修改字段值
我们可以使用 Set() 方法修改对象的字段值。以下示例修改结构体 p
的 "Age" 字段值:
ageField := v.FieldByName("Age") ageField.SetInt(40) // 将 Age 设置为 40 fmt.Println(p.Age) // 输出:40
创建对象
我们可以使用 New() 方法创建新对象。以下示例创建一个新的 Person
num
의 유형을 확인합니다. 🎜empType := reflect.TypeOf(Person{}) empValue := reflect.New(empType) emp := empValue.Interface().(Person) emp.Name = "Mary" emp.Age = 25 fmt.Println(emp)🎜🎜필드 값 가져오기🎜🎜🎜ValueOf() 메서드를 사용하여 객체의 실제 값을 가져오고 다음을 통해 필드 값에 액세스할 수 있습니다. 필드() 메서드. 다음 예에서는
Person
구조의 "이름" 필드 값을 얻습니다. 🎜rrreee🎜🎜필드 값 수정🎜🎜🎜Set() 메서드를 사용하여 개체의 필드 값을 수정할 수 있습니다. 다음 예에서는 p
구조의 "Age" 필드 값을 수정합니다. 🎜rrreee🎜🎜Creating Objects🎜🎜🎜New() 메서드를 사용하여 새 개체를 만들 수 있습니다. 다음 예에서는 새 Person
개체를 만듭니다. 🎜rrreee위 내용은 Golang 반영 소개 및 응용 시나리오 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!