Golang の型アサーション: 値とスキャナーの実装のトラブルシューティング
Golang でカスタム型を作成する場合、この場合のロール型のように、データベース ドライバーの互換性のために、Valuer インターフェイスと Scanner インターフェイスを実装するのに共通です。ただし、これらのメソッド内で型アサーションの処理を誤ると、ユーザーがエラーに遭遇する可能性があります。
コードの抜粋に示すように、そのようなエラーの 1 つは、Scan メソッドの実装時の型変換の問題です。
func (r *Role) Scan(value interface{}) error { r = (*Role)(value.(string)) return nil }
このエラーは、変換された文字列値を逆参照されたロール ポインター (*Role) に不適切に割り当てることが原因で発生します。これを解決するには、正しい構文は次のとおりです:
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)) return nil }
さらに、パニックを避けるために s, ok := value.(string) を使用して変換の成功をチェックすることをお勧めします。
For Value メソッドの署名は、提供されたコードと異なります:
func (r Role) Value() (driver.Value, error) { return string(r), nil }
この Value 実装は、NULL 値を処理または生成しません。
これらの型アサーションの問題に対処し、インターフェイスを実装することにより、正しくは、Role などのカスタム タイプを Golang アプリケーションのデータベース操作とシームレスに統合できます。
以上がGolang の Valuer インターフェイスと Scanner インターフェイスで型アサーションを正しく実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。