티스토리 뷰
개요
실제 프로젝트의 일부를 떼어와서 구현중인데, 이때 local의 모듈들을 import 해서 사용하려 한다.
하나씩 순서대로 해보며 정리하겠다.
* 실제 프로젝트를 기반으로 하는지라 포스팅에서는 이름을 바꾸어서 정리함.
단계1. 구조 잡기
- 실제로 구현을 하려는 녀석는 mymodule 모듈이다.
- 각각 폴더마다 다른 모듈들이 있으며, 각각의 모듈은 하나의 패키지로 구성되어 있으며
- 하나의 패키지는 하나 이상의 Go source file 로 이루어져 있다.
+---common | +---constants | +---types | +---message | +---queue +---log +---mymodule
|
왼쪽과 같은 폴더 구조를 가지고 있으며, 각각의 모듈명은 아래와 같다. (폴더 명과 같도록 하였음)
이들은 각각의 폴더에 폴더명과 같은 .go 파일을 가지고 있으며, .go file 의 시작은 package <모듈명> 으로 되어 있다. |
단계2. go mod init <묘듈명>
1) 각각의 폴더로 들어가서 go mod init 을 해준다.
예를 들어 constants 라면, constants.go 가 있는 폴더로 이동하여 $go mod init constants 라고 해준다. * 이때 .go 소스파일의 package 뒤에 코멘트처리를 하여 go mod init 뒤의 constants 를 생략할 수 있는 방법도 있음. |
2) 위와 같이 해주면 각각 실행한 폴더에 go.mod 파일이 생성된다.
위에 예를 든 constants 의 go.mod 라면 module constants 라는 내용이 생성되어 있다. |
단계3. import
위에 정의해둔 모듈명에 따라서 각각의 .go source 파일에서 필요한 모듈을 import 해준다.
아래와 같이 임의의 myapp.com 이라는 prefix 를 붙여보았다. 붙이지 않아도 상관은 없다.
모듈 |
모듈명 |
constants |
myapp.com/common/constants |
types |
myapp.com/common/types |
message |
myapp.com/common/message |
queue |
myapp.com/common/queue |
log |
myapp.com/log |
mymodule |
myapp.com/mymodule |
mymodule.go 의 경우에는 위 모듈을 모두 import 하기에 아래와 같이 import 하여 주었다.
import ( "myapp.com/common/constants" "myapp.com/common/types" "myapp.com/common/message" "myapp.com/common/queue" "myapp.com/log" ) |
단계4. require, replace
다른 모듈을 import 하는 모듈의 go.mod 를 수정해준다.
1) require, replace 를 이용하여 실제 local path 를 (relative or absolute path) 지정해준다
2) version 은 v0.0.0 으로 해주면 된다.
mymodule 의 go.mod 는 다음과 같다.
→ require 가 정의되어 있어야 하며
→ 그에 대응되는 replace 에서 mymodule 폴더에서 본 상대 주소를 명시해주고 있는것을 챙겨보자.
- 결국 myapp.com 은 아무거나 써넣어줘도 되고 - 심지어 아무것도 안써도 되고 - 그걸 replace 에서 진짜 path 를 알려주면 되는 것이다.
module user
require ( myapp.com/common/constants v0.0.0 myapp.com/common/types v0.0.0 myapp.com/common/message v0.0.0 myapp.com/common/queue v0.0.0 myapp.com/log v0.0.0 )
replace ( myapp.com/common/constants v0.0.0 => ../common/constants myapp.com/common/types v0.0.0 => ../common/types myapp.com/common/message v0.0.0 => ../common/message myapp.com/common/queue v0.0.0 => ../common/queue myapp.com/log v0.0.0 => ../log ) |
단계5. go build
user 폴더에서 go build 를 실행한다. 끝!
'golang' 카테고리의 다른 글
General Egg Problem (0) | 2019.05.24 |
---|---|
Dynamic Programming (0) | 2019.05.22 |
Go Modules - Local Modules (0) | 2019.04.10 |
Slack slash command: Verifying requests from Slack: code (0) | 2019.02.25 |
Slack slash command: Verifying requests from Slack (0) | 2019.02.19 |
- Total
- Today
- Yesterday
- solid
- clean agile
- 체호프
- 노션
- 오블완
- OpenAI
- 독서후기
- golang
- 2023
- 영화
- bun
- Bug
- notion
- go
- 인텔리제이
- github
- strange
- 제이펍
- folklore
- websocket
- agile
- Shortcut
- ChatGPT
- 티스토리챌린지
- intellij
- 독서
- 잡학툰
- API
- 클린 애자일
- Gin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |