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

用 Go 建立我的第一個 CLI 工具

DDD
發布: 2024-11-25 11:40:47
原創
421 人瀏覽過

Built My First CLI Tool in Go

Mechvibes,一個用於模擬機械鍵盤聲音的開源 GUI 程序,是我過去 3-4 年一直使用的程序。但自從我切換到 Linux 後,它就停止運作了(Wayland 安全問題)。該程式本質上是監聽鍵盤輸入並在每次按鍵時播放鍵盤聲音。此外,MechVibes 是使用 Electron.js 建構的,因此它是記憶體密集型的(150 MB)。我建立的 CLI 僅佔用約 6 MB 的記憶體。

也就是說,我對 Go 以及 Linux(和 CLI 工具)世界都很陌生。自從我從 Windows 切換到 Linux 以來,我發現自己嘗試使用終端機完成很多事情。這也促使我嘗試了 NeoVim,它讓我大吃一驚,並改變了我看待終端的方式。

你知道 GoVibes 100% 使用 NeoVim 開發嗎? ??‍♂️

雖然 Go 因其像 C 一樣的簡單性而聞名,但它來自 Javascript/前端世界,但我卻遇到了困難。我想主要有兩個原因:首先,我並不太懂程式設計(我只知道框架(React),而且在過去的兩年裡,我一直在寫死記硬背的樣板程式碼。);其次,Go 是我的第二語言,而web/js 開發讓我在選擇新語言時缺乏彈性。所以學習Go對我來說就像是一個範式轉變,暴露了我的許多不足和技能問題。如果您查看 GoVibes 的程式碼庫,這一點就顯而易見。

我稱之為 CLI 工具,儘管它並不完全符合標準 CLI 工具標準。它僅適用於 Linux(在 Fedora 和我朋友的機器上測試過,順便說一句,他使用 Arch!),並且需要手動編譯。最重要的是,程式碼很糟糕。

有一個用 Rust 寫的類似 CLI 工具,稱為 Rustyvibes。我嘗試了一下,由於 Wayland 安全性問題,它在我的 Fedora Linux 上失敗了。另外,如果我想改變鍵盤聲音風格,我必須終止 CLI 程式。來自前端世界,我偏向漂亮的 UI,我希望在我的 CLI 工具中獲得相同的體驗。因此,為了準確突出這些問題,我建立了 GoVibes。

程式的核心很簡單。有一個連續循環在單獨的通道中運行,並且它會偵聽傳入的鍵盤輸入事件。根據輸入事件,程式播放音訊檔案中的一部分。扮演什麼角色,在單獨的 config.json 檔案中定義。現在您的系統中可以有多個輸入設備。因此,該程式還列出了所有可用的輸入設備,您可以選擇它應該收聽的頻道。我發現有趣的是,因為我是 Linux 新手,所以將裝置視為像物件一樣的檔案。而且,所以我要掛載設備所需要做的就是將其作為目錄開啟。

file, err := os.Open("/dev/input/event2")
登入後複製

大部分開發時間都花在讓 GoVibes 具有互動性和美觀。也許,這種努力本可以更好地花在使其跨平台和功能上,但同樣,我是它的唯一用戶,所以這並不重要。不管怎樣,我找到了 BubbleTea,一個用 Golang 建立互動式 CLI(TUI) 工具的函式庫。圖書館肯定有一個學習曲線。我花了一周的時間才弄清楚所有事物是如何連結在一起的。還有很多預先建置的元件(Bubbles),這使得建立漂亮、用戶友好的 TUI 變得非常容易。

Built My First CLI Tool in Go

總的來說,這是一次很好的學習經驗。

  • 我第一次建構了 CRUD 以外的東西。
  • 這次,我實際上學到了一些Go(文件處理,goroutine,通道,上下文,WaitGroups),
  • 探索新事物的信心增強。搞清楚珍珠奶茶感覺很陌生,讓人不知所措,但一旦我明白了,我就想像出了我在偉大程式設計師大廳裡的肖像。

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

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