Skip to content

Instantly share code, notes, and snippets.

@kyokomi
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kyokomi/05f1afb94b1f25137ca2 to your computer and use it in GitHub Desktop.
Save kyokomi/05f1afb94b1f25137ca2 to your computer and use it in GitHub Desktop.
martiniを使うときの調べたこととか。メモ

martini

https://github.com/go-martini/martini

session

https://github.com/martini-contrib/sessions

sessionsのmoduleが必要

$ go get github.com/martini-contrib/sessions

実装例

store := sessions.NewCookieStore([]byte("secret123"))
m := martini.Classic()
m.Use(sessions.Sessions("my_session", store))
m.Get("/set", func(session sessions.Session) string {
	session.Set("user", "ok")
	return "OK"
})
m.Run()

postのデータ

bindingのmoduleが必要。

$ go get github.com/martini-contrib/binding

実装例

type LoginForm struct {
	Uuid string        `form:"uuid"`
	Name string        `form:"name"`
	PostData time.Time
}
m.Post("/login", binding.Bind(LoginForm{}), 
  func(form LoginForm, session sessions.Session) string {
	session.Set("uuid", form.Uuid)
	return "OK"
})

template

	m.Use(render.Renderer(render.Options{
		Directory:  "templates",                // Specify what path to load the templates from.
		Extensions: []string{".tmpl", ".html"}, // Specify extensions to load for templates.
	}))

htmlレンダリング

https://github.com/martini-contrib/render

$ go get github.com/martini-contrib/render

実装例

https://github.com/martini-contrib/render

ちょっとハマったのでメモ

{{with $name := .Name}}
  {{ .Name}} // エラー
  {{ $name}} // OK
{{else}}
{{end}}

メソッド呼び出し

AccountというstructにEmpty()というメソッドがあると そのままtemplate上で呼び出せる

func (a *Account) Empty() bool {
  return true
}
{{if .Account.Empty}}
  not account
{{else}}
  {{ .Account.Name}}
{{end}}

Redirect

m.Post("/logout", func(r render.Render, session sessions.Session) {
	session.Clear()
	r.Redirect("/")
})

database

  • levelDB
  • PostgreSql
  • SQLite

PostgreSql

herokuの場合

m := martini.Classic()
m.Map(SetupDB())

func SetupDB() *sql.DB {
  dbUrl := os.Getenv("DATABASE_URL")
  db, err := sql.Open("postgres", dbUrl)
  if err != nil {
  	log.Fatalf("データベースの接続に失敗しました。: %v", err)
  }
  return db
}

生SQL書くの辛いのでいい感じのO/Rマッパーとかに変える予定。

ローカルとかの場合

なんかconfigとかで処理すればよさそう。 めんどくさかったらローカルもDATABASE_URLにURL設定しちゃえば良さそう。

m := martini.Classic()
m.Map(SetupDB())

func SetupDB() *sql.DB {
  dbUrl = "user=kyokomi password=kyokomi host=localhost port=5432 dbname=roguegame sslmode=disable"
  db, err := sql.Open("postgres", dbUrl)
  if err != nil {
  	log.Fatalf("データベースの接続に失敗しました。: %v", err)
  }
  return db
}

ORM

xorm

https://github.com/go-xorm/xorm

structベースでdatabaseが操作できる。

DBからのsourceやdumpが作れるツールもあるっぽい

https://github.com/go-xorm/cmd/blob/master/README.md

https

※まだ

test

※まだ

Password管理

※まだ

log管理

普通に引数に追加すればMartiniのlogに乗っかれる

m.Get("/", func (l *log.Logger) {
  
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment