Go에서 Watch-IP 사용하기
github.com/Digitload/watch-ip-sdk-go(v0.1.1)는 context를 인식하는 요청으로 GET /v1/geo를 감싸며, 표준 라이브러리 외의 의존성이 없습니다.
설치
Go 1.21 이상이 필요합니다. 이 모듈은 go get이 가져올 수 있도록 메인 Watch-IP 저장소에서 공개 저장소로 읽기 전용으로 미러링됩니다.
go get
go get github.com/Digitload/watch-ip-sdk-go빠른 시작
GetGeo는 첫 번째 인자로 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로 직접 호출하세요.