Golang: '모든' 유형의 일반 필드에 액세스합니다.

WBOY
풀어 주다: 2024-02-10 10:39:07
앞으로
882명이 탐색했습니다.

Golang: 모든 유형의 일반 필드에 액세스합니다.

Golang은 제네릭을 구현하는 과정에서 항상 많은 관심을 받아온 정적인 유형의 프로그래밍 언어입니다. 최근 Golang 팀은 개발자가 "모든" 유형의 제네릭에 대한 필드에 액세스할 수 있도록 제네릭 설계에 획기적인 발전을 이루었습니다. 이 새로운 기능은 Golang에 더 큰 유연성과 확장성을 제공합니다. 다음으로, PHP 편집자 Xigua가 Golang의 "모든" 유형 제네릭의 필드에 액세스하는 방법과 애플리케이션 시나리오를 자세히 소개하겠습니다.

질문 내용

일반 유형이 any인 타사 함수를 사용하고 있습니다. 이 함수는 전달된 유형의 개체를 반환하고 내 코드는 해당 반환에 대해 작동합니다.

HasID 类型的泛型,然后将其传递给第三方函数。但是,当我尝试访问第三方函数返回值的 ID 필드를 허용하는 고유한 일반 함수를 작성하려고 하는데 오류가 발생합니다.

이 항목을 올바르게 입력하려면 어떻게 해야 하나요?

type HasID struct {
    ID string `json:"id"`
}

func ThirdPartyFunc[T any]() T {
  // do some stuff
  return someThing // of type T
}

func MyFunc[U HasID]() {
  thingWithID := ThirdPartyFunc[U]()
  fmt.Println(thingWithID.ID) // undefined (type U has no field or method ID)
}
로그인 후 복사

해결 방법

@mkopriva의 의견에 동의하지만 제약 조건에서 필드를 정의할 수 없어서 유형 매개변수의 해당 필드에 액세스할 수 없기 때문일 수 있다고 생각합니다.

(아마 Go 1.19에서는 변경되지 않았을 겁니다, 하하)

일을 단순하게 유지하려면 다음과 같이 하세요.

으아악

https://www.php.cn/link/bddcda5d65fcfdec9de3838794a77265

하지만 인터페이스로 정의하면 해당 메서드에 액세스할 수 있습니다.

으아악

https://www.php.cn/link/46dfb1fd21d4e16401260f54d2b6a88a

구조를 처리하려면 몇 가지 유형 변환을 수행해야 합니다.

으아악

P.S - 2022년 2월부터 공개 이슈가 있습니다 - https://github .com/golang/go/issues/51259

P.S - 아, 방금 알아냈어요... - 제네릭을 사용하여 구조체 필드(T 유형에는 필드나 메소드가 없음)에 액세스하는 방법은 무엇입니까?

위 내용은 Golang: '모든' 유형의 일반 필드에 액세스합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!