需求
- 爲了方便elasticsearch查詢,須要將源數據的類型由string轉成int
背景
- 源數據爲json格式,須要變動類型的字段名爲 sequence。
解決方案一
type media struct{
Sequence int `json:"sequence,string"`
}
- 解析json時會自動將string類型的源數據轉成int,不須要再使用strconv包轉,很是方便。可是這樣解析會有一個弊端。一般會使用 struct 來表示json數據,直接將json數據解析到對應的結構體就行。因此,若是需求僅僅是拉取源數據,存到本地。這個方案是OK的。可是一旦用這個結構體解析本地的數據時,這個字段由於與本地數據庫的類型不符,沒法拿到sequence字段對應的內容。若是沒有別的方案,就只能定義兩個結構體,A和B,之間只有一個字段不一樣。沒有充分地複用代碼!確定不能這麼幹。所幸,還有解決方案2!
解決方案二
type media struct{
Sequence interface{} `json:"sequence"`
}
- 把類型改爲interface{} !完美解決源數據類型與目標數據類型不同的問題!用strconv包轉化成int,存儲!
sequence,_:= strconv.Atoi(media.Sequence.(string))
media.Sequence=sequence