Golang の型アサーション: データベースの型変換の処理
Go では、型アサーションを使用して、値をその値に基づいて別の型に変換できます。実際のタイプ。これは、動的タイプを操作する場合やカスタム インターフェイスを実装する場合に便利です。
文字列に基づいて、Role というカスタム タイプを作成し、それをデータベース ドライバーで使用するシナリオを考えてみましょう。これを行うには、Valuer インターフェイスと Scanner インターフェイスを実装する必要があります。
ただし、これらのインターフェイスの実装中に、次のエラーが発生する可能性があります。
cannot convert value.(string) (type string) to type *Role
スキャン関数の解決策:
スキャン機能は、データベースからデータを取得するときに使用します。この問題は、文字列型の値を *Role ポインターに直接変換しようとしているために発生します。代わりに、r ポインタを逆参照し、それに value の値を代入する必要があります。
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)) return nil }
Value 関数の解決策:
Value 関数は次のようになります。データベースにデータを挿入または更新するときに使用されます。間違った署名が以前に提供されました。正しい署名は次のとおりです:
func (r Role) Value() (driver.Value, error) { return string(r), nil }
この関数は NULL 値を処理したり生成したりしないことに注意してください。
これらの修正に従うことで、次の場合にカスタム ロール タイプの型変換を正常に実装できます。データベースドライバーを使用します。
以上がGo でデータベースを操作するときに型変換を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。