>  기사  >  백엔드 개발  >  Go의 "유형 주장" 접근 방식 뒤에 있는 이유는 무엇입니까?

Go의 "유형 주장" 접근 방식 뒤에 있는 이유는 무엇입니까?

王林
王林앞으로
2024-02-06 08:12:07891검색

Go 的“类型断言”方式背后的原因是什么?

질문 내용

golang의 유형 주장은 구체적인 유형(예: "string", "int32") 등이 아닌 인터페이스 유형으로 명시적으로 정의된 변수에만 적용된다는 사실을 이해하려고 합니다. ).

여기 혼란의 근본 원인을 보여주는 빠르고 간단한 코드 예제가 있습니다.

으아아아 이 질문의 제목에서 알 수 있듯이 인터페이스 유형에 대해서만 유형 어설션을 구현하고 해당 인터페이스를 명시적으로 구현하는 변수에 할당된 기본 값이 우리가 내부적으로 지정한 값인지 확인하는 이유를 이해할 수 없습니다.".(t )" 주장 방법. 이것은 "유형 주장"이 의도하지 않은 잘못된 이름이라고 생각하게 만듭니다. 즉, 모든 유형에 적용되지만 인터페이스 유형에만 적용되는 것은 아닙니다.

내 말은, 이 언어 디자인 결정 뒤에는 분명히 이유가 있을 것이고, 내 생각에는 golang이 작성되는 관용적 방식과 관련이 있을 수 있다고 생각합니다. 하지만 이 문제에 대한 수많은 리소스를 보았음에도 불구하고 그들은 결코 명시하지 않습니다. 왜.

제가 이해하는 이유는 go 프로그램이 일부 인터페이스(동작)를 나타내는 모든 변수로 작성되어 "더 나은(명시적 인터페이스 정의는 선택 사항이므로)" 작성하여 하나를 정의해야 한다는 것입니다. 명확성과 가독성을 위해 명시적 변수에 대한 인터페이스가 의미가 있습니다.

하지만 앞서 언급했듯이 "유형 어설션" 기능이 Go에서 구현되는 이유를 구체적으로 설명하는 리소스를 본 적이 없으며 이러한 혼란을 해결하는 데 도움을 주셨으면 합니다.

-- upd 1 - 내 질문을 명확히 하기 위해 몇 가지 콘텐츠를 추가했습니다.

내 생각에 내 핵심 질문은 유형 주장이 변수의 인터페이스가 명시적으로 구현될 때만 작동하고 인터페이스가 암시적으로 구현될 때는 작동하지 않는 이유(이해할 수 없음)에 관한 것입니다.

"whateverfunction"에서 알 수 있듯이 코드 는 "shape" 인터페이스를 구현하기 위해 "newdirect"를 고려하거나 ""shape" 인터페이스의 구현"을 고려합니다(그렇지 않으면 함수가 변수에 적용 가능하지 않지만, ) 그러나 유형 주장 ".(t)" 메소드 뒤에 있는 코드는 "newract"를 "shape" 인터페이스의 구현으로 취급하지 않습니다.

그래서 golang에서 인터페이스 구현에 대한 고려사항에 차이가 있다면 그러한 디자인 결정에는 반드시 이유(차별성)가 있을 것이라고 생각합니다.

그래서 제가 지금까지 생각할 수 있는 유일한 이유는 이것이 사람들이 어떤 방식으로든 Go 코드를 작성하도록 하는 방법인지 여부라고 언급한 이유입니다.


정답


Burak Serdar의 답변을 확인하세요. 더 간결하고 도움이 될 수도 있습니다. 그럼에도 불구하고 마침내 "클릭"하게 만든 전체 추론 체인을 게시하겠습니다.

|-> 수신할 것으로 예상되는 정확한 데이터 유형이 확실하지 않을 때 인터페이스가 사용됩니다. 예를 들어 프로그램 함수의 동일한 매개변수가 사용자 입력의 결과로 다른 유형의 데이터를 수신할 수 있기 때문입니다. ), 그러나 우리는 제공된 데이터가 가져야 하는 정확한 동작을 알고 있습니다.

^^ 따라서 인터페이스에 저장된 값의 실제 유형은 컴파일 타임에 알 수 없습니다. (그렇지 않으면 분명히 코드에 명시할 것입니다.)

| -> 따라서 우리는 프로그램이 실행 중에 제공할 것으로 기대하는 가능한 값의 관점에서 프로그램의 동작을 정의할 수 있는 유형 주장을 얻습니다.

|-> 따라서 유형 어설션은 인터페이스 유형으로 명시적으로 지정된 변수에만 적용되며 동일한 인터페이스를 구현할 수 있지만 인터페이스 유형으로 명시적으로 지정되지 않은 변수에는 적용되지 않습니다.

왜냐하면

인터페이스를 사용할 때 프로그램에 전송될 정확한 데이터 유형을 모르기 때문에 런타임에만 이 유형 어설션이 필요합니다. 이 유형 어설션은 인터페이스를 사용할 때만 필요하므로 유형 어설션은 다음과 같은 유형에만 적용됩니다. 다른 모든 경우에는 데이터 유형이 알려져 있기 때문에 인터페이스 유형으로 명시적으로 지정됩니다. (컴파일러는 변수가 인터페이스를 구현한다고 암시적으로 가정할 수 있습니다. 이미 관련 데이터의 모든 데이터 유형을 알고 있기 때문에) 유형 어설션은 간단하지 않습니다. 알려진 유형의 데이터에 필요합니다.

위 내용은 Go의 "유형 주장" 접근 방식 뒤에 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제