Bagaimanakah Saya Melaksanakan Penegasan Jenis dengan Betul dalam Antara Muka Penilai dan Pengimbas Golang?

Mary-Kate Olsen
Lepaskan: 2024-11-06 16:46:02
asal
485 orang telah melayarinya

How Do I Correctly Implement Type Assertions in Golang's Valuer and Scanner Interfaces?

Jenis Penegasan dalam Golang: Nilai Penyelesaian Masalah dan Pelaksanaan Pengimbas

Apabila membuat jenis tersuai di Golang, seperti jenis Peranan dalam kes ini, ia adalah biasa untuk melaksanakan antara muka Penilai dan Pengimbas untuk keserasian pemacu pangkalan data. Walau bagaimanapun, pengguna boleh menghadapi ralat apabila salah mengendalikan penegasan jenis dalam kaedah ini.

Satu ralat tersebut ialah isu penukaran jenis semasa melaksanakan kaedah Imbasan, seperti yang dilihat dalam petikan kod:

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

Ralat berpunca daripada memberikan nilai rentetan yang ditukar secara tidak wajar kepada penunjuk Peranan yang dinyahrujuk (*Peranan). Untuk menyelesaikan masalah ini, sintaks yang betul hendaklah:

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

Selain itu, disyorkan untuk menyemak kejayaan penukaran menggunakan nilai s, ok :=.(rentetan) untuk mengelakkan panik.

Untuk kaedah Nilai, tandatangan adalah berbeza daripada kod yang disediakan:

func (r Role) Value() (driver.Value, error) {
    return string(r), nil
}
Salin selepas log masuk

Pelaksanaan Nilai ini tidak mengendalikan atau menghasilkan nilai NULL.

Dengan menangani isu penegasan jenis ini dan melaksanakan antara muka dengan betul, anda boleh menyepadukan jenis tersuai dengan lancar seperti Peranan dengan operasi pangkalan data dalam aplikasi Golang.

Atas ialah kandungan terperinci Bagaimanakah Saya Melaksanakan Penegasan Jenis dengan Betul dalam Antara Muka Penilai dan Pengimbas Golang?. 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