使用std建立多对多关系的模型结构

时间:2017-10-03 04:06:13

标签: mysql go many-to-many

我正在努力学习go,我想在帖子和标签之间建立多对多的关系。标签可以属于许多帖子,帖子可以有许多标签。我正在使用mysql驱动器的标准库(github.com/go-sql-driver/mysql)

这是我的代码:

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"`
}

这是构建这种多对多关系的正确方法吗?

干杯

1 个答案:

答案 0 :(得分:2)

以下是需要考虑的几项修改:

  1. 保持您的类型名称一致(例如postPost
  2. 我认为你要去一片标签和一片帖子,所以我更新了语法。
  3. 您需要回答的一个重要问题;你是否需要/希望你的结构存储在每个项目的单个结构的内存中?如果是这样,您可能会考虑使用指向标记和发布的指针切片(例如[]*Post[]*Tag),但是流行的ORM库并不严格需要(对于示例gorm:http://jinzhu.me/gorm/associations.html#many-to-many)。
  4. 示例代码:

    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"`
    }