>백엔드 개발 >Golang >Golang에서 중첩 구조체를 올바르게 초기화하는 방법은 무엇입니까?

Golang에서 중첩 구조체를 올바르게 초기화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-22 02:41:12362검색

How to Properly Initialize Nested Structs in Golang?

Golang에서 중첩 구조체 초기화

Golang에서 중첩 구조체로 작업할 때 기본 구조체를 초기화하는 것은 까다로울 수 있습니다. 이 가이드는 필드로 포함된 익명 구조체를 사용하여 구조체를 초기화하려고 할 때 발생하는 오류에 대한 솔루션을 제공하는 것을 목표로 합니다.

Error Encountered

type DetailsFilter struct {
  Filter struct {
    Name    string
    ID      int
  }
}

var M map[string]interface{}
M = make(map[string]interface{})
M["Filter"] = map[string]interface{}{"Name": "XYZ", "ID": 5}
var detailsFilter = DetailsFilter{Filter: M["Filter"]}}

이 코드는 DetailsFilter를 초기화하려고 시도합니다. 중첩된 익명 구조체 필터가 있는 구조체입니다. 그러나 지도에서 필터 필드를 초기화하려고 하면 오류가 발생합니다.

can not use (type interface {}) as type struct in field value : need type assertion

해결책

권장되는 해결 방법은 생성 중에 중첩된 익명 구조체를 초기화하지 않는 것입니다. 대신 값이 0인 구조체를 초기화한 다음 중첩 필드에 값을 할당하세요.

df := DetailsFilter{}
df.Filter.Name = "myname"
df.Filter.ID = 123

또 다른 대안은 익명 구조체 유형의 이름을 지정하고 명시적으로 초기화하는 것입니다.

type Filter struct {
    Name string
    ID   int
}

type DetailsFilter struct {
    Filter Filter
}

df := DetailsFilter{Filter: Filter{Name: "myname", ID: 123}}

추가 참고

  • 발생한 오류는 지도에 구조체에 직접 할당할 수 없는 인터페이스{} 값이 포함되어 있기 때문에 발생합니다. 필드.
  • 익명 구조체 유형의 이름을 지정하면 보다 명시적인 초기화가 가능합니다.
  • 중첩 구조체로 작업할 때는 다양한 초기화 접근 방식의 제한 사항을 이해하는 것이 중요합니다.

위 내용은 Golang에서 중첩 구조체를 올바르게 초기화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.