首頁  >  文章  >  後端開發  >  我的第一個使用 Golang 的項目

我的第一個使用 Golang 的項目

王林
王林原創
2024-09-09 20:31:32764瀏覽

My First Project using Golang

?第 1 部分:使用 Go 進行文件操作

簡介

身為一個擁有多年 JavaScript 經驗的前端開發人員,我決定是時候接受新的挑戰了。今年,我選擇深入Golang的世界。為了測試我的技能並為我的武器庫添加一個實用工具,我創建了文件管理器 - 一個命令列工具,旨在為混亂的文件管理帶來秩序。 ?

想像一下,您剛剛完成了一個大項目,而您的目錄現在是一片混亂的圖像、音訊檔案、視訊和文件。這有點像有一棟裝飾精美的房子,但所有的家具都隨意扔掉。 ?我去過,一點也不好玩!

在我們冒險的第一部分中,我們將重點放在 Go 中文件操作的基礎知識,學習如何根據文件的擴展名對文件進行排序和組織到整齊的文件夾中。準備好潛入了嗎?走吧!

?️‍♂️ 挑戰

曾經對雜亂的目錄感到不知所措嗎?您有一堆圖像檔案、音訊剪輯、視訊和文件混合在一起。手動對它們進行排序就像大海撈針一樣。 ?

我們的英雄解決方案

我們將建立一個工具,將這個混亂的地方變成一個有組織的天堂!我們的文件管理器會根據文件的類型自動將文件分類到資料夾中——這裡是圖像,那裡是音頻,這裡是視頻,而文檔則整齊地藏起來。 ?

?️ 我們如何實現它

以下是我們如何打造這個文件排序奇蹟的:

1. 取得目錄路徑

我們的旅程從找出檔案隱藏的位置開始:

dir := os.Args[1]

這行​​就像問我們的程序,“嘿,充滿我們文件的目錄在哪裡?” ?

2. 閱讀目錄

接下來,我們需要查看目錄,看看裡面有什麼:

files, err := os.ReadDir(dir)
var filesToOrder []string

if err != nil {
    log.Fatal(err)
}

我們讀取目錄的內容,如果出現問題(例如目錄不存在),我們的程式將停止並告訴我們。 ?

3. 跳過目錄

現在,我們需要專注於文件並留下目錄:

for _, file := range files {
    if file.IsDir() {
        continue
    }
    filesToOrder = append(filesToOrder, file.Name())
}

在這裡,我們循環遍歷每個項目。如果它是一個目錄,我們就跳過它。如果它是一個文件,我們會將其添加到要組織的文件清單中。 ?️

4. 對文件進行排序

我們的文件清單準備就緒,是時候將它們分類到新家了:

for _, fileName := range filesToOrder {
    fileType := determineType(fileName)

    switch fileType {
    case IMAGE_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "images"))
    case AUDIO_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "audio"))
    case VIDEO_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "videos"))
    case DOCUMENT_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "documents"))
    default:
        fmt.Printf("Unsupported file type: %s\n", fileName)
    }
}

我們循環遍歷每個文件,找出它的類型,然後將其發送到正確的資料夾。如果我們遇到無法識別的文件類型,我們會通知您。 ?

5. 確定文件類型

為了弄清楚我們正在處理什麼類型的文件,我們使用這個方便的函數:

func determineType(file string) int {
    for key, value := range ALLOWED_TYPES {
        for _, ext := range value {
            if strings.HasSuffix(file, ext) {
                return key
            }
        }
    }
    return UNDEFINED_TYPE
}

它根據我們的清單檢查檔案的副檔名,並告訴我們它是圖像、音訊、視訊還是文件。 ?️‍♂️

6. 將檔案移到新家

最後,我們將每個檔案移到其新資料夾:

func moveToFolder(src, dest string) error {
    if _, err := os.Stat(dest); os.IsNotExist(err) {
        err := os.Mkdir(dest, 0777)
        if err != nil {
            return err
        }
    }

    fileName := filepath.Base(src)

    err := os.Rename(src, filepath.Join(dest, fileName))

    if err != nil {
        return err
    }

    return nil
}

我們檢查目標資料夾是否存在並根據需要建立它。然後我們將文件從舊位置移動到新位置。 ?

7. 處理不支援的文件類型

對於不屬於任何類別的文件,我們會通知您:

default:
    fmt.Printf("Unsupported file type: %s\n", fileName)

我們會針對不支援的文件類型列印訊息,以便您確切地知道哪些內容沒有組織。 ?


第 1 部分就結束了! ?我們已經成功解決了 Go 中文件操作的基礎知識,並將文件分類為整齊的類別。但這裡有一個想法 - 如果您想添加一個新類別,例如“檔案”或“項目”,該怎麼辦?現在,您必須深入研究地圖並調整程式碼。 ?

如果您是唯一使用該工具的人,那麼這種方法非常有用。但想像一下與可能不了解 Go 的朋友分享這個很棒的工具。 ?️ 您希望讓每個人都可以輕鬆定制,而無需理解代碼。

不要害怕!在下一部分中,我們將更深入地研究文件管理器工具,並揭示解決這些挑戰的高級功能。 ?我們將讓任何人都可以調整和增強該工具,而無需編寫一行 Go 程式碼。有興趣嗎?敬請關注!

有任何疑問或需要更多詳細資訊嗎?把它們放在下面,我們來聊聊吧! ?



以上是我的第一個使用 Golang 的項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn