Ralat imbasan pada indeks lajur 0, nama 'ID': Imbasan tidak disokong, menyimpan pemacu. Nilai jenis int64 untuk menaip *authService.Permission"
P粉475126941
P粉475126941 2024-03-25 21:26:54
0
1
420

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粉475126941
P粉475126941

membalas semua(1)
P粉022140576

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).

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan