0Pricing
Go Academy · 강의

os와 filepath 패키지

환경 변수, 경로 및 OS 상호작용

os와 filepath 패키지은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

os.Args — 명령줄 인수

os.Args에는 명령줄 인수가 저장됩니다. os.Args[0]은 프로그램 이름입니다:

package main
import ("fmt"; "os")

func main() {
    fmt.Println("Program:", os.Args[0])
    if len(os.Args) < 2 {
        fmt.Println("Usage: program <name>")
        os.Exit(1)
    }
    fmt.Printf("Hello, %s!\n", os.Args[1])
}

os.Getenv 및 os.Setenv

환경 변수를 읽고 씁니다:

package main
import ("fmt"; "os")

func main() {
    // Read env var (returns "" if not set)
    home := os.Getenv("HOME")
    fmt.Println("HOME:", home)

    // Set env var
    os.Setenv("APP_ENV", "production")
    fmt.Println(os.Getenv("APP_ENV")) // production

    // Get with default pattern:
    port := os.Getenv("PORT")
    if port == "" { port = "8080" }
    fmt.Println("Port:", port)
}

os.Exit — 프로그램 종료

os.Exit은 상태 코드와 함께 프로그램을 종료합니다. 종료 코드가 0이면 성공이고, 0이 아니면 오류입니다. 지연된 함수는 실행되지 않습니다:

package main
import ("fmt"; "os")

func main() {
    config := os.Getenv("CONFIG_PATH")
    if config == "" {
        fmt.Fprintln(os.Stderr, "error: CONFIG_PATH not set")
        os.Exit(1)  // signals error to the shell
    }
    fmt.Println("config:", config)
}

os.Open, os.Create, os.ReadFile

os 패키지를 사용한 파일 작업입니다:

package main
import ("fmt"; "os")

func main() {
    // Read entire file
    data, err := os.ReadFile("/etc/hostname")
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("hostname: %s", data)

    // Write file (overwrites if exists)
    err = os.WriteFile("/tmp/test.txt", []byte("hello\n"), 0644)
    fmt.Println("write err:", err)
}

os.Stat — 파일 정보

os.Stat은 파일 또는 디렉터리에 관한 정보를 반환합니다:

package main
import ("fmt"; "os")

func main() {
    info, err := os.Stat("/tmp")
    if err != nil {
        if os.IsNotExist(err) {
            fmt.Println("does not exist")
        }
        return
    }
    fmt.Println(info.Name())     // tmp
    fmt.Println(info.IsDir())    // true
    fmt.Println(info.Size())     // size in bytes
    fmt.Println(info.Mode())     // file permissions
    fmt.Println(info.ModTime())  // last modified time
}

os.MkdirAll 및 os.RemoveAll

디렉터리 트리를 생성하고 삭제합니다:

package main
import ("fmt"; "os")

func main() {
    // Create nested directories
    err := os.MkdirAll("/tmp/myapp/data/logs", 0755)
    fmt.Println("mkdir:", err)

    // Remove a file
    err = os.Remove("/tmp/test.txt")
    fmt.Println("remove:", err)

    // Remove directory and all contents
    err = os.RemoveAll("/tmp/myapp")
    fmt.Println("removeAll:", err)
}

path/filepath: 여러 플랫폼에서 사용하는 경로

path/filepath는 OS의 경로 구분자를 사용하여 파일 경로를 처리합니다(/는 Unix에서, \는 Windows에서 사용합니다):

package main
import ("fmt"; "path/filepath")

func main() {
    // Join path components correctly
    p := filepath.Join("/home", "user", "docs", "file.txt")
    fmt.Println(p)  // /home/user/docs/file.txt

    // Split path and file
    dir, file := filepath.Split(p)
    fmt.Println(dir, file) // /home/user/docs/ file.txt

    // Extension
    fmt.Println(filepath.Ext(p))  // .txt

    // Base name
    fmt.Println(filepath.Base(p)) // file.txt
}

filepath.Walk — 디렉터리 순회

디렉터리 트리를 순회하며 모든 파일과 디렉터리를 방문합니다:

package main
import ("fmt"; "os"; "path/filepath")

func main() {
    err := filepath.Walk("/tmp", func(path string, info os.FileInfo, err error) error {
        if err != nil { return err }
        if info.IsDir() {
            fmt.Println("[DIR]", path)
        } else {
            fmt.Printf("[FILE] %s (%d bytes)\n", path, info.Size())
        }
        return nil
    })
    if err != nil { fmt.Println("walk error:", err) }
}

filepath.Glob — 패턴 일치

글로브 패턴과 일치하는 파일을 찾습니다:

package main
import ("fmt"; "path/filepath")

func main() {
    // Find all .go files in current directory
    matches, err := filepath.Glob("*.go")
    if err != nil {
        fmt.Println(err)
        return
    }
    for _, m := range matches {
        fmt.Println(m)
    }

    // Absolute path resolution
    abs, _ := filepath.Abs("../myfile.txt")
    fmt.Println(abs)
}

os.TempDir 및 os.CreateTemp

임시 파일을 안전하게 생성합니다:

package main
import ("fmt"; "os")

func main() {
    // System temp directory
    fmt.Println(os.TempDir()) // /tmp

    // Create a unique temp file
    f, err := os.CreateTemp("", "myapp-*.json")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer os.Remove(f.Name()) // clean up
    defer f.Close()
    fmt.Println("temp file:", f.Name())
    _, _ = f.WriteString(`{"status":"ok"}`)
}

빠른 확인

여러 플랫폼에서 파일 경로 구성 요소를 올바르게 결합하는 함수는 무엇인가요?

복습: os 및 filepath

요약:

  • os.Args — 명령 인수, os.Getenv/Setenv — 환경 변수
  • 간단한 파일 입출력에는 os.ReadFile/WriteFile을 사용합니다
  • os.Stat — 파일 정보, os.IsNotExist(err) — 존재하지 않는 파일 확인
  • 디렉터리 관리에는 os.MkdirAll/RemoveAll을 사용합니다
  • 여러 플랫폼의 경로에는 filepath.Join/Split/Ext/Base를 사용합니다
  • 디렉터리 트리를 순회할 때는 filepath.Walk를 사용합니다

자주 묻는 질문

“os와 filepath 패키지” 강의는 무료인가요?

네 — “os와 filepath 패키지” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“os와 filepath 패키지”에서 뭘 배우나요?

환경 변수, 경로 및 OS 상호작용 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“os와 filepath 패키지” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. fmt와 strings 패키지
  2. strconv, math 및 sort
  3. time 패키지 핵심
  4. os와 filepath 패키지
← Go Academy(으)로 돌아가기