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 變得非常容易。
總的來說,這是一次很好的學習經驗。
以上是用 Go 建立我的第一個 CLI 工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!