ホームページ バックエンド開発 Golang 初めての CLI ツールを Go で構築

初めての CLI ツールを Go で構築

Nov 25, 2024 am 11:40 AM

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 は Javascript/フロントエンドの世界から来た C のような単純さで知られていますが、私はそれに苦労しました。私は主に 2 つの理由からそう考えています。1 つは、私はプログラミングを本当に知りません (フレームワーク (React) しか知りません。そして、過去 2 年間、暗記した定型コードを書いてきました。)。次に、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 をインタラクティブで見た目も美しくすることに費やされました。おそらく、その労力をクロスプラットフォームで機能させることに費やしたほうがよかったかもしれませんが、繰り返しになりますが、私はその唯一のユーザーなので、それは問題ではありません。とにかく、Golang で対話型 CLI(TUI) ツールを構築するためのライブラリである BubbleTea を見つけました。図書館には確かに学習曲線がありました。すべてのことがどのように結びついているのかを理解するのに 1 週​​間かかりました。また、事前に構築されたコンポーネント (バブル) も多数あるため、非常に簡単に、美しくユーザーフレンドリーな TUI を構築できます。

Built My First CLI Tool in Go

全体的には、良い学習経験でした。

  • 初めて CRUD 以外のものを構築しました。
  • 今回は実際に Go (ファイル処理、Go ルーチン、チャネル、コンテキスト、WaitGroups) をいくつか学びました。
  • 新しいことを探求することで自信がつきました。タピオカティーを考えるのは異質で圧倒されるような気がしましたが、一度ピンとくると、偉大なプログラマーの殿堂に自分の肖像画が置かれているのを想像しました。

以上が初めての CLI ツールを Go で構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Debian OpenSSLの脆弱性は何ですか Debian OpenSSLの脆弱性は何ですか Apr 02, 2025 am 07:30 AM

OpenSSLは、安全な通信で広く使用されているオープンソースライブラリとして、暗号化アルゴリズム、キー、証明書管理機能を提供します。ただし、その歴史的バージョンにはいくつかの既知のセキュリティの脆弱性があり、その一部は非常に有害です。この記事では、Debian SystemsのOpenSSLの共通の脆弱性と対応測定に焦点を当てます。 Debianopensslの既知の脆弱性:OpenSSLは、次のようないくつかの深刻な脆弱性を経験しています。攻撃者は、この脆弱性を、暗号化キーなどを含む、サーバー上の不正な読み取りの敏感な情報に使用できます。

フロントエンドからバックエンドの開発に変身すると、JavaやGolangを学ぶことはより有望ですか? フロントエンドからバックエンドの開発に変身すると、JavaやGolangを学ぶことはより有望ですか? Apr 02, 2025 am 09:12 AM

バックエンド学習パス:フロントエンドからバックエンドへの探査の旅は、フロントエンド開発から変わるバックエンド初心者として、すでにNodeJSの基盤を持っています...

Beego ormのモデルに関連付けられているデータベースを指定する方法は? Beego ormのモデルに関連付けられているデータベースを指定する方法は? Apr 02, 2025 pm 03:54 PM

Beegoormフレームワークでは、モデルに関連付けられているデータベースを指定する方法は?多くのBEEGOプロジェクトでは、複数のデータベースを同時に操作する必要があります。 Beegoを使用する場合...

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Apr 02, 2025 pm 05:09 PM

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

DebianでMongoDB自動拡張を構成する方法 DebianでMongoDB自動拡張を構成する方法 Apr 02, 2025 am 07:36 AM

この記事では、自動拡張を実現するためにDebianシステムでMongodbを構成する方法を紹介します。主な手順には、Mongodbレプリカセットとディスクスペース監視のセットアップが含まれます。 1。MongoDBのインストール最初に、MongoDBがDebianシステムにインストールされていることを確認してください。次のコマンドを使用してインストールします。sudoaptupdatesudoaptinstinstall-yymongodb-org2。mongodbレプリカセットMongodbレプリカセットの構成により、自動容量拡張を達成するための基礎となる高可用性とデータ冗長性が保証されます。 Mongodbサービスを開始:Sudosystemctlstartmongodsudosys

See all articles