go

Go kit 예제 프로젝트 생성

까오기 2024. 7. 17. 09:25

Go Workspace 설정

Go 1.11 버전 이상에서는 모듈을 사용하는 것을 권장합니다. 프로젝트 디렉토리를 생성하고, 그 안에서 go mod init 명령을 사용하여 모듈을 초기화합니다.

mkdir myproject
cd myproject
go mod init myproject

Go Kit 설치 및 설정

Go Kit 설치

go get github.com/go-kit/kit

Go Kit은 일반적으로 go get 명령어를 사용하여 설치합니다. 설치는 다음과 같이 진행됩니다:

예제 프로젝트 설정

아래는 Go Kit을 사용한 간단한 예제 프로젝트를 설정하는 방법입니다.

프로젝트 구조:

myproject/
├── go.sum
├── go.mod
├── main.go
└── README.md

 

main.go 파일 작성

package main

import (
    "context"
    "encoding/json"
    "errors"
    "fmt"
    "log"
    "net/http"
    "strings"
    "github.com/go-kit/kit/endpoint"
    httptransport "github.com/go-kit/kit/transport/http"
)

// StringService provides operations on strings.
type StringService interface {
    Uppercase(string) (string, error)
}

// stringService is a concrete implementation of StringService.
type stringService struct{}

func (stringService) Uppercase(s string) (string, error) {
    if s == "" {
        return "", errors.New("empty string")
    }
    return strings.ToUpper(s), nil
}

func makeUppercaseEndpoint(svc StringService) endpoint.Endpoint {
    return func(ctx context.Context, request interface{}) (interface{}, error) {
        req := request.(uppercaseRequest)
        v, err := svc.Uppercase(req.S)
        if err != nil {
            return uppercaseResponse{v, err.Error()}, nil
        }
        return uppercaseResponse{v, ""}, nil
    }
}

type uppercaseRequest struct {
    S string `json:"s"`
}

type uppercaseResponse struct {
    V   string `json:"v"`
    Err string `json:"err,omitempty"`
}

func main() {
    svc := stringService{}

    uppercaseHandler := httptransport.NewServer(
        makeUppercaseEndpoint(svc),
        decodeUppercaseRequest,
        encodeResponse,
    )

    http.Handle("/uppercase", uppercaseHandler)
    fmt.Println("Listening on port 8080...")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func decodeUppercaseRequest(_ context.Context, r *http.Request) (interface{}, error) {
    var request uppercaseRequest
    if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
        return nil, err
    }
    return request, nil
}

func encodeResponse(_ context.Context, w http.ResponseWriter, response interface{}) error {
    return json.NewEncoder(w).Encode(response)
}

애플리케이션 실행

프로젝트 디렉토리에서 애플리케이션을 실행합니다.

go run main.go

서버가 실행되면, http://localhost:8080/uppercase 엔드포인트로 POST 요청을 보내어 서비스를 테스트할 수 있습니다.

// 요청 
curl -X POST http://localhost:8080/uppercase -d '{"s":"hello"}' -H "Content-Type: application/json"

// 응답 
{"v":"HELLO"}

 

출처 : chatGPT