개요
이전 post([go] 1. downloading 가능한 module 및 package 만들기)에서 download가능한 module을 만들어 보았습니다.
그러나 program 을 개발 하다보면 외부에 노출 되면 안되는 module들도 많이 개발합니다.
그러면 이러한 module을 어떻게 만들면 되는지 알아보겠습니다.
참조 : https://go.dev/doc/tutorial/call-module-code
절차
1. 내부 모듈 생성 (inner_hello)
2. 내부 모듈 경로 설정
3. main package에서 호출
내부 모듈 생성 (inner)
내부 모듈은 main package directory에서 생성을 합니다.
1. inner 생성
#mkdir inner
2. inner_hello module 생성 모듈 path는 main module path 뒤에 "/module_name" 형식으로 추가 합니다.
#go mod init toward-the-best.com/inner
go: creating new go.mod: module toward-the-best.com/inner
#cat go.mod
module toward-the-best.com/inner
go 1.19
3. package 생성
file : ./inner/hello.go
package name : inner
package inner
import "fmt"
func Hello(name string) string {
msg := fmt.Sprintf("Hi. %v. inner peace", name)
return msg
}
내부 모듈 경로 설정
go 1.18 이후
workspace modoule기능을 사용하면 됩니다.
go 1.18 이전에는 go mod edit --replace toward-the-best.com/inner=./inner 와같이 일일이 상대경로를 go.mod에 추가해주어야 했지만 go 1.18 이후에는 다음 과정을 거쳐서 사용하면 됩니다. (vscode에서는 왜 빨간줄인지 모르겠다)
https://jeremyko.blogspot.com/2022/03/golang-118-workspace-mode.html
go 1.18 이전
1. module 경로를 재설정 합니다.
#go mod edit --replace toward-the-best.com/inner=./inner
2. 재 설된 go module을 추가 합니다.
#go mod tidy
go: found toward-the-best.com/inner in toward-the-best.com/inner v0.0.0-00010101000000-000000000000
3. go.mod에서 추가된 inner 모듈을 확인합니다.
#cat go.mod
module toward-the-best.com
go 1.19
replace toward-the-best.com/inner => ./inner
require toward-the-best.com/inner v0.0.0-00010101000000-000000000000
main package에서 호출
이제 main.go에서
inner "toward-the-best.com/inner" 한 줄을 추가하면 내부용 모듈을 사용 할 수 있습니다.
file : main.go
package main
import (
"fmt"
inner "toward-the-best.com/inner"
)
func main() {
resp := inner.Hello("jinkwon.kim")
fmt.Println(resp)
}
결론
module을 만든 후 내부에서만 사용가능 하게하려면
#go mod edit --replace 를 이용하여 module의 경로를 상대경로로 변경 하면 됩니다.
정리
우리는 [go] downloading 가능한 module 및 package 만들기 와 [go] 내부 module 및 package 만들기를 통해서
module 다운로드 가능한 모듈과 내부에서 사용가능한 모듈 만드는 방법을 알아 보았습니다.
다음 post에서는 module version 관리하는 방법을 알아보겠습니다.
'ProgrammingLang > Go' 카테고리의 다른 글
[go] vscode Error 및 Warning (0) | 2023.02.02 |
---|---|
[go] go mod vendor 사용법 (2) | 2023.01.31 |
[go] downloading 가능한 module 및 package 만들기 (0) | 2023.01.19 |
[go] 개발에 도움되는 오픈소스 (0) | 2023.01.18 |
[Go Lang] package xx is not in GOROOT (/snap/go/9028/src/xx) 해결 방법 (0) | 2022.03.03 |