我使用本地sql庫和jmoiron/sqlx從postgres數據庫填充結構列表。我現在有用於不同類型的獨立的功能,例如:製作底層類型的接口{}參數的副本
func selectAccounts(ext sqlx.Ext, query string, args []interface{}) ([]Account, error) {
var accts []Account
rows, err := ext.Queryx(query, args...)
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
var a Account
if err = rows.StructScan(&a); err != nil {
return nil, err
}
accts = append(accts, a)
}
err = rows.Err()
return accts, err
}
...但我必須建立一個接受接口{},並返回一個[]接口{}的通用功能的一個要求。我發現替換上述行var a Account
的過程很困難,因爲它需要複製傳入的接口{}類型,同時複製其基礎類型。我是否應該向自己反映,我需要使用反思,還是有另一種方式去做這件事?
您需要反射才能實現通用功能。 – jeevatkm
爲什麼要接受'interface {}'類型,然後返回'[] interface {}'?不要在函數中創建'[] Account',只需創建一個'[] interface {}','append'並返回它。 –