Utilize o Watch-IP com Go
github.com/Digitload/watch-ip-sdk-go (v0.1.1) envolve GET /v1/geo com pedidos sensíveis a contexto (context-aware) e sem dependências fora da biblioteca padrão.
Instalação
Requer Go 1.21+. Este módulo é espelhado apenas para leitura a partir do repositório principal do Watch-IP para um repositório público, para que o go get o possa obter.
go get
go get github.com/Digitload/watch-ip-sdk-goInício rápido
GetGeo recebe um context.Context como primeiro argumento — o equivalente em Go ao AbortSignal do SDK de JS. Tal como com os outros SDKs do lado do servidor, defina WithOrigin para satisfazer a verificação de origens permitidas da chave ao chamar a partir de um servidor e não de um navegador. Cada campo de localização é um ponteiro, uma vez que os campos do Watch-IP são anuláveis de forma independente — verifique se é nil antes de o desreferenciar.
Go
client, err := watchip.New("wip_pub_xxxxxxxx", watchip.WithOrigin("https://example.com"))
if err != nil {
log.Fatal(err)
}
geo, err := client.GetGeo(context.Background())
if err != nil {
log.Fatal(err)
}
if geo.Country != nil && geo.City != nil {
fmt.Println(*geo.Country, *geo.City)
} else {
fmt.Println("localização indisponível para esta ligação")
}Tratamento de erros e tempos limite
Toda a falha devolve um *WatchIPError com os campos Status e Code. Limite o tempo do pedido com context.WithTimeout, em vez de uma opção de timeout ao nível do cliente.
Go
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
geo, err := client.GetGeo(ctx)
var wipErr *watchip.WatchIPError
if errors.As(err, &wipErr) {
fmt.Println(wipErr.Code, wipErr.Status, wipErr.Message)
}O que este SDK não cobre
Este módulo apenas chama GET /v1/geo. A pesquisa de IP, a validação de e-mail e as verificações de risco são endpoints servidor-a-servidor separados, ainda sem cliente Go — chame-os diretamente com net/http, autenticados da mesma forma descrita no guia de autenticação.