Go로 코드 마이그레이션을 진행하거나 json형태의 string을 한 칼럼에 넣었을 때 추후 go 에서 사용하게 될 경우가 있습니다. 이때 쿼리 결과값을 들고와 json 칼럼의 값들을 사용하기 위해 json.Unmarshal()을 사용할겁니다.
하지만 json칼럼 중 tier라는 키값에 저장된 값이 int, string 둘다 저장되어 있을경우가 있다면 go 는 주저없이 error를 뱉어버립니다.
이미 데이터는 저장되어있고 난감한 상황일 경우 interface type을 이용해 사용할 수 있는 방법을 보겠습니다.
extraData 칼럼의 JSON
{
{
id: 1,
userId: "123093",
name: "asdf"
tier: "2"
lastUpdateDate: "2023-01-02 09:00:00"
},
{
id: 31,
userId: 29392812,
name: "lisiekd"
tier: 4
lastUpdateDate: "2023-04-01 18:00:00"
}
}
json을 풀기 위한 struct
type extraData struct {
Id int `json:id`
UserId interface{} `json:userId`
Name string `json:name`
Tier interface{} `json:tier`
LastUpdateDate time.Time `json:lastUpdateDate`
}
userId, tier 형변환 사용
func (e extraData) GetUserId() string {
return e.UserId.(string)
}
func (e extraData) GetTier() int {
tier, _ := strconv.Atoi(e.Tier.(string))
return tier
}
위와같이 interface{}로 선언 후 사용할 타입에 맞춰 변환 후 함수로 내려주어 사용할 수 있습니다.
반응형
'Go' 카테고리의 다른 글
Go - ioutil 패키지 deprecated (0) | 2023.04.25 |
---|---|
rwMutex 사용 (0) | 2023.04.18 |
gorm 조건에 따른 Where() 사용하기 (0) | 2023.03.24 |
golang time.AddDate() (0) | 2023.03.21 |
env 환경변수 사용 (0) | 2023.03.09 |