Kubernetes 이야기

모둘과 패키지 본문

개발/go

모둘과 패키지

kmaster 2022. 8. 22. 16:57
반응형

Go는 소스 루트 디렉토리에 유효한 go.mod 파일이 있을 때 모듈이 된다. go.mod 파일은 수동으로 만들수도 있으나 go mod 명령어로 생성할 수 있다.

go mod init <MODULE_PATH>

<MODULE_PATH> 는 해당 모듈을 식별하기 위한 전역적으로 유일한 이름이다.

출처 :&nbsp;https://go.dev/doc/modules/managing-source

테스트

 

go.mod

아래와 같이 모듈을 생성해 보자.

# go env -w GO111MODULE=on
# go mod init example.com/mymodule
go: creating new go.mod: module example.com/mymodule

이렇게 하면 go.mod 파일이 폴더에 생성되고 해당 go.mod 파일의 내용은 아래와 같다.

module example.com/mymodule

go 1.18

 

패키지빌드

디렉토리를 모듈로 만들어 봤다. 이제 코드를 위한 패키지를 구성해 보자.

 

calc.go

package calc

func Add(a int, b int) int {
	return a + b
}

 

main.go

package main

import (
	"fmt"

	"example.com/mymodule/calc"
)

func main() {
	a := calc.Add(3, 5)

	fmt.Printf("add = %d", a)
}

실행결과

# go run main.go
add = 8

 

일반적으로 패키지를 포함하는 디렉토리 이름과 일치하는 패키지 이름을 만들도록 하자.

 

패키지 삭제

# go clean -i -v -x example.com/mymodule/calc
# go mod tidy

 

모듈 구성방법

모듈에서 Go 패키지를 구성하는 공식적인 방법은 없으나, 코드의 가독성을 높이기 위해 일반적인 방식은 아래와 같다.

 

/cmd

모듈이 하나 이상의 응용 프로그램으로 구성되어 있다면, 모듈의 Root 디렉토리에 cmd 라는 디렉토리를 만든다. 통상 cmd  디렉토리 하위에는 main 패키지를 둔다.

 

/pkg

외부 애플리케이션에서 사용되어도 괜찮은 라이브러리 코드

 

/internal

개인적인 애플리케이션과 라이브러리 코드. 다른 사람들이 애플리케이션이나 라이브러리에서 임포트 하기를 원하지 않는 코드. internal 이라는 패키지를 생성할 때, 패키지와 해당 하위 패키지의 노출된 식별자는 internal 의 바로 상위의 부포 패키지와 internal 과 같은 레벨의 디렉토리에서만 접근이 가능하다.

 

/vendor

애플리캐이션 종속성. go mod vendor 명령어는 /vendor 디렉터리를 만든다.

 

/api

OpenAPI/Swagger 스펙들, JSON schema 파일들, 프로토콜 정의 파일들

 

/web

웹 플리케이션의 특정한 컴포넌트들

 

/configs

설정 파일 템플릿이나 기본 설정들

 

/deployments or /deploy

IaaS, PaaS, 시스템과 컨테이너 오케스트레이션 배포 설정과 템플릿 (docker-compose, kubernetes/helm, mesos, terraform, bosh)

 

/docs

디자인과 사용자 문서들

 

/examples

애플리케이션 혹은 공개된 라이브러리의 예시들

반응형

'개발 > go' 카테고리의 다른 글

GoDS ( Go Data Structures )  (0) 2022.08.24
Viper  (0) 2022.08.23
cobra library 사용법  (0) 2022.08.22
Kubebuilder ( Kubernetes operator )  (0) 2022.08.17
Golang - Gin Framework  (0) 2022.08.08
Comments