作るものは「最低限必要なものを揃えたmain.go」のみ。
ゴールは「local起動し、ブラウザから確認」&「curlコマンドからAPIを叩けること」です。
フォルダ構成
つくりかた
- main.go ファイルを作成
-
go mod init
を実行、 go.mod, go.sum ファイルが生成される
以上!
main.go の中身
こちらの記事を参考にそのまま使わせていただきました。
今回はファイル名だけserver.go → main.goとしています。
ミドルウェアについて、それぞれ
e.Use(middleware.Logger()) // ここからlogが取得できる
e.Use(middleware.Recover()) // サーバが落ちたとき、自動で再起動する
という意味らしいです。
実行
go run main.go
で実行
~APIが叩けるか確認~
1.ブラウザから確認
ブラウザを開き、URLにhttp://localhost:1323/
と入力。
Hello,World!と返されていればOK。
2.ターミナルから確認
別ターミナルを開き、curl http://localhost:1323/
を実行。
Hello, World!
と返されていればOK。
また、Hello,World!が返された後に
go run main.go
を実行したターミナルを見ると
{"time":"2024-06-14T00:38:55.64143254+09:00","id":"","remote_ip":"127.0.0.1","host":"localhost:1323","method":"GET","uri":"/","user_agent":"curl/7.81.0","status":200,"error":"","latency":5499,"latency_human":"5.499µs","bytes_in":0,"bytes_out":13}
(見やすくすると↓)
{
"time":"2024-06-14T00:38:55.64143254+09:00",
"id":"",
"remote_ip":"127.0.0.1",
"host":"localhost:1323",
"method":"GET",
"uri":"/",
"user_agent":"curl/7.81.0",
"status":200,
"error":"",
"latency":5499,
"latency_human":"5.499µs",
"bytes_in":0,
"bytes_out":13
}
という文字があります。
これがmain.goの
e.Use(middleware.Logger()) // ここからlogが取得できる
によって吐き出されている部分です。
補足
ログを絞る(カスタムする)方法。
main.goにある
e.Use(middleware.Logger()) // ここからlogが取得できる
を↓に置き換えます。
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: `[${time_rfc3339}] ${method} ${uri} ${status}\n`,
}))
この状態でgo run main.go
を実行し、
別ターミナルを開きcurl http://localhost:1323/
を実行します。
go run main.go
を実行したターミナルに戻ると、
[2024-06-14T00:45:52+09:00] GET / 200 \n
というログが確認できます。
元のログが↓だったので、大分スッキリ表示できました。
{
"time":"2024-06-14T00:38:55.64143254+09:00",
"id":"",
"remote_ip":"127.0.0.1",
"host":"localhost:1323",
"method":"GET",
"uri":"/",
"user_agent":"curl/7.81.0",
"status":200,
"error":"",
"latency":5499,
"latency_human":"5.499µs",
"bytes_in":0,
"bytes_out":13
}