首頁 > 後端開發 > Golang > 如何在Go中正確實作自訂類型的Valuer和Scanner?

如何在Go中正確實作自訂類型的Valuer和Scanner?

DDD
發布: 2024-11-06 08:04:02
原創
649 人瀏覽過

How to Correctly Implement Valuer and Scanner for Custom Types in Go?

Golang 類型斷言:為自訂類型實作賦值器和掃描器

在Go 中使用自訂類型(例如基於字串的類型)時,可能需要實作Valuer 和Scanner 介面來與資料庫驅動程式互動。這可以將自訂類型與資料庫值進行序列化和反序列化。

在提供的程式碼中,嘗試實作 Role 型別及其關聯的 Valuer 和 Scanner 方法。但是,遇到了錯誤:

cannot convert value.(string) (type string) to type *Role
登入後複製

要修正此錯誤,可以如下修改Scan 方法:

func (r *Role) Scan(value interface{}) error {
    *r = Role(value.(string))
    return nil
}
登入後複製

此修改可確保從資料庫擷取到的值正確分配給角色指針。此外,Value 方法應具有以下簽章:

func (r Role) Value() (driver.Value, error) {
    return string(r), nil
}
登入後複製

請注意,此實作不會處理或產生 NULL 值。

遵循這些建議,您可以成功實現 Valuer 和適用於您的自訂類型的掃描器接口,並支援與資料庫驅動程式的無縫互動。

以上是如何在Go中正確實作自訂類型的Valuer和Scanner?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板