Membuat module dengan command go mod init

Golang – Pengenalan Go Modules

Go modules adalah fitur baru yang ada di golang. Saat kita membuat aplikasi, biasanya kita akan menggunakan library atau dependency dari project lain. Karena sangat jarang jika membuat sebuah aplikasi dengan source code kita sendiri, biasanya kita akan membutuhkan library tambahan 3rd party. Pada golang untuk me manage library kita bisa menggunakan go modules, jika di bahasa pemrogaman lain contoh nya di php maka go modules sama dengan composer atau jika di nodejs maka sama dengan npm & yarn.

Membuat module

Untuk membuat module baru, kita bisa menggunakan perintah go mod init nama-module. Saat kita menggunakan perintah tersebut maka golang akan secara otomatis membuat file go.mod yang berisikan nama module dan juga versi golang yang kita gunakan. Selanjutnya jika kita telah selesai membuat module dan kita ingin merilis nya maka sangat sederhanya, karena golang terintegrasi dengan baik dengan git maka untuk merilis module kita hanya perlu membuat tag di git.

Pada artikel kali ini kita akan emmbuat dua aplikasi yang pertama adalah module dan yang kedua adalah aplikasi yang menggunakan module kita sebelumnya. Pertama yang perlu anda lakukan buat lah repository baru di github dan beri nama module nya. contohnya

Membuat repository untuk module di github
Membuat repository untuk module di github

Pada gambar di atas saya membuat repository baru dengan nama go-say-hello. Setelah membuat repository copy bagian url di atas dan hilangkan https di depan dan git di belakang, kurang lebih akan menjadi seperti berikut github.com/rendyuwu/go-say-hello. Simpanlah link ini karena akan kita gunakan untuk membuat module nantinya.

Selanjutnya buka terminal dan buat direktori baru dengan nama go-say-hello dan masuk ke direktori tersebut, jika sudah jalankan perintah go mod init github.com/rendyuwu/go-say-hello silakan sesuaikan nama module nya dengan repository kita sebelumnya.

Membuat module dengan command go mod init
Membuat module dengan command go mod init

Setelah command diatas dijalankan maka golang akan membuat file baru dengan nama go.mod yang mana isinya adalah nama module dan versi golang yang digunakan saat ini.

Isi file go.mod
Isi file go.mod

Kemudian buat file baru say_hello.go dan buat function SayHello sederhana yang akan mengembalikan satring Hello.

Baris kode function SayHello
Baris kode function SayHello

Pada langkah-langkah diatas kita telah selesai untuk membuat module, selanjutnya kita akan melakukan commit ke repository yang sudah di buat.

Commit module ke repository
Commit module ke repository

Jika sudah di commit & push, coba refresh halaman repository pada github, jika berhasil maka file module kita harusnya sudah di tambahkan ke repository yang sebelumnya masih kosong.

Isi repository setelah module di push
Isi repository setelah module di push

Selanjutnya bagaimana cara merilis versi module kita, cara nya cukup simple kita hanya perlu membuat tag pada git saja, dan pada go module biasanya kita membuat versi di awali dengan huruf v misal jika kita akan membuat versi 1.0.0 maka saat membuat tag kita tambahkan v di depan, contoh nya v1.0.0.

Setelah membuat tag, selanjutnya coba push tag tersebut

Rilis versi go module
Rilis versi go module

Jika sudah di push, coba refresh repository kita pada github dan perhatikan pada bagian release kita sudah memiliki 1 tag.

Tag pada repository
Tag pada repository

Menambah dependency

Sebelumnya kita telah berhasil membuat module, nah bagaimana cara menggunakan module tersebut, sebenar nya caranya cukup sederhana kita bisa menggunakan command go add namaModule. Untuk mecoba nya silakan membuat module kembali dengan nama app-say-hello dengan cara di atas yang sudah dicoba sebelumnya.

Jika sudah membuat module, seperti biasa kita akan mendapat file go.mod

Isi file go.mod app-say-hello
Isi file go.mod app-say-hello

Selanjutnya jalankan command go get namaModuleSebelumnya, untuk mendownload module tersebut agar bisa digunakan di project app-say-hello

Download module dengan command go get
Download module dengan command go get

Perhatikan output diatas, golang secara otomatis akan mendownload dan mendeteksi versi terbaru dari module nya, jadi kita tidak perlu repot lagi jika inggin menambahkan dependencies karana kita hanya perlu menggunakan comman go get

Jika sudah selesai di download, coba buka file go.mod kembali

Iso file go.mod setelah add dependencies
Iso file go.mod setelah add dependencies

Perhatikan jika saat ini terdapat baris baru yang mana terdapat require ke nama module nya dan versi module saat ini. Jadi kita tidak perlu me manage ini secara manual, kita hanya perlu menggunakan go get namaModule dan secara otomatis akan ditambahkan module tersebut ke file go.mod.

Selanjutnya setelah download module bagaimana cara menggunakannya, cara nya sebenarnya sama seperti saat kita menggunakan package sebelumnya, kita harus melakukan import terlebih dahulu. Contohnya coba buat file main.go pada direktori app-say-hello dan isikan baris kode berikut.

package main

import (
	"fmt"

	go_say_hello "github.com/rendyuwu/go-say-hello"
)

func main() {
	fmt.Println(go_say_hello.SayHello())
}
Baris kode main.go
Baris kode main.go

Pada baris kode di atas kita melakukan import package pada bars ke 6 namaAlias "namModule" kemudian pada baris ke 10 kita sudah bisa melakukan pemanggilan function nya seperti biasa. Coba jalankan baris kode diatas

Output baris kode app say hello
Output baris kode app say hello

Upgrade module

Untuk melakukan upgrade module caranya cukup simple, kita hanya perlu membuat tag baru di git. Jadi jika kita ingin me release versi baru pada module nya maka kita hanya perlu membuat tag baru saja di git nya.

Untuk mencobanya, buka kembali file say_hello.go pada direktori go-say-hello, sebelumnya kita telah me release versi v1.0.0 nah selanjutnya kita akan me release versi baru yaitu v1.5.0. Pertama lakukan perubahan kode terlebih dahulu pada baris 4 yang sebelumnya return "Hello" menjadi return "Hello World".

Update baris kode say hello
Update baris kode say hello

Selanjutnya commit dan push ke master, kemudian jangan lupa juga untuk membuat tag terbarunya, jika sudah coba cek kembali repository go-say-hello dan pastikan saat ini sudah terdpaat 2 tag.

Nah sekarang kita sudah berhasil upgrade versi dari module go-say-hello

Upgrade dependency

Setelah kita upgrade module nya, sekarang saat nya kita upgrade dependency yang ada di aplikasi nya, untuk upgrade dependency ke versi terbaru kita bisa langsung mengubah isi file go.mod, lalu mengubah tag nya menjadi tag terbaru. Kemudian untuk mendownload versi terbaru gunakan command go get.

Update tag terbaru pada file go.mod
Update tag terbaru pada file go.mod

Selanjutnya jalankan command go get untuk mendownload versi dependency terbaru

Output update dependency
Output update dependency

Jika sudah berhasil seperti diatas, coba jalankan kembali baris kode app-say-hello dan pastikan output nya sudah sesuai Hello World seperti yang kita rubah pada module sebelumnya.

Output app say hello
Output app say hello

Major upgrade

Major upgrade biasanya terjadi dikarenakan ada perubahan pada isi kode program kita, sehingga membuatnya tidak backward compatible, artinya kode nya rusak, jadi di versi terbaru kode nya sudah bebeda dengan versi lamanya. Sebenarnya hal ini sebaik nya sangat di hindari dan jika bisa jangan dilakukan, jangan sampai kita melakukan perubahan yang lumayan besar sehingga membuat tidak backward compatible. Namun jika tidak bisa dihindari maka strategi terbaik adalah merubah nama module.

Contohnya jika merubah function SayHello yang sebelumnya tanpa parameter menjadi memiliki parameter nama

Update function SayHello
Update function SayHello

Jika kita melakukan perubahan diatas maka kode kita akan rusak, rusak nya seperti apa, rusak nya terjadi ke orang-orang yang menggunakan module kita akan mendapat error karena sebelumnya saat menggunakan function SayHello bisa tanpa paremeter, tetapi sekarang wajib menggunakan parameter. Walau perubahan nya hanya 1 parameter ini kita anggap major karena kode sebelumnya pasti rusak.

Idealnya saat kita melakukan major changes dan tidak bisa backward compatible, kita merubah nama module nya, jadi nama module nya kita rubah, nah biasanya di golang kita menambahkan versi di belakang nama module contohnya module github.com/rendyuwu/go-say-hello/v2

Update file go mod
Update file go mod

Dengan merubah nama module nya maka kita berharap orang yang masih get ke nama module sebelumnya maka akan mendapat v1 dan jika ingin mendapat versi 2 maka harus menambahkan v2 di belakang nya. Walaupun repository nya sama tidak masalah jika kita merubah nama module nya.

Selanjutnya setelah melakukan perubahan pada kode dan nama module, maka seperti biasa commit dan push ke repository, kemudian buat juga tag major changes v2.0.0

Update versi say hello ke v2
Update versi say hello ke v2

Jika sudah di push pastikan juga tag nya sudah muncul di github

Detail tag pada github
Detail tag pada github

Nah selanjutnya jika kita ingin menggunakan versi 2 maka saat menjalankan command go get tambah v2 di belakang, contohnya go get github.com/rendyuwu/go-say-hello/v2, dengan begini golang akan mengambil tag yang di depan nya v2 v2.0.0. Untuk menggunakan versi 1 yang lama maka bisa seperti sebelumnya tanpa v2 go get github.com/rendyuwu/go-say-hello.

Isi file go mod setalah update ke v2
Isi file go mod setalah update ke v2

Bisa dilihat tag pada go mod secara otomatis akan menggunakan v2.0.0, karena dependency sudah di update selanjutnya lakukan perubahan pada file min.go juga karena saat ini function SayHello memerlukan parameter.

Baris kode app say hello
Baris kode app say hello

Lakukan perubahan pada baris 6 dan sesuaikan nama module yang sebelumnya github.com/rendyuwu/go-say-hello menjadi github.com/rendyuwu/go-say-hello/v2. Kemudian tambahkan juga parameter pada function SayHello dan coba jalankan kaembali program nya.

Output say hello v2
Output say hello v2

Penutup

Pada artikel kali ini kita telah belajar tentang beberapa Go Modules pada bahasa pemrogaman golang. Dan pada artikel selanjutnya saya akan membahas Golang Unit Test yang akan terdiri dari beberapa artikel.

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

About Me

About Me

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam.

Social Profiles

Facebook