はじめに
概要
この記事ではginを用いて、ローカル環境を構築し、ブラウザにHello Worldという文字列を表示させまでの実装を行います。そのためには、ginとは何か、ginを用いて何が可能となるかを学ぶ必要があります。実際にコードを書きながら、それらを1つ1つ丁寧に説明していきます。
目的
- ginを用いてローカル環境を構築する方法を理解すること
事前準備
ディレクトリとファイルの準備をしよう
まずは、今回作業するディレクトリとファイルを準備しましょう。まずはディレクトから作成します。
ディレクトリをmkdirコマンドで作成しましょう
以下のコマンドで指定の場所に新しいフォルダを作りましょう。
% mkdir hello_world
ここではhello_world名前のフォルダを作ります。
cdコマンドでディレクトリを移動しましょう
先ほど作成したディレクトリに移動しましょう。
% cd hello_world
touchコマンドでファイルを作成しましょう
以下のようにファイルを作成します。
% touch main.go
このmain.goがこれから作業していくファイルです。
ディレクトリ構造を確認しましょう
以下のようなディレクトリ構造になっていれば成功です。
hello_world
├── main.go
main.goを以下のように記述しましょう
package main
func main() {
}
これで事前準備は完了です。
ginを用いてローカル環境を構築
ここからginを実施に使っていきます。まずはginとは何かを理解しましょう。
ginを使用する準備をしよう
gin
ginとは小規模のWebアプリケーションの開発を目的としたGoのフレームワークです。処理が軽量で、記述するコードがシンプルであることが特徴です
ginをインストールしましょう
以下のコマンドを実行して、ginをインストールしましょう。
% go get github.com/gin-gonic/gin
ginをimportしましょう
ginのインストールに成功したら、次はginをアプリケーション内で使えるようにimportしてあげる必要があります。以下のようにmain.goを記述しましょう。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
}
これでアプリケーション内でginを使用することができるようになりました。
ginを用いてリクエスト内容を決定しよう
ルータを作成しよう
以下のようにmain.goを記述しましょう。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
}
gin.Default()
デフォルトで用意されているミドルウェアーでginのルータを作成することができます。ルータは異なるネットワーク間の接続や中継をします。
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
ここで Use というメソッドを使用し Logger と Recovery というミドルウェアを設定しています。Loggerは標準出力にログ出力すミドルウェアであり、Recoveryは機能としてはパニックが起きた時にリカバーして500を返すミドルウェアです。
ブラウザに表示するファイルを指定しましょう
先ほどの記述でルータを作成することができました。次はこのルータを用いて、ブラウザで表示させるファイルを指定します。main.goを以下のように記述しましょう。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*.html")
}
今回の記述により、templatesディレクトリのhtmlファイルを呼び出すという宣言ができました。
router.LoadHTMLGlob()
ブラウザに表示させるhtmlファイルのディレクトリを指定する。その指定により、htmlファイルとhttpメソッドを自由に指定することが可能となる(次の記述に出てくる)。
ブラウザに表示させるhtmlファイルを作成しましょう
まずはテンプレートファイルを作成します。以下のコマンドを実行しましょう。
% mkdir templates
次に、以下のコマンドでファイルを作成しましょう。
% touch templates/index.html
ディレクトリ構造を確認しましょう
以下のようなディレクトリ構造になっていれば成功です。
hello_world
├── main.go
├── templates
├── index.html
表示させるhtmlファイルを記述しましょう
以下のようにindex.htmlを記述しましょう。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Sample App</title>
</head>
<body>
<h1>Hello World!!!</h1>
</body>
</html>
GETメソッドでルーティングを指定しよう
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*.html")
router.GET("/", func(ctx *gin.Context){
ctx.HTML(200, "index.html", gin.H{})
})
}
router.GET()
この記述によりルーティングを指定することができます。第一引数にURLパターン、第二引数にリクエストの内容を指定します。phpやnode.jsに精通している人からすれば馴染みのある記述ですね。
route.Get('/○○/{パラメータ}',function( 受け取る引数 ){....});
ルーティングを実行しましょう
以下のようにmain.goを記述しましょう。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*.html")
router.GET("/", func(ctx *gin.Context){
ctx.HTML(200, "index.html", gin.H{})
})
router.Run()
}
ブラウザの表示を確認しましょう。
まずはmain.goファイルを実行する。
% go run main.go
そして、ブラウザでlocalhosot:8080を確認しましょう。
上記のように表示されていれば成功です。