Skip to content

Goでアプリケーションを作る#

Goは速度、シンプルさ、並行処理の能力に優れた、Googleによって開発されたプログラミング言語です。Web APIやバックエンドサービスの開発に特に適しており、高いパフォーマンスと簡潔な構文が特徴です。

ここではGoでWebアプリケーションを作る方法を体験していきます。

前提#

Node.jsをインストールされていること Mac / Linuxの場合Homebrewがインストールされていること

環境設定#

まず、Goをインストールします。 最初に、ディレクトリを作成、移動します。 以下のコマンドをターミナル(もしくはコマンドプロンプト。以下ターミナルに寄せます。)で実行します。

mkdir go_web_app
cd go_web_app

Mac / Linux / Windows#

Mac#

Homebrewを使ってGoをインストールします:

brew install go

Linux#

Linuxディストリビューションによって異なりますが、例としてUbuntuでは:

sudo apt-get update
sudo apt-get install golang-go

Windows#

Go公式ダウンロードページからインストーラーをダウンロードして実行します。

インストールが完了したら、以下のコマンドでGoのバージョンを確認できます:

go version

Goのプロジェクト構造の設定#

Goでは、プロジェクトはGOPATH内の特定の場所に配置することが推奨されていましたが、Go 1.11以降はモジュールシステムにより、任意の場所でプロジェクトを作成できます。

まず、新しいGoモジュールを初期化します:

mkdir go-web-server
cd go-web-server
go mod init go-web-server

簡単なWebサーバーの作成#

Goには標準ライブラリに強力なHTTPサーバー機能が含まれています。main.goファイルを作成し、以下のコードを入力します:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

// Message はJSONレスポンス用の構造体です
type Message struct {
    Text string `json:"text"`
}

// helloHandler は/helloエンドポイントを処理します
func helloHandler(w http.ResponseWriter, r *http.Request) {
    message := Message{
        Text: "こんにちは!",
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(message)
}

func main() {
    // ハンドラを設定
    http.HandleFunc("/hello", helloHandler)

    // サーバーを起動
    fmt.Println("サーバーを起動します: http://localhost:8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

サーバーの起動#

以下のコマンドでサーバーを起動します:

go run main.go

ブラウザで http://localhost:8080/hello にアクセスします。

以下のようなJSON応答が表示されるはずです:

{"text":"こんにちは!"}

この応答が表示されれば、サーバーの構築は成功です!

フレームワークを使ったWebアプリケーション#

標準ライブラリだけでもWebサーバーを作成できますが、より複雑なアプリケーションを効率的に構築するには、フレームワークを使用するのが一般的です。GoにはGin、Echo、Fiberなどの優れたフレームワークがあります。

ここでは、人気の高いGinフレームワークを使用してみましょう。まず、Ginをインストールします:

go get -u github.com/gin-gonic/gin

main.goを更新して、Ginを使用したバージョンに変更します:

package main

import (
    "fmt"
    "net/http"

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

// Message はJSONレスポンス用の構造体です
type Message struct {
    Text string `json:"text"`
}

func main() {
    // Ginルーターを初期化
    r := gin.Default()

    // /helloエンドポイントを定義
    r.GET("/hello", func(c *gin.Context) {
        message := Message{
            Text: "こんにちは!",
        }
        c.JSON(http.StatusOK, message)
    })

    // サーバーを起動
    fmt.Println("サーバーを起動します: http://localhost:8080")
    r.Run(":8080") // listen and serve on 0.0.0.0:8080
}

再度サーバーを起動し、同じURLにアクセスしてみましょう:

go run main.go

ブラウザで http://localhost:8080/hello にアクセスすると、同じJSON応答が表示されますが、今度はGinフレームワークを通じて提供されています。

Ginを使用することで、ルーティング、ミドルウェア、パラメータの取得など、多くの機能を簡単に実装できます。

次は、Goのコントローラーを追加して、Goについての理解を深めてみましょう!