Watch-IP

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로 직접 호출하세요.

관련 페이지