1. Variabel dan Konstan

Pada Golang, variabel dan konstan adalah dua konsep mendasar yang memainkan peran sangat penting dalam sebuah program.

  • Sebuah variabel adalah suatu pengenal bernama yang digunakan untuk menyimpan data dalam sebuah program. Pada Golang, kata kunci var digunakan untuk mendeklarasikan variabel.
  • Sebuah konstan adalah suatu pengenal yang nilainya tidak dapat diubah dalam program. Pada Golang, kata kunci const digunakan untuk mendeklarasikan konstan.

2. Pendeklarasian dan Inisialisasi Variabel Golang

2.1 Pendeklarasian dan Pemberian Nilai untuk Satu Variabel

Dalam bahasa Go, kata kunci var digunakan untuk mendeklarasikan suatu variabel dengan format var nama_variabel tipe. Setelah pendeklarasian, variabel dapat diberikan nilai pada kode selanjutnya, atau dapat langsung diinisialisasi pada saat pendeklarasian. Sebagai contoh:

var usia int // Mendeklarasikan variabel bilangan bulat usia
usia = 25    // Memberikan nilai untuk variabel

var nama string = "Alice" // Mendeklarasikan dan menginisialisasi variabel nama

2.2 Pendeklarasian Multiple Variabel

Bahasa Go mendukung pendeklarasian serentak dari beberapa variabel, yang dapat membuat kode lebih ringkas. Pendeklarasian secara massal biasanya dilakukan di awal suatu fungsi atau pada level paket. Sebagai contoh:

var (
    namaDepan, namaBelakang string
    usia                    int
)

namaDepan = "John"
namaBelakang = "Doe"
usia = 30

Pada pendeklarasian massal di atas, namaDepan dan namaBelakang dideklarasikan sebagai string, sementara usia adalah bilangan bulat.

2.3 Inferensi Tipe dan Pendeklarasian Variabel Pendek

Dalam bahasa Go, tidak selalu perlu secara eksplisit menyebutkan tipe dari variabel. Jika terdapat ekspresi inisialisasi saat mendeklarasikan variabel, Go dapat menginferensi tipe dari variabel tersebut. Hal ini dikenal sebagai inferensi tipe. Pendeklarasian variabel pendek menggunakan := dapat menyederhanakan pernyataan untuk mendeklarasikan dan menginisialisasi variabel berdasarkan inferensi tipe. Sebagai contoh:

kota := "Beijing" // Menggunakan pendeklarasian variabel pendek untuk secara serentak mendeklarasikan dan menginisialisasi kota
negara := "China" // tipe negara diinferensi sebagai tipe string

Perlu dicatat bahwa pendeklarasian variabel pendek hanya dapat digunakan di dalam fungsi dan tidak dapat digunakan pada cakupan global.

2.4 Pendeklarasian Variabel di Luar Fungsi

Variabel yang dideklarasikan di luar fungsi memiliki cakupan level paket. Variabel-varibel ini terlihat dan dapat diakses di seluruh paket. Sebagai contoh:

var globalVar string = "Saya adalah variabel global" // Pendeklarasian variabel global

func cetakGlobalVar() {
    fmt.Println(globalVar) // Mengakses variabel global di dalam fungsi
}

Variabel global dapat digunakan antar fungsi di dalam paket, namun perlu digunakan dengan hati-hati untuk menghindari konflik nama dan referensi yang tidak jelas.

Tip: Memahami kode fungsi dasar di sini sudah cukup, penjelasan detail tentang fungsi akan diberikan pada bagian-bagian selanjutnya.

3. Tipe Data Dasar dan Nilai Nol

3.1 Tipe Data Dasar dalam Golang

Dalam bahasa Go, setiap tipe variabel menyediakan semantik eksplisit dan karakteristik perilaku. Berikut adalah beberapa tipe data dasar yang umum:

  • int, int8, int16, int32, int64: Rentang yang berbeda dari bilangan bulat
  • uint, uint8, uint16, uint32, uint64: Bilangan bulat tanpa tanda
  • float32, float64: Bilangan desimal
  • bool: Nilai boolean (benar atau salah)
  • string: Teks

3.2 Konsep Nilai Nol

Dalam bahasa Go, variabel secara otomatis diinisialisasi dengan nilai nol dari tipe mereka setelah pendeklarasian. Nilai nol mengacu pada nilai default dari tipe yang sesuai ketika suatu variabel tidak diinisialisasi secara eksplisit. Hal ini tidak umum dalam beberapa bahasa lain, namun dalam Go, ini memastikan bahwa semua variabel selalu memiliki nilai awal yang valid. Berikut adalah nilai nol untuk setiap tipe data dasar:

  • Nilai nol untuk sebuah bilangan bulat adalah 0
  • Nilai nol untuk sebuah bilangan desimal adalah 0.0
  • Nilai nol untuk sebuah nilai boolean adalah false
  • Nilai nol untuk sebuah string adalah string kosong ""

Sebagai contoh:

var i int     // Nilai nol adalah 0
var f float64 // Nilai nol adalah 0.0
var b bool    // Nilai nol adalah false
var s string  // Nilai nol adalah ""

Memahami konsep nilai nol ini sangat penting, karena ini dapat membantu pengembang memahami perilaku inisialisasi variabel dan dapat digunakan untuk mencegah kesalahan pointer null atau tidak terinisialisasi.

4. Lingkup Variabel

4.1 Variabel Lokal

Variabel lokal adalah variabel yang didefinisikan dalam sebuah fungsi, dan hanya dapat diakses di dalam fungsi tersebut. Parameter fungsi juga termasuk dalam variabel lokal. Mulai dari saat dibuat, hingga eksekusi fungsi selesai, variabel lokal akan menghilang. Setiap kali fungsi dipanggil, variabel lokal akan dibuat ulang.

func contohVariabelLokal() {
    var variabelLokal int = 10 // Ini adalah variabel lokal
    fmt.Println(variabelLokal)
}

func main() {
    contohVariabelLokal() // Output: 10
    // fmt.Println(variabelLokal) // Ini akan menyebabkan error kompilasi karena variabelLokal tidak terlihat di sini
}

Pada contoh di atas, variabelLokal hanya dapat diakses di dalam fungsi contohVariabelLokal.

4.2 Variabel Global

Variabel global adalah variabel yang didefinisikan di luar fungsi, dan dapat diakses di dalam file mana pun dalam paket yang sama. Jika Anda ingin menggunakan variabel global di paket lain, nama variabel tersebut harus dimulai dengan huruf kapital, sesuai dengan aturan kontrol akses Go.

package main

import "fmt"

var variabelGlobal int = 20 // Ini adalah variabel global

func main() {
    fmt.Println(variabelGlobal) // Output: 20
    ubahGlobal()
    fmt.Println(variabelGlobal) // Output: 30
}

func ubahGlobal() {
    variabelGlobal = 30 // Mengubah nilai variabel global
}

Pada contoh ini, variabelGlobal terlihat di kedua fungsi main dan ubahGlobal.

5 Pendefinisian dan Penggunaan Konstanta

5.1 Kata Kunci const

Kita menggunakan kata kunci const untuk mendefinisikan konstanta. Konstanta adalah nilai yang tidak dapat diubah dan setelah didefinisikan, nilai mereka tidak dapat diubah. Konstanta bisa berupa jenis data dasar seperti bilangan bulat, bilangan pecahan, boolean, atau string.

const Pi = 3.14 // Mendeklarasikan konstanta float
const StrConst string = "Hello, World!" // Mendeklarasikan konstanta string

func main() {
    fmt.Println(Pi)
    fmt.Println(StrConst)
}

5.2 Konstanta Enum

Bahasa Go tidak memiliki tipe enumerasi khusus, tetapi Anda dapat menggunakan kata kunci iota untuk mencapai enumerasi. Dalam blok const, setiap deklarasi konstanta tambahan akan menambahkan nilai iota sebesar 1.

const (
    Minggu = iota  // 0
    Senin         // 1
    Selasa        // 2
    Rabu      // 3
    Kamis       // 4
    Jumat         // 5
    Sabtu       // 6
)

func main() {
    fmt.Println(Minggu)    // Output: 0
    fmt.Println(Sabtu)  // Output: 6
}

Kode di atas mendeklarasikan enumerasi untuk hari-hari dalam seminggu, di mana iota diinisialisasi menjadi 0 dalam blok const dan bertambah 1 untuk setiap deklarasi selanjutnya.

5.3 Ruang Lingkup Konstanta

Ruabg lingkup konstanta mirip dengan variabel. Jika sebuah konstanta didefinisikan di dalam sebuah fungsi, ruang lingkupnya terbatas pada fungsi tersebut. Jika sebuah konstanta didefinisikan di luar fungsi (secara global), ruang lingkupnya adalah seluruh paket, dan jika huruf pertamanya adalah huruf kapital, konstanta tersebut bisa diakses di paket lain.

Mengelola ruang lingkup konstanta membantu mengurangi polusi ruang lingkup global dan meningkatkan keterbacaan dan kemudahan pemeliharaan program.

const KonstantaGlobal = "Ini adalah konstanta global"

func main() {
    const KonstantaLokal = "Ini adalah konstanta lokal"
    fmt.Println(KonstantaGlobal)  // Ini valid
    fmt.Println(KonstantaLokal)   // Ini valid
}

func fungsiLain() {
    // fmt.Println(KonstantaLokal) // Ini akan menyebabkan error kompilasi: KonstantaLokal tidak terlihat di fungsi ini
    fmt.Println(KonstantaGlobal)  // Ini valid
}

Pada contoh ini, KonstantaLokal hanya bisa diakses di dalam fungsi main, sementara KonstantaGlobal bisa diakses di seluruh paket.