>백엔드 개발 >Golang >Go에서 맵 필드에 액세스할 때 '잘못된 메모리 주소 또는 nil 포인터 역참조' 오류를 처리하는 방법은 무엇입니까?

Go에서 맵 필드에 액세스할 때 '잘못된 메모리 주소 또는 nil 포인터 역참조' 오류를 처리하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-03 15:24:11843검색

How to Handle

지도 액세스 오류: "잘못된 메모리 주소 또는 nil 포인터 역참조"

문제:

맵에서 구조체 필드에 액세스하려고 하면 잘못된 메모리 주소 또는 nil 포인터를 나타내는 오류가 발생합니다. 역참조. 이 오류는 특히 포인터 조각(*문자열)이 Guardduty.Condition의 필드에 할당되는 줄에서 발생합니다. struct.

코드:

condition := map[string]*guardduty.Condition{}
condition["id"].Equals = strPtr

오류:

invalid memory address or nil pointer dereference
gdreport/main.go:30 +0x1e6

설명:

오류는 조건 맵이 처음에는 빈 포인터 맵입니다. "id" 키에 액세스할 때 *guardduty.Condition의 nil 값을 검색하려고 시도하는 것입니다. 이는 nil 포인터의 Equals 필드에 액세스하는 것이 유효하지 않기 때문에 오류를 설명합니다.

해결책:

이 문제를 해결하려면 먼저 "id"가 있는지 확인해야 합니다. " 키가 조건 맵에 존재합니다. 그렇지 않은 경우 새 Guardduty.Condition을 초기화하고 "id" 키에 할당할 수 있습니다.

업데이트된 코드:

if _, ok := condition["id"]; !ok { // <nil> false
    log.Println("Pointer is null")
} else {
    // Init new guardduty.Condition
    // and assign to required key
    nc := &guardduty.Condition{Equals: strPtr}
    condition["id"] = nc
}

다음을 확인하여 키가 먼저 존재하면 nil 포인터에 대한 액세스 시도를 방지하여 코드가 의도한 대로 실행되는지 확인할 수 있습니다.

위 내용은 Go에서 맵 필드에 액세스할 때 '잘못된 메모리 주소 또는 nil 포인터 역참조' 오류를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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