[1. 개요]
go 를 이용하여 개발하는 경우, 특히 go mod 를 이용하여 프로젝트 설정을 하는 경우의 과정을 정리
go version 은 1.17 이상 환경을 타겟으로 한다.
- go 는 GOPATH 를 이용한 개발 방식이 존재함.
- 그러나 외부 모듈 사용 시, 필요 한 패키지를 일일히 설치 할 필요가 있음(?)
- 그러나 go mod 를 사용하면 이런 번거로움을 해결할 수 있다고 봄.
- https://testkernelv2.tistory.com/284
테스트 한 환경은 아래와 같다.
- GOVERSION = go1.17.3
- GO111MODULE = on
[2. go mod 명령어]
go mod 명령어 실행 시, 다양한 command 를 확인 할 수 있다.
- go mod init {패키지_이름}
# 현재 디렉터리의 go.mod 파일을 생성한다.
# - go mod tidy
# 현재 디렉터리가 존재하는 패키지에서 모듈 의존성을 파악하여
# go.mod 파일을 수정한다.
# 의존 패키지가 있다면, 추가하고
# 없으면, 삭제한다.
# - go mod edit
# go.mod 를 수정하는데, 보통 직접 go.mod 파일을 수정하고 있음
[3. go.mod 파일]
go mod init 시 생성되는 파일로, 최초에는 module 이름과 go version 정보 등이 적혀 있다.
이 파일에 필요한 module 을 명시하면 된다.
[4. 외부 패키지 import]
go.mod 에 해당하는 모듈에 속하는 소스코드 작성 시 외부 패키지가 필요한 경우,
go get 명령어를 이용하여 외부 패키지를 설치하면 된다.
- go get github.com/dhconnelly/rtreego@v1.1.0
# @version 은 필수가 아닌 듯
# 버전은 git tag 로 명시되는 것으로 알고있음 - GOPATH 밑 GOMODCACHE 밑에 다운로드 된다.
- 이후 go mod tidy 를 하도록 한다.
[5. 로컬 패키지 import]
github 에 공개되지 않은 패키지인 경우, 본인의 개발환경에만 존재하는 패키지인 경우,
go.mod 파일을 직접 수정하도록(?) 한다.
- require mypkg v0.0.0
- replace mypkg => /home/user/somewhere
보통 go.mod 파일에 외부 패키지를 아래와 같이 명시한다.
- require "패키지이름" "버전정보"
그런데 해당 패키지는 자신의 pc 에만 있으므로,
replace 를 통해 해당 패키지가 존재하는 로컬 경로를 명시하는 것이다.
[6. 패키지 의존성]
로컬 패키지(A) 가 어떤 외부 패키지(B) 를 이용하여 작성되어 있고,
내가 생성한 (main() 을 갖는) 패키지(C) 가 이 로컬 패키지를 이용할 경우,
패키지 C 는 패키지 B 에 의존하게 된다.
이 때, go mod tidy 를 이용해서 go.mod 파일에 의존성을 명시해주도록 한다.
이 경우, 참조하게되는 패키지는 " // indirect " 라고 명시된다.
[7. 예제]
- go mod init firstapp
- vim main.go ,
# 적절히 main 함수를 작성 - go build && ./firstapp
# 빌드 후, 바이너리 실행 - mkdir impl
- cd impl
- go mod init impl
- vim my1.go
# 적절한 기능 구현 - vim my2.go
# 적절한 기능 구현 - cd ..
- go get github.com/dhconnelly/rtreego@v1.1.0
- cd ..
- go mod tidy
'Go' 카테고리의 다른 글
[golang] haversine & bearing (0) | 2024.03.27 |
---|---|
비트연산 (0) | 2023.08.18 |
go build 옵션 (0) | 2023.04.17 |
go heap container (0) | 2022.09.08 |
go mod (0) | 2022.08.10 |