A.9. Variabel
Go mengadopsi dua jenis penulisan variabel, yaitu yang dituliskan tipe data-nya dan yang tidak. Kedua cara tersebut valid dan tujuannya sama yaitu untuk deklarasi variabel, pembedanya hanya pada cara penulisannya saja.
Pada chapter ini akan dikupas tuntas tentang macam-macam cara deklarasi variabel.
A.9.1. Deklarasi Variabel Beserta Tipe Data
Go memiliki aturan cukup ketat dalam hal penulisan variabel. Ketika deklarasi, tipe data yg digunakan harus dituliskan juga. Istilah dari metode deklarasi variabel ini adalah manifest typing.
Berikut adalah contoh cara pembuatan variabel yang tipe datanya harus ditulis. Silakan tulis pada project baru atau pada project yang sudah ada, bebas. Pastikan pada setiap pembuatan project baru untuk tidak lupa menginisialisasi project menggunakan command go mod init <nama-project>
.
package main
import "fmt"
func main() {
var firstName string = "john"
var lastName string
lastName = "wick"
fmt.Printf("halo %s %s!\n", firstName, lastName)
}
Keyword var
di atas digunakan untuk deklarasi variabel, contohnya bisa dilihat pada firstName
dan lastName
.
Nilai variabel firstName
diisi langsung ketika deklarasi, berbeda dibanding lastName
yang nilainya diisi setelah baris kode deklarasi, hal seperti ini diperbolehkan di Go.
A.9.2. Deklarasi Variabel Menggunakan Keyword var
Pada kode di atas bisa dilihat bagaimana sebuah variabel dideklarasikan dan diisi nilainya. Keyword var
digunakan untuk membuat variabel baru.
Skema penggunaan keyword var:
var <nama-variabel> <tipe-data>
var <nama-variabel> <tipe-data> = <nilai>
Contoh:
var lastName string
var firstName string = "john"
Nilai variabel bisa di-isi langsung pada saat deklarasi variabel.
◉ Penggunaan Fungsi fmt.Printf()
Fungsi ini digunakan untuk menampilkan output dalam bentuk tertentu. Kegunaannya sama seperti fungsi fmt.Println()
, hanya saja struktur outputnya didefinisikan di awal.
Perhatikan bagian "halo %s %s!\n"
, karakter %s
di situ akan diganti dengan data string
yang berada di parameter ke-2, ke-3, dan seterusnya.
Contoh lain, ketiga baris kode berikut ini akan menghasilkan output yang sama, meskipun cara penulisannya berbeda.
fmt.Printf("halo john wick!\n")
fmt.Printf("halo %s %s!\n", firstName, lastName)
fmt.Println("halo", firstName, lastName + "!")
Tanda plus (+
) jika digunakan untuk penghubung 2 data string fungsinya adalah untuk operasi penggabungan string atau string concatenation.
Fungsi fmt.Printf()
tidak menghasilkan baris baru di akhir text, oleh karena itu digunakanlah literal newline yaitu \n
, untuk memunculkan baris baru di akhir. Hal ini sangat berbeda jika dibandingkan dengan fungsi fmt.Println()
yang secara otomatis menghasilkan new line (baris baru) di akhir.
A.9.3. Deklarasi Variabel Tanpa Tipe Data
Selain manifest typing, Go juga mengadopsi konsep type inference, yaitu metode deklarasi variabel yang tipe data-nya diketahui secara otomatis dari data/nilai variabel. Cara ini kontradiktif jika dibandingkan dengan cara pertama. Dengan metode jenis ini, keyword var
dan tipe data tidak perlu ditulis.
var firstName string = "john"
lastName := "wick"
fmt.Printf("halo %s %s!\n", firstName, lastName)
Variabel lastName
dideklarasikan dengan menggunakan metode type inference. Penandanya tipe data tidak dituliskan pada saat deklarasi. Pada penggunaan metode ini, operand =
harus diganti dengan :=
dan keyword var
dihilangkan.
Tipe data lastName
secara otomatis akan ditentukan menyesuaikan value atau nilai-nya. Jika nilainya adalah berupa string
maka tipe data variabel adalah string
. Pada contoh di atas, nilainya adalah string "wick"
.
Diperbolehkan untuk tetap menggunakan keyword var
pada saat deklarasi meskipun tanpa menuliskan tipe data, dengan ketentuan tidak menggunakan tanda :=
, melainkan tetap menggunakan =
.
// menggunakan var, tanpa tipe data, menggunakan perantara "="
var firstName = "john"
// tanpa var, tanpa tipe data, menggunakan perantara ":="
lastName := "wick"
Kedua deklarasi di atas maksudnya sama. Silakan pilih sesuai preferensi.
Tanda :=
hanya digunakan sekali di awal pada saat deklarasi. Untuk assignment nilai selanjutnya harus menggunakan tanda =
, contoh:
lastName := "wick"
lastName = "ethan"
lastName = "bourne"
Deklarasi menggunakan
:=
hanya bisa dilakukan di dalam blok fungsi, misalnya dalam blok fungsimain()
A.9.4. Deklarasi Multi Variabel
Go mendukung metode deklarasi banyak variabel secara bersamaan, caranya dengan menuliskan variabel-variabel-nya dengan pembatas tanda koma (,
). Untuk pengisian nilainya-pun diperbolehkan secara bersamaan.
var first, second, third string
first, second, third = "satu", "dua", "tiga"
Pengisian nilai juga bisa dilakukan bersamaan pada saat deklarasi. Caranya dengan menuliskan nilai masing-masing variabel berurutan sesuai variabelnya dengan pembatas koma (,
).
var fourth, fifth, sixth string = "empat", "lima", "enam"
Kalau ingin lebih ringkas:
seventh, eight, ninth := "tujuh", "delapan", "sembilan"
Dengan menggunakan teknik type inference, deklarasi multi variabel bisa dilakukan untuk variabel-variabel yang tipe data satu sama lainnya berbeda.
one, isFriday, twoPointTwo, say := 1, true, 2.2, "hello"
A.9.5. Variabel Underscore _
Go memiliki aturan unik yang jarang dimiliki bahasa lain, yaitu tidak boleh ada satupun variabel yang menganggur. Artinya, semua variabel yang dideklarasikan harus digunakan. Jika ada variabel yang tidak digunakan tapi dideklarasikan, error akan muncul pada saat kompilasi dan program tidak akan bisa di-run.
Underscore (_
) adalah reserved variable yang bisa dimanfaatkan untuk menampung nilai yang tidak dipakai. Bisa dibilang variabel ini merupakan keranjang sampah.
_ = "belajar Golang"
_ = "Golang itu mudah"
name, _ := "john", "wick"
Pada contoh di atas, variabel name
akan berisikan text john
, sedang nilai wick
ditampung oleh variabel underscore, menandakan bahwa nilai tersebut tidak akan digunakan.
Variabel underscore adalah predefined, jadi tidak perlu menggunakan :=
untuk pengisian nilai, cukup dengan =
saja. Namun khusus untuk pengisian nilai multi variabel yang dilakukan dengan metode type inference, boleh di dalamnya terdapat variabel underscore.
Biasanya variabel underscore sering dimanfaatkan untuk menampung nilai balik fungsi yang tidak digunakan.
Perlu diketahui, bahwa isi variabel underscore tidak dapat ditampilkan. Data yang sudah masuk variabel tersebut akan hilang. Ibarat variabel underscore ini seperti blackhole, objek apapun yang masuk ke dalamnya, akan terjebak selamanya di-dalam singularity dan tidak akan bisa keluar 😁
A.9.6. Deklarasi Variabel Menggunakan Keyword new
Fungsi new()
digunakan untuk membuat variabel pointer dengan tipe data tertentu. Nilai data default-nya akan menyesuaikan tipe datanya.
name := new(string)
fmt.Println(name) // 0x20818a220
fmt.Println(*name) // ""
Variabel name
menampung data bertipe pointer string. Jika ditampilkan yang muncul bukanlah nilainya melainkan alamat memori nilai tersebut (dalam bentuk notasi heksadesimal). Untuk menampilkan nilai aslinya, variabel tersebut perlu di-dereference terlebih dahulu, caranya dengan menuliskan tanda asterisk (*
) sebelum nama variabel.
Mungkin untuk sekarang banyak yang akan bingung tentang apa itu pointer, namun tak apa, karena nantinya pada chapter A.23. Pointer akan dikupas habis topik tersebut.
A.9.7. Deklarasi Variabel Menggunakan Keyword make
Fungsi make()
ini hanya bisa digunakan untuk pembuatan beberapa jenis variabel saja, yaitu:
- channel
- slice
- map
Nantinya kita akan bahas lebih detail ketika sudah masuk ke pembahasan masing-masing poin tersebut.