Usa Watch-IP con Go
github.com/Digitload/watch-ip-sdk-go (v0.1.1) envuelve GET /v1/geo con solicitudes conscientes de contexto y sin dependencias fuera de la biblioteca estándar.
Instalación
Requiere Go 1.21 o superior. Este módulo se refleja en modo de solo lectura desde el repositorio principal de Watch-IP hacia un repositorio público para que go get pueda obtenerlo.
go get
go get github.com/Digitload/watch-ip-sdk-goInicio rápido
GetGeo toma un context.Context como primer argumento: el equivalente en Go del AbortSignal del SDK de JS. Como con los demás SDK del lado del servidor, configura WithOrigin para satisfacer la verificación de orígenes permitidos de la clave al llamar desde un servidor en lugar de un navegador. Cada campo de ubicación es un puntero, ya que los campos de Watch-IP son anulables de forma independiente: comprueba si es nil antes de desreferenciarlo.
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("ubicación no disponible para esta conexión")
}Manejo de errores y tiempos de espera
Cada falla devuelve un *WatchIPError con los campos Status y Code. Limita el tiempo de la solicitud con context.WithTimeout en lugar de una opción de tiempo de espera a nivel de 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)
}Lo que este SDK no cubre
Este módulo solo llama a GET /v1/geo. IP lookup, validación de correo y comprobaciones de riesgo son endpoints de servidor a servidor independientes que todavía no tienen cliente en Go: llámalos directamente con net/http, autenticados de la misma forma que describe la guía de autenticación.