2017-10-03 1 views
0

J'essaie d'apprendre aller et je veux créer une relation de plusieurs à plusieurs entre un poste et un tag. Un tag peut appartenir à de nombreux posts et un post peut avoir plusieurs tags. J'utilise la bibliothèque standard en utilisant le lecteur de mysql (github.com/go-sql-driver/mysql)modèle structs pour plusieurs à plusieurs relation en utilisant std

Voici mon code:

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

Est-ce la bonne façon de structurer cette relation de plusieurs à plusieurs?
package main 

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

Vive

+0

Ce code ne compilera pas - je suppose qu'il est plus 'pseudo-code' –

+0

Ouais son pseudo-code. Je suis juste en train de planifier ma mise en œuvre. – user2901304

Répondre

1

Voici quelques modifications à considérer:

  1. Gardez vos noms de type uniforme (post contre Post par exemple)
  2. Je pense que vous allez pour une tranche de mots clés et une tranche de messages, donc j'ai mis à jour la syntaxe pour cela.
  3. Une question importante à laquelle vous devrez répondre; avez-vous besoin/voulez-vous que vos structures soient stockées en mémoire avec des structures uniques pour chaque élément? Si c'est le cas, vous voudrez probablement utiliser des tranches de pointeurs sur Tag et Post à la place ([]*Post et []*Tag par exemple), mais les librairies ORM populaires n'en ont pas strictement besoin (par exemple gorm: http://jinzhu.me/gorm/associations.html#many-to-many).

code Exemple:

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

L'avantage d'utiliser les pointeurs serait que je pourrais mettre à jour la valeur au pointeur, sinon utiliser 'Tag' ou' Post' serait juste en lecture seule. Est-ce exact? J'allais utiliser Gorm mais à partir de la lecture en ligne, le consensus général que j'ai eu était qu'il valait mieux apprendre à utiliser uniquement la bibliothèque standard. – user2901304

+0

Oui, si je vous comprends bien, l'utilisation de pointeurs faciliterait la modification des structures "in-situ". Je pense que l'utilisation de la bibliothèque standard et du langage natif autant que possible est bonne, mais dans le cas de la correspondance Object-Relational, il n'y a pas autant d'exemples natifs, et l'utilisation d'une bibliothèque populaire peut réduire la les erreurs. –

+0

Okay génial Je pense que je comprends, merci beaucoup! Je vais continuer avec la bibliothèque standard pour le moment. J'espère que tout fonctionne – user2901304