Rumah > Soal Jawab > teks badan
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.
P粉0221405762024-03-26 10:40:36
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
to var 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):
rows, err := db.QueryContext(ctx, "CALL usp_GetParentResourceListByResourceTypeID(?)", resourceTypeId) if err != nil { log.Fatal(err) } defer rows.Close() var resourceList []Permission for rows.Next() { var resource Permission if err := rows.Scan(&resource.ID, &resource.Name); err != nil { // Check for a scan error. // Query rows will be closed with defer. log.Fatal(err) } resourceList = append(resourceList, resource ) } rerr := rows.Close() if rerr != nil { log.Fatal(rerr) } if err := rows.Err(); err != nil { log.Fatal(err) }
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).