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についての理解を深めてみましょう!