"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > `*t` 유형 변수를 go 제네릭에서 '스트링거'로 사용할 수없는 이유는 무엇입니까?

`*t` 유형 변수를 go 제네릭에서 '스트링거'로 사용할 수없는 이유는 무엇입니까?

2025-03-24에 게시되었습니다
검색:682

Why Can't I Use a `*T` Type Variable as a `Stringer` in Go Generics?

"&&]"go genics

    유형의 변수를 유형으로 사용할 수 없습니다. 대신
  • GO 컴파일러는
  • ID 유형 및 매개 변수 때문에 오류를 제기하고 있습니다. 따라서 *t는 *foobar 또는 *bar.

누락 된 메소드와 같지 않습니다. 스트링거 인터페이스에는 a ()라는 메소드가 필요합니다. 현재 FOO 및 BAR 유형은 포인터 수신기 에서이 방법을 구현하지만 *T는 본질적 으로이 방법을 소유하지 않습니다.

  • 1을 해결하기위한 두 가지 주요 접근법이 있습니다. Assserts Assertion (덜 최적)

는 *t가 기능 내에서 어떤 (t). (Stringer)를 사용하여 스트링거를 구현한다고 주장합니다.

  • 2. 제약 조건을 재정의하고 제네릭을 사용자 정의하고 (선호)

foobar 인터페이스의 제약 조건으로 스트링거를 추가하십시오. 인터페이스.

제한된 유형의 인스턴스를 blah에 대한 인수로 전달합니다. 바] 인터페이스 { *티 세로보 } func blah [t foo | 바, u foobar [t]] () { var t t do (u (& t)) } func main () { blah [foo] () }
type FooBar[T foo | bar] interface {
    *T
    stringer
}

func blah[T foo | bar, U FooBar[T]]() {
    var t T
    do(U(&t))
}

func main() {
    blah[foo]()
}
이 개정 된 코드에서 :

    foobar 인터페이스에는 스트링거가 제약으로 포함되어 있습니다.
  • foo 및 막대 유형은 () 방법에 대한 포인터 수신기를 가지고 있습니다. 제약 조건.
  • blah는 제한된 foobar 인터페이스의 인스턴스 인 유형 U의 인수를 취합니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3