지도 할당 시 런타임 오류
질문:
지도를 다음으로 변환하는 동안 YAML 파일을 다운로드하면 "런타임 오류: nil 맵의 항목에 할당"이라는 오류가 발생합니다. 다음 코드 조각을 검토하세요.
package main import ( "fmt" "gopkg.in/yaml.v2" ) type T struct { cn string street string } func main() { names := []string{"kasi", "remya", "nandan"} m := make(map[string]map[string]T, len(names)) for _, name := range names { //t := T{cn: "Chaithra", street: "fkmp"} m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
이 오류의 원인은 무엇이며 어떻게 해결할 수 있나요?
답변:
문제는 외부 맵 내에서 내부 맵을 초기화합니다. 제공된 예시에서 m["uid"] 맵은 초기화되지 않았으므로 맵에 이름을 할당하려고 하면 nil 맵이 생성됩니다.
내부 맵을 초기화하려면 for 앞에 다음 줄을 추가하세요. loop:
m["uid"] = make(map[string]T)
이렇게 하면 내부 맵이 생성되고 nil 맵 오류 없이 이름을 할당할 수 있습니다.
수정된 코드는 다음과 같습니다.
func main() { names := []string{"kasi", "remya", "nandan"} m := make(map[string]map[string]T, len(names)) m["uid"] = make(map[string]T) // Initialize the inner map for _, name := range names { m["uid"][name] = T{cn: "Chaithra", street: "fkmp"} } fmt.Println(m) y, _ := yaml.Marshal(&m) fmt.Println(string(y)) //fmt.Println(m, names) }
위 내용은 Go에서 지도에 할당하면 '런타임 오류: nil 지도의 항목에 할당'이 발생하는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!