ポートフォリオサイト公開中

Go で REST API を作る事始め【GoLang, Gin】

どうも1時間前にGoを学び始めたともわか(@tomorrowSLog)です

Goを使ってローカル環境でサクッと遊んでみたので備忘録としてそのアウトプットをします。

レッツGoooooooo!!!!!!

目次

  • 開発環境
  • Goのインストール
  • Hello Go
  • create go.mod
  • create makefile
  • get gin
  • go run
  • まとめ

開発環境

macOS モハベ

$ go version
go version go1.13 darwin/amd64

Goのインストール

$ brew install go

ってした気がする。詳しくはwebで!

Hello Go

最初だし `Hello Go!` をしよう

~$ mkdir tomowarkar
~$ cd tomowarkar
~/tomowarkar$ touch main.go

main.go

package main

import (
  "fmt"
)

func main() {
  fmt.Println('Hello Go!')
}

go run

~/tomowarkar$ go run main.go
Hello Go!

create go.mod

modules管理ファイルを作ります

~/tomowarkar$ go mod init tomowarkar

go.mod

中身はこんな感じ(自動生成)

module tomowarkar

go 1.13
参考 Go Modulesの概要とGo1.12に含まれるModulesに関する変更budougumi0617.github.io

create makefile

シェルスクリプトをごにょごにょして、開発を楽にしてくれるmakefileも作ります

~/tomowarkar$ touch makefile

makefile

makefileの中身を仮置きします(意味は後々…)

dev:
  go run main.go
参考 Go言語開発を便利にするMakefileの書き方qiita.com

get gin

それではメインのAPI部分をいい感じに実装できるフレームワークGinを使っていきましょう。

Gin とは

Gin is a web framework written in Go (Golang). It features a martini-like API with much better performance, up to 40 times faster thanks to httprouter. If you need performance and good productivity, you will love Gin.

めっちゃパフォーマンス良くて、めっちゃ使いやすいGoのフレームワークだぜ!!!

って書いてます。
参考 Gin Web Frameworkgithub.com

Gin の導入

もはや `giuhub` の `README` に書いてあるままなのですが、

~/tomowarkar$ go get -u github.com/gin-gonic/gin

`go.sum` という新しいファイルができ、 `go.mod` もアップデートされたことがわかります。

update main.go

`main.go` をAPI仕様書き換えていきます

package main

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

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

  r.GET("/ping", func(c *gin.Context) {
    c.JSON(200, gin.H{
      "message": "pong",
    })
  })

  r.Run() // listen and serve on 0.0.0.0:8080
}

こちらも `README` の `Quick start` に書いてあるままを拝借。

go run

make dev

`Hello Go!` の時と同じように `go run` をしたいところですが、 先ほどつくった `makefile` をうまく活用していきましょう。

`make dev` と実行してみてください

~/tomowarkar$ make dev
go run main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
...
[GIN-debug] Listening and serving HTTP on :8080

このようにサーバーが立ち上がりました。

`makefile` で先ほど書いた内容は `dev` って打ったら `go run main.go` を実行してねというおまじないでした。

なので、 `make dev` と実行することで

  1. makefile から `dev` を呼び出し `go run main.go` が実行される
  2. main.go のなかの処理が読まれる
  3. サーバーが立ち上がる

となったわけですね

access localhost:8080

ここでブラウザからlocalhostにアクセスしても `404 page not found` が帰ってきます。なぜでしょう。

`main.go` を詳しくみてみると、 `GET /ping` で JSONを返すよと書いてあります。

それでは今度は `localhost:8080/ping` にアクセスします。
すると今度は `{“message”:”pong”}` このように期待するJSON形式のレスポンスが返ってきました。

まとめ

  • Goはいいぞぉ
  • Ginはいいぞぉ

ということで、これからどんどんGoを学んでいきたいと思います。ではでは

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です