Ich erhalte die folgende Fehlermeldung, wenn ich versuche anzurufen err = row.Scan(&resourceList, resourceTypeId)
Scanfehler bei Spaltenindex 0, Name „ID“: Scan wird nicht unterstützt, Driver.Value vom Typ int64 wird gespeichert, um *[]authService.Permission“ einzugeben
type Permission struct { ID int `json:"id"` Name string `json:"name"` Description string `json:"description"` ParentResourceID int `json:"parentResourceId"` } func GetResourcesByResourceTypeId(resourceTypeId string) ([]Permission, string, error) { db, ctx := db.GetDB() query := "CALL usp_GetParentResourceListByResourceTypeID(?)" var resourceList []Permission stmt, err := db.Prepare(query) defer stmt.Close() if err != nil { log.Errorln("Error in preparing statement. " + err.Error()) return nil, "Error in preparing statement.", err } row := stmt.QueryRowContext(ctx, resourceTypeId) err = row.Scan(&resourceList, resourceTypeId) if err == nil { return resourceList, "Resource retrieval.", nil } log.Warningln("Resource retrieval failed, ResourceTypeID: " + resourceTypeId + ".") return resourceList, "Resource retrieval failed.", nil }
SQL gibt Folgendes zurück
ID Name 15 Applications 16 Subscriptions 17 Payments
Die gleiche Abfrage funktioniert einwandfrei, wenn ich SQL Server in der query
中使用带有 EXEC
-Anweisung versuche.
Irgendeine Idee, was hier falsch ist? Dank im Voraus.
这里有一些问题。首先
QueryRowContext
您的问题表明您的语句返回多个结果,因此这不是正确使用的函数(
QueryContext
会更合适)。第二个问题如错误中所述:
结果集中的第一列是一个整数(在本例中可能是值
15
),并且您正尝试将其扫描到[]Permission
中。如果你改变了var resourceList []Permission
tovar resourceList int
该错误将被修复(但第二个参数也需要工作)。查看此示例文档。获取该代码并将其应用到您的情况将导致类似以下内容(未经测试;只是为了给您指出正确的方向):
注意:您的结构
Permission
包含四个元素,但查询返回两列,因此我不太确定您打算如何填充其他两列(或映射是什么)。