Executando verificação de segurança...
1

Usando Generics para obter um ponteiro para qualquer tipo em Go

Em Go, usamos ponteiros para definir que um valor pode ser opcional.

Frequentemente, usamos o operador & para fornecer o valor do ponteiro para um método, com isso, possamos fazer algo assim:

método(&api.Resposta{})

O problema é que nem todo tipo pode usar o operador &, por exemplo, não podemos fazer isso com uma string:

ptr := &"foo"
// compilation error:
// não pode receber o address de "foo" (untyped string constant)

Hum, interessante! Fale mais.

Como podemos contornar isso? Uma opção é usar uma variável intermediária:

s := "foo"
ptr := &s

Mas dependendo de quantos parâmetros precisam ser convertidos em ponteiros, isso pode ser um pouco estranho.

Alternativamente, com o suporte do Go 1.18 para generics, podemos criar um método auxiliar como o abaixo, que nos dá a capacidade de fazer isso com qualquer tipo:

func PtrTo[T any](v T) *T {
  return &v
}

func main() {
	fmt.Println("foo")
	fmt.Println(PtrTo("foo"))
}

Créditos

Carregando publicação patrocinada...