1:参考:https://github.com/jinzhu/gorm
2:数据库脚本(pg)
-- create table posts( id serial primary key, content text, author varchar(100), create_time timestamptz ); create table comments( id serial primary key, content text, author varchar(100), post_id int references posts(id), create_time timestamptz );
3:posts.go
package posts import( "fmt" "github.com/jinzhu/gorm" _"github.com/lib/pq" "time" ) type Comment struct{ ID int Content string `sql:"not null"` Author string `sql:"not null"` PostId int `sql:"post_id"` CreateTime time.Time `sql:"create_time"` } type Post struct{ ID int Content string `sql:"not null"` Author string `sql:"not null"` CreateTime time.Time `sql:"create_time"` Comments []Comment } const( host = "192.168.72.128" port = 5432 user = "test" password = "test" dbname = "testdb" ) var Db *gorm.DB func init(){ var err error psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+ "password=%s dbname=%s sslmode=disable",host, port, user, password, dbname) Db, err = gorm.Open("postgres", psqlInfo) if err != nil{ panic(err) } Db.AutoMigrate(&Post{}, &Comment{}) } func (post *Post) CreatePost() error{ return Db.Create(post).Error } func (comment *Comment) CreateComment(post *Post) error{ return Db.Model(post).Association("Comments").Append(comment).Error } func (post *Post) GetComments() (comments []Comment, err error){ Db.Where("author=$1", "王五").First(post) err = Db.Model(&post).Related(&comments).Error return }
4:main.go
package main import( "fmt" "time" "Chapter02/posts" ) func main(){ post := posts.Post{ Content:"Hello go!", Author:"王五", CreateTime: time.Now(), } fmt.Println(post) err := post.CreatePost() if err!=nil{ panic(err) } fmt.Println(post) comment := posts.Comment{ Content:"不错哟", Author:"小二", CreateTime: time.Now(), } err = comment.CreateComment(&post) if err != nil{ panic(err) } post = posts.Post{} comments, err := post.GetComments() if err != nil{ panic(err) } for _,p := range comments{ fmt.Printf("%s-%s\n", p.Author,p.Content) } }
原文:https://www.cnblogs.com/yshyee/p/9147675.html