일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gitea
- Argo
- argo rollout
- 오퍼레이터
- CI/CD
- kubernetes operator
- Model Serving
- seldon core
- gitops
- keda
- Kubernetes
- Kubeflow
- serving
- tekton
- CANARY
- knative
- MLflow
- opentelemetry
- opensearch
- mlops
- argocd
- Kubernetes 인증
- blue/green
- Litmus
- 카오스 엔지니어링
- Pulumi
- operator
- Continuous Deployment
- Kopf
- nginx ingress
- Today
- Total
Kubernetes 이야기
모둘과 패키지 본문
Go는 소스 루트 디렉토리에 유효한 go.mod 파일이 있을 때 모듈이 된다. go.mod 파일은 수동으로 만들수도 있으나 go mod 명령어로 생성할 수 있다.
go mod init <MODULE_PATH>
<MODULE_PATH> 는 해당 모듈을 식별하기 위한 전역적으로 유일한 이름이다.
테스트
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 |