Belajar Pemrograman Golang

Riri Maiyuliani
3 min readDec 29, 2024

--

Assalamualaikum wr wb. Masih dalam rangka mengisi akhir pekan di penghujung tahun 2024, saya akan menulis pengalaman singkat belajar bahasa pemrograman golang. Sebagai pengantar, bahasa pemrograman golang pada awalnya dikembangkan oleh google, dan hingga kini sudah banyak mengalami perkembangan. Golang itu sendiri biasanya cukup disingkat “go”. Proses instalasinya cukup mudah karena biasanya sudah terintegrasi dengan paket pada distro Linux. Misalnya untuk distro Fedora, proses instalasinya bisa menggunakan dnf seperti ini:

$ sudo dnf install golang

Atau jika hanya ingin menggunakan sendiri golang tanpa harus melakukan instalasi pada sistem, cukup unduh, ekstrak lalu set PATH dimana golang berada. Maka golang sudah dapat digunakan. Caranya seperti ini:

  • Unduh dulu arsip golang yang terbaru, misalnya versi 1.23.4:
$ cd ~
$ wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz
  • Ekstrak arsip yang sudah didownload tadi:
$ tar xvf go1.23.4.linux-amd64.tar.gz
  • Tambahkan PATH ke binary golang pada ~/.bashrc atau sesuai dengan shell yang digunakan:
PATH="$HOME/go/bin:$PATH"
export PATH
  • Jika sudah selesai, maka golang sudah dapat digunakan:
$ go version
go version go1.23.4 linux/amd64

Setelah semua proses di atas rampung, waktunya untuk membuat aplikasi “hello world” menggunakan golang. Berikut ini adalah kode untuk aplikasi “hello world” menggunakan golang:

package main

import "fmt"

func main() {
fmt.Println("hello world")
}

Simpan kode di atas dengan nama hello.go. Setelah itu ada 2 cara yang dapat dilakukan, yaitu menjalankan kodenya dengan perintah go run atau mengubah kodenya menjadi executable dengan perintah go build. Cara pertama adalah langsung menjalankan kode tersebut seperti ini:

$ go run hello.go
hello world

Cara kedua adalah dengan melakukan kompilasi yang akan menghasilkan executable:

$ ls *
hello.go

$ go build hello.go

$ ls *
hello hello.go

$ ./hello
hello world

Jika melihat executable hasil kompilasi golang, maka nampak bahwa ukurannya cukup besar:

$ ls -lh hello
-rwxr-xr-x. 1 riri riri 2.1M Dec 29 16:53 hello

Ukuran tersebut dapat dikurangi dengan menghilangkan informasi debug pada executable keluarannya menggunakan opsi kompilasi -ldflags=”-s -w -buildid=” seperti ini:

$ go build -ldflags="-s -w -buildid=" hello.go

$ ls -lh hello
-rwxr-xr-x. 1 riri riri 1.4M Dec 29 16:57 hello

Nampak penurunannya cukup signifikan. Bisa terlihat bahwa executable hasil kompilasinya sudah tidak memiliki simbol debug:

$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

Namun ukurannya masih tergolong besar karena tipe executablenya adalah “statically linked”, dimana executable tersebut tidak membutuhkan library atau pustaka eksternal:

$ ldd hello
not a dynamic executable

Ukurannya dapat dibuat lebih kecil lagi dengan menggunakan opsi output dinamis (dynamically linked). Caranya pernah dibahas pada slide golang yang bisa dibaca di sini. Pertama, lakukan instalasi “standard library” sebagai “shared libraries”:

$ go install -buildmode=shared std

Kemudian lakukan kompilasi ulang dengan menambahkan opsi -linkshared seperti ini:

$ go build -ldflags="-s -w -buildid=" -linkshared hello.go

Periksa ukuran executable yang dihasilkan:

$ ls -lah hello
-rwxr-xr-x. 1 riri riri 16K Dec 29 17:19 hello

Terlihat bahwa kini ukurannya berkurang sangat drastis hingga hanya berukuran 16 KB. Periksa kembali informasi executablenya:

$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5aad60069b34544f88c3cd2a8fc75a626a7379cc, for GNU/Linux 3.2.0, stripped

Bisa terlihat bahwa executable yang dihasilkan kini tipenya adalah “dynamically linked”, dimana executable tersebut memerlukan dependensi tertentu agar dapat dijalankan. Untuk melihat dependensinya, gunakan perintah ini:

$ ldd hello
linux-vdso.so.1 (0x00007ff2b5f82000)
libstd.so => /home/riri/go/pkg/linux_amd64_dynlink/libstd.so (0x00007ff2b2a00000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff2b280c000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007ff2b5f54000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff2b5f84000)

Pada urutan kedua dari daftar di atas adalah dependensi libstd.so, yang jika diperiksa maka hasilnya seperti ini:

$ ls -lah ../go/pkg/linux_amd64_dynlink/libstd.so
-rw-r--r--. 1 riri riri 37M Dec 29 17:19 ../go/pkg/linux_amd64_dynlink/libstd.so

Jadi, walaupun executable yang dihasilkan ukurannya kecil, namun dependensinya berukuran cukup besar. Semua ada plus dan minusnya. Sekian dulu tulisan singkat pada akhir pekan kali ini. Wassalam.

--

--

Riri Maiyuliani
Riri Maiyuliani

Written by Riri Maiyuliani

Dinas Pendidikan dan Kebudayaan Kabupaten Lima Puluh Kota

No responses yet