LoginSignup
0
1

More than 1 year has passed since last update.

Goを学ぶ ~echoの初期設定~ part2

Posted at

目標

echoのインストールから初期設定からサーバーの起動までを行う
DBからの取得は次回に実施する

echo

GoのWebフレークワークの1つ
WebフレームワークとしてはGinが有名ではあるが、近年は注目を集めている様子がある。
スター数などは全然Ginのほうが圧倒的な状況でもある。
採用理由は、ベースの使い方は同じなのでトレンドっぽさで選択した。

参考: https://go.libhunt.com/compare-gin-vs-echo

echoを導入する

利用環境についてはこちら
https://qiita.com/dsricekun/items/33968201abdc2992671d

STEP1 echoモジュールを取得

コンテナ内でモジュールを取得する

go get github.com/labstack/echo/v4

STEP2 サーバー起動設定

サーバー起動したときにポートに1323番を使用するのでdocker-compose.ymlを見直す

version: '3'
services:
  go_echo:
    container_name: go_echo
    build:
      context: ./echo/
    volumes:
      - ./echo:/go/src/app
    tty: true
    environment:
      - TZ=Asia/Tokyo
    ports:
      - 1323:1323

  go_echo_db:
    image: mysql:5.7
    container_name: mysql_host
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: echo
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./database/data:/var/lib/mysql
    ports:
      - 3306:3306

今までの構成に新しくmain.goを追加する

tree.nathanfriend.io
What is this?
database
echo
  main.go(new)
  go.mod
  Dockerfile
docker-compose.yml
database
echo
  main.go(new)
  go.mod
  Dockerfile
docker-compose.yml
.
├── database
├── echo/
│   ├── main.go(new)
│   ├── go.mod
│   └── Dockerfile
└── docker-compose.yml

main.goはechoのチュートリアルに従って次の実装をする

package main

import (
	"github.com/labstack/echo/v4"
	"net/http"
)

func main() {
	server := echo.New()
	server.GET("/", func(ctx echo.Context) error {
		return ctx.String(http.StatusOK, "Hello, World")
	})

	server.Logger.Fatal(server.Start(":1323"))
}

コンテナ内でサーバー起動を行う

コマンド
go run main.go

実行結果はこちら

/go/src/app # go run main.go

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.10.2
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on [::]:1323

出力が確認できたらブラウザから「http://localhost:1323 」にアクセスする
正常に設定できていたら
image.png
の出力確認ができる。

出力確認ができたらechoの導入は成功になる

echoを触っていくための構成を少し整理

本格的な構成は仕様を整理してからになるが、さすがにあまりイケていないので構成を整理する
ここからはechoファルダ内のみの構成を記載する。
全体図が気になる方はgithubのアクセスURLを記載するのでそちらを見てください。
URL: https://github.com/dsrice/go_echo/tree/part2

.
├── controllers/
│   └── hello.go
├── infra/
│   └── server.go
└── main.go

各役割を説明すると

controllersディレクトリ
EPの実処理にあたるコントローラー置き場
hello.go
暫定で用意するコントローラー controllersパッケージになるのでファイル名にはcontrollerはつけない
infraディレクトリ
環境関連ファイル置き場
server.go
ルーティングなどサーバーに関する処理をまとめるファイル
main.go
サーバーの起動といった起動処理をまとめるファイル

hello.go

package controllers

import (
	"github.com/labstack/echo/v4"
	"net/http"
)

type HelloController struct{}

func NewHelloController() *HelloController {
	return &HelloController{}
}
func (controller *HelloController) GetMessage(ctx echo.Context) error {
	return ctx.String(http.StatusOK, "Hallow World!")
}

server.go

package infra

import (
	"app/controllers"
	"github.com/labstack/echo/v4"
)

type Server struct {
	Echo *echo.Echo
}

func NewServer() *Server {
	return &Server{
		Echo: echo.New(),
	}
}

func (server *Server) Start() {
	server.Echo.GET("/", controllers.NewHelloController().GetMessage)

	server.Echo.Start(":1323")
}

main.go

package main

import "app/infra"

func main() {
	server := infra.NewServer()
	server.Start()
}

終わりに

今回はechoを導入してチュートリアルに沿った簡単な実装を対応した。
echoが使えるようになったので次回から公式ドキュメントを参考に設定を追加していこうと考えている

参考文献

0
1
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
0
1