Usa Watch-IP con Go
github.com/Digitload/watch-ip-sdk-go (v0.1.1) incapsula GET /v1/geo con richieste che tengono conto del context, senza dipendenze al di fuori della libreria standard.
Installazione
Richiede Go 1.21+. Questo modulo è replicato in sola lettura dal repository principale di Watch-IP verso un repository pubblico, così go get può scaricarlo.
go get
go get github.com/Digitload/watch-ip-sdk-goAvvio rapido
GetGeo prende un context.Context come primo argomento — l'equivalente in Go dell'AbortSignal dell'SDK JS. Come per gli altri SDK lato server, imposta WithOrigin per soddisfare il controllo delle origini consentite della chiave quando chiami da un server anziché da un browser. Ogni campo di posizione è un puntatore, poiché i campi di Watch-IP sono nullable in modo indipendente — controlla se è nil prima di dereferenziarlo.
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("posizione non disponibile per questa connessione")
}Gestione degli errori e timeout
Ogni fallimento restituisce un *WatchIPError con i campi Status e Code. Limita il tempo della richiesta con context.WithTimeout invece di un'opzione di timeout a livello di client.
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)
}Cosa non copre questo SDK
Questo modulo chiama solo GET /v1/geo. La ricerca IP, la validazione email e i controlli di rischio sono endpoint separati da server a server, per cui non esiste ancora un client Go — chiamali direttamente con net/http, autenticandoti nello stesso modo descritto nella guida all'autenticazione.