post Image
Goのpathとfilepathでは動作が異なる Windowsでも正しくパスを扱う

goにはパスを操作するパッケージが、標準で pathpath/filepath の2つ有ります。

  • https://golang.org/pkg/path/

    • Package path implements utility routines for manipulating slash-separated paths.
    • スラッシュをセパレータとして常に使用
  • https://golang.org/pkg/path/filepath/

    • Package filepath implements utility routines for manipulating filename paths in a way compatible with the target operating system-defined file paths.
    • システムのセパレータを使用

Base,Dir,Join,Split 等が両方に用意されていますが、ローカルファイルを操作する場合等は filepath の方を使うのがベターです。

サンプルコード

package main

import (
    "fmt"
    "path"
    "path/filepath"
)

func main() {
    fmt.Println("===== Windows Style Path =====")
    winInput := `C:\Windows\System32\drivers\etc\hosts`
    fmt.Println("input: ", winInput)
    fmt.Println("path.Dir: ", path.Dir(winInput))
    fmt.Println("path.Base: ", path.Base(winInput))
    fmt.Println("filepath.Dir: ", filepath.Dir(winInput))
    fmt.Println("filepath.Base: ", filepath.Base(winInput))

    fmt.Println("===== UNIX Style Path =====")
    unixInput := "/etc/hosts"
    fmt.Println("input: ", unixInput)
    fmt.Println("path.Dir: ", path.Dir(unixInput))
    fmt.Println("path.Base: ", path.Base(unixInput))
    fmt.Println("filepath.Dir: ", filepath.Dir(unixInput))
    fmt.Println("filepath.Base: ", filepath.Base(unixInput))
}

https://play.golang.org/p/17MH9zqrub

Linuxでの実行結果

===== Windows Style Path =====
input:  C:\Windows\System32\drivers\etc\hosts
path.Dir:  .
path.Base:  C:\Windows\System32\drivers\etc\hosts
filepath.Dir:  .
filepath.Base:  C:\Windows\System32\drivers\etc\hosts
===== UNIX Style Path =====
input:  /etc/hosts
path.Dir:  /etc
path.Base:  hosts
filepath.Dir:  /etc
filepath.Base:  hosts

Linuxでは path filepath 共に正常な値を取得できます。

Windowsでの実行結果

===== Windows Style Path =====
input:  C:\Windows\System32\drivers\etc\hosts
path.Dir:  .
path.Base:  C:\Windows\System32\drivers\etc\hosts
filepath.Dir:  C:\Windows\System32\drivers\etc
filepath.Base:  hosts
===== UNIX Style Path =====
input:  /etc/hosts
path.Dir:  /etc
path.Base:  hosts
filepath.Dir:  \etc
filepath.Base:  hosts

Windowsでは、 filepath が意図した値を取得できています。


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。