Go でカスタム型の Valuer と Scanner を正しく実装するにはどうすればよいですか?

DDD
リリース: 2024-11-06 08:04:02
オリジナル
556 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!