Функция filepath.Join

Функция filepath.Join объединяет один или несколько элементов пути в один строковый путь. Она автоматически добавляет правильный разделитель для операционной системы: обратный слеш \ на Windows или прямой слеш / на Unix-подобных системах. Первым параметром функция принимает базовую директорию, а последующие параметры — вложенные элементы пути. В результате возвращается строка с объединенным путем.

Синтаксис

gofilepath.Join(elem ...string) string

Пример

Давайте объединим несколько элементов пути на Unix-системе:

gopackage main

import (
  "fmt"
  "path/filepath"
)

func main() {
  res := filepath.Join("home", "user", "docs", "file.txt")
  fmt.Println(res)
}

Результат выполнения кода:

go"home/user/docs/file.txt"

Пример

Функция автоматически очищает путь, удаляя лишние слеши и нормализуя разделители:

gopackage main

import (
  "fmt"
  "path/filepath"
)

func main() {
  res := filepath.Join("home//user", "docs", "file.txt")
  fmt.Println(res)
}

Результат выполнения кода:

go"home/user/docs/file.txt"

Пример

Функция игнорирует пустые элементы и обрабатывает абсолютные пути правильно:

gopackage main

import (
  "fmt"
  "path/filepath"
)

func main() {
  res1 := filepath.Join("", "dir", "file.txt")
  res2 := filepath.Join("/", "usr", "bin", "app")
  fmt.Println(res1)
  fmt.Println(res2)
}

Результат выполнения кода:

go"dir/file.txt"
"/usr/bin/app"

Пример

Функция корректно обрабатывает переходы по директориям с помощью ..:

gopackage main

import (
  "fmt"
  "path/filepath"
)

func main() {
  res := filepath.Join("home", "user", "..", "docs", "file.txt")
  fmt.Println(res)
}

Результат выполнения кода:

go"home/docs/file.txt"

Смотрите также

  • функцию filepath.Clean,
    которая нормализует и очищает путь от лишних элементов
  • функцию filepath.Abs,
    которая возвращает абсолютный путь к файлу или директории
  • функцию filepath.Base,
    которая извлекает последний элемент пути
  • функцию filepath.Dir,
    которая извлекает директорию из пути