post Image
GolangのフレームワークEchoの話とHelloWorldサンプルを読み解くだけ

環境

Go :go version go1.6.2 darwin/amd64
IDE :VSCode1.1.0
echo:Echo v2.(beta)
俺 :Go初めて2日目

間違ってたらすみません。コメントなどで教えて下さい。

Echoとは:

GolangのWebフレームワーク。
特徴として:
・リソースの量に比例して全体のスループットが向上するシステム(スケーラブル)でプログラムの外乱に対する抵抗性のある(ロバスト)なRESTAPIを作れる。
・スタンダードなHTTPサーバ(またはFastHTTPサーバ)で動作する
・URI (PATH)単位でなにか処理を入れられます
・ミドルウェアに対して拡張性がある。
・urlごとにログ出したり出さなかったりすることできる
・JSON,XML,フォームペイロードなどへのデータバインディングのサポートがある
・HTTPの様々なレスポンスを送るための使いやすい関数をサポート
・どんなテンプレートエンジンででもテンプレートレンダリングできる
・Loggerに対して任意の定義を行える
・カスタマイズ性が高い

RESTAPI向けに最適化されているフレームワーク

RESTAPIとは:
RESTの原則に沿った形で設計されたAPI
RESTとは:
・セッションなどの状態管理を行わない
・情報を操作する命令の体系が予め定義・共有されている(HTMLのPostやGetなど)
・すべての情報は汎用的な構文で一意に識別される(URLやURIなど)URL∈URI

Echo-HelloWorld.

sampleserver.go
package main

import (
    "net/http"

    "github.com/labstack/echo"
    "github.com/labstack/echo/engine/standard"
    "github.com/labstack/echo/middleware"
)

func main() {
    // Echo instance
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())

    // Route => handler
    e.GET("/hoge", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello,World");
    })
    e.GET("/piyo", func(c echo.Context) error {
        return c.String(http.StatusOK, "こんにちは世界");

    })


    // Start server
    e.Run(standard.New(":1323"))
}

package mainとImport

main関数を用いているため、Packageはmainにする必要がある。

fmtパッケージ
フォーマットI/Oを実装している。ScanとかPrintとかできるのはこいつのおかげ。

main関数内

インスタンス作成
e := echo.New()
Echoのインスタンス化
 
ミドルウェアの使用宣言(Logger)
e.Use(middleware.Logger())
デフォルトで存在するロガー
HTTPのリクエストをログとってくれて、コンソールに出力してくれる。↓
time=2016-05-10T10:19:49+09:00, remote_ip=::1, method=GET, uri=/up, status=200, took=6.09µs, sent=7 bytes
Time,Remote_IP,uri,method,path,status,response_time,response_sizeを出力してくれる。
 
ミドルウェアの使用宣言(Recover)
e.Use(middleware.Recover())
middleware.Recoverのコメントを見ると
Recover()はどこかでパニック(エラー)が起きたらそこから復帰したり、中央化されてるHTTPErrorHandlerを制御するミドルウェア。

少しRecover.goを見るとDefaultRecoverConfigというデフォルトの設定ででどのように復帰するかが書かれている。

まずどのようなエラーが出たのかを検査し、recover()をする。その時帰ってくる型がerrorだった場合とそうでない場合がある。
そうでない場合にはErrorとして扱われるように整形する。
 
その後、どちらの場合に対してもLoggerに対してエラー内容を出力する。その上でContextにErrorを格納する。
そのErrorをHandlerFuncに引数として渡し、それをReturnしている。
エラー出力をしつつ、エラーの内容をキャッチしてRecoverするミドルウェアであり、その使用を宣言している。

ページのコンテンツの作成
e.GET("/hoge", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello,World");
})

http://localhost:1323/hoge に対してHelloWorldを表示してる。

e.GETの引数として
”/hoge”:パス
func(c echo.Context):該当のリクエスト/レスポンスの情報が格納されるハンドラー

mainの中{
    e.GET("/piyo", hello)
}

func hello(c echo.Context) error {
        return c.String(http.StatusOK, "こんにちは世界");
    }

と同等。こっちのほうが理解がしやすいと思う。

 
サーバ起動
e.Run(standard.New(":1323"))
サーバーを起動。
ターミナルでgo run sampleserver.goした後にブラウザでhttp://localhost:1323 にアクセスできるようになる。
今回はe.GETを2つ用意してあるのでそれぞれ
localhost:1323/hoge
localhost:1323/piyo
でそれぞれHello,World、こんにちは世界が出力される


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。