Pengantar Aplikasi Go dan CLI
Go, juga dikenal sebagai Golang , adalah bahasa pemrograman sumber terbuka yang dirancang oleh Google. Ini menekankan kesederhanaan, keamanan, dan kinerja, menjadikannya pilihan yang sangat baik untuk membangun aplikasi antarmuka baris perintah (CLI). Aplikasi CLI adalah alat yang dapat berinteraksi dengan pengguna melalui antarmuka berbasis teks, biasanya digunakan untuk administrasi sistem, otomasi, dan tugas pembuatan skrip. Go sangat cocok untuk pengembangan CLI karena menawarkan:
- Kesederhanaan: Sintaks Go mudah dipahami dan ditulis, memungkinkan pengembang membangun dan memelihara aplikasi CLI dengan cepat.
- Performa: Go adalah bahasa yang dikompilasi dan diketik secara statis, yang berarti menghasilkan file biner yang dioptimalkan, menghasilkan aplikasi CLI yang cepat dan efisien.
- Dukungan konkurensi: Go menampilkan primitif konkurensi bawaan, seperti goroutine dan saluran, memungkinkan pemrosesan paralel tanpa hambatan dan pada akhirnya aplikasi CLI yang lebih cepat dan lebih responsif.
- Kompilasi biner statis: Go mengompilasi aplikasi menjadi satu biner mandiri — satu tanpa ketergantungan eksternal — memfasilitasi distribusi dan penerapan aplikasi CLI Anda dengan mudah.
- Pustaka standar yang andal: Pustaka standar Go menyediakan banyak paket bawaan, menyederhanakan tugas pengembangan CLI umum, seperti bekerja dengan file, jaringan, dan menangani argumen baris perintah.
Dalam artikel ini, Anda akan mempelajari dasar-dasar mengembangkan aplikasi CLI menggunakan Go—mulai dari menyiapkan lingkungan dan menyusun aplikasi hingga menangani argumen baris perintah dan memanfaatkan paket pihak ketiga.
Memulai: Menginstal Go dan Menyiapkan Lingkungan Anda
Sebelum Anda dapat mulai menulis aplikasi CLI dengan Go, Anda harus terlebih dahulu menginstal bahasa pemrograman Go di sistem Anda.
- Kunjungi halaman unduh Go resmi, pilih paket biner yang sesuai untuk platform Anda (Windows, macOS, atau Linux), dan ikuti petunjuk penginstalan.
- Setelah penginstalan selesai, verifikasi bahwa Go telah diinstal dengan benar dengan menjalankan
go version
di terminal Anda. Perintah ini akan menampilkan versi Go yang diinstal. - Konfigurasikan variabel lingkungan yang diperlukan untuk Go, termasuk
GOPATH
, yang menentukan lokasi ruang kerja Go Anda (di mana proyek dan dependensi Go Anda akan disimpan), danGOROOT
, yang menunjuk ke direktori instalasi Go Anda. - Pastikan perintah
go
ada di variabelPATH
sistem Anda. Ini memungkinkan Anda untuk menjalankan perintah Go dari direktori manapun.
Dengan Go terinstal dan lingkungan Anda terkonfigurasi, Anda siap untuk mulai membuat aplikasi CLI pertama Anda.
Menyusun Aplikasi CLI Anda: Paket dan Modul
Menyusun aplikasi CLI Anda dengan benar sangat penting untuk pemeliharaan dan skalabilitas, memastikan bahwa kode Anda tertata dan mudah dinavigasi. Di Go, organisasi kode dicapai melalui paket dan modul.
Paket: Paket adalah cara Go mengatur dan mengelompokkan kode. Sebuah paket terdiri dari satu atau lebih file sumber (dengan ekstensi .go
) yang terletak di direktori yang sama. Setiap file dalam sebuah paket harus mendeklarasikan nama paketnya, ditentukan dengan kata kunci package
di awal file. Aplikasi Go CLI biasanya memiliki setidaknya dua paket:
-
main
: Ini adalah paket default untuk titik masuk aplikasi Anda. Di sinilah fungsimain()
berada dan berfungsi sebagai titik awal untuk aplikasi CLI Anda. Semua logika dan perintah khusus CLI harus ditempatkan di dalam paket utama. -
internal
ataupkg
: Paket-paket ini berisi kode yang dapat digunakan kembali yang dipisahkan dari logika CLI Anda. Anda dapat menggunakaninternal
untuk kode yang seharusnya hanya diimpor oleh kode Go Anda sendiri di dalam proyek, danpkg
untuk kode yang dapat diimpor oleh proyek Go mana pun.
Modul: Modul adalah sarana untuk mengelola dependensi dan pembuatan versi dalam aplikasi Go. Diperkenalkan di Go 1.11, mereka mengizinkan pengembang untuk mendeklarasikan dependensi paket dan menentukan versi yang diperlukan. Untuk membuat modul Go baru, arahkan ke direktori root proyek Anda dan jalankan perintah berikut:
go mod init your.module.name
Perintah ini membuat file go.mod
di direktori root, yang mencantumkan dependensi proyek Anda, dan file go.sum
, yang menampung checksum dari setiap dependensi. Saat Anda mengimpor paket atau menggunakan pustaka pihak ketiga, Go akan secara otomatis melacak dependensi di berkas go.mod
dan go.sum
.
Sumber gambar: Bahasa Pemrograman Go
Dengan menggunakan paket dan modul secara efektif, Anda dapat mempertahankan struktur kode yang bersih dan efisien untuk aplikasi Go CLI Anda, membuatnya lebih mudah untuk mengembangkan, men-debug, dan memperluas proyek Anda di masa mendatang.
Argumen dan Bendera Baris Perintah
Argumen dan flag baris perintah adalah komponen penting dari aplikasi CLI, memungkinkan pengguna untuk mengontrol perilaku aplikasi dan memberikan masukan yang diperlukan. Di Go, Anda bisa bekerja dengan argumen baris perintah dan flag menggunakan paket flag
dan os.Args
pustaka standar.
Menggunakan os.Args
Paket os.Args
menyediakan akses langsung ke argumen baris perintah. Ini adalah potongan string, di mana os.Args[0]
adalah nama program yang sedang berjalan, dan entri lainnya mewakili argumen yang diteruskan ke program.
Berikut adalah contoh penggunaan os.Args
:
paket utama impor ( "fmt" "os" ) func main() { argCount := len(os.Args) fmt.Printf("Jumlah argumen: %d\n", argCount) fmt.Println("Argumen:", os.Args) }
Dengan menjalankan program, Anda akan melihat nomor dan daftar argumen yang disediakan.
Menggunakan Paket bendera
Paket flag
adalah cara yang lebih canggih dan fleksibel untuk bekerja dengan flag baris perintah. Ini memungkinkan Anda untuk menentukan flag dengan berbagai tipe data dan mem-parsing input dengan mudah.
Di bawah ini adalah contoh penggunaan paket flag
:
paket utama impor ( "bendera" "fmt" ) func main() { var ( rangkaian nama usia int pelampung tinggi64 ) flag.StringVar(&nama, "nama", "John Doe", "Nama Anda") flag.IntVar(&umur, "umur", 21, "Usia Anda") flag.Float64Var(&tinggi, "tinggi", 180.0, "Tinggi Anda (dalam cm)") flag.Parse() fmt.Printf("Nama: %s\n", nama) fmt.Printf("Umur: %d\n", umur) fmt.Printf("Tinggi: %.1f\n", tinggi) }
Setelah Anda menentukan flag, Anda akan memanggil flag.Parse()
untuk mengurai input baris perintah yang disediakan dan mengisi variabel yang ditentukan. Anda kemudian dapat menggunakan variabel-variabel ini di seluruh aplikasi Anda.
Membuat Perintah dan Subperintah
Untuk aplikasi CLI yang kompleks, Anda mungkin ingin membuat perintah dan subperintah untuk mengatur fungsionalitas dan opsi Anda dengan lebih baik. Satu paket pihak ketiga yang populer untuk bekerja dengan perintah dan subperintah di Go adalah github.com/spf13/cobra
.
Memulai dengan Cobra
Untuk memulai, Anda harus menginstal paket Cobra:
dapatkan -u github.com/spf13/cobra/cobra
Setelah diinstal, Anda dapat membuat aplikasi CLI baru dengan Cobra:
cobra init my-cli --pkg-name=my-cli
Perintah ini membuat direktori baru bernama my-cli
dengan struktur dan file yang diperlukan untuk aplikasi CLI berbasis Cobra.
Mendefinisikan Perintah
Dalam aplikasi berbasis Cobra, Anda membuat perintah dengan menentukan instance cobra.Command
. Setiap perintah memiliki kolom Use
(menunjukkan bagaimana perintah digunakan), kolom Short
(memberikan deskripsi singkat), dan kolom Long
(memberikan deskripsi yang lebih detail).
Selain itu, setiap perintah harus memiliki kolom Run
, yang berisi fungsi yang menjalankan logika perintah. Anda akan sering mendefinisikan fungsi ini sebagai penutup untuk menangkap flag dan argumen perintah.
Berikut adalah contoh membuat perintah "greet" sederhana:
sapaCmd := &cobra.Perintah{ Gunakan: "salam", Singkat: "Sapa seseorang", Panjang: "Perintah ini menyapa seseorang dengan pesan yang dapat disesuaikan.", Jalankan: func(cmd *cobra.Command, args []string) { // Logika untuk perintah salam }, }
Untuk membuat subperintah, Anda dapat menentukan instance cobra.Command
lain dan menambahkannya sebagai turunan dari perintah induk menggunakan metode AddCommand
. Misalnya, Anda dapat membuat subperintah "selamat tinggal" di bawah perintah "sapa":
selamat tinggalCmd := &cobra.Command{ Gunakan: "selamat tinggal", Singkat: "Ucapkan selamat tinggal pada seseorang", Panjang: "Subperintah ini mengucapkan selamat tinggal kepada seseorang dalam bahasa tertentu.", Jalankan: func(cmd *cobra.Command, args []string) { // Logika untuk subperintah selamat tinggal }, } sapaCmd.AddCommand(selamat tinggalCmd)
Anjuran Interaktif dan Input Pengguna
Permintaan interaktif dapat meningkatkan pengalaman pengguna aplikasi CLI Anda dengan memandu pengguna melalui serangkaian pertanyaan dan mengumpulkan masukan berdasarkan tanggapan mereka. Satu paket pihak ketiga yang populer untuk bekerja dengan permintaan interaktif di Go adalah github.com/AlecAivazis/survey/v2
.
Memulai Survei
Pertama, Anda perlu menginstal paket Survey:
dapatkan -u github.com/AlecAivazis/survey/v2
Menggunakan Survei untuk Perintah Interaktif
Survei menyediakan serangkaian jenis prompt yang telah ditentukan sebelumnya, termasuk Input
, Select
, MultiSelect
, Confirm
, dan lainnya. Untuk membuat prompt, Anda menginstansiasi jenis prompt yang diinginkan dan memanggil fungsi survey.Ask
.
paket utama impor ( "fmt" "github.com/AlecAivazis/survey/v2" ) func main() { string nama var namePrompt := &survey.Input{ Pesan: "Siapa nama Anda?", } err := survey.Ask([]*survey.Pertanyaan{{ Nama: "nama", Prompt: namaPrompt, Validasi: survei.Diperlukan, }}, & nama) jika salah != nihil { fmt.Println("Kesalahan:", err) kembali } fmt.Printf("Halo, %s!\n", nama) }
Cuplikan kode ini menunjukkan penggunaan prompt Input
Survei untuk mengumpulkan nama dan menampilkan pesan salam. Bidang Validate
dapat diatur untuk menerapkan logika validasi khusus untuk masukan pengguna.
Bekerja dengan Perpustakaan Eksternal
Di banyak aplikasi CLI, biasanya mengandalkan pustaka eksternal untuk meningkatkan fungsionalitas dan merampingkan proses pengembangan. Go menyediakan pendekatan manajemen dependensi yang modern dan efisien yang memungkinkan developer bekerja dengan library eksternal dengan mulus. Diperkenalkan di Go 1.11, modul Go memungkinkan Anda mendeklarasikan dependensi paket dalam proyek Anda dan mengotomatiskan proses pengunduhan, pembuatan, dan penginstalan paket yang diperlukan. Untuk mengelola perpustakaan eksternal di aplikasi CLI Anda, ikuti langkah-langkah berikut:
- Inisialisasi modul Go: Di direktori root aplikasi CLI Anda, jalankan perintah
go mod init <module-name>
, ganti '<module-name>' dengan nama modul yang Anda inginkan. Perintah ini akan membuat file baru bernamago.mod
di direktori proyek Anda. - Tambahkan pustaka eksternal: Setiap kali Anda ingin mengimpor pustaka eksternal, tambahkan pernyataan impor yang diperlukan dalam kode sumber Anda. Pertama kali Anda membangun atau menjalankan proyek Anda, Go akan secara otomatis mengunduh dan menginstal versi yang diperlukan dari pustaka tersebut, dan memperbarui berkas
go.mod
dango.sum
. - Perbarui perpustakaan: Untuk memperbarui perpustakaan eksternal, Anda dapat menggunakan perintah
go get -u
diikuti dengan nama paket. Ini memperbarui paket ke versi terbaru, mencerminkan perubahan pada berkasgo.mod
Anda. - Hapus perpustakaan yang tidak terpakai: Untuk membersihkan perpustakaan yang tidak terpakai dari file
go.mod
Anda, jalankan perintahgo mod tidy
. Tindakan ini akan menghapus semua pustaka yang tidak lagi diperlukan atau telah usang selama pengembangan.
Menggunakan modul Go memberikan beberapa keuntungan saat bekerja dengan pustaka eksternal. Misalnya, ini mempromosikan keterbacaan kode dan menyederhanakan manajemen ketergantungan, memungkinkan aplikasi CLI yang lebih dapat dipelihara dan modular.
Menangani Error dan Logging
Penanganan dan logging kesalahan yang tepat sangat penting untuk memastikan ketahanan aplikasi CLI Anda. Go menawarkan pendekatan yang sangat praktis dan ergonomis untuk mengatasi error dan log. Untuk menangani kesalahan di Go , Anda dapat menggunakan paket errors
standar. Berikut adalah beberapa praktik terbaik saat menangani kesalahan dalam aplikasi CLI Anda:
- Kembalikan kesalahan alih-alih panik: Daripada menyebabkan aplikasi Anda panik dan mogok, kembalikan kesalahan dari fungsi dan tangani dengan tepat. Ini memungkinkan alur kontrol dan mekanisme pemulihan yang lebih baik dalam aplikasi CLI Anda.
- Gunakan jenis kesalahan khusus: Buat jenis kesalahan Anda sendiri menggunakan fungsi
errors.New
atau dengan menerapkan antarmukaerror
. Jenis kesalahan khusus memungkinkan Anda menyampaikan informasi yang lebih spesifik tentang apa yang salah saat terjadi kesalahan. - Tangani kesalahan yang dekat dengan sumbernya: Jika memungkinkan, tangani kesalahan sedekat mungkin dengan sumbernya. Ini membantu menjaga kesederhanaan kode Anda dan membuatnya lebih mudah untuk alasan tentang penanganan kesalahan dalam situasi yang kompleks.
Untuk logging, pustaka standar Go menawarkan paket log
, yang menyediakan antarmuka logging yang sederhana dan fleksibel. Anda dapat menggunakan paket untuk mencatat pesan dengan tingkat keparahan berbeda dan menyesuaikan target keluaran. Untuk kemampuan logging yang lebih canggih, pertimbangkan untuk menggunakan logging terstruktur dengan paket github.com/sirupsen/logrus
yang populer. Berikut adalah beberapa tip untuk masuk secara efektif dalam aplikasi CLI Anda:
- Pilih tingkat pencatatan yang tepat: Gunakan tingkat pencatatan untuk membedakan antara kesalahan kritis, peringatan, dan pesan informasi reguler. Ini membuat log lebih dapat ditindaklanjuti dan membantu mengidentifikasi masalah dengan lebih efisien.
- Sertakan konteks dalam pesan log: Berikan konteks yang relevan saat masuk, seperti nilai variabel dan nama fungsi. Ini membuatnya lebih mudah untuk melacak masalah saat pemecahan masalah.
- Pertimbangkan logging terstruktur: Gunakan logging terstruktur untuk menampilkan pesan log dalam format yang dapat dibaca mesin seperti JSON . Ini sangat berguna untuk sistem logging terpusat, agregasi log, dan alat analisis.
Pengujian dan Pembandingan Aplikasi CLI
Jaminan kualitas adalah aspek penting lainnya dalam mengembangkan aplikasi CLI yang andal. Dukungan bawaan Go untuk pengujian dan pembandingan memungkinkan Anda menulis pengujian unit yang efektif dan mengukur kinerja aplikasi CLI Anda. Paket testing
Go memungkinkan Anda menulis pengujian unit, menjalankannya secara paralel, dan menghasilkan laporan cakupan pengujian. Gunakan teknik berikut untuk menyempurnakan praktik pengujian Anda:
- Buat fungsi pengujian: Tulis fungsi pengujian untuk komponen aplikasi CLI Anda dan awali dengan
Test
, sepertiTestMyFunction
. Tempatkan fungsi-fungsi ini dalam file_test.go
terpisah di samping file sumber yang sedang diuji. - Gunakan tabel pengujian: Gunakan tabel pengujian (juga dikenal sebagai pengujian berbasis tabel) untuk menguji beberapa kombinasi input-output menggunakan fungsi pengujian tunggal. Pendekatan ini menyederhanakan kode pengujian Anda dan membuatnya lebih mudah dikelola.
- Jalankan pengujian secara paralel: Manfaatkan fungsi
t.Parallel()
dalam fungsi pengujian Anda untuk menjalankan pengujian secara bersamaan. Ini dapat mempercepat eksekusi rangkaian pengujian Anda, terutama saat menangani pengujian intensif sumber daya. - Hasilkan laporan cakupan pengujian: Gunakan perintah
go test -cover
untuk membuat laporan cakupan kode. Ini membantu Anda mengidentifikasi area kode yang memerlukan pengujian lebih menyeluruh dan memastikan tingkat cakupan pengujian yang lebih tinggi.
Untuk mengukur performa komponen aplikasi CLI Anda, Go menyediakan dukungan untuk pembandingan melalui paket testing
yang sama. Gunakan tolok ukur sebagai berikut:
- Buat fungsi benchmark: Tulis fungsi benchmark dan awali dengan
Benchmark
, sepertiBenchmarkMyFunction
. Tempatkan fungsi ini di file_test.go
yang sama yang berisi fungsi pengujian yang relevan. - Gunakan parameter
testing.B
: Jalankan kode yang ingin Anda tolok ukur dalam loop yang dikontrol oleh parametertesting.B
(misalnya,for i := 0; i < bN; i++ { ... }
). Parametertesting.B
disesuaikan secara otomatis oleh pakettesting
untuk mencapai pengukuran yang signifikan secara statistik. - Menganalisis hasil tolok ukur: Gunakan perintah
go test -bench
untuk menjalankan tolok ukur Anda dan menganalisis hasilnya. Hal ini dapat membantu Anda menentukan area aplikasi CLI yang memerlukan pengoptimalan dan mengukur dampak peningkatan kinerja.
Kesimpulannya, manajemen perpustakaan eksternal yang tepat, penanganan error, logging, pengujian, dan pembandingan sangat penting untuk membuat aplikasi CLI yang andal dan efisien. Dengan memanfaatkan berbagai alat, teknik, dan praktik terbaik yang diuraikan dalam artikel ini, Anda dapat memastikan bahwa aplikasi CLI berbasis Go Anda mencapai tingkat kualitas dan keunggulan yang tinggi. Selain itu, menggabungkan kekuatan Go dengan platform serbaguna seperti AppMaster dapat sangat mempercepat proses pengembangan perangkat lunak , sehingga mencapai hasil yang luar biasa.
Menyebarkan dan Mendistribusikan Aplikasi CLI Anda
Setelah Anda menyelesaikan pengembangan aplikasi Antarmuka Baris Perintah (CLI) di Go, langkah terakhir adalah menerapkan dan mendistribusikannya agar dapat diakses dan digunakan oleh pengguna. Bahasa pemrograman Go dan toolchain build-nya memungkinkan Anda membuat executable mandiri yang terhubung secara statis yang mudah didistribusikan dan dibagikan di seluruh platform.
Membangun yang Dapat Dieksekusi
Untuk membangun aplikasi Go CLI Anda, gunakan perintah go build
diikuti dengan paket atau file target:
go build ./path/to/your/package
Atau:
go build main.go
Perintah ini akan membuat file biner yang dapat dieksekusi untuk platform Anda saat ini (misalnya, Windows, macOS, Linux) dan menempatkannya di direktori kerja saat ini. Secara default, nama berkas biner cocok dengan nama paket atau nama berkas sumber tanpa ekstensi (misalnya, main
).
Namun, Anda dapat menentukan nama file biner keluaran dan menargetkan platform yang berbeda menggunakan flag -o
dan variabel lingkungan:
GOOS=linux GOARCH=amd64 go build -o custom-name ./path/to/your/package
Pada contoh di atas, kita menyetel variabel lingkungan GOOS
dan GOARCH
untuk menginstruksikan proses pembangunan Go untuk menargetkan Linux dengan arsitektur AMD64, dan kita menyetel nama berkas biner keluaran menjadi custom-name
.
Kompilasi Silang untuk Berbagai Platform
Go menyederhanakan kompilasi silang, dan Anda dapat dengan cepat membuat executable untuk berbagai platform tanpa konfigurasi build yang rumit. Untuk mengompilasi silang aplikasi Go CLI Anda untuk berbagai platform, atur variabel lingkungan GOOS
dan GOARCH
sesuai dengan itu. Contoh berikut menunjukkan cara mengompilasi silang aplikasi Go CLI untuk Windows, macOS, dan Linux:
# For Windows 64-bit GOOS=windows GOARCH=amd64 go build -o mycli-windows.exe ./path/to/package # For macOS 64-bit GOOS=darwin GOARCH=amd64 go build -o mycli-macos ./path/to/package # For Linux 64-bit GOOS=linux GOARCH=amd64 go build -o mycli-linux ./path/to/package
Mendistribusikan Aplikasi CLI Anda
Anda dapat mendistribusikan file biner yang dapat dieksekusi Go CLI dengan menyediakan opsi pengunduhan langsung di situs web proyek Anda atau dalam dokumentasi README. Alternatifnya, distribusikan sebagai paket khusus platform menggunakan sistem pengemasan, repositori, atau manajer paket. Beberapa sistem manajemen paket yang populer meliputi:
- Homebrew - Manajer paket untuk macOS dan Linux dengan sintaks yang mudah digunakan untuk menginstal dan mengelola paket.
- APT (sistem berbasis Debian) - Manajer paket untuk distribusi Linux berbasis Debian seperti Ubuntu.
- RPM (sistem berbasis Red Hat) - Manajer paket untuk distribusi Linux berbasis Red Hat seperti Fedora.
Pemikiran Akhir dan Sumber Daya
Membuat aplikasi CLI yang kuat dengan Go adalah proses yang menyenangkan dan bermanfaat. Kesederhanaan, kinerja, dan keunggulan distribusi biner menjadikan Go pilihan bahasa pemrograman yang ideal untuk tujuan ini. Saat Anda terus mengembangkan aplikasi Go CLI, pertimbangkan untuk menjelajahi sumber daya tambahan untuk memperluas pengetahuan dan meningkatkan keterampilan Anda:
- Dokumentasi Go Resmi - Panduan komprehensif tentang bahasa pemrograman Go dan pustaka standarnya.
- Sumber Belajar Go - Daftar lengkap sumber belajar Go, termasuk tutorial, buku, dan kursus.
- Awesome Go - Daftar paket, perpustakaan, dan sumber daya Go, dikategorikan berdasarkan topik.
- Go by Example - Pendekatan langsung untuk Go, menampilkan contoh singkat dan penjelasan untuk berbagai fitur Go.
Selanjutnya, pertimbangkan untuk menjelajahi platform no-code seperti AppMaster.io yang menggunakan Go (golang) sebagai bahasa pemrograman backend mereka. AppMaster.io menyediakan antarmuka drag-and-drop intuitif yang memungkinkan Anda mengembangkan aplikasi web, seluler, dan backend tanpa menulis satu baris kode pun. Dengan memahami platform Go dan platform no-code seperti AppMaster.io, Anda akan diperlengkapi dengan baik untuk mengembangkan solusi perangkat lunak yang lebih canggih lagi di masa mendatang.