Golang 型アサーション: カスタム型の Valuer と Scanner の実装
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 と NULL を正常に実装できます。カスタム タイプのスキャナ インターフェイスにより、データベース ドライバーとのシームレスな対話が可能になります。
以上がGo でカスタム型の Valuer と Scanner を正しく実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。