Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Melaksanakan Penegasan Jenis dengan Betul dalam Antara Muka Penilai dan Pengimbas Golang?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-06 16:46:02484semak imbas

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
}

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
}

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
}

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!

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