Golang 공식 CLI 문서 - https://pkg.go.dev/cmd/go
내가 참고한 블로그(좋구만유) - https://yoongrammer.tistory.com/33
내가 참고한 블로그2(좋구만유) - https://soyoung-new-challenge.tistory.com/130
cross compile - https://medium.com/@georgeok/cross-compile-in-go-golang-9f0d1261ee26
sudo yum install -y golang #golang을 설치합니다.
go version #golang Version을 확인합니다.
go env #golang 환경 변수를 확인합니다
go help #golang 명령어 Option을 확인합니다
먼저 Golang을 시작하기전에 Module에 개념을 잡고 가야합니다.
Golang에서 Module은 패키지의 모음으로써, 한 개의 Module은 다수의 패키지를 포함할 수 있다는 것입니다. Module을 통해 Golang은 패키지들의 종속성을 관리하며, Module은 패키지 관리 시스템으로써 활용이 됩니다.
Module은 패키지를 Tree 형식으로 관리하며, Root Forder에 go.mod File을 생성하여 Module을 정의하며, 종속성 정보를 관리하게 되는 것 입니다. 즉, Go의 Module 은 Go 애플리케이션 내의 종속성 문제를 처리하기 위해 도입되었습니다.
Module 동작은 GO111MODULE 환경변수에 의해 제어됩니다. GO111MODULE은 on, off, auto로 설정할 수 있습니다.
사용 방법
go env -w GO111MODULE=on
go env -w GO111MODULE=off
go env -w GO111MODULE=auto
go.mod(go module로 인식해보세요)
go.mod는 모듈을 정의하며 종속성 정보를 저장하고 있는 파일입니다. 즉 Module_Name 부분이 모듈이 위치한 외부 경로를 나타내는 것 입니다.
생성 방법은 아래와 같습니다.
go mod init MODULE_NAME #새로운 Module을 생성합니다.
git을 예시로 들겠습니다
go mod init github.com/skills/devops #실행해보겠습니다.
결과: 가져온 것을 확인할 수 있습니다. 즉, 현재 패키지의 종속성 정보를 담고 있는 go.mod File이 생성되는 것입니다.
go.sum
go.sum File은 go.mod에 종속성 정보가 추가될 때 생성됩니다. 종속성 관리를 위한 암호화된 체크섬 정보를 저장하고 있고, 각각의 체크섬을 확인하여 수정된 항목이 있는지 확인하는 데 사용됩니다.
생성
go mod init example.com/hello
go mod tidy #go mod tidy 명령어는 사용하지 않는 의존성을 제거해줍니다
종속성 있는 파일
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Hello())
}
go build
cat go.mod
cat go.sum
go list -m # 현재 모듈의 의존성을 모두 출력해줍니다.
go get [Package]#특정 의존성의 필요한 버전으로 변경, 혹은 새로운 의존성을 추가해줍니다.
예를 들자면...
go get github.com/skills #이런 식으로 github에 있는 패키지를 가져올 수 있습니다.
결과: 이처럼 go.sum에는 암호화된 체크섬 정보를 담고 있습니다.
go build main.go #main.go 파일을 컴파일 시킵니다.
go build -o skills main.go #사용자가 컴파일한 파일에 이름을 지정하고 싶다면, -o Option을 적용합니다. -o는 Output으로 해석됩니다.
go build main.go skills.go #2개에 Go file을 빌드하기, 결과는 main으로 출력합니다
go build . #main이라는 패키지를 빌드, 결과는 이름을 포함하는 폴더의 이름으로 실행 파일을 출력합니다. 대신 go.mod 파일이 있어야합니다
빌드하기 전에 환경을 수정하여 빌드할 시스템 또는 아키텍처를 지정
env GOOS=linux go build main.go #리눅스용 빌드
env GOARCH=arm go build main.go #ARM 아키텍처용 빌드
export GOPATH=/home/ec2-user/go/hello #GOPATH에 bin, pkg, src 디렉터리가 들어있는 경로(hello)를 설정