2 回答

TA貢獻1789條經(jīng)驗 獲得超8個贊
1.
正如您從文檔中看到的Scanner
,要滿足該接口,需要該方法
Scan(src?interface{})?error
但你的*Coordinates
類型實現(xiàn)了不同的方法
Scan(value?[]interface{})?error
類型interface{}
和[]interface{}
是兩個截然不同的東西。
2.
Scanner 接口必須在要作為參數(shù)傳遞給 的字段類型上實現(xiàn)rows.Scan
。也就是說,您已經(jīng)Scan
在 上實現(xiàn)了您的方法*Coordinates
,但 Location 字段的類型是[]Coordinates
。
同樣,類型*Coordinates
和類型[]Coordinates
是兩個非常不同的東西。
因此,解決方案是在正確的類型上正確實現(xiàn)接口。
請注意,由于 Go 不允許向未命名類型添加方法,并且[]Coordinates
?是未命名類型,因此您需要聲明一個新類型,然后使用它來代替[]Coordinates
.
type CoordinatesSlice []Coordinates
func (s *CoordinatesSlice) Scan(src interface{}) error {
? ? switch v := src.(type) {
? ? case []byte:
? ? ? ? return json.Unmarshal(v, s)
? ? case string:
? ? ? ? return json.Unmarshal([]byte(v), s)
? ? }
? ? return errors.New("type assertion failed")
}
// ...
type Business struct {
? ? // ...
? ? Location CoordinatesSlice `json:"location,omitempty"`
? ? // ...
}
筆記
如果業(yè)務位置始終只有一對坐標作為 jsonb 對象存儲到數(shù)據(jù)庫中,并將類型Location
從更改CoordinatesSlice
為Coordinates
,相應地將Scanner
實現(xiàn)從移動*CoordinatesSlice
到*Coordinates
。

TA貢獻1804條經(jīng)驗 獲得超7個贊
我知道這個解決方案確實沒有優(yōu)化,但這是唯一有效的方法。
基本上我必須獲取 json,然后對 Location 屬性進行解組。
var location string = ""
if err := json.Unmarshal([]byte(location), &business.Location); err != nil { panic(err) }
- 2 回答
- 0 關注
- 154 瀏覽
添加回答
舉報