Pengantar Manajemen Ketergantungan di Go
Manajemen ketergantungan adalah aspek penting dari setiap proyek perangkat lunak, karena membantu mengelola versi pustaka dan paket yang diandalkan oleh proyek Anda. Di Go (Golang) , manajemen ketergantungan memastikan bahwa proyek Go Anda dapat direproduksi dan dipelihara dengan membuatnya lebih mudah untuk menyelesaikan masalah pembuatan versi, menjaga kompatibilitas dengan paket lain, dan merampingkan proses pengembangan secara keseluruhan.
Sebelum Go Modules, manajemen ketergantungan di Go kurang disederhanakan. Pengembang sering menggunakan alat seperti dep
, glide
, atau govendor
untuk mengelola dependensi mereka. Sementara alat-alat ini sangat membantu, mereka bukan bagian dari proyek Go resmi dan, dengan demikian, menimbulkan gesekan dalam mengadopsi Go sebagai bahasa untuk beberapa pengembang.
Modul Era Go
Pada tahun 2018, tim Go memperkenalkan konsep "modul", sebuah standar baru untuk manajemen ketergantungan dalam proyek Go. Modul adalah kumpulan paket terkait yang diberi versi bersama, menyediakan semua dependensi yang diperlukan untuk basis kode Anda. Dengan diperkenalkannya Go Modules di Go 1.11, manajemen ketergantungan menjadi lebih sederhana, lebih serbaguna, dan didukung secara resmi oleh proyek Go. Go Modules memperkenalkan fitur-fitur seperti:
- Pembuatan versi dependensi menggunakan Semantic Versioning (SemVer)
- Perintah pengelolaan dependensi yang disederhanakan (misalnya,
go get
,go mod tidy
) - Pembuatan otomatis file manifes (
go.mod
) yang berisi informasi detail dependensi - Pengunduhan otomatis dan penyimpanan cache dari dependensi yang diperlukan
Dengan Go Modules, Anda tidak perlu lagi menempatkan kode Anda di dalam direktori $GOPATH
, yang sebelumnya merupakan kendala dalam pengembangan Go. Sistem baru ini memungkinkan struktur proyek yang lebih fleksibel, membuatnya lebih mudah untuk bekerja pada proyek Go saat beralih di antara repositori yang berbeda.
Menyiapkan Proyek Modul Go Anda
Memulai Go Modules sangatlah mudah. Ikuti langkah-langkah di bawah ini untuk menyiapkan proyek Go Modules baru.
- Pertama, pastikan Anda telah menginstal Go versi 1.11 atau lebih baru di sistem Anda. Anda dapat memeriksa versi Go Anda dengan menjalankan
go version
di terminal. - Pergi ke lokasi yang Anda inginkan dan buat folder proyek baru dengan nama deskriptif, misalnya
my-go-project
. - Arahkan ke folder yang baru dibuat di baris perintah.
- Inisialisasi modul Go baru dengan menjalankan perintah
go mod init
, diikuti dengan jalur modul. Misalnya, Anda dapat menjalankango mod init github.com/your-username/my-go-project
jika Anda bermaksud menghosting proyek di GitHub. Perintah ini menghasilkan file baru bernamago.mod
di dalam folder proyek Anda.
File go.mod
adalah inti dari proyek Go Modules Anda. Ini berisi metadata tentang modul, seperti namanya, dan mencantumkan semua dependensi yang diperlukan. Anda akan berinteraksi dengan file go.mod
selama siklus proyek Go Anda untuk mengelola dependensi Anda. Setelah proyek Go Module Anda siap, Anda siap untuk mulai menambahkan dan mengelola dependensi menggunakan sistem Go Modules.
Mengelola Ketergantungan dalam Go Modules
Go Modules menyediakan pendekatan langsung dan efektif untuk mengelola dependensi proyek Anda. Ini memungkinkan Anda untuk menambah, memperbarui, atau menghapus versi dependensi tertentu, membantu Anda mempertahankan kendali atas proyek Anda dan interaksinya dengan paket lain. Bagian ini akan memandu Anda melalui proses pengelolaan dependensi dalam proyek Go Modules Anda.
Menambahkan Ketergantungan
Untuk menambahkan dependensi baru, yang perlu Anda lakukan hanyalah mengimpor paket yang diinginkan dalam kode Go Anda. Misalnya, jika Anda ingin menambahkan github.com/gorilla/mux
ke proyek Anda, impor seperti ini:
impor ( "github.com/gorilla/mux" )
Lain kali Anda menjalankan go build
atau go test
, Go akan secara otomatis mengunduh paket yang diperlukan, memperbarui file go.mod
dan go.sum
, dan mengonfigurasi proyek Anda untuk menggunakan paket yang ditentukan. Sebagai alternatif, Anda dapat menggunakan perintah go get
untuk menambahkan dependensi baru secara eksplisit:
dapatkan github.com/gorilla/mux
Ini tidak hanya mengambil paket tetapi juga memperbarui berkas go.mod
dan go.sum
proyek Anda.
Memperbarui Ketergantungan
Untuk memperbarui dependensi tertentu ke versi baru, gunakan perintah go get
diikuti jalur impor paket dan nomor versi yang diinginkan:
dapatkan github.com/gorilla/[email protected]
Perintah ini akan memperbarui berkas go.mod
dengan versi baru paket dan mengunduh kode sumbernya. Perhatikan bahwa jika paket yang diperbarui memperkenalkan perubahan yang dapat merusak, Anda mungkin perlu menyesuaikan kode Anda.
Menghapus Ketergantungan
Untuk menghapus ketergantungan dari proyek Anda, pertama-tama, hapus pernyataan impor yang sesuai dari kode sumber Anda. Setelah itu, jalankan perintah go mod tidy
untuk membersihkan file go.mod
:
pergi mod rapi
Perintah ini akan menghapus dependensi yang tidak terpakai dari file go.mod
dan memastikan proyek Anda tetap bersih dan teratur.
Semantic Versioning dan Go Modules
Semantic Versioning (SemVer) adalah sistem versi yang diadopsi secara luas yang menetapkan nomor versi unik untuk rilis perangkat lunak. Ini menggunakan format penomoran tiga bagian: Major.Minor.Patch (mis., 1.2.3). Di SemVer:
- Perubahan versi utama menunjukkan perubahan yang merusak dan memerlukan penyesuaian kode manual.
- Perubahan versi kecil memperkenalkan fitur-fitur baru namun tetap kompatibel dengan versi sebelumnya.
- Perubahan versi tambalan mencakup perbaikan bug dan peningkatan kinerja kecil, juga kompatibel mundur.
Go Modules menggabungkan Semantic Versioning untuk menangani versi dependensi, memungkinkan pengembang mengelola pembaruan, kompatibilitas mundur, dan menghentikan perubahan dengan lebih mudah. Saat menentukan versi dependensi dengan Go Modules, Anda dapat menggunakan rentang versi atau nomor versi tertentu. Misalnya: - Untuk mengambil versi stabil terbaru dari sebuah paket, gunakan jalur impor paket tanpa nomor versi: go get github.com/gorilla/mux
. - Untuk mengambil versi tertentu, tambahkan nomor versi setelah simbol @
: go get github.com/gorilla/[email protected]
. - Untuk mengambil pembaruan minor atau tambalan terbaru dalam versi utama tertentu, gunakan simbol ^
(tanda sisipan): go get github.com/gorilla/mux@^v1.0.0
.
Perintah Modul Common Go dan Kegunaannya
Berikut adalah beberapa perintah Go Modules yang paling umum digunakan dan skenario penggunaannya:
pergi mod init
go mod init
menginisialisasi proyek Go Modules baru di dalam direktori saat ini. Ini menghasilkan file go.mod
, yang berisi informasi tentang modul, dependensinya, dan batasan versi.
buka mod init example.com/myproject
Ganti example.com/myproject
dengan jalur modul Anda.
pergi dapatkan
go get
adalah perintah serbaguna yang digunakan untuk menambah, memperbarui, atau menghapus ketergantungan. Berikan jalur impor paket, secara opsional diikuti dengan nomor atau rentang versi.
dapatkan github.com/gorilla/[email protected]
Perintah ini menambah atau memperbarui paket github.com/gorilla/mux
ke versi v1.8.0.
pergi mod rapi
go mod tidy
menghapus dependensi yang tidak terpakai dari file go.mod
dan memperbaruinya untuk mencerminkan pernyataan import dalam kode sumber proyek Anda.
pergi mod rapi
Jalankan perintah ini setelah menghapus pernyataan import untuk dependensi yang tidak diinginkan.
pergi grafik mod
go mod graph
menampilkan pohon ketergantungan proyek, menunjukkan ketergantungan langsung dan tidak langsung dalam format yang dapat dibaca. Perintah ini dapat membantu saat men-debug masalah ketergantungan yang kompleks.
pergi grafik mod
pergi mod verifikasi
go mod verify
memeriksa integritas dependensi yang tercantum dalam file go.sum
. Jika checksum dependensi tidak cocok dengan nilai yang tercatat, perintah akan melaporkan kesalahan.
pergi mod verifikasi
Menyelesaikan Konflik Ketergantungan
Konflik ketergantungan dapat muncul ketika proyek Anda bergantung pada banyak paket dengan persyaratan versi yang berbeda untuk ketergantungan bersama. Go Modules menyediakan mekanisme bawaan untuk menangani konflik ini menggunakan arahan replace
dan exclude
dalam file go.mod
.
Arahan Ganti
Arahan replace
memungkinkan Anda mengubah versi modul ke versi lain atau memetakannya ke jalur lokal. Ini dapat berguna dalam situasi di mana Anda perlu menguji versi tertentu, proyek bercabang, atau perubahan lokal sebelum berkomitmen ke repositori jarak jauh. Untuk menggunakan direktif ganti, tambahkan baris berikut ke berkas go.mod
Anda:
ganti example.com/original/module v1.2.3 => example.com/new/module v1.4.0
Ini menggantikan example.com/original/module
versi v1.2.3
dengan example.com/new/module
version v1.4.0
. Anda juga dapat mengganti modul dengan jalur lokal:
ganti example.com/original/module v1.2.3 => ../local/path/to/new/module
Petunjuk Pengecualian
Anda dapat menggunakan arahan exclude
untuk mencegah versi modul tertentu digunakan dalam proyek Anda. Ini berguna ketika Anda mengetahui versi tertentu memiliki masalah kompatibilitas atau kerentanan keamanan. Untuk mengecualikan versi modul, tambahkan baris berikut ke file go.mod
Anda:
kecualikan example.com/target/module v1.2.3
Ingatlah untuk menjalankan go mod tidy
setelah menerapkan perubahan ini untuk memperbarui berkas go.sum
dan menghitung ulang pohon ketergantungan.
Modul Private Go dan Manajemen Repositori
Bekerja dengan Modul dan repositori Go pribadi mirip dengan bekerja dengan modul dan repositori publik, tetapi ada beberapa langkah tambahan untuk memastikan autentikasi dan privasi yang tepat.
Konfigurasi GOPRIVATE
Untuk mencegah bocornya jalur impor ke server publik, konfigurasikan variabel lingkungan GOPRIVATE
. Variabel ini menentukan daftar pola jalur impor yang dipisahkan koma untuk repositori pribadi.
pergi env -w GOPRIVATE=example.com/private/path/*
Menggunakan Token Akses
Untuk menggunakan repositori pribadi, Anda biasanya perlu mengautentikasi dengan layanan hosting kode sumber, seperti GitHub atau GitLab. Buat token akses pribadi dengan izin yang sesuai (seperti cakupan repo
untuk GitHub). Lihat dokumentasi layanan hosting Anda untuk langkah spesifik membuat token akses. Setelah mendapatkan token akses, konfigurasikan variabel lingkungan untuk autentikasi. Gunakan variabel lingkungan yang sesuai berdasarkan layanan VCS Anda.
ekspor GIT_TERMINAL_PROMPT=0 ekspor GITHUB_TOKEN=YOUR_ACCESS_TOKEN
Ini memungkinkan perintah go
untuk mengunduh dan mengautentikasi repositori pribadi sebagai Modul Go. Jika Anda bekerja dengan beberapa layanan VCS, Anda dapat mengonfigurasi masing-masing token akses dengan menentukan variabel lingkungan terpisah sesuai kebutuhan.
Bermigrasi dari sistem Manajemen Ketergantungan Sebelumnya
Sebelum Go Modules, ada berbagai sistem manajemen ketergantungan seperti Dep, glide, atau solusi direktori vendor kustom. Jika Anda masih menggunakan sistem ini, saatnya untuk bermigrasi ke Go Modules agar tetap terkini dan menuai manfaat dari pengelolaan dependensi Golang modern. Untuk bermigrasi dari sistem manajemen ketergantungan sebelumnya ke Go Modules, ikuti langkah berikut:
- Buat cadangan proyek asli Anda untuk memastikan Anda dapat kembali ke keadaan sebelumnya jika perlu.
- Hapus semua file manajemen ketergantungan yang ada (misalnya,
Gopkg.toml
atauGopkg.lock
). - Arahkan ke akar proyek Anda di terminal, dan jalankan
go mod init
untuk membuat berkasgo.mod
baru. Ini juga akan mencoba mengonversi file dependensi Anda sebelumnya, jika ada, menjadi entri Go Modules. - Jalankan
go mod tidy
untuk mengisi filego.mod
dengan dependensi dari sistem Anda sebelumnya. Perintah ini memastikan bahwa hanya paket-paket yang diperlukan saja yang merupakan bagian dari pohon ketergantungan. - Pada titik ini, Anda mungkin perlu melakukan penyesuaian pada berkas
go.mod
Anda untuk mengatasi konflik ketergantungan atau untuk menjalankan versi tertentu. Gunakan arahanreplace
danexclude
sesuai kebutuhan untuk menangani masalah ini. - Verifikasi bahwa proyek Anda masih membangun dan lulus pengujian seperti yang diharapkan.
Dengan mengikuti langkah-langkah ini, proyek Anda sekarang akan bekerja dengan Go Modules, merampingkan manajemen ketergantungan dan membuatnya lebih dapat dipertahankan dalam jangka panjang. Setiap masalah yang tersisa harus diselesaikan dengan menyesuaikan file go.mod
atau memeriksa jalur impor Anda untuk memastikannya mengikuti format yang benar.
AppMaster: Percepatan Pengembangan Aplikasi Berbasis Golang
Memasukkan Modul Go dan praktik terbaik manajemen ketergantungan ke dalam alur kerja harian Anda sangat penting untuk memastikan proyek perangkat lunak berbasis Golang yang dapat dipelihara dan diskalakan. Tetapi bagaimana jika Anda dapat mempercepat seluruh proses pengembangan aplikasi sambil tetap memanfaatkan kekuatan Golang?
Masukkan AppMaster.io , platform tanpa kode yang komprehensif dengan penekanan pada pembuatan aplikasi backend berbasis Golang menggunakan lingkungan pengembangan visual. Selain aplikasi backend, AppMaster memungkinkan pembuatan aplikasi web dan seluler menggunakan pendekatan terintegrasi yang dirancang untuk merampingkan proses pengembangan.
Dengan AppMaster, pengguna dapat membuat model data (skema database), merancang proses bisnis, dan menentukan endpoints REST API dan WebSocket melalui UI visual. Aplikasi web dibuat menggunakan antarmuka seret dan lepas bersama dengan perancang Proses Bisnis Web untuk pengalaman pengguna yang sepenuhnya interaktif. Aplikasi seluler dirancang serupa, dengan perancang Proses Bisnis seluler dan kemampuan desain UI.
Platform AppMaster mengambil cetak biru Anda dan menghasilkan kode sumber untuk aplikasi Anda setelah Anda menekan tombol 'Publikasikan'. Ini mengkompilasi aplikasi, menjalankan pengujian, mengemasnya ke dalam wadah Docker (untuk aplikasi backend), dan menyebarkan semuanya ke cloud, semuanya dalam hitungan detik.
Aplikasi backend dihasilkan menggunakan Golang (Go), yang diuntungkan dari kinerja, kesederhanaan, dan pemeliharaan yang ditawarkan Golang. Aplikasi web dibuat menggunakan framework Vue3 dan JavaScript/TypeScript , sedangkan aplikasi seluler menggunakan framework berbasis server AppMaster, Kotlin dan Jetpack Compose untuk Android, dan SwiftUI untuk aplikasi iOS.
Berkat platform AppMaster yang kuat, bahkan mereka yang tidak memiliki pengalaman coding dapat membuat solusi perangkat lunak yang lengkap dan dapat diskalakan yang mencakup backend server, situs web, portal pelanggan, dan aplikasi seluler asli. AppMaster tidak hanya mempercepat seluruh proses pengembangan perangkat lunak, tetapi juga menghilangkan utang teknis sepenuhnya dengan membuat aplikasi dari awal setiap kali persyaratan diubah.
Jika Anda mempertimbangkan untuk mengadopsi platform no-code untuk kebutuhan pengembangan perangkat lunak Anda, terutama yang memanfaatkan keunggulan Golang, AppMaster harus berada di urutan teratas daftar Anda. Daftar untuk mendapatkan akun gratis dan jelajahi masa depan pengembangan aplikasi dengan solusi yang 10x lebih cepat dan 3x lebih hemat biaya.