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

Patricia Arquette
Lepaskan: 2024-11-06 20:00:04
asal
363 orang telah melayarinya

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))
Salin selepas log masuk

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!