2017-10-03 20 views
0

私は学びたいと思っています。投稿とタグの多対多の関係を作りたいと思っています。タグは多くの投稿に属することができ、投稿は多くのタグを持つことができます。私はMySQLのドライブを使用して標準ライブラリを使用しています(github.com/go-sql-driver/mysql)ここでstdを使って多対多の関係のモデル構造体

は私のコードです:

post.go

package main 

type post struct { 
    ID int `json:"id"` 
    Title string `json:"title"` 
    Content string `json:"content"` 
    Tags: Tag `json:"tags"` 
} 

tag.go

package main 

type tag struct { 
    ID int `json:"id"` 
    Name string `json:"name"` 
    Posts: Post `json:"posts"` 
} 

これは多対多の関係を構成する正しい方法ですか?ここで

乾杯

+0

このコードはコンパイルされません - 私はそれがより多くの「擬似コード」だと仮定し –

+0

うんその擬似コード。私は実装を計画しているだけです。 – user2901304

答えて

1

考慮すべき変更のカップルされています

  1. 一貫性のある(例えばpostPostを)あなたのタイプの名前にしてください私はあなたがタグのスライスのために行っていたと思いますと投稿のスライス、私はそのための構文を更新しました。
  2. 答える必要がある重要な質問の1つです。あなたの構造体が各項目の単一の構造体でメモリに格納される必要がありますか?もしそうなら、おそらくタグとポストへのポインタのスライス(例えば[]*Post[]*Tag)を使用することを検討したいと思うかもしれませんが、一般的なORMライブラリはそれほど厳密には必要ありません(例えばgorm:http://jinzhu.me/gorm/associations.html#many-to-many)。

例コード:

type Post struct { 
    ID int `json:"id"` 
    Title string `json:"title"` 
    Content string `json:"content"` 
    Tags []Tag `json:"tags"` 
} 

type Tag struct { 
    ID int `json:"id"` 
    Name string `json:"name"` 
    Posts []Post `json:"posts"` 
} 
+0

ポインタを使用する利点は、ポインタで値を更新できることです。そうでなければ 'Tag'または' Post'を使うことは読み取り専用になります。あれは正しいですか? 私はgormを使用するつもりでしたが、私が得た一般的なコンセンサスは、標準ライブラリを使用して学習する方が良いということでした。 – user2901304

+0

はい、私が正しくあなたを理解している場合、ポインタを使用することで、構造体を「インプレース」で簡単に変更できるようになります。可能な限り標準ライブラリと母国語を使用するのは良いと思いますが、オブジェクト間マッピングの場合、ネイティブサンプルはあまりありません。一般的なライブラリを使用すると、エッジケースの類似性が低下することがありますエラー。 –

+0

大変申し訳ありませんが、どうもありがとうございます。私は今スタンダードライブラリを続けるつもりです。うまくいけばそれはすべて動く – user2901304