> 백엔드 개발 > Golang > Go에서 '런타임 오류: Nil Map의 항목 할당'이 나타나는 이유는 무엇입니까?

Go에서 '런타임 오류: Nil Map의 항목 할당'이 나타나는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-06 16:47:18
원래의
183명이 탐색했습니다.

Why Am I Getting a

"런타임 오류: Nil Map의 항목 할당" 이해

Go에 내장된 맵 데이터 구조를 활용하려고 할 때 다음과 같은 문제가 발생할 수 있습니다. 두려운 "런타임 오류: nil 맵의 항목 할당"이 발생합니다. 이 오류는 nil(또는 초기화되지 않은) 맵에 존재하지 않는 키에 값을 할당하려는 시도에서 발생합니다.

특별한 경우 맵에서 YAML 파일을 생성하려고 합니다. 키는 "uid"를 나타내며 각 값은 개인에 대한 정보를 포함하는 맵입니다. 그러나 코드에서 런타임 오류가 발생했습니다.

해결 방법: 내부 맵 초기화

이 문제는 내부 맵("uid")이 먼저 초기화되지 않았기 때문에 발생합니다. 키에 값을 할당해 보세요(예: "kasi", "remya" 및 "nandan"). 이 문제를 해결하려면 for 루프 앞에 다음 줄을 추가하면 됩니다.

m["uid"] = make(map[string]T)
로그인 후 복사

이 줄은 내부 맵을 초기화하고 이를 외부 맵(m)의 "uid" 키와 연결합니다. 이제 내부 맵 내의 키에 값을 안전하게 할당할 수 있습니다.

m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}
로그인 후 복사

세련된 코드

수정된 코드는 다음과 같습니다.

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))
    m["uid"] = make(map[string]T)
    for _, name := range names {

        m["uid"][name] = T{cn: "Chaithra", street: "fkmp"}

    }
    fmt.Println(m)

    y, _ := yaml.Marshal(&m)

    fmt.Println(string(y))
}
로그인 후 복사

이번 수정으로 더 이상 "런타임 오류: nil 맵의 항목 할당"이 발생하지 않습니다. 귀하의 코드는 원하는 구조의 YAML 파일을 성공적으로 생성합니다.

위 내용은 Go에서 '런타임 오류: Nil Map의 항목 할당'이 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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