「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go でカスタム型の Valuer と Scanner を正しく実装するにはどうすればよいですか?

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

2024 年 11 月 18 日に公開
ブラウズ:231

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 インターフェイスと Scanner インターフェイスを正常に実装し、データベース ドライバーとのシームレスな対話を可能にすることができます。 .

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3