ProgrammingLang/Go

[go] 내부 module 및 package 만들기

jinkwon.kim 2023. 1. 20. 09:53
728x90
반응형

개요

이전 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 관리하는 방법을 알아보겠습니다.

728x90
반응형