ホームページ >バックエンド開発 >Golang >Go でカスタム型の Valuer と Scanner を正しく実装するにはどうすればよいですか?

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

DDD
DDDオリジナル
2024-11-06 08:04:02651ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。