golangでrest api (web framework iris and orm gorm)試してみた
golangのweb frameworkはまだスタンダードが決まってないようで候補はいろいろ
この中で最もパフォーマンスがよいといわれているiris試すことに
ormもいろいろあるようですが全部入りのgormを選択
databaseは前回用意したmysqlで以下のようになりました
package main import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "github.com/kataras/iris" "time" ) func main() { connectionString := "user:pass@tcp(xxx.arukascloud.io:0000)/db?charset=utf8&parseTime=True&loc=Local" db, err := gorm.Open("mysql", connectionString) if err != nil { panic(err) } db.AutoMigrate(&Article{}) ar := &ArticleResource{db: db} iris.Get("/articles", ar.ArticlesList) iris.Post("/articles", ar.ArticlePost) iris.Get("/articles/:id", ar.ArticlesDetail) iris.Listen(":8080") } type ArticleResource struct { db *gorm.DB } type Article struct { Id int64 `gorm:"AUTO_INCREMENT;primary_key"` Created int64 Title string Content string } func (ar *ArticleResource) ArticlesList(c *iris.Context) { var articles []Article ar.db.Order("id").Find(&articles) c.JSON(iris.StatusOK, articles) } func (ar *ArticleResource) ArticlesDetail(c *iris.Context) { id := c.Param("id") article := Article{} ar.db.First(&article, id) c.JSON(iris.StatusOK, article) } func (ar *ArticleResource) ArticlePost(c *iris.Context) { var json Article c.ReadJSON(&json) article := Article{ Created: time.Now().UnixNano(), Title: json.Title, Content: json.Content, } ar.db.Create(&article) c.JSON(iris.StatusCreated, article) }