회사에서 프론트와 백엔드끼리 빈리스트는 빈리스트로 만들어서 줘야하냐는 논의가 있었다.

백엔드가 사용하는 Go 언어 같은 경우, 빈 리스트 디폴트 초기값이 nil이고, 따로 할당해주지 않으면 JSON으로

marshal할 때, null값으로 변환이 되어 나간다. 프론트 입장에서는 array가 nulll로 들어오면 null check를 계속 해야해서 코드 보기가 좋지 않다라고 하는 의견이다.

Go의 특성상,

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Friends []string
}

func main() {
	json1, _ := json.Marshal(Person{f1})
	json2, _ := json.Marshal(Person{f2})

	fmt.Printf("%s\\n", json1)
	fmt.Printf("%s\\n", json2)
}

https://go.dev/play/p/-89A6BWZwBE

{"Friends":null}
{"Friends":[]}

proposal: encoding/json: nilasempty to encode nil-slices as [] · Issue #37711 · golang/go

여기서도 Go ~ JSON간 빈 리스트 소통을 위해 struct tag (nilasempty)를 추가하자는 PR에 대해서 갑론을박하는 것 같다.

<aside> 💡 현실적으로 아직 방법은 없는 것 같다.

</aside>

그래서 struct에 모든 필드를 초기화해주는 것을 실제로 만들어보자는 생각을 하게 되었다.

Reflect 구조 공부


func main() {
	fmt.Println(reflect.TypeOf(12)) // int
	fmt.Println(reflect.TypeOf("12")) // string
	fmt.Println(reflect.TypeOf([]string{"12", "23"})) // []string
	fmt.Println(reflect.TypeOf(map[string]string{})) // map[string]string

	fmt.Println(reflect.ValueOf(12)) // 12
	fmt.Println(reflect.ValueOf("12")) // 12
	fmt.Println(reflect.ValueOf([]string{"12", "23"})) //[12 23]
	fmt.Println(reflect.ValueOf(map[string]string{})) // map[]
}