GoでGorm使ってDBからカラムの中身を出力したい
メモ用
ORMはGorm、ルーティングはGinを使用
main.go
import(
"fmt"
//data内に構造体を設定
"./data"
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
_"github.com/go-sql-driver/mysql"
)
func get_messages() []data.Message {
//mysqlに対してアクセス
db, err := gorm.Open("mysql", "root@/chatapp?charset=utf8&parseTime=True&loc=Local")
//エラー処理
if err != nil {
fmt.Println(err)
}
defer db.Close()
var messages []data.Message
//FindメソッドでDBの中身を取得
db.Find(&messages)
return messages
}
func main() {
//ginの記述はここから
r := gin.Default()
//templatesフォルダ配下のファイルを読む
r.LoadHTMLGlob("templates/*")
r.GET("/", func(c *gin.Context) {
messages = get_messages()
c.HTML(200, "index.html", gin.H{
//上記のmessagesをindex.html内で使用できるように設定
"messages": messages,
})
})
}
ビューファイル内では下記の記述でDBの内容を繰り返して表示させることができる。
※一部抜粋
index.html
{{ range .messages }}
<div class="news-feed">
<div class="news-feed-name">
<p>{{.Name}}</p>
</div>
<div class="news-feed-text">
<p>{{.Text}}</p>
</div>
</div>
{{ end }}
{{ range .messages }} このmessagesがmain.goから渡したもの。
{{ end }} ここまで繰り返しが行われる。
{{ .Name }} nameカラムの中身が表示される。
{{ .Text }} textカラムの中身が表示される。
range から end まで囲まれた部分が要素の数だけ繰り返して表示がされる。
Rubyをやったことがある人でいう、each文のイメージ。
以下の記事を参考にさせていただきました。ありがとうございます。
https://qiita.com/Anharu/items/ce644c521a4d52fafb7e
↑すごく、わかりやすいです。
http://doc.gorm.io/crud.html#query
https://godoc.org/github.com/gin-gonic/gin
フレームワークやライブラリの中を読むみたいなのもやりたいなぁ