Go by Example: File Paths

Package (gói) filepath cung cấp các hàm để phân tích cú pháp và xây dựng các đường dẫn tập tin theo cách có thể dùng trên nhiều hệ điều hành khác nhau; ví dụ: dir/file trên Linux và dir\file trên Windows.

package main
import (
    "fmt"
    "path/filepath"
    "strings"
)
func main() {

Join nên được sử dụng để xây dựng các đường dẫn theo cách có thể dùng trên nhiều hệ điều hành khác nhau. Hàm nhận vào bất kì số lượng đối số và xây dựng một đường dẫn theo cấu trúc phân cấp từ chúng.

    p := filepath.Join("dir1", "dir2", "filename")
    fmt.Println("p:", p)

Bạn nên luôn sử dụng Join thay vì nối các kí tự /s or \s thủ công. Ngoài việc cung cấp khả năng sử dụng trên nhiều hệ điều hành, Join cũng chuẩn hóa đường dẫn bằng cách loại bỏ các bộ phận phân cách không cần thiết và thay đổi thư mục.

    fmt.Println(filepath.Join("dir1//", "filename"))
    fmt.Println(filepath.Join("dir1/../dir1", "filename"))

DirBase có thể được sử dụng để phân tách một đường dẫn thành thư mục và tên tập tin. Ngoài ra Split cũng trả về cả hai giá trị này trong một lần gọi.

    fmt.Println("Dir(p):", filepath.Dir(p))
    fmt.Println("Base(p):", filepath.Base(p))

Chúng ta có thể kiểm tra xem một đường dẫn có phải là tuyệt đối hay không.

    fmt.Println(filepath.IsAbs("dir/file"))
    fmt.Println(filepath.IsAbs("/dir/file"))
    filename := "config.json"

Một số tên tập tin có phần mở rộng theo sau dấu chấm. Chúng ta có thể tách phần mở rộng ra khỏi các tên đó bằng hàm Ext.

    ext := filepath.Ext(filename)
    fmt.Println(ext)

Để tìm tên tập tin mà không có phần mở rộng, sủ dụng hàm strings.TrimSuffix.

    fmt.Println(strings.TrimSuffix(filename, ext))

Hàm Rel tìm một đường dẫn tương đối giữa một thư mục cơ sở và một đường dẫn tập tin cần truy cập. Hàm này trả về một lỗi nếu đưỡng dẫn đích không thể chuyển sang đường dẫn tương đối và thư mục cơ sở.

    rel, err := filepath.Rel("a/b", "a/b/t/file")
    if err != nil {
        panic(err)
    }
    fmt.Println(rel)
    rel, err = filepath.Rel("a/b", "a/c/t/file")
    if err != nil {
        panic(err)
    }
    fmt.Println(rel)
}
$ go run file-paths.go
p: dir1/dir2/filename
dir1/filename
dir1/filename
Dir(p): dir1/dir2
Base(p): filename
false
true
.json
config
t/file
../c/t/file

Ví dụ tiếp theo: Directories.