Rumah > Artikel > pembangunan bahagian belakang > Mengapa Penegasan Jenis Gagal Apabila Melaksanakan Antara Muka `Valuer` dan `Pengimbas` dalam 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!