menu
Is this helpful?

# Golang

::: 팁

구현하기 전에 데이터 액세스 준비를 확인하십시오.

:::

최신 버전: v2.0.0

업데이트 시간:2023-10-07

소스 코드:source code (opens new window)

# 1. SDK 구현

  1. 두 가지 SDK 구현 방법을 지원합니다

방법 1: 아래 코드로 최신 버전의 Golang SDK를 가져오기

# install SDK
go get github.com/ThinkingDataAnalytics/go-sdk/thinkingdata

# update SDK
go get -u github.com/ThinkingDataAnalytics/go-sdk/thinkingdata

방법 2: 모듈 모드

//Introduce thinkingdata at the beginning of the code file
import "github.com/ThinkingDataAnalytics/go-sdk/v2/src/thinkingdata"

# Pull out the latest SDK module
go mod tidy
  1. Logbus 설치

TE 시스템을 통해 빠르고 정확한 데이터 전송을 위해, SDK와 LogBus를 함께 사용하여 서버 데이터의 데이터 리포트를 권장합니다.

# 2. 초기 설정

다음은 SDK의 초기 설정 포맷 코드입니다:

config := thinkingdata.LogConfig{
   Directory: LOG_DIRECTORY
}
// create logConsumer
consumer, _ := thinkingdata.NewLogConsumerWithConfig(config)
// init TE instance
te := thinkingdata.New(consumer)

LOG_DIRECTORY는 로컬 액세스 파일의 주소가 됩니다. LogBus의 모니터 주소를 이 주소로 설정하면 자동으로 업로드됩니다.

# 3. 주요 기능

게스트 ID와 계정 ID를 정확하게 연동하기 위해, 게임 내에서 게스트 ID와 계정 ID를 모두 사용하는 경우, 이들 ID를 동시에 업로드하는 것을 권장합니다. 동시에 업로드하지 않을 경우, 유저가 중복으로 계산될 수 있습니다.

# 3.1 이벤트 전송

track을 사용하여 이벤트 전송을 합니다. 사전에 데이터 트래킹 정책을 준비한 후, 전송해 주세요. 다음은 모델 코드입니다.

accountId := "te_account_id"
distinctId := "te_distinct_id"
properties := map[string]interface{}{
   // 유저의 IP 주소를 설정하면 TE는 IP 주소에 따라 유저의 지리적 위치 정보를 분석합니다
   "#ip":       "123.123.123.123",
   "channel":   "te",       // string
   "age":       1,          // number
   "is_success": true,      // bool
   "birthday":  time.Now(), // time
   // object
   "object": map[string]interface{}{
      "key": "value",
   }, 
   // array object
   "objectArr": []interface{}{
      map[string]interface{}{
         "key": "value",
      },
   },
   "arr":     []string{"value"}, // array
}

err := te.Track(accountId, distinctId, "payment", properties)
  • 이벤트 이름은 string 타입으로, 영문자와 숫자, "_"를 포함하며 최대 50자입니다.
  • Key는 해당 속성의 이름으로 string 타입이며, 영문자와 숫자, "_"를 포함하여 최대 50자입니다. TE 시스템은 일괄적으로 소문자로 통일됩니다.
  • Value는 해당 속성의 값으로, String, Number, Bloon, Time, object, array, list object를 지원합니다.

유저 속성은 이벤트 속성과 일치해야 합니다.

# 3.2 유저 속성 설정

일반적인 유저 속성에 대해서는 userSet을 사용하여 설정할 수 있으며, UserSet은 기존의 값을 덮어씁니다. 원래 해당 속성에 값이 없는 경우, 속성이 새로 생성됩니다. 다음은 코드 예시입니다.

//유저 이름은 TA입니다
err := te.UserSet("accountId", "distinctId", map[string]interface{}{
   "user_name": "TA",
})
//유저 이름은 TE입니다
err = te.UserSet("accountId", "distinctId", map[string]interface{}{
   "user_name": "TE",
})

# 4. 코드 예시 (Example Code)

아래의 코드 예시에 모든 작업이 포함되어 있으며, 아래 순서대로 사용하는 것을 권장합니다:

// LOG_DIRECTORY는 로컬 폴더 주소입니다.
config := thinkingdata.LogConfig{
   Directory: LOG_DIRECTORY,
}
// 컨슈머 초기화
consumer, _ := thinkingdata.NewLogConsumerWithConfig(config)

te := thinkingdata.New(consumer)

accountId := "te_account_id"
distinctId := "te_distinct_id"
properties := map[string]interface{}{
   // 유저의 IP 주소를 설정하고, TE는 IP 주소에 따라 유저의 지리적 위치 정보를 분석합니다.
   "#ip":       "123.123.123.123",
   "channel":   "te",       // string
   "age":       1,          // number
   "isSuccess": true,       // bool
   "birthday":  time.Now(), // time
   // object
   "object": map[string]interface{}{
      "key": "value",
   }, 
   // array object
   "objectArr": []interface{}{
      map[string]interface{}{
         "key": "value",
      },
   },
   "arr":     []string{"value"}, // array
}
err := te.Track(accountId, distinctId, "payment", properties)

// 유저 속성 설정
err := te.UserSet("accountId", "distinctId", map[string]interface{}{
   "user_name": "TE",
})

// flush API 호출 시 데이터가 즉시 파일에 기록됩니다.
// 프로덕션 환경에서는 flush 호출이 빈번하여 발생할 수 있는 IO 또는 네트워크 오버헤드에 주의하세요.
te.Flush()