Reflection은 유형 정보(reflect.TypeOf를 통해) 및 값 정보(reflect.ValueOf를 통해)를 포함하여 유형 정보를 검사하고 조작할 수 있는 강력한 Go 메커니즘입니다. 리플렉션을 사용하여 구조, 슬라이스 또는 배열의 필드나 요소를 반복하고 이를 JSON 문자열로 직렬화하는 JSON 데이터 직렬화와 같은 다양한 작업에 사용할 수 있습니다. 리플렉션을 사용하면 오버헤드가 발생하고 비공개 필드에 액세스할 수 없으며 런타임 오류가 발생할 수 있다는 점에 유의하는 것이 중요합니다.
리플렉션은 프로그램이 런타임에 유형 정보를 검사하고 조작할 수 있게 해주는 Go 언어의 강력한 메커니즘입니다. 이는 직렬화, 유형 확인 및 일반 코드 생성과 같은 작업에 이상적입니다.
모든 Go 유형은 reflect.Type
값과 연결되어 있습니다. 유형 정보를 얻으려면 reflect.TypeOf
함수를 사용하세요. reflect.Type
值相关联。要获取类型信息,请使用 reflect.TypeOf
函数:
type Person struct { Name string Age int } var person = Person{"John", 30} personType := reflect.TypeOf(person)
反射还可以访问值信息。要获取值信息,请使用 reflect.ValueOf
value := reflect.ValueOf(person)
reflect.ValueOf
함수를 사용하세요. func SerializeJSON(v interface{}) (string, error) { value := reflect.ValueOf(v) kind := value.Type().Kind() switch kind { case reflect.Struct: // 对于结构,遍历其字段并序列化每一个字段 fields := value.NumField() jsonStr := `{` for i := 0; i < fields; i++ { fieldValue := value.Field(i) jsonStr += ", " + SerializeJSON(fieldValue.Interface()) } jsonStr += "}" return jsonStr, nil case reflect.Slice, reflect.Array: // 对于切片或数组,遍历其元素并序列化每一个元素 length := value.Len() jsonStr := `[` for i := 0; i < length; i++ { jsonStr += ", " + SerializeJSON(value.Index(i).Interface()) } jsonStr += "]" return jsonStr, nil default: return json.Marshal(v) } }
rrreee
Notes위 내용은 Go 반사 메커니즘 공개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!