Go setPointerFieldToNil()

Jmnote (토론 | 기여)님의 2023년 10월 18일 (수) 20:03 판

1 개요

Go setPointerFieldToNil()
package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	Age  int
	Name *string
}

func setPointerFieldToNil(obj interface{}) {
	v := reflect.ValueOf(obj).Elem()
	for i := 0; i < v.NumField(); i++ {
		f := v.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>}
}
package main

import (
	"fmt"
	"reflect"
)

type Person struct {
	Age  int
	Name *string
}

type Response struct {
	Status string
	Data   Person
}

func setPointerFieldToNil(obj interface{}) {
	v := reflect.ValueOf(obj).Elem()
	for i := 0; i < v.NumField(); i++ {
		f := v.Field(i)
		if f.Kind() == reflect.Ptr {
			f.Set(reflect.Zero(f.Type()))
		}
	}
}

func main() {
	name1 := "John"
	r1 := Response{Status: "success", Data: Person{11, &name1}}
	fmt.Printf("%+v\n", r1) // {Status:success Data:{Age:11 Name:0xc000014070}}
	setPointerFieldToNil(&r1)
	fmt.Printf("%+v\n", r1) // {Status:success Data:{Age:11 Name:0xc000014070}}
}

2 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}