>  기사  >  백엔드 개발  >  Go에서 Generics를 사용할 때 "type *T는 유형 매개변수가 아닌 유형 매개변수에 대한 포인터입니다" 오류가 발생하는 이유는 무엇입니까?

Go에서 Generics를 사용할 때 "type *T는 유형 매개변수가 아닌 유형 매개변수에 대한 포인터입니다" 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-04 16:46:02167검색

Why Does Go Throw the Error

제네릭을 활용하세요: 유형 매개변수 및 제약 조건 이해

이 기사에서는 컴파일러 오류 "type *T는 유형이 아니라 유형 매개변수에 대한 포인터입니다"라는 오류가 발생하는 이유에 대해 자세히 설명합니다. 매개변수"는 Go에서 제네릭과 관련된 코드를 컴파일하려고 할 때 발생합니다.

유형 매개변수 및 제약 조건 정보

Go 제네릭에서 유형 매개변수는 지정된 제약 조건을 충족하는 모든 유형에 대한 자리 표시자를 나타냅니다. 특히 제약 조건은 유형 매개변수에서 사용할 수 있는 작업 집합을 정의하지만 해당 유형 매개변수에서 파생된 포인터 유형의 속성을 직접 정의하지는 않습니다. 이것이 발생한 오류 메시지의 핵심입니다.

설명된 오류 메시지

오류 메시지는 *T의 메소드 세트가 현재 실행되고 있는 구체적인 유형에 선언된 포인터 수신자 메소드를 자동으로 포함하지 않음을 나타냅니다. 제약됨. 즉, 제약 조건 인터페이스에 포인터 수신기 메서드가 필요한 경우 구체적인 유형은 포인터 수신기를 사용하여 이를 구현해야 합니다.

문제 해결

제공된 코드 조각에서:

  1. 제약: "SetId 메서드에 포인터 수신기가 있음" 오류를 해결하려면 인터페이스 GS를 포인터 수신기로 정의해야 합니다.
<code class="go">type GS interface {
    Id() string
    (*GS) SetId(string)
}</code>
  1. 인스턴스화: MyStore 인스턴스화는 A 대신 *A를 사용해야 합니다:
<code class="go">var storeA = &MyStore[*A]{}</code>
  1. 메서드 수정: MyStore의 메서드 정의를 다음으로 변경합니다. *T 대신 T를 사용하세요.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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