[golang] path/filepath 패키지로 멀티 플랫폼에서 파일 경로 처리

2024. 11. 20. 18:03·Language/Go

서론

현대의 애플리케이션은 다양한 플랫폼에서 동작해야 하는 경우가 많다. 특히 파일 경로를 다루는 작업은 운영 체제마다 파일 경로 구분자가 다르기 때문에 멀티 플랫폼 개발에서 흔히 마주치는 도전 과제 중 하나이다. Go 언어는 이러한 문제를 해결할 수 있는 표준 패키지를 제공한다. path/filepath 패키지는 각 플랫폼에서 사용하는 방식으로 파일 경로를 안전하게 처리할 수 있다. 파일 경로를 다루는 작업에서는 path/filepath 패키지를 사용해 처리하는 것이 플랫폼에 따른 코드 호환성을 보장하는 최선의 방법이다. 이 글에서는 간단한 예제를 통해 path/filepath 패키지의 사용법을 알아본다.

 

path/filepath 패키지 사용하기

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    fmt.Println("Separator:", string(filepath.Separator))
    fmt.Println("ListSeparator:", string(filepath.ListSeparator))

    path := filepath.Join("..", "asset", "example.jpg")
    fmt.Println("Path:", path)

    fmt.Println("Dir:", filepath.Dir(path))
    fmt.Println("Base:", filepath.Base(path))
    fmt.Println("Ext:", filepath.Ext(path))
}

이 예제는 path/filepath 패키지를 사용해 파일 경로를 다루는 방법을 보여준다. filepath.Separator와 filepath.ListSeparator는 각각 플랫폼에 맞는 파일 경로 구분자와 파일 경로 목록 구분자가 상수로 정의되어 있다. filepath.Join은 여러 경로를 결합해 하나의 경로를 만들 때 사용되며 각 플랫폼에 맞는 구분자가 자동으로 적용된다. 이 메소드를 사용하면 운영 체제에 관계없이 일관된 경로를 생성할 수 있다. filepath.Dir은 주어진 경로에서 디렉토리 부분만 반환하며 이를 통해 파일 이름을 제외한 디렉토리 경로를 얻을 수 있다. 반대로 filepath.Base는 경로에서 파일 이름을 반환하고 filepath.Ext는 주어진 경로에서 파일 확장자만 추출한다. 이 메소드들을 사용하면 다양한 플랫폼에서 경로를 안전하고 일관되게 처리할 수 있다.

 

Linux 및 macOS 실행 결과

Separator: /
ListSeparator: :
Path: ../asset/example.jpg
Dir: ../asset
Base: example.jpg
Ext: .jpg

Windows 실행 결과

Separator: \
PathListSeparator: ;
Path: ..\asset\example.jpg
Dir: ..\asset
Base: example.jpg
Ext: .jpg

 

마무리

path/filepath 패키지는 플랫폼에 따른 경로 구분자 차이를 자동으로 처리하여 멀티 플랫폼 환경에서 매우 유용하다. 이를 통해 개발자는 운영 체제에 구애받지 않고 경로를 안전하고 일관되게 처리할 수 있다. 이 글에서 다루지 않은 추가적인 기능이나 더 상세한 설명이 필요하다면 공식 문서를 참조하는 것이 좋다.

'Language > Go' 카테고리의 다른 글

[golang] 런타임에 콜 스택 출력하기  (1) 2024.11.22
[golang] panic과 recover로 try-catch 따라 하기  (1) 2024.11.21
[golang] flag 패키지로 명령줄 옵션 처리하기  (0) 2024.11.19
[golang] Go 언어 철학에서 switch문이 살아 남은 이유  (3) 2024.11.18
[golang] runtime 패키지로 메모리 사용 추적  (0) 2024.11.17
'Language/Go' 카테고리의 다른 글
  • [golang] 런타임에 콜 스택 출력하기
  • [golang] panic과 recover로 try-catch 따라 하기
  • [golang] flag 패키지로 명령줄 옵션 처리하기
  • [golang] Go 언어 철학에서 switch문이 살아 남은 이유
在晟
在晟
  • 在晟
    Jae-Sung
    在晟
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • Language (23)
        • Go (23)
      • DBMS (1)
        • MariaDB (1)
      • Notes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Jae-Sung
    • GitHub
  • 인기 글

  • 태그

    filepath
    fasthttp
    recover
    go
    오블완
    unsafe
    Runtime
    interface{}
    티스토리챌린지
    http
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
在晟
[golang] path/filepath 패키지로 멀티 플랫폼에서 파일 경로 처리
상단으로

티스토리툴바