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中文網其他相關文章!