레슨 5 / 8·20분
패키지와 모듈
패키지 구조
Go 프로그램은 패키지로 구성됩니다. 하나의 디렉토리는 하나의 패키지이며, go mod로 모듈을 관리합니다. 대문자로 시작하는 이름만 외부에 공개(export)됩니다.
go
// 프로젝트 구조 예시:
// myapp/
// go.mod
// main.go
// calc/
// math.go
// math_test.go
// --- go.mod ---
// module myapp
// go 1.21
// --- calc/math.go ---
package calc
// Add - 대문자로 시작하면 외부 공개 (exported)
func Add(a, b int) int {
return a + b
}
// subtract - 소문자로 시작하면 패키지 내부만 사용
func subtract(a, b int) int {
return a - b
}
// --- main.go ---
// package main
//
// import (
// "fmt"
// "myapp/calc"
// )
//
// func main() {
// fmt.Println(calc.Add(3, 4)) // 7
// }go mod 명령어
go
// 새 모듈 초기화
// $ go mod init myapp
// 외부 패키지 추가
// $ go get github.com/gorilla/mux
// 사용하지 않는 의존성 정리
// $ go mod tidy
// 의존성 다운로드
// $ go mod download자주 쓰는 표준 라이브러리
go
package main
import (
"encoding/json"
"fmt"
"os"
"strings"
"time"
)
func main() {
// strings 패키지
s := "Hello, Go World"
fmt.Println(strings.ToUpper(s)) // HELLO, GO WORLD
fmt.Println(strings.Contains(s, "Go")) // true
fmt.Println(strings.Split("a,b,c", ",")) // [a b c]
fmt.Println(strings.Join([]string{"a", "b"}, "-")) // a-b
// time 패키지
now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05"))
// JSON 인코딩/디코딩
type User struct {
Name string 'json:"name"'
Age int 'json:"age"'
}
user := User{Name: "김철수", Age: 25}
data, _ := json.Marshal(user)
fmt.Println(string(data)) // {"name":"김철수","age":25}
// 환경 변수
home := os.Getenv("HOME")
fmt.Println("홈:", home)
}- •
fmt-- 포맷 출력 (Println, Printf, Sprintf) - •
strings-- 문자열 조작 (Split, Join, Contains 등) - •
strconv-- 문자열/숫자 변환 - •
os-- 파일, 환경 변수, 프로세스 - •
io-- 입출력 인터페이스 - •
encoding/json-- JSON 인코딩/디코딩 - •
net/http-- HTTP 클라이언트/서버 - •
time-- 시간, 타이머, 포맷
💡
Go의 시간 포맷은 독특합니다. "2006-01-02 15:04:05" 라는 고정 참조 시간을 사용합니다. 다른 언어의 YYYY-MM-DD와 다르니 주의하세요.