go는 1.10 버전이다. 1.6 버전 부터 vendor를 지원하기 시작했으니 따로 GOPATH를 잡을 필요가 없다. 1.6 이하 버전을 사용하고 있다면 업데이트하자.
glide
Go언어는 github에서 패키지를 다운로드해서 사용 할 수 있다. 하지만 버전과 상호의존성을 관리해야 한다. 자바스크립트의 경우 npm, 파이선은 pip, 자바는 Maven등을 사용한다. Glide는 go언어를 위한 패키지관리자다.
glide를 이용해서 벤더와 패키지를 쉽게 관리할 수 있다. 배포 할 때도 의존성있는 패키지들을 함께 배포함으로써, 패키지 버전 의존성 문제를 해결 할 수 있다. 주요 기능은 아래와 같다.
Glide는 응용 프로그램과 라이브러리의 소스코드를 검색해서 종속성을 확인한다. 이들 패키지와 버전 정보들은 glide.yaml 파일에 저장되고, 이 파일을 읽어서 vendor 디렉토리를 구성한다. vendor 디렉토리에는 glide가 검색한 패키지들이 설치된다.
glide init 명령으로 새로운 프로젝트를 만들 수 있다. 종속성 검색과정이 끝나면 glide.yaml 파일이 만들어지고 glide install명령으로 vendor 디렉토리가 만들어진다. vendor에 패키지들이 설치도니 다음에는 glide.lock 파일이 만들어지고, 이 후에는 종송석을 검색하는 과정을 건너뛴다.
glide 사용
테스트 코드
go 람다코드로 테스트하기로 했다.
package main
import (
"errors"
"log"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
var (
ErrNameNotProvided = errors.New("no name was provided in the HTTP body")
)
func Handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
// stdout and stderr are sent to AWS CloudWatch Logs
log.Printf("Processing Lambda request %s\n", request.RequestContext.RequestID)
// If no name is provided in the HTTP request body, throw an error
if len(request.Body) < 1 {
return events.APIGatewayProxyResponse{}, ErrNameNotProvided
}
return events.APIGatewayProxyResponse{
Body: "Hello " + request.Body,
StatusCode: 200,
}, nil
}
func main() {
lambda.Start(Handler)
}
이 코드는 awa-lambda.go/events 와 aws-lambda-go/lambda 두 개의 패키지를 필요로 한다.
glide create
glide create(혹은 init)를 이용해서 작업공간(workspace)를 초기화 할 수 있다. 이 명령은 코드를 읽어서 필요한 패키지와 버전을 추측해서 glid.yaml 파일을 만든다.
# glide create
[INFO] Generating a YAML configuration file and guessing the dependencies
[INFO] Attempting to import from other package managers (use --skip-import to skip)
[INFO] Scanning code to look for dependencies
[INFO] --> Found reference to github.com/aws/aws-lambda-go/events
[INFO] --> Adding sub-package lambda to github.com/aws/aws-lambda-go
[INFO] Writing configuration file (glide.yaml)
[INFO] Would you like Glide to help you find ways to improve your glide.yaml configuration?
[INFO] If you want to revisit this step you can use the config-wizard command at any time.
[INFO] Yes (Y) or No (N)?
n
[INFO] You can now edit the glide.yaml file. Consider:
[INFO] --> Using versions and ranges. See https://glide.sh/docs/versions/
[INFO] --> Adding additional metadata. See https://glide.sh/docs/glide.yaml/
[INFO] --> Running the config-wizard command to improve the versions in your configuration
# glide list
[INFO] Package github.com/aws/aws-lambda-go/lambda/messages found in vendor/ folder
[WARN] Version not set for package github.com/aws/aws-lambda-go/lambda/messages
[INFO] Package github.com/aws/aws-lambda-go/lambdacontext found in vendor/ folder
[WARN] Version not set for package github.com/aws/aws-lambda-go/lambdacontext
INSTALLED packages:
github.com/aws/aws-lambda-go/events
github.com/aws/aws-lambda-go/lambda
github.com/aws/aws-lambda-go/lambda/messages
github.com/aws/aws-lambda-go/lambdacontext
Contents
환경
glide
glide 사용
테스트 코드
glide create
glide install
glide list
Makefile & glide
참고
Recent Posts
Archive Posts
Tags