GoでWatch-IPを使う
github.com/Digitload/watch-ip-sdk-go(v0.1.1)は、コンテキスト対応のリクエストでGET /v1/geoをラップし、標準ライブラリ以外への依存関係はありません。
インストール
Go 1.21以降が必要です。このモジュールは、go getで取得できるようにメインのWatch-IPリポジトリから読み取り専用でパブリックリポジトリにミラーされています。
go get
go get github.com/Digitload/watch-ip-sdk-goクイックスタート
GetGeoは第1引数としてcontext.Contextを受け取ります—JS SDKのAbortSignalに相当するGoの仕組みです。他のサーバーサイドSDKと同様、ブラウザではなくサーバーから呼び出す場合はWithOriginを設定し、キーの許可オリジンチェックを満たしてください。Watch-IPの各フィールドは個別にnullになりうるため、位置情報の各フィールドはポインタです—参照を外す前にnilかどうか確認してください。
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("この接続では位置情報を利用できません")
}エラー処理とタイムアウト
すべての失敗は、StatusフィールドとCodeフィールドを持つ*WatchIPErrorを返します。クライアントレベルのタイムアウトオプションではなく、context.WithTimeoutでリクエスト時間を制限してください。
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)
}このSDKがカバーしていないもの
このモジュールが呼び出すのはGET /v1/geoのみです。IPルックアップ、メール検証、リスクチェックは別個のサーバー間エンドポイントで、まだGoクライアントはありません—認証ガイドで説明されているのと同じ方法で認証しながら、net/httpで直接呼び出してください。