Golang Mux, Middleware 구성하는 gocraft/web 라이브러리 알아보기

오늘은 Golang으로 Mux와 미들웨어를 구성할 수 있는 gocraft/web 라이브러리를 알아보려 합니다.

gocraft/web 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

맥에서 Golang의 버전을 올리려면 brew를 이용합니다.

brew upgrade go

우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

go get으로 gocraft/web 패키지를 설치합니다.

go get github.com/gocraft/web

홈의 go 폴더에 gocraft/web 소스코드와 패키지 파일이 생성됩니다.

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.

import (
	"fmt"
	"github.com/gocraft/web"
	"net/http"
	"strings"
)

fmt, net, strings 그리고 gocraft/web을 가져옵니다.

type context struct {
	Num int
}

구조체를 만듭니다.

func (c *context) testNum(rw web.ResponseWriter, req *web.Request, next web.NextMiddlewareFunc) {
	c.Num = 10
	next(rw, req)
}

미들웨어 핸들러를 만듭니다.

func (c *context) print(rw web.ResponseWriter, req *web.Request) {
	fmt.Fprint(rw, strings.Repeat("Hello ", c.Num))
}

Hello라는 문자열이 반복되는 핸들러 함수도 만듭니다.

func main() {
	router := web.New(context{}).
		Middleware(web.LoggerMiddleware).
		Middleware(web.ShowErrorsMiddleware).
		Middleware((*context).testNum).
		Get("/", (*context).print)

GET 요청으로 처리될 라우터를 생성하고, 미들웨어를 등록합니다.

	http.ListenAndServe("localhost:8080", router)
}

8080 포트로 서버를 구동합니다.

Written on December 13, 2019