列挙値をデータベースに保存する

狼 :

Goは初めてで、列挙値をデータベースに保存する小さなプログラムを書こうとしています。値を宣言する方法は次のとおりです。

type FileType int64
const (
    movie FileType = iota
    music
    book
    etc
)

私は私の構造体でこれらの値を次のように使用します:

type File struct {
    Name     string
    Type     FileType
    Size     int64
}

私はデータベースにgorpを使用していますが、gorpの使用は私の問題には関係ないと思います。私はこのようなものを私のDBに入れます:

dbmap.Insert(&File{"MyBook.pdf",movie,1000})

でも物を取り出そうとすると…

dbmap.Select(&dbFiles, "select * from Files")

次のエラーが発生します。

panic: reflect.Set: value of type int64 is not assignable to type main.FileType

フィールドint64の型として使用するconst(...)File.Type、すべてが正常に機能しますが、Goを初めて使用して問題を理解したいと考えています。私の見方では、2つの問題があります。

  1. Goがこのデータを正常に変換できないのはなぜですか?Goリフレクションとsqlパッケージのソースコードを確認しましたが、この種の変換にはいくつかの方法がありますが、失敗するようです。これはバグですか?何が問題ですか?
  2. sql.Scanner次のメソッドを実装することでインターフェイスを実装できることがわかりました

    Scan(src interface{}) error
    

    私はメソッドを実装しようとしましたが、正しい値を取得してにsrc変換することもできましたが、FileType" (f *FileType)または(f FileType)。のメソッドを実装する必要があるかどうか混乱しました。どちらの方法でもメソッドが呼び出されますが、上書きするf(または少なくとも更新が後で失われる)Fileため、DBから読み取られたインスタンスには常にの値として「0」がありましたFile.Type

この2つの点について何か考えはありますか?

アレック・トーマス:

私は最近同じニーズがあり、解決策は2つのインターフェイスを実装することです:

  1. sql / driver.Valuer
  2. sql.Scanner

これが実際の例です:

type FileType int64

func (u *FileType) Scan(value interface{}) error { *u = FileType(value.(int64)); return nil }
func (u FileType) Value() (driver.Value, error)  { return int64(u), nil }

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

列挙型をデータベースに保存する方法

分類Dev

列挙型を文字列としてデータベースに保存する方法

分類Dev

jdbcを使用して列挙値をデータベースに保存して読み取る?

分類Dev

データベースに列挙値を保存しないのはなぜですか?

分類Dev

データベースルームに列挙型フィールドを保存する方法

分類Dev

Spring Data:列挙型リストをmySQLデータベースに保存する方法

分類Dev

EntityFrameworkのデータベース列値に基づいて列挙型テキストを表示する

分類Dev

データベースdjangoに個別の値を保存する

分類Dev

null値をデータベースに保存する

分類Dev

データベースにハッシュ値を保存する

分類Dev

データベースに複数の値を保存する

分類Dev

配列をデータベースに保存する方法をLaravel

分類Dev

RESTコントローラー、列挙型名を提供しますが、その値をデータベースに保存します

分類Dev

SQLPowerShellを使用してデータベースを列挙する

分類Dev

文字列をデータベースに保存する

分類Dev

PHP / Laravel-配列をデータベースに保存する

分類Dev

Oracleデータベースに配列を保存する

分類Dev

配列をMongoDBデータベースに保存する

分類Dev

Railsのデータベースに配列を保存する方法

分類Dev

要素の配列をデータベースに保存する(Laravel)

分類Dev

WordPressのデータベースに文字列を保存する

分類Dev

列挙型データ型に特殊文字を保存する

分類Dev

phpでAPIデータ(配列)をデータベースに保存する方法

分類Dev

スピナーからsqliteデータベースに値を保存する方法

分類Dev

データベースの列値をjLabelsに取得する方法

分類Dev

データベース/モデルにjson値を保存するDjango

分類Dev

mysqlデータベースに保存されている配列の特定の値を取得する方法

分類Dev

配列値をデータベースに保存し、Laravelのwhere句で使用することは可能ですか?

分類Dev

ボタンの値をdjangoのデータベースに保存する方法は?

Related 関連記事

  1. 1

    列挙型をデータベースに保存する方法

  2. 2

    列挙型を文字列としてデータベースに保存する方法

  3. 3

    jdbcを使用して列挙値をデータベースに保存して読み取る?

  4. 4

    データベースに列挙値を保存しないのはなぜですか?

  5. 5

    データベースルームに列挙型フィールドを保存する方法

  6. 6

    Spring Data:列挙型リストをmySQLデータベースに保存する方法

  7. 7

    EntityFrameworkのデータベース列値に基づいて列挙型テキストを表示する

  8. 8

    データベースdjangoに個別の値を保存する

  9. 9

    null値をデータベースに保存する

  10. 10

    データベースにハッシュ値を保存する

  11. 11

    データベースに複数の値を保存する

  12. 12

    配列をデータベースに保存する方法をLaravel

  13. 13

    RESTコントローラー、列挙型名を提供しますが、その値をデータベースに保存します

  14. 14

    SQLPowerShellを使用してデータベースを列挙する

  15. 15

    文字列をデータベースに保存する

  16. 16

    PHP / Laravel-配列をデータベースに保存する

  17. 17

    Oracleデータベースに配列を保存する

  18. 18

    配列をMongoDBデータベースに保存する

  19. 19

    Railsのデータベースに配列を保存する方法

  20. 20

    要素の配列をデータベースに保存する(Laravel)

  21. 21

    WordPressのデータベースに文字列を保存する

  22. 22

    列挙型データ型に特殊文字を保存する

  23. 23

    phpでAPIデータ(配列)をデータベースに保存する方法

  24. 24

    スピナーからsqliteデータベースに値を保存する方法

  25. 25

    データベースの列値をjLabelsに取得する方法

  26. 26

    データベース/モデルにjson値を保存するDjango

  27. 27

    mysqlデータベースに保存されている配列の特定の値を取得する方法

  28. 28

    配列値をデータベースに保存し、Laravelのwhere句で使用することは可能ですか?

  29. 29

    ボタンの値をdjangoのデータベースに保存する方法は?

ホットタグ

アーカイブ