티스토리 뷰

golang

Go Modules - Local Modules 실전

주먹불끈 2019. 4. 10. 17:11

개요

 

실제 프로젝트의 일부를 떼어와서 구현중인데, 이때 local 모듈들을 import 해서 사용하려 한다.

하나씩 순서대로 해보며 정리하겠다.

* 실제 프로젝트를 기반으로 하는지라 포스팅에서는 이름을 바꾸어서 정리함.

 

단계1. 구조 잡기

 

- 실제로 구현을 하려는 녀석는 mymodule 모듈이다.

- 각각 폴더마다 다른 모듈들이 있으며, 각각의 모듈은 하나의 패키지로 구성되어 있으며

- 하나의 패키지는 하나 이상의 Go source file 이루어져 있다.

 

+---common

|   +---constants

|   +---types

|   +---message

|   +---queue

+---log

+---mymodule

 

 

 

왼쪽과 같은 폴더 구조를 가지고 있으며, 각각의 모듈명 아래와 같다. (폴더 명과 같도록 하였음)

 

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
«   2024/12   »
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
글 보관함