Go 언어에서는 잠재적인 널 포인터 역참조 컴파일 오류가 없습니다. 이는 Go 언어가 의도적으로 널 포인터 문제를 방지하기 때문입니다. 변수를 선언하면 기본적으로 널 포인터가 아닌 0 값으로 초기화됩니다. 동시에 Go 언어는 여러 반환 값을 사용하여 오류 정보를 반환하고, defer 및 패닉/복구를 사용하여 예외를 처리하는 등 풍부한 오류 처리 메커니즘도 제공합니다. 이러한 기능을 통해 Go 언어는 컴파일 단계에서 잠재적인 널 포인터 오류를 포착하고 보다 안전하고 안정적인 프로그래밍 환경을 제공할 수 있습니다. 따라서 Go 언어에서는 "null ptr 역참조"와 유사한 컴파일 오류가 발생하지 않습니다.
동료가 go에서 null ptr을 역참조했습니다.
나는 그에게 내가 하는 일을 하라고 제안했습니다. 다른 언어로 작업할 때 나는 경고 수준을 높이고 경고를 오류로 바꾸는 경향이 있습니다. 예를 들어 c#이면 이 코드를 컴파일할 수 없습니다.
으아악이해하니까
으아악분명히 말하자면 이것은 꽤 좋습니다.
하지만 그는 go에는 부팅할 경고 수준이 없다고 말했고, 인터넷 검색을 해보니 그의 말이 맞는 것 같습니다.
그렇다면 Go에서 이 문제를 어떻게 해결할 수 있을까요? "훌륭한 프로그래머는 실수를 하지 않는다"라는 오래된 C 조언으로 돌아가서 완벽한 사람들과 함께 일하지 않으면 때때로 null ptr 역참조가 발생합니까?
맞습니다. nil
사례를 처리하지 않고 포인터를 역참조하여 컴파일러 오류를 일으킬 수 없습니다. 언어 사양에서 허용하기 때문입니다. 그것에 대해 당신이 할 수 있는 일은 아무것도 없습니다.
어떤 언어로든 잘못되거나 잘못된 코드를 작성할 수 있습니다. 오류를 조기에 포착하거나 완화하는 방법은 거의 모든 언어로 테스트를 작성하는 것입니다.
Go에는 go
도구 자체에 훌륭한 테스트 프레임워크가 내장되어 있습니다. 반드시 활용해야 합니다. 이동 중에도 테스트를 작성하세요. Go 테스트는 정기적으로 실행되어야 하며 CI/CD 도중과 릴리스 전에 자동으로 실행됩니다. 대부분의 IDE는 저장된 테스트도 자동으로 실행합니다.
사용할 수 있는 또 다른 트릭: nil
指针没有意义,请编写一个使用非指针类型的 API。当然这有其缺点(有时指针是必须的);如果使用指针更有意义,请使用它,但检查 nil
值,并正确处理它们(例如返回 error
,如果有意义则恐慌等)。还要编写测试来使用 nil
포인터가 의미가 없다면 포인터가 아닌 유형을 사용하는 API를 작성하세요. 물론 여기에는 단점이 있습니다(때때로 포인터가 필요함). 포인터를 사용하는 것이 더 합리적이라면 사용하세요. 하지만
error
를 반환하거나 그럴 경우 당황하세요). 잠깐만요). 또한 🎜 포인터 값을 사용하여 테스트하는 테스트를 작성하세요. 🎜위 내용은 Go에서 잠재적인 null ptr 역참조로 인해 컴파일 오류가 발생할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!