Cách tương tác với file và danh bạ trong Go

Nắm vững cách dùng hệ thống file bằng những hàm hữu ích dưới đây sẽ giúp cho công việc của bạn rất nhiều. Dưới đây là cách tương tác với file và thư mục trong Go.

Tương tác với file và thư mục trong Go

Làm việc với file và danh mục là một nhiệm vụ cần thiết cho ứng dụng cần lưu trữ và trích xuất dữ liệu. Go cung cấp gói đường dẫn file cho các hoạt động đường dẫn tệp độc lập về nền tảng. Gói này bao gồm những hàm chỉnh sửa đường dẫn file và tương thích với Windows, Linux, macOS.

Các hàm bao gồm trong filepath có thể nối, tách và xóa đường dẫn file để đảm bảo chúng hợp lệ. Gói này cũng có các hàm tạo danh mục Walk, tìm kiếm file.

Cây thư mục Walking

Hàm Walk của gói filepath cung cấp chức năng để chạy một cây thư mục và duyệt qua các file, danh mục được sắp xếp trước. Nó sẽ thu thập đệ quy tất cả thư mục bên dưới root được cung cấp. Hàm Walk bao gồm một danh mục root và hàm bao gồm đường dẫn, phiên bản thông tin file, lỗi.

package main

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

func main() {
    // Defines the root directory to start the walk
    root := "."

    // Uses the Walk function to walk the directory tree
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }

        // Prints the name of each file or directory
        fmt.Println(path)
        return nil
    })

    // Checks for errors
    if err != nil {
        fmt.Printf("Error walking directory tree: %v\n", err)
    }
}

Chương trình này xác định thư mục gốc là danh mục làm việc hiện tại. Hàm main chuyển qua các danh mục ở thư mục root và xuất tên các file.

Hàm main trong Go

Khớp tệp và mẫu

Bạn có thể dùng hàm Match để khớp tên file với một mẫu. Cú pháp mẫu dựa trên cú pháp ký tự file thông thường, dùng siêu ký tự gọi là mẫu toàn cục trong môi trường Unix.

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    // Defines the pattern to match
    pattern := "*.txt"

    // Uses the Match function to match the pattern on files
    match, err := filepath.Match(pattern, "file.txt")

    if err != nil {
        fmt.Printf("Error matching pattern: %v\n", err)
        return
    }

    // Prints the result of the match
    if match {
        fmt.Println("File matches pattern.")
    } else {
        fmt.Println("File does not match pattern.")
    }
}

Hàm main khớp với một tên file dựa trên mẫu *.txt và in một chuỗi phụ thuộc vào kết quả của lệnh điều kiện.

Làm sạch đường dẫn bằng hàm Clean

Hàm Clean bao gồm một đường dẫn file và trả về một phiên bản của một đường dẫn đã được dọn dẹp bằng cách loại bỏ các dấu phân tách không cần thiết và thay đổi thư mục như . (thư mục hiện tại) và .. (thư mục mẹ) phân đoạn.

Làm sạch các đường dẫn file hữu ích bởi nó giúp tránh lỗi xảy ra nếu một đường dẫn thừa dấu phân tách hay các đoạn không hợp lệ hoặc xây dựng đường dẫn độc lập với thư mục làm việc hiện tại.

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    // Creates a path with redundant separators and invalid segments
    path := "/foo/bar//baz/.././qux/"

    // Cleans the path
    cleanPath := filepath.Clean(path)

    // Prints the original and cleaned file paths
    fmt.Println("Original path:", path)
    fmt.Println("Cleaned path:", cleanPath)
}

Biến path thành đường dẫn file ban đầu. Hàm Clean dọn dẹp biến path và trả về đường dẫn file đã dọn dẹp. Hàm main in đường dẫn file ban đầu & đã làm sạch.

Dùng Go tương tác với file và thư mục

Nối và tách đường dẫn file trong Go

Hàm Join và Split cung cấp chức năng nối và tách đường dẫn file. Hàm Join bao gồm bất kỳ số phần tử đường dẫn. Nó trả về một chuỗi đường dẫn file, kết quả từ việc nối các thành phần bằng dấu phân tách đường dẫn phù hợp cho hệ điều hành. Hàm Join hữu ích trong việc xây dựng đường dẫn file độc lập với hệ thống tệp bên dưới.

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    // Defines four file paths for the join operation
    path1 := "folder1"
    path2 := "folder2"
    path3 := "subfolder1"
    path4 := "example.txt"

    // Joins the four file paths together into a single path 
    joinedPath := filepath.Join(path1, path2, path3, path4)

    // Print the unified file path
    fmt.Println("Joined Path:", joinedPath)
}

Các biến path1, path2path3 là tên thư mục. Biến path4 là tên file. Hàm Join bao gồm tên biến đường dẫn và trả về đường dẫn file được nối. Hàm main in đường dẫn file được nối tới console với gói fmt.

Hàm Split bao gồm một chuỗi đường dẫn và trả về danh mục của đường dẫn cùng các thành phần trong tên file. Hàm Split hữu ích trong việc trích xuất tên file hoặc quyết định thư mục gốc của một file.

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    // Sets the file path for the split operation
    filePath := "/home/user/documents/example.txt"
    
    // Use the Split function to split the file path
    // into its directory and file components
    dir, file := filepath.Split(filePath)
    
    // Print the directory and file components
    fmt.Println("Directory:", dir)
    fmt.Println("File:", file)
}

Biến filePath là đường dẫn file gốc. Hàm Split bao gồm biến filePath. Nó trả về danh mục, tên file dưới dạng chuỗi. Hàm main in danh mục và tên file vào console.

Trên đây là cách tương tác file và danh mục trong Go. Hi vọng bài viết hữu ích với các bạn.

Thứ Hai, 06/03/2023 14:58
51 👨 134
0 Bình luận
Sắp xếp theo