Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Penegasan Jenis Gagal Apabila Melaksanakan Antara Muka `Valuer` dan `Pengimbas` dalam Go?

Mengapa Penegasan Jenis Gagal Apabila Melaksanakan Antara Muka `Valuer` dan `Pengimbas` dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-06 20:00:04345semak imbas

Why Does Type Assertion Fail When Implementing `Valuer` and `Scanner` Interfaces in Go?

Memahami Penegasan Jenis Golang

Dalam Go, seseorang boleh mentakrifkan jenis tersuai berdasarkan jenis sedia ada menggunakan alias jenis. Dalam senario yang diberikan, jenis Peranan ialah alias untuk jenis rentetan terbina dalam. Walau bagaimanapun, apabila melaksanakan antara muka Penilai dan Pengimbas untuk jenis tersuai ini, ralat berlaku.

Mengatasi Ralat

Mesej ralat menunjukkan bahawa terdapat masalah dengan penukaran jenis dalam kaedah Imbasan. Secara khusus, ia mengadu tentang percubaan untuk menetapkan nilai yang ditukar kepada penuding kepada Peranan.

Fungsi pertama, Scan, bertanggungjawab untuk mengekstrak nilai daripada pangkalan data dan menukarnya kepada jenis yang sesuai. Isunya terletak pada baris tugasan:

r = (*Role)(value.(string))

Nilai ungkapan.(rentetan) cuba menukar parameter nilai kepada rentetan. Walau bagaimanapun, tugasan itu cuba memberikan nilai ditukar ini kepada penuding kepada Peranan. Ini tidak betul, kerana destinasi mestilah jenis *Peranan, bukan Peranan. Kod yang diperbetulkan ialah:

func (r *Role) Scan(value interface{}) error {
    *r = Role(value.(string))
    return nil
}

Fungsi kedua, Value, bertanggungjawab untuk menukar nilai kepada format yang serasi dengan pangkalan data. Kod yang diberikan adalah tidak betul kerana ia tidak mengikut tandatangan fungsi yang diharapkan untuk pemandu.Valuer. Kod yang diperbetulkan ialah:

func (r Role) Value() (driver.Value, error) {
    return string(r), nil
}

Kesimpulan

Dengan membetulkan penukaran jenis dalam kaedah Imbasan dan melaraskan tandatangan fungsi dalam kaedah Nilai, kod harus berfungsi seperti yang dimaksudkan, membenarkan jenis Peranan tersuai untuk berinteraksi dengan pemacu pangkalan data.

Atas ialah kandungan terperinci Mengapa Penegasan Jenis Gagal Apabila Melaksanakan Antara Muka `Valuer` dan `Pengimbas` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn