>백엔드 개발 >Golang >Go에서 구조체 매핑 시 '잘못된 메모리 주소 또는 nil 포인터 역참조' 오류를 해결하는 방법은 무엇입니까?

Go에서 구조체 매핑 시 '잘못된 메모리 주소 또는 nil 포인터 역참조' 오류를 해결하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-14 09:56:12834검색

How to Resolve

매핑 작업 중 "잘못된 메모리 주소 또는 nil 포인터 역참조" 디버깅 오류

맵 내의 구조체 필드에 액세스할 때 다음이 발생할 수 있습니다. "잘못된 메모리 주소 또는 nil 포인터 역참조" 오류. 이 문제는 일반적으로 nil 포인터를 역참조하려고 할 때 발생합니다.

제공된 특정 예에서:

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

맵 조건은 *guardduty.Condition 구조체에 대한 포인터의 빈 맵으로 초기화됩니다. . 결과적으로, 먼저 초기화하지 않고 조건["id"]에 액세스하면 Equals 필드를 설정하기 위해 역참조될 수 없는 nil 값이 반환됩니다.

이 문제를 해결하려면 먼저 키가 존재하는지 확인하면 됩니다. 다음 접근 방식을 사용하여 맵에서:

if cond, 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
}

이 검사를 수행하면 포인터를 역참조하고 Equals를 설정하기 전에 포인터가 nil이 아닌지 확인할 수 있습니다. 필드입니다.

위 내용은 Go에서 구조체 매핑 시 '잘못된 메모리 주소 또는 nil 포인터 역참조' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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