Rumah  >  Soal Jawab  >  teks badan

Ralat imbasan pada indeks lajur 0, nama 'ID': Imbasan tidak disokong, menyimpan pemacu. Nilai jenis int64 untuk menaip *authService.Permission"

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粉475126941P粉475126941207 hari yang lalu351

membalas semua(1)saya akan balas

  • P粉022140576

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

    balas
    0
  • Batalbalas