當我嘗試呼叫 err = row.Scan(&resourceList, resourceTypeId)
時收到以下錯誤
列索引 0 上的掃描錯誤,名稱「ID」:不支援掃描,將 driver.Value 類型 int64 儲存到類型 *[]authService.Permission」
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 傳回如下
ID Name 15 Applications 16 Subscriptions 17 Payments
當我嘗試在 query
中使用帶有 EXEC
語句的 SQL Server 時,相同的查詢工作正常。
知道這裡出了什麼問題嗎?提前致謝。
這裡有一些問題。首先
#QueryRowContext
您的問題表示您的語句會傳回多個結果,因此這不是正確使用的函數(
QueryContext
會更合適)。第二個問題如錯誤所述:
結果集中的第一列是一個整數(在本例中可能是值
15
),而您正嘗試將其掃描到[]Permission
中。如果你改變了var resourceList []Permission
tovar resourceList int
該錯誤將會被修正(但第二個參數也需要運作)。查看此範例文件。獲取該程式碼並將其應用到您的情況將導致類似以下內容(未經測試;只是為了給您指出正確的方向):
注意:您的結構
Permission
包含四個元素,但查詢返回兩列,因此我不太確定您打算如何填充其他兩列(或映射是什麼) 。