VagrantでEcho(go言語のフレームワーク)を使ってHelloWorld

f:id:utr066:20171019223112p:plain

vagrnantでechoを使ってHelloWorldを表示させる。 goは入っている前提でいきます。

vagrant設定

使いそうなのをコメントアウト。

  config.vm.box = "centos6.7"
  config.vm.box_check_update = false
  config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
  config.vm.network "private_network", ip: "192.168.33.14"
  config.vm.synced_folder ".", "/vagrant"
    vb.memory = "1024"

後にlocalhostで使うので、forwarded_portを設定します。

HelloWorldを画面に表示させる

$ cd /vagrant
$ mkdir echo_sample
$ cd echo_sample

//echoインストール
$ go get github.com/labstack/echo
$ go get github.com/dgrijalva/jwt-go

https://qiita.com/ezaki/items/62e806ae42828bb3567a 上記の記事を参考に、helloworldを表示させる。

//main/go

package main

import (
    "github.com/labstack/echo"
    "./handler"
)

func main() {
    // Echoのインスタンス作る
    e := echo.New()

    // ルーティング
    e.GET("/hello", handler.MainPage())

    // サーバー起動
    e.Start(":1323")    //ポート番号指定してね
}
handler/handler.go

package handler

import (
    "net/http"
    "github.com/labstack/echo"
)

func MainPage() echo.HandlerFunc {
    return func(c echo.Context) error {     //c をいじって Request, Responseを色々する 
        return c.String(http.StatusOK, "Hello World")
    }
}

これで、サーバーを動かす。

go run main.go

localhost/helloにアクセスすれば、helloworldが表示されるはず。 だけど、このままではlocalhostにページが表示されません的なエラーが出ますね。

これはポートの開放設定を行なっていないからなので、設定をします。 https://qiita.com/ttaka66/items/63de40e76189d293f0dc

$ vagrant ssh
$ sudo vi /etc/sysconfig/iptables

//-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT追記

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

ポート番号は任意のものです。今回は、8080で行きます。

vagrant reload後、再度go run main.go。 今回は、/helloでHelloWorldが表示されます。 スクリーンショット 2017-10-18 12.07.21.png

jsonを返すようにする

//main.go
//ルーティングに以下を追加
  e.GET("/api/hello", handler.ApiHelloGet())
//handler.go
//追加
func ApiHelloGet() echo.HandlerFunc {
    return func(c echo.Context) error {     //c をいじって Request, Responseを色々する 
         return c.JSON(http.StatusOK, map[string]interface{}{"hello": "world"})
    }
}
curl localhost:8080/api/hello

スクリーンショット 2017-10-18 12.36.34.png jsonでHelloWorld返却。