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 중국어 웹사이트의 기타 관련 기사를 참조하세요!