질문:
오류 인터페이스를 만족하는 구조체의 nil 인스턴스를 선언했음에도 불구하고 , nil에 대한 비교가 "Error is nil"을 반환하는 이유는 무엇입니까?
답변:
Go의 인터페이스 비교에서는 비교된 항목의 유형과 값을 모두 고려합니다. 오류 인스턴스를 nil과 비교하면 다음이 발생합니다.
따라서 두 인스턴스가 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!