> 백엔드 개발 > Golang > 소문자 필드 이름이 있는 Go 구조체에서 JSON 인코딩이 실패하는 이유는 무엇입니까?

소문자 필드 이름이 있는 Go 구조체에서 JSON 인코딩이 실패하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-26 11:27:18
원래의
587명이 탐색했습니다.

Why Does JSON Encoding Fail with Go Structs Having Lowercase Field Names?

Go에서 소문자 필드 이름이 있는 구조체에 대해 JSON 인코딩이 실패하는 이유는 무엇입니까?

Go에서 구조체의 필드는 패키지에만 표시됩니다. 첫 글자가 대문자인지 정의됩니다. 아래와 같이 소문자 필드 이름으로 구조체를 인코딩하려고 하면 빈 JSON 출력이 발생합니다.

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

func main() {
  m := &Machine{m_ip: "test", m_type: "test", m_serial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{}"
}
로그인 후 복사

이는 소문자부터 시작하기 때문에 필드가 json.Marshal 함수에 표시되지 않기 때문에 발생합니다. 편지. 그러나 다음과 같이 필드 이름을 대문자로 변경하면 JSON 인코딩이 성공할 수 있습니다.

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}

func main() {
  m := &Machine{MachIp: "test", MachType: "test", MachSerial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{\"MachIp\":\"test\",\"MachType\":\"test\",\"MachSerial\":\"test\"}"
}
로그인 후 복사

소문자 필드 이름으로 구조체를 인코딩하려면 원하는 JSON 키로 필드에 태그를 지정할 수 있습니다. 예를 들면 다음과 같습니다.

type Machine struct {
    MachIp     string `json:"m_ip"`
    MachType   string `json:"m_type"`
    MachSerial string `json:"m_serial"`
}

func main() {
  m := &Machine{MachIp: "test", MachType: "test", MachSerial: "test"}
  m_json, err := json.Marshal(m)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(m_json)) // Prints "{\"m_ip\":\"test\",\"m_type\":\"test\",\"m_serial\":\"test\"}"
}
로그인 후 복사

원하는 JSON 키로 필드에 태그를 지정하면 구조체를 소문자 필드 이름으로 인코딩할 수 있으므로 특정 시나리오에서 더 편리해집니다.

위 내용은 소문자 필드 이름이 있는 Go 구조체에서 JSON 인코딩이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿