2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Go言語】ginを使ってローカル環境を構築する

Posted at

はじめに

概要

この記事では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を以下のように記述しましょう

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を記述しましょう。

main.go
package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
 
}

これでアプリケーション内でginを使用することができるようになりました。

ginを用いてリクエスト内容を決定しよう

ルータを作成しよう

以下のようにmain.goを記述しましょう。

main.go
package main

import (

    "github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()

}

gin.Default()

デフォルトで用意されているミドルウェアーでginのルータを作成することができます。ルータは異なるネットワーク間の接続や中継をします。

gin.Default()の中身
 // 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を記述しましょう。

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に精通している人からすれば馴染みのある記述ですね。

router.GET()の文法
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を確認しましょう。

スクリーンショット 2020-04-11 16.49.07.png

上記のように表示されていれば成功です。

この記事の振り返り

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?