반응형
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
👨💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.
Go 에서 패키지 내부에 여러개의 go 파일로 나눠서 구현하는 방법은 어떻게 되는지 간략히 알아보았습니다.
질문 >
Go 에서 패키지 내부에 여러개의 go 파일로 나눠서 구현하는 방법은 어떻게 되나요?
답변 >
Go에서는 하나의 패키지 내부에 여러 개의 .go 파일로 코드를 나누어 작성할 수 있습니다. 이는 큰 패키지를 논리적으로 분리하여 가독성과 유지보수성을 높이는 데 유용합니다.
다음은 여러 개의 Go 파일로 패키지를 나누는 방법과 관련된 규칙, 사례를 설명합니다.
1. 기본 규칙
- 같은 패키지 이름 사용
- 한 디렉토리에 있는 모든 .go 파일은 동일한 패키지 이름을 가져야 합니다.
- 디렉토리가 패키지를 나타내며, 파일 간에는 상호 참조가 가능합니다.
- 파일 간 함수 및 변수 공유
- 같은 패키지 내에서는 func, var, const, type 등을 공유할 수 있습니다.
- 대문자로 시작하는 이름은 패키지 외부에서도 접근 가능(공용), 소문자로 시작하면 패키지 내부에서만 접근 가능(비공용)합니다.
2. 디렉토리 및 파일 구조
예: 패키지를 여러 파일로 나누기
mypackage/
├── add.go // 덧셈 관련 함수
├── subtract.go // 뺄셈 관련 함수
├── multiply.go // 곱셈 관련 함수
├── divide.go // 나눗셈 관련 함수
├── main.go // 실행 파일
3. 코드 예제
3.1. add.go
package mypackage
// Add adds two integers and returns the result.
func Add(a, b int) int {
return a + b
}
3.2. subtract.go
package mypackage
// Subtract subtracts the second integer from the first.
func Subtract(a, b int) int {
return a - b
}
3.3. multiply.go
package mypackage
// Multiply multiplies two integers and returns the result.
func Multiply(a, b int) int {
return a * b
}
3.4. divide.go
package mypackage
// Divide divides the first integer by the second and returns the result.
// If the divisor is zero, it returns zero.
func Divide(a, b int) int {
if b == 0 {
return 0
}
return a / b
}
3.5. main.go
package main
import (
"fmt"
"mypackage" // 사용자 정의 패키지 import
)
func main() {
fmt.Println("Add: ", mypackage.Add(10, 5))
fmt.Println("Subtract: ", mypackage.Subtract(10, 5))
fmt.Println("Multiply: ", mypackage.Multiply(10, 5))
fmt.Println("Divide: ", mypackage.Divide(10, 5))
}
4. 컴파일 및 실행
4.1. 환경 변수 설정
Go에서는 사용자 정의 패키지를 사용할 때 모듈을 설정해야 합니다.
- 프로젝트 디렉토리에서 모듈 초기화:
go mod init myproject
- Go 파일 빌드 및 실행:
go run main.go
5. 모범 사례
- 파일별로 역할 분리
- 각 파일은 특정 기능(예: 유틸리티, 데이터 처리, API 호출 등)을 담당하도록 설계합니다.
- 중복된 패키지 이름 피하기
- 디렉토리 내에서 패키지 이름은 동일해야 하지만, 디렉토리 이름은 겹치지 않도록 합니다.
- 공용 및 비공용 함수 구분
- 외부로 노출할 함수는 대문자로 시작하고, 내부에서만 사용할 함수는 소문자로 시작합니다.
- 디렉토리 구조 활용
- 큰 프로젝트는 디렉토리 구조를 활용해 패키지를 더 세분화할 수 있습니다.
project/
├── cmd/ // 실행 가능한 애플리케이션
│ └── main.go
├── pkg/ // 재사용 가능한 패키지
│ ├── math/
│ │ ├── add.go
│ │ ├── subtract.go
│ │ ├── multiply.go
│ │ └── divide.go
│ └── strings/
│ └── utils.go
└── go.mod // Go 모듈 설정
6. 요약
- 같은 디렉토리 안의 파일은 동일한 패키지 이름을 가져야 함.
- 기능별로 파일을 나누어 코드 가독성을 높임.
- go mod init을 통해 모듈 환경을 설정하고 패키지를 관리.
- 공용 함수와 비공용 함수의 구분을 명확히 함.
위 방법을 활용하면 유지보수성과 확장성이 높은 Go 애플리케이션을 개발할 수 있습니다.
🎬 유튜브 채널 🎬
위로그@WiLog
📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌
www.youtube.com
🎬 치지직 채널 🎬
위로그 채널 - CHZZK
지금, 스트리밍이 시작됩니다. 치지직-
chzzk.naver.com
반응형
'프로그래밍' 카테고리의 다른 글
👨💻 [Go] Go 에서 하위 패키지에 직접적인 접근을 막고, 상위 패키지를 통해서만 하위 패키지의 기능을 제공하려면, 어떻게 해야 하나요? (0) | 2025.01.15 |
---|---|
👨💻 [Go] Go 에서 상위 패키지와 하위 패키지를 구분하는 방법이 어떻게 되나요? (0) | 2025.01.15 |
👨💻 [Go] Go 에서 시그널 이벤트를 처리하는 방법은 어떻게 되나요? (0) | 2025.01.15 |
👨💻 [Go] Go 에서 모듈과 패키지의 이름을 짓는 규칙은 어떻게 되나요? (0) | 2025.01.15 |
👨💻 [C++] C++ 의 ev++ 에서 ev::sig 는 무엇이며, 어떻게 활용할 수 있나요? (0) | 2025.01.14 |