Home Backend Development Golang I Built My First CLI Tool - GoVibes

I Built My First CLI Tool - GoVibes

Nov 27, 2024 pm 09:14 PM

I Built My First CLI Tool - GoVibes

Mechvibes, an open-source GUI program for simulating mechanical keyboard sound, is a program I've been using for the last 3-4 years. But since I switched to Linux, it stopped working(Wayland security issue). The program is essentially listens to keyboard inputs and plays keyboard sound on each key press. Moreover, MechVibes is built with Electron.js, so it's memory intensive(150 MB). The CLI I built only has a memory footprint of around 6 MB.

That said, I'm quite new to Go, as well as the Linux (and CLI tool) world. Since I switched from Windows to Linux, I find myself trying to accomplish a lot of things with the terminal. That also led me to try out NeoVim, which blew my mind and changed the way I look at terminals.

Do you know GoVibes is 100% developed using NeoVim??‍♂️

While Go is known for its simplicity like C, coming from the Javascript/Frontend world, I struggled with it. I think mainly for two reasons: firstly, I don't truly know programming(I only know framework(React) and for the last 2 years, I've been writing memorized boilerplate code.); secondly, Go is my second language and web/js development have made me inflexible at picking new languages. So learning Go was like a paradigm shift for me, which exposed a lot of my insufficiencies and skill issues. And that's clearly apparent if you check out the codebase of GoVibes.

I’m referring to this as a CLI tool, even though it doesn’t fully meet standard CLI tool criteria. It's Linux-only(tested in Fedora, and my friend's machine, who uses Arch btw!), and requires manual compilation. On top of that, the code is awful.

There's a similar CLI tool written in Rust, called Rustyvibes. I tried it and because of the Wayland security issue, it failed on my Fedora Linux. Also, I had to kill the CLI program if I wanted to change the keyboard sound flavour. Coming from the frontend world, I'm biased toward pretty UIs, and I wanted the same experience in my CLI tool. So, to precisely highlight those issues, I build GoVibes.

The core of the program is simple. There's a continuous loop that's running in a separate channel, and it listens for the incoming keyboard input event. Based on the input event, the program plays a section from the audio file. What part to play, is defined in a separate config.json file. Now there can be multiple input devices in your system. So, the program also lists all the available input devices and you can choose what channel it should listen to. What I found interesting was, as I'm new to Linux, treating devices as files like objects. And, so all I had to do to mount a device was to open it as a directory.

file, err := os.Open("/dev/input/event2")
Copy after login

Most of the development time went into making GoVibes interactive and look pretty. Perhaps, that effort could have been better spent on making it cross-platform and functional, but again, I'm its sole user, so it doesn't matter. Anyway, I found BubbleTea, a library for building interactive CLI(TUI) tools in Golang. The library surely had a learning curve. It took me a week to wrap my head around how all things tie together. There are also a lot of prebuilt components(Bubbles) which makes it super easy to build a pretty, user-friendly TUI.

I Built My First CLI Tool - GoVibes

Overall, it was a good learning experience.

  • For the first time, I built something other than a CRUD.
  • This time around, I actually learned some Go(file handling, go routine, channels, context, WaitGroups),
  • Got a confidence boost exploring new things. Figuring out bubble tea felt foreign and overwhelming, but once it clicked, I envisioned my portrait in the Hall of Great Programmers.

The above is the detailed content of I Built My First CLI Tool - GoVibes. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the vulnerabilities of Debian OpenSSL What are the vulnerabilities of Debian OpenSSL Apr 02, 2025 am 07:30 AM

OpenSSL, as an open source library widely used in secure communications, provides encryption algorithms, keys and certificate management functions. However, there are some known security vulnerabilities in its historical version, some of which are extremely harmful. This article will focus on common vulnerabilities and response measures for OpenSSL in Debian systems. DebianOpenSSL known vulnerabilities: OpenSSL has experienced several serious vulnerabilities, such as: Heart Bleeding Vulnerability (CVE-2014-0160): This vulnerability affects OpenSSL 1.0.1 to 1.0.1f and 1.0.2 to 1.0.2 beta versions. An attacker can use this vulnerability to unauthorized read sensitive information on the server, including encryption keys, etc.

What libraries are used for floating point number operations in Go? What libraries are used for floating point number operations in Go? Apr 02, 2025 pm 02:06 PM

The library used for floating-point number operation in Go language introduces how to ensure the accuracy is...

Transforming from front-end to back-end development, is it more promising to learn Java or Golang? Transforming from front-end to back-end development, is it more promising to learn Java or Golang? Apr 02, 2025 am 09:12 AM

Backend learning path: The exploration journey from front-end to back-end As a back-end beginner who transforms from front-end development, you already have the foundation of nodejs,...

What is the problem with Queue thread in Go's crawler Colly? What is the problem with Queue thread in Go's crawler Colly? Apr 02, 2025 pm 02:09 PM

Queue threading problem in Go crawler Colly explores the problem of using the Colly crawler library in Go language, developers often encounter problems with threads and request queues. �...

In Go, why does printing strings with Println and string() functions have different effects? In Go, why does printing strings with Println and string() functions have different effects? Apr 02, 2025 pm 02:03 PM

The difference between string printing in Go language: The difference in the effect of using Println and string() functions is in Go...

How to specify the database associated with the model in Beego ORM? How to specify the database associated with the model in Beego ORM? Apr 02, 2025 pm 03:54 PM

Under the BeegoORM framework, how to specify the database associated with the model? Many Beego projects require multiple databases to be operated simultaneously. When using Beego...

How to solve the user_id type conversion problem when using Redis Stream to implement message queues in Go language? How to solve the user_id type conversion problem when using Redis Stream to implement message queues in Go language? Apr 02, 2025 pm 04:54 PM

The problem of using RedisStream to implement message queues in Go language is using Go language and Redis...

PostgreSQL monitoring method under Debian PostgreSQL monitoring method under Debian Apr 02, 2025 am 07:27 AM

This article introduces a variety of methods and tools to monitor PostgreSQL databases under the Debian system, helping you to fully grasp database performance monitoring. 1. Use PostgreSQL to build-in monitoring view PostgreSQL itself provides multiple views for monitoring database activities: pg_stat_activity: displays database activities in real time, including connections, queries, transactions and other information. pg_stat_replication: Monitors replication status, especially suitable for stream replication clusters. pg_stat_database: Provides database statistics, such as database size, transaction commit/rollback times and other key indicators. 2. Use log analysis tool pgBadg

See all articles