이 기사에서는 컴파일러 오류 "type *T는 유형이 아니라 유형 매개변수에 대한 포인터입니다"라는 오류가 발생하는 이유에 대해 자세히 설명합니다. 매개변수"는 Go에서 제네릭과 관련된 코드를 컴파일하려고 할 때 발생합니다.
Go 제네릭에서 유형 매개변수는 지정된 제약 조건을 충족하는 모든 유형에 대한 자리 표시자를 나타냅니다. 특히 제약 조건은 유형 매개변수에서 사용할 수 있는 작업 집합을 정의하지만 해당 유형 매개변수에서 파생된 포인터 유형의 속성을 직접 정의하지는 않습니다. 이것이 발생한 오류 메시지의 핵심입니다.
오류 메시지는 *T의 메소드 세트가 현재 실행되고 있는 구체적인 유형에 선언된 포인터 수신자 메소드를 자동으로 포함하지 않음을 나타냅니다. 제약됨. 즉, 제약 조건 인터페이스에 포인터 수신기 메서드가 필요한 경우 구체적인 유형은 포인터 수신기를 사용하여 이를 구현해야 합니다.
제공된 코드 조각에서:
<code class="go">type GS interface { Id() string (*GS) SetId(string) }</code>
<code class="go">var storeA = &MyStore[*A]{}</code>
<code class="go">type MyStore[T GS] struct { values map[string]T } func (s *MyStore[T]) add(item T) {...}</code>
이러한 조정을 통해 코드는 구문상, 의미상으로 정확해집니다.
위 내용은 Go에서 Generics를 사용할 때 'type *T는 유형 매개변수가 아닌 유형 매개변수에 대한 포인터입니다' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!