map[string]string을 JSON으로 마샬링: 언제 오류를 반환할 수 있나요?
다음 코드 조각을 고려하세요.
m := map[string]string{} //... do stuff to the map b, err := json.Marshal(m)
일반적으로 map[string]string을 JSON으로 마샬링하면 오류가 반환되지 않습니다. JSON은 문자열을 키와 값으로 지원하며 Go는 문자열 값을 UTF-8 바이트 시퀀스로 인코딩합니다. 유효하지 않은 UTF-8 문자도 유니코드 대체 문자로 대체됩니다.
m := map[string]string{"\xff": "a"} data, err := json.Marshal(m) // Output: {"\ufffd":"a"} <nil>
그러나 문서에 오류가 일반적으로 nil이라고 명시되어 있더라도 반환된 오류를 항상 확인해야 한다는 점에 유의하는 것이 중요합니다.
map[string]string이 json.Marshal()에 동시에 전달되면 더 모호한 잠재적인 문제가 발생합니다. Go 1.6부터 런타임은 지도의 동시 오용을 감지할 수 있습니다. 다른 스레드가 맵을 반복하는 동안 한 스레드가 맵을 수정하는 경우 런타임은 "치명적인 오류: 동시 맵 반복 및 맵 쓰기" 메시지와 함께 애플리케이션을 중단시킬 수 있습니다.
이 상황은 다음과 같이 유발될 수 있습니다.
m := map[string]string{"\xff": "a"} go func() { for i := 0; i < 10000; i++ { m["x"] = "b" } }() for i := 0; i < 10000; i++ { if _, err := json.Marshal(m); err != nil { panic(err) } } // Output: fatal error: concurrent map iteration and map write
따라서 지도를 동시에 수정하고 정리할 때는 적절한 동기화를 보장하는 것이 중요합니다.
위 내용은 Go에서 `map[string]string`을 마샬링할 때 `json.Marshal`이 언제 실패합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!