>  기사  >  백엔드 개발  >  Nil 구조체 인스턴스를 Nil과 비교하면 \"Error is nil\"이 반환되는 이유는 무엇입니까?

Nil 구조체 인스턴스를 Nil과 비교하면 \"Error is nil\"이 반환되는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 08:56:02705검색

Why Does Comparing a Nil Struct Instance to Nil Return

Nil 값과 인터페이스 비교

질문:

오류 인터페이스를 만족하는 구조체의 nil 인스턴스를 선언했음에도 불구하고 , nil에 대한 비교가 "Error is nil"을 반환하는 이유는 무엇입니까?

답변:

Go의 인터페이스 비교에서는 비교된 항목의 유형과 값을 모두 고려합니다. 오류 인스턴스를 nil과 비교하면 다음이 발생합니다.

  • 오류 인터페이스의 nil 인스턴스에는 nil 값과 nil 유형(error(nil))이 있습니다.
  • nil Goof 구조체의 인스턴스에는 nil 값이 있지만 nil이 아닌 유형(*Goof)이 있습니다.

따라서 두 인스턴스가 nil 값으로 초기화되었음에도 불구하고 서로 다른 유형은 동일하지 않은 비교를 초래합니다.

이 문제를 해결하고 예상되는 "Error is nil" 출력을 반환하려면 nil 인스턴스를 오류 변수에 할당해야 합니다. 해당 0 값은 error(nil)이기 때문입니다. 또는 오류를 반환하는 함수에서 nil을 반환하면 의도한 결과가 생성됩니다.

인터페이스 비교에 대한 설명:

Go 인터페이스는 유형과 값. 유형은 인터페이스의 구체적인 구현을 나타내고 값은 저장된 실제 데이터를 나타냅니다. 인터페이스 값은 유형과 값이 모두 설정되지 않은 경우(nil, nil)에만 nil로 간주됩니다.

두 인터페이스 값이 동일한지 비교할 때 유형과 값이 모두 일치해야 합니다. 제공된 예에서 Goof 구조체의 nil 인스턴스는 nil 값을 갖지만 nil이 아닌 유형을 가지므로 nil 값과 유형을 모두 갖는 오류 인스턴스와 동일하지 않게 렌더링됩니다.

이 개념 nil 인스턴스 이상으로 확장됩니다. 예를 들어, 기본 데이터(예: 3)는 동일하지만 유형(int 및 Bob)이 다른 두 정수 값은 유형이 다르기 때문에 인터페이스에 저장될 때 동일하지 않은 것으로 비교됩니다.

위 내용은 Nil 구조체 인스턴스를 Nil과 비교하면 \"Error is nil\"이 반환되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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