Watch-IP

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-go

Iní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.

Páginas relacionadas