1 개요[ | ]
- Go setPointerFieldToNil() 구현
- Go 구조체 포인터 필드에 nil 값 설정
Go
Copy
package main
import (
"fmt"
"reflect"
)
type Person struct {
Age int
Name *string
}
func setPointerFieldToNil(o interface{}) {
el := reflect.ValueOf(o).Elem()
for i := 0; i < el.NumField(); i++ {
f := el.Field(i)
if f.Kind() == reflect.Ptr {
f.Set(reflect.Zero(f.Type()))
}
}
}
func main() {
name1 := "John"
p1 := Person{11, &name1}
fmt.Printf("%+v\n", p1) // {Age:11 Name:0xc000104020}
setPointerFieldToNil(&p1)
fmt.Printf("%+v\n", p1) // {Age:11 Name:<nil>}
}
Loading
Go
Copy
package main
import (
"fmt"
"reflect"
)
type Person struct {
Age int
Name *string
}
type Response struct {
Status string
Data1 Person
Data2 *Person
}
func setPointerFieldToNil(o interface{}) {
el := reflect.ValueOf(o).Elem()
for i := 0; i < el.NumField(); i++ {
f := el.Field(i)
switch f.Kind() {
case reflect.Ptr:
f.Set(reflect.Zero(f.Type()))
case reflect.Struct:
setPointerFieldToNil(f.Addr().Interface())
}
}
}
func main() {
name1 := "John"
person1 := Person{11, &name1}
r1 := Response{Status: "success", Data1: person1, Data2: &person1}
fmt.Printf("%#v\n", r1)
setPointerFieldToNil(&r1)
fmt.Printf("%#v\n", r1)
}
Loading
2 같이 보기[ | ]
편집자 Jmnote
로그인하시면 댓글을 쓸 수 있습니다.