>  기사  >  백엔드 개발  >  Go - 메소드에 포인터 수신기가 있는 유형에 의해서만 인터페이스가 충족되도록 강제하시겠습니까?

Go - 메소드에 포인터 수신기가 있는 유형에 의해서만 인터페이스가 충족되도록 강제하시겠습니까?

PHPz
PHPz앞으로
2024-02-10 09:27:201192검색

Go - 强制接口仅由方法上带有指针接收器的类型满足?

php 편집기 Baicao는 Go 언어의 필수 인터페이스 규칙을 소개합니다. 즉, 메서드에 포인터 수신기가 있는 유형만 인터페이스 요구 사항을 충족할 수 있습니다. Go 언어는 인터페이스를 통해 다형성을 구현하는 정적인 유형의 프로그래밍 언어입니다. 인터페이스를 정의할 때 메소드의 수신자 유형(값 유형 또는 포인터 유형)을 지정할 수 있습니다. 그러나 필수 인터페이스 규칙을 사용하면 메서드에 포인터 수신기가 있는 유형만 인터페이스 요구 사항을 충족할 수 있습니다. 이는 포인터 유형이 값의 내용을 수정할 수 있지만 값 유형은 수정할 수 없기 때문입니다. 이 규칙은 값을 조작할 때 인터페이스 메서드가 예측할 수 없는 동작을 일으키지 않도록 보장합니다. 이 규칙을 이해함으로써 우리는 Go 언어의 인터페이스 사용과 디자인을 더 잘 이해할 수 있습니다.

질문 내용

저는 json http 요청에 대한 응답을 생성하기 위해 구조를 연결하는 일반적인 방법을 찾기 위해 유형 매개변수를 사용하여 몇 가지 실험을 하고 있습니다.

method 接口有一个 setparams 구조가 구현해야 하는 메서드입니다. 구현에서 포인터 수신기를 사용하는 한 이는 예상대로 작동합니다.

내 질문: setparams에 값 수신자가 있는 경우 이를 컴파일 타임 오류로 만들 수 있는 방법이 있나요?

다음 예에서는 값 수신자의 setparams 문제를 보여줍니다.

으아악

https://go.dev/play/p/eii8adkmdxe

해결 방법

이 작업은 수행할 수 없습니다.

코드에서 다음을 수행하는 경우:

으아악

심지어t的类型集仅包括*m作为类型项,*m的方法集也包括在m上声明的方法。编译器无法检查该方法如何出现在 *m 방법도 집중합니다.

badping 上声明方法 setparam에서 메서드가 수신기를 수정하려고 헛되이 시도하지 않도록 하는 것은 귀하의 책임입니다.

위 내용은 Go - 메소드에 포인터 수신기가 있는 유형에 의해서만 인터페이스가 충족되도록 강제하시겠습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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