Go 표준 라이브러리 탐색: 일상 프로그래밍을 위한 필수 패키지
Emily Parker
Product Engineer · Leapcell

Go의 표준 라이브러리는 개발을 간소화하는 풍부한 사전 구축 기능 세트를 제공하며, 이는 Go의 강점의 초석입니다. 많은 일반적인 작업에 대해 언어 자체에 우아하고 효율적인 솔루션이 포함되어 있음을 알게 될 것입니다. 이 글에서는 모든 Go 개발자가 익숙해야 할 여섯 가지 기본 패키지, 즉 fmt
, os
, io
, time
, strings
및 strconv
를 탐구합니다. 핵심 기능과 실용적인 예제를 통한 사용법을 살펴보겠습니다.
1. fmt
: 형식화된 I/O
fmt
패키지는 C의 printf
및 scanf
와 유사한 함수를 사용하여 형식화된 I/O(입력/출력)를 구현합니다. 콘솔에 메시지를 출력하고, 문자열을 형식화하고, 사용자 입력을 읽는 데 필수적입니다.
주요 함수:
fmt.Println()
: 인수를 출력한 후 줄 바꿈을 합니다.fmt.Printf()
:%s
(문자열),%d
(10진수 정수),%f
(부동 소수점 숫자),%v
(값, 기본 형식),%T
(유형) 등과 같은 동사를 사용하여 형식화된 출력을 제공합니다.fmt.Sprintf()
: 형식 지정자에 따라 형식을 지정하고 결과 문자열을 반환합니다.fmt.Scan()
,fmt.Scanln()
,fmt.Scanf()
: 표준 입력에서 입력을 읽습니다.
예제:
package main import "fmt" func main() { name := "Alice" age := 30 salary := 50000.75 // 간단한 출력을 위해 Println 사용 fmt.Println("Hello, Go!") fmt.Println("Name:", name, "Age:", age) // 형식화된 출력을 위해 Printf 사용 fmt.Printf("User: %s, Age: %d years old, Salary: %.2f USD\n", name, age, salary) // 문자열을 형식화하기 위해 Sprintf 사용 (출력 없이) message := fmt.Sprintf("Welcome, %s! Your ID is %d.", name, 123) fmt.Println(message) // 입력 읽기 (기본 예제) var city string fmt.Print("Enter your city: ") fmt.Scanln(&city) fmt.Println("You live in:", city) }
2. os
: 운영 체제 상호 작용
The os
package provides a platform-independent interface to operating system functionality. This includes file operations, environment variables, command-line arguments, process management, and more.
주요 기능:
- 파일 및 디렉터리 작업:
os.Create()
,os.Open()
,os.ReadFile()
,os.WriteFile()
,os.Remove()
,os.Mkdir()
,os.Rename()
. - 환경 변수:
os.Getenv()
,os.Setenv()
. - 명령줄 인수:
os.Args
. - 프로세스 정보:
os.Getpid()
,os.Getuid()
. - 종료 상태:
os.Exit()
.
예제:
package main import ( "fmt" "io/ioutil" "os" ) func main() { // 명령줄 인수 접근 fmt.Println("Command-line arguments:", os.Args) if len(os.Args) > 1 { fmt.Println("First argument:", os.Args[1]) } // 파일 생성 및 쓰기 fileName := "example.txt" err := ioutil.WriteFile(fileName, []byte("Hello from Go!"), 0644) if err != nil { fmt.Println("Error writing file:", err) return } fmt.Println("File created:", fileName) // 파일에서 읽기 content, err := ioutil.ReadFile(fileName) if err != nil { fmt.Println("Error reading file:", err) return } fmt.Println("File content:", string(content)) // 환경 변수 가져오기 및 설정 os.Setenv("MY_VARIABLE", "GoLang_Rocks") envVar := os.Getenv("MY_VARIABLE") fmt.Println("MY_VARIABLE:", envVar) // 파일 삭제 defer func() { // 오류 발생 시에도 정리 보장 err := os.Remove(fileName) if err != nil { fmt.Println("Error removing file:", err) } else { fmt.Println("File removed:", fileName) } }() }
참고: ioutil
은 최신 Go 버전에서 더 이상 사용되지 않습니다. 파일 작업을 위해서는 os
및 io
패키지의 함수(예: os.WriteFile
, os.ReadFile
)를 직접 사용하는 것이 권장됩니다.
3. io
: 기본 I/O 원시
io
패키지는 기본적으로 Reader
및 Writer
인터페이스에 중점을 둔 I/O 원시 기본에 대한 기본 인터페이스를 제공합니다. 이러한 인터페이스는 Go가 데이터 스트림을 처리하는 방식의 기초이며, 매우 유연하고 분리된 I/O 작업을 가능하게 합니다.
주요 인터페이스 및 함수:
io.Reader
: 데이터를 읽기 위한 인터페이스.io.Writer
: 데이터를 쓰기 위한 인터페이스.io.Copy()
:Reader
에서Writer
로 데이터를 복사합니다.io.ReadAll()
: EOF까지io.Reader
에서 모든 데이터를 읽고 바이트 슬라이스로 반환합니다.
예제:
package main import ( "bytes" "fmt" "io" "os" "strings" ) func main() { // 예제 1: 문자열에서 버퍼로 복사 reader := strings.NewReader("This is some text to be read.") var buffer bytes.Buffer n, err := io.Copy(&buffer, reader) if err != nil { fmt.Println("Error copying:", err) return } fmt.Printf("Copied %d bytes: %s\n", n, buffer.String()) // 예제 2: 파일(io.Reader)에서 표준 출력(io.Writer)으로 읽기 file, err := os.Open("example.txt") // os 패키지 예제에서 example.txt가 있다고 가정 if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() fmt.Println("Content of example.txt via io.Copy to Stdout:") _, err = io.Copy(os.Stdout, file) if err != nil { fmt.Println("Error copying to stdout:", err) } // 예제 3: 모든 내용을 바이트 슬라이스로 읽기 r := strings.NewReader("Another string to read fully.") allContent, err := io.ReadAll(r) if err != nil { fmt.Println("Error reading all:", err) } fmt.Printf("ReadAll content: %s\n", allContent) }
4. time
: 시간 및 기간
time
패키지는 시간 측정 및 표시, 파싱 및 형식화, 기간, 티커를 포함한 기능을 제공합니다. 날짜, 시간 및 예약과 관련된 모든 것에 중요합니다.
주요 유형 및 함수:
time.Time
: 특정 시점을 나타냅니다.time.Duration
: 두 시점 사이의 경과 시간을 나타냅니다.time.Now()
: 현재 로컬 시간을 반환합니다.time.Parse()
: 형식화된 문자열을time.Time
객체로 파싱합니다.time.Format()
:time.Time
객체를 문자열로 형식화합니다.time.Since()
: 주어진 시간 이후의 기간을 계산합니다.time.Sleep()
: 지정된 기간 동안 현재 고루틴을 일시 중지합니다.time.Stamp
,time.RFC3339
등: 형식화를 위한 사전 정의된 레이아웃.
예제:
package main import ( "fmt" "time" ) func main() { // 현재 시간 가져오기 now := time.Now() fmt.Println("Current time:", now) // 시간 형식화 fmt.Println("Formatted (RFC3339):", now.Format(time.RFC3339)) fmt.Println("Formatted (Custom):",