ホームページ >バックエンド開発 >Golang >Gorm はカスタム文字列タイプでスキャナ エラーを返します

Gorm はカスタム文字列タイプでスキャナ エラーを返します

王林
王林転載
2024-02-11 18:21:211155ブラウズ

Gorm 在自定义字符串类型上返回扫描仪错误

php エディターのバナナの紹介: Gorm では、カスタム文字列タイプに対してスキャン操作を実行しようとすると、エラーが発生する可能性があります。この問題により、スキャナが文字列を正しく解析できなくなり、プログラム エラーが発生する可能性があります。これは、Gorm はデフォルトで `Scan` メソッドを使用して文字列型フィールドをスキャンしますが、カスタム文字列型の場合、`Scan` メソッドが正しく処理できない可能性があるためです。この問題の解決策は、「Value」メソッドを使用して文字列を手動で解析し、プログラムが正しく実行されることを確認することです。こうすることで、Gorm を使用するときにスキャナー エラーの問題が発生するのを回避できます。

質問内容

次のエンティティを書きました:

リーリー

データベースに行を手動で作成し、カテゴリ配列タイプに category1 と category2 を入力しました。

しかし、データを読み取るときに次のエラーが発生します:

リーリー

値のメソッドの例:

type datacategory string

const (
    datacategory1 datacategory = "category1"
    datacategory2 datacategory = "category2"
)

type data struct {
    name            string         `json:"name"`
    categories      []datacategory `json:"category" gorm:"type:text[]"`
}

回避策

次の例では、rdbms として postgresql を使用しており、datacategory 値にコンマやエスケープされていない一重引用符が含まれていないことを前提としています。

リーリー リーリー リーリー

あるいは、value() (driver.value, error) から <code>[]byte を返すことが機能しない場合、たとえば "Error: malformed array literal: < hex フィールド値表現> (sqlstate 22p02)" の場合は、戻り値の型として string を使用してみてください。

@kozhioyrin の例

リーリー

以上がGorm はカスタム文字列タイプでスキャナ エラーを返しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。