go get github.com/labstack/echo
したら$GOPATH/srcに入る
src/server.goに
ここのserver.goを書いて
go run src/server.go
で実行。http://localhost:1323にChromeからアクセスしてHello Worldが表示された。APIのURLを追加してみよう。
package main
import (
"net/http"
"github.com/labstack/echo"
"github.com/labstack/echo/engine/standard"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
e.GET("/user", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, user")
})
e.Run(standard.New(":1323"))
}
と書き足して、server.goを一度切ってから再実行し、http://localhost:1323/userにアクセス。Hello userが表示された。次はPOSTをしてみよう
package main
import (
"net/http"
"github.com/labstack/echo"
"github.com/labstack/echo/engine/standard"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
e.GET("/user", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, user")
})
e.POST("/user", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, POST user")
})
e.Run(standard.New(":1323"))
}
書き足してserver.goを再起動し、Chrome ExtensionのPosterなどからPOSTでhttp://localhost:1323/userにアクセスするとHello POST userが表示された
DBと連携させたい。Mongo入れてみよう
brew install mongodb
273MBとか出てたのでサイズは大きい
そしてインストール自体にも時間がかかる
10分くらい待ってやっと終わった!と思ったら
Error: Permission denied - /usr/local/var
ここのAnswerの2コマンドを入力。
再度brew installしたら、ビルドは再利用されたのだろう、すぐインストールが完了した
mongoと入力するとバージョンが表示された。Terminalで
sudo mongod
と入力。動いている様子
Terminalの別タブで
mongo
と入力するとクライアント側としてつながった。
> show dbs
local 0.078GB
> db
test
> use mydb
switched to db mydb
保存してみよう
> db.users.save({name:"あいう"})
WriteResult({ "nInserted" : 1 })
> db.users.save({name:"かきく"})
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("57a08bcd665449ed6ba92517"), "name" : "あいう" }
{ "_id" : ObjectId("57a08bd8665449ed6ba92518"), "name" : "かきく" }
mydb.usersに2件保存された状態。これをGoからアクセスしたい。Goからmongoに繋ぐパッケージを入れよう
export GOPATH=$HOME/gowork
go get gopkg.in/mgo.v2
とりあえず先ほど挿入したデータとは無関係に、サンプルを実行してみよう
package main
import (
"fmt"
mgo "gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type Person struct {
ID bson.ObjectId `bson:"_id"`
Name string `bson:"name"`
Level int `bson:"level"`
}
func (p *Person) Greet() string {
return fmt.Sprintf("My name is %s.", p.Name)
}
type Admin struct {
Person
Password string `bson:"password"`
Permissions []string `bson:"permissions"`
}
func main() {
session, _ := mgo.Dial("mongodb://localhost/test")
defer session.Close()
db := session.DB("mydb")
admin := &Admin{
Person{
bson.NewObjectId(),
"otiai10",
10,
},
"hoge",
[]string{"write", "read"},
}
db.C("people").Insert(admin)
}
問題なく実行されて、mydb.peopleというCollectionが増えたし、データも入っていた。先ほど挿入したusersの中身も取得したい
package main
import (
"fmt"
mgo "gopkg.in/mgo.v2"
)
type User struct {
Name string `bson:"name"`
}
func main() {
session, _ := mgo.Dial("mongodb://localhost/test")
defer session.Close()
db := session.DB("mydb")
var results []User
db.C("users").Find(nil).All(&results)
fmt.Println("Results All: ", results)
}
こう書いて、go run connect.goで実行すると、取得できた。
Results All: [{あいう} {かきく}]
POSTでuserIdを指定して、指定したユーザを取得するまでできれば、結構良さそう。それは後日 →追記:書きました
peroon.hatenablog.com