首頁 > 後端開發 > Golang > 主體

我的第一個使用 Go 的 CLI

Mary-Kate Olsen
發布: 2024-09-25 22:08:22
原創
1058 人瀏覽過

My first CLI with Go

我總是覺得有點著急寫下我的經歷。好吧,我想我現在可以處理它了。那是八月的一個清晨,我決定寫一個 CLI 工具,只是為了「練習」Go,就像我幾天前學習的基礎知識一樣。我現在看的教程不多,但我看了 Nana 的 Golang 視頻,非常棒。那麼,讓我們直接開始吧。

原因

我想嘗試用 Go 來學習 os 模組。我想到的第一個想法是創建一個以 Golang 作為伺服器的turborepo。是的,我知道我們無法在 Vercel 中託管它,但我們的想法是使用 Golang 創建一個快速且安全的伺服器。我們可以使用 Vercel 中的 API 代理來重寫來自客戶端的請求。但是,您將需要在某些地方(例如 Railway 或 Render)單獨託管 Go 伺服器。這不遵循單一儲存庫架構的規則,它只是將所有程式碼維護在一個地方並建立一個強大的伺服器。它被命名為turbo-g(turbo + go)。

嗯,在創建模板專案後,我意識到 Turbo 在熱重載和許多其他方面存在一些問題。所以,最後我放棄了這個想法,轉而去創造別的東西。

在建立這個範本專案時,我發現我必須手動設定伺服器,我使用了 go Fiber,因為它具有類似 Express 的功能,並且作為 MERN 堆疊開發人員,我發現它非常易於使用。有一次我想在 Express 中製作一個伺服器專案產生器,但他們已經有了一個,它被稱為express-generator。然後我想光纖也可能有同樣的事情。但是,當我在 GitHub 中搜尋主題:go-backend-template 時,我只找到了可以複製並用於專案的預製模板。就在那時我決定嘗試一下。

過程

使用 go 建立 CLI 相當簡單,因為 go 程式碼被編譯成二進位執行檔。但是,我不知道如何使用 os 模組 建立檔案和資料夾。在JavaScript(NodeJs)中,我們可以使用fs模組來管理檔案。非常感謝文件幫助我。我也已經知道 Express 和 Fiber 中的基本後端專案是什麼樣的。我的方法非常簡單。我將建立一個 CLI 工具,該工具將使用一些標誌,例如 --init 和 --name 作為專案名稱,它將產生一個專案和 go.mod,並以 Fiber 作為依賴項。

然後我陷入了所謂模板的困境。 模板是 go 檔案的骨架。範本保存文件的內容。了解模板很有趣。然後很容易從標誌中取得專案名稱並使用 os.MkdirAlland 建立所有資料夾,使用 text/template 模組解析範本並取得建立檔案的內容。這些模組的所有詳細資訊都可以在我上面提到的 Golang 文件中找到。然後就完成了! ?但是..

dirs := []string{"cmd", "internal/handlers", "internal/middleware", "internal/models", "internal/routes", "internal/services", "config"}
    for _, dir := range dirs {
        if err := os.MkdirAll(filepath.Join(projectPath, dir), os.ModePerm); err != nil {
            return fmt.Errorf("❗Failed to create directory %s: %w", dir, err)
        }
    }
登入後複製

存在的問題

  • 我很快就發現我沒有使用 github.com//作為模組名稱,這是我第一次學習 go 模組時遇到的問題。然後我從這裡了解了模組路徑。所以,我為解決這個問題所做的事情非常簡單。我剛剛添加了一個 -gh 標誌,供用戶添加他們的 GitHub 用戶名來建立模組,假設專案名稱是 GitHub 儲存庫。

  • 仍然存在的另一個問題是我沒有在中間件範本檔案和設定範本檔案中提供任何程式碼。使用者可以使用 MongoDB 或 PostgreSQL 作為資料庫,因此無需在模板中提供任何單一或兩個配置。好吧,為了解決這個問題,我創建了一個問題,任何閱讀此部落格的人都可以為解決這個問題做出貢獻。我已經找到辦法了,但這歸結為第三個問題。

  • CLI 可以採用名為 -db 的使用者輸入來取得使用者選擇的資料庫(例如 MongoDB 或 PostgreSQL),以便在設定範本中建立虛擬連線。但是,隨著程式碼的成長來解決此類問題,CLI 將無法使用。它已經有 2 個必需標誌和一個可選標誌,即 --init、-gh 和 -name,如果我們添加一個 -db 標誌,這將是一個非常長的命令。為了解決這個問題,我將把 CLI 修改為互動式 CLI,例如 create-next-app。進行此更改後,我們可以添加許多自訂選項。我已經在做這件事了。因此,如果您想做出貢獻,我們歡迎您。您可以在這裡找到問題。

  • 現在的最後一個問題是熱重載模組。每當我們建立 Fiber 應用程式時,預設情況下我們沒有任何更改偵聽器。如果纖維已經有這個,而我不知道,那麼請原諒我,因為我對此還比較陌生。如果您對此有任何了解,請在評論中告訴我。為了解決這個問題,我想出了在專案中包含空氣

結束

這是光學的故事。然而,該部落格的目的是讓大家了解這個小項目,如果您願意的話,它也是一個為該項目做出貢獻的邀請。

旅程才剛開始,到目前為止還很有趣。我學到了很多東西,並且願意在未來學習更多。這是我在這裡的第一篇博客,所以如果我犯了任何錯誤或忽略了某些內容,請忽略並原諒我。下次會更好。

謝謝大家閱讀博客,如果您覺得有趣,請給光學一個⭐。另外,如果您知道有人願意貢獻,請分享。另外,如果您發現任何問題或有任何改進的想法,您可以在這裡建立問題

再次感謝。

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

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板