2015-11-21 5 views
9

私はgolangのstructのタグの必要性を知っていますし、golangにどのように反映されているのですか?しかし、私は検索して、SQLの結果の構造体を書くときに構造体にsqlタグを使用すべき理由について信頼できる答えを見つけ出すことができませんでした。私は多くのサンプルコードを調査しており、人々は構造体にsql:"index"、構造体にsql:"primary_key"を使用しています。gormのようないくつかのlibにstructのsqlタグを使用するのはなぜですか?

今、データベースレイヤでインデックスを作成しましたが、それでは十分ではありませんか? sql:"index"も使用する必要がありますか?私はsql:"primary_key"も指定しなければならないので、私はデータベースの主キー属性を定義しましたか?

私のコードは、これらのコードがなくても正常に動作するようです。彼らの利益と用途を知りたいだけです。

+1

このサンプルコードはどこにありますか? – saarrrr

+0

ほとんどのORMがそれを使用しています。すべてが独自のやり方で主にGorm – sh0umik

答えて

6

私はあなたがその場合gorm

のようなORMライブラリを参照していると思う、sql:"primary_key"またはsql:"index"などのメタデータだけでセットアップにテーブルをしようとしたときに、インデックスを作成するために、ORMを伝えるか、多分それらを移行します。

gormの例のカップルは次のようになります。インデックス、主キー、外部キー、many2many関係または例えばのように、明示的にタイプを設定し、あなたのgormモデルに出スキーマを適応しようとすると:

type Address struct { 
    ID  int 
    Address1 string   `sql:"not null;unique"` // Set field as not nullable and unique 
    Address2 string   `sql:"type:varchar(100);unique"` 
    Post  sql.NullString `sql:"not null"` 
} 
+1

さらに、ORM以外の多くのライブラリ([sqlx](https://github.com/jmoiron/sqlx)など)では、structタグを使用して列名を構造体フィールドにマップします。例えばあなたのソースの 'EmailAddress'をDBの' email_address'に追加してください。 – elithrar

+0

は、gormとデフォルト値を持つauto_increment一意のidフィールドに問題があります。プレーンは行を挿入するだけでは機能しません。 –

関連する問題