Saya mendapat ralat berikut apabila saya cuba menghubungi err = row.Scan(&resourceList, resourceTypeId)
Ralat imbasan pada indeks lajur 0, nama 'ID': Imbasan tidak disokong, menyimpan pemacu. Nilai jenis int64 untuk menaip *[]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 kembali seperti berikut
ID Name 15 Applications 16 Subscriptions 17 Payments
Pertanyaan yang sama berfungsi dengan baik apabila saya mencuba SQL Server dalam query
中使用带有 EXEC
pernyataan.
Ada idea apa yang salah di sini? Terima kasih terlebih dahulu.
Beberapa soalan di sini. Pertama
QueryRowContext
Soalan anda menunjukkan bahawa pernyataan anda mengembalikan berbilang hasil, jadi ini bukan fungsi yang betul untuk digunakan (
QueryContext
lebih sesuai).Soalan kedua seperti yang dinyatakan dalam ralat:
Lajur pertama dalam set hasil ialah integer (dalam kes ini mungkin nilai
15
),并且您正尝试将其扫描到[]Permission
).var resourceList []Permission
tovar resourceList int
Pepijat akan diperbaiki (tetapi parameter kedua juga memerlukan kerja).Lihat contoh inidokumentasi. Mengambil kod itu dan menerapkannya pada situasi anda akan menghasilkan sesuatu seperti berikut (belum diuji; hanya untuk menunjukkan anda ke arah yang betul):
Nota: Struktur anda
Permission
mengandungi empat elemen, tetapi pertanyaan mengembalikan dua lajur, jadi saya tidak pasti bagaimana anda berhasrat untuk mengisi dua lajur yang lain (atau apakah pemetaan itu).