Estou trabalhando com uma função de terceiros, com um genérico do tipo any
. Essa função retorna um objeto do tipo passado para ela, e meu próprio código funciona contra essa coisa retornada.
Estou tentando escrever minha própria função genérica, que recebe um tipo genérico HasID
e o passa para a função de terceiros. No entanto, quando tento acessar o ID
campo do valor de retorno da função de terceiros, recebo um erro.
O que eu preciso fazer para digitar isso corretamente?
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)
}
Concordo com o comentário de @mkopriva, mas acho que provavelmente é porque você "não pode" definir campos em Constraints, portanto não pode acessar esses campos em seu argumento de tipo.
(Bem, provavelmente não foi alterado no Go 1.19 lol)
Para simplificar, é como você vai fazer:
https://go.dev/play/p/oRvfFfHrOOL
Mas se você defini-lo como uma interface, terá acesso aos seus métodos:
https://go.dev/play/p/M1E7zTNlVxr
Para lidar com structs, você precisa fazer alguma conversão de tipo:
PS - há um problema em aberto a partir de 02/2022 - https://github.com/golang/go/issues/51259
PS - ah e também acabei de descobrir que... - Como posso acessar um campo struct com genéricos (o tipo T não tem campo nem método)?