Menggunakan Watch-IP dengan Go
github.com/Digitload/watch-ip-sdk-go (v0.1.1) membungkus GET /v1/geo dengan request yang sadar context dan tanpa dependensi di luar standard library.
Instalasi
Membutuhkan Go 1.21+. Modul ini di-mirror secara read-only dari repositori utama Watch-IP ke repositori publik agar bisa diambil dengan go get.
go get
go get github.com/Digitload/watch-ip-sdk-goMulai cepat
GetGeo menerima context.Context sebagai argumen pertamanya — padanan Go untuk AbortSignal milik JS SDK. Seperti SDK sisi server lainnya, set WithOrigin untuk memenuhi pemeriksaan allowed-origins key tersebut saat memanggil dari server, bukan browser. Setiap field lokasi adalah pointer, karena setiap field Watch-IP bersifat nullable secara independen — periksa nil sebelum melakukan dereference.
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("lokasi tidak tersedia untuk koneksi ini")
}Penanganan error dan timeout
Setiap kegagalan mengembalikan *WatchIPError dengan field Status dan Code. Batasi waktu request dengan context.WithTimeout, bukan opsi timeout tingkat klien.
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)
}Yang tidak dicakup SDK ini
Modul ini hanya memanggil GET /v1/geo. Pencarian IP, validasi email, dan pemeriksaan risiko adalah endpoint server-ke-server terpisah yang belum punya klien Go — panggil langsung dengan net/http, diautentikasi dengan cara yang sama seperti yang dijelaskan panduan autentikasi.