我正在使用第三方函数,其泛型类型为any
. 该函数返回一个传递给它的类型的对象,而我自己的代码则针对该返回的东西起作用。
我正在尝试编写自己的泛型函数,该函数接受 type 的泛型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://go.dev/play/p/oRvfFfHrOOL
但如果你将它定义为一个接口,你将可以访问它的方法:
https://go.dev/play/p/M1E7zTNlVxr
为了处理结构,您需要进行一些类型转换:
PS - 从 02/2022 开始有一个悬而未决的问题 - https://github.com/golang/go/issues/51259
PS - 哦,我刚刚发现... -如何使用泛型访问结构字段(类型 T 没有字段或方法)?