"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 다음은 질문 형식의 필요성을 염두에 두고 몇 가지 제목 옵션입니다. * **`json.Unmarshal`이 Go에서 구조체 대신 맵을 반환하는 이유는 무엇입니까?** (간단하고 직접적) * **Golang: 정수 역마샬링

다음은 질문 형식의 필요성을 염두에 두고 몇 가지 제목 옵션입니다. * **`json.Unmarshal`이 Go에서 구조체 대신 맵을 반환하는 이유는 무엇입니까?** (간단하고 직접적) * **Golang: 정수 역마샬링

2024-11-08에 게시됨
검색:101

Here are a few title options, keeping in mind the need for a question format:

* **Why Does `json.Unmarshal` Return a Map Instead of a  Struct in Go?** (Simple and direct)
* **Golang: Unmarshaling into an Interface - Why is My Struct a Map?** (More specif

json.Unmarshal이 예상 구조체 대신 맵을 반환하는 이유는 무엇입니까?

이 플레이그라운드 예에서 json.Unmarshal은 예상 구조체 대신 맵을 반환합니다. http //play.golang.org/p/dWku6SPqj5.

인터페이스{} 매개변수가 json.Unmarshal에 전달되고 라이브러리가 이를 바이트 배열로 역마샬링하려고 시도하기 때문에 문제가 발생합니다. 그러나 라이브러리에는 Reflect.Type 참조가 있음에도 불구하고 해당 구조체에 대한 직접 참조가 없습니다.

문제는 다음 코드에 있습니다.

var ping interface{} = Ping{}
deserialize([]byte(`{"id":42}`), &ping)
fmt.Println("DONE:", ping) // It's a simple map now, not a Ping. Why?

이 문제를 해결하려면 Ping 구조체에 대한 포인터를 추상 인터페이스로 명시적으로 전달하십시오.

var ping interface{} = &Ping{}
deserialize([]byte(`{"id":42}`), ping)
fmt.Println("DONE:", ping)

또는 직접 포인터를 사용할 수 없는 경우 Reflect를 사용하여 새 포인터를 만들고 역직렬화한 다음 값을 다시 복사합니다.

var ping interface{} = Ping{}
nptr := reflect.New(reflect.TypeOf(ping))
deserialize([]byte(`{"id":42}`), nptr.Interface())
ping = nptr.Interface()
fmt.Println("DONE:", ping)
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3