Fungsi bawaan (built-in) adalah fungsi yang tersedia di setiap berkas Go tanpa perlu import — append, make, dan len misalnya. Fungsi-fungsi ini tidak berkumpul dalam satu package, melainkan dideklarasikan di universe block sehingga namanya bisa dipakai langsung di mana saja. Chapter ini merangkum seluruh 18 fungsi bawaan, konstanta dan tipe terpasang yang menyertainya, serta catatan versi untuk fitur terbaru. Seluruh perilaku yang dikutip dibuktikan oleh program pada bagian akhir chapter.

Fungsi Bawaan #

FungsiBerlaku padaKegunaanCatatan
appendSliceMenambahkan elemen di akhir sliceMengalokasikan array dasar baru bila kapasitas penuh; selalu simpan hasilnya
capSlice, array, channelKapasitas slice/array atau ukuran buffer channel—
clearMap, sliceMap: hapus semua pasangan; slice: setiap elemen diganti zero valueMulai Go 1.21
closeChannelMenandai bahwa tidak ada kirim lagiHanya dipanggil pengirim; penerima melihat zero value + flag closed
complexBilanganMembangun bilangan kompleks dari real dan imajiner—
copySliceMenyalin elemen slice sumber ke slice tujuanMengembalikan jumlah elemen yang tersalin
deleteMapMenghapus pasangan berdasarkan kunciAman meskipun kunci tidak ada
imagBilangan kompleksMengambil bagian imajiner—
lenString, array, slice, map, channelPanjang koleksi; jumlah byte untuk stringBukan jumlah karakter pada string UTF-8
makeSlice, map, channelMengalokasikan dan menginisialisasi nilai siap pakaiBentuk make([]int, 0, 8) mengatur panjang dan kapasitas
maxNilai terurutMengembalikan nilai terbesarMulai Go 1.21; minimal satu argumen; tidak menerima spread s...
minNilai terurutMengembalikan nilai terkecilMulai Go 1.21; aturan sama dengan max
newSemua tipeMengalokasikan zero value dan mengembalikan pointer-nyanew(int) menghasilkan *int berisi 0
panic—Menghentikan goroutine dengan error runtimeDeferred function tetap berjalan; tidak untuk kontrol alur biasa
print, println—Mencetak nilai ke stderr internalDiperuntukkan debugging toolchain, bukan program akhir — gunakan fmt
realBilangan kompleksMengambil bagian real—
recover—Menangkap nilai panic dari dalam deferred functionMengembalikan nil bila tidak ada panic

Perbedaan make dan new sering membingungkan: new(T) hanya mengalokasikan memori untuk satu nilai T dan mengembalikan *T, sedangkan make khusus untuk slice, map, dan channel dengan struktur internal yang siap dipakai. Nilai kembalian make([]int, 0) berbeda dari new([]int) — yang pertama slice kosong siap di-append, yang kedua pointer ke slice nil.

Konstanta, Nilai, dan Tipe Terpasang #

Selain fungsi, universe block juga menyediakan identifier yang bukan fungsi. Tabel ini melengkapi pembahasan pada chapter Keyword Go :

IdentifierKategoriKegunaan
true, falseKonstanta booleanDua nilai bool
iotaKonstantaPenghitung otomatis dalam blok const
nilNilaiNilai nol pointer, slice, map, channel, func, interface
anyTipeAlias interface{} sejak Go 1.18
comparableTipeConstraint untuk tipe yang bisa dibandingkan ==
errorTipeInterface standar Error() string
byte, runeAlias tipeAlias uint8 dan int32

Demo: Menguji Sembilan Fungsi Sekaligus #

Berkas builtin-demo.go menjalankan make, append, len, cap, copy, min, max, clear, dan new dalam satu program utuh:

go
package main

import "fmt"

func main() {
	// make menyiapkan slice dengan panjang 0 dan kapasitas 4.
	angka := make([]int, 0, 4)

	// append menambahkan elemen ke dalam slice.
	angka = append(angka, 30, 10, 20)
	fmt.Println("len:", len(angka), "cap:", cap(angka))

	// copy menyalin isi slice ke slice tujuan.
	salinan := make([]int, len(angka))
	copy(salinan, angka)
	fmt.Println("salinan:", salinan)

	// min dan max (Go 1.21+) menerima sejumlah argumen terurut.
	fmt.Println("min:", min(angka[0], angka[1], angka[2]))
	fmt.Println("max:", max(angka[0], angka[1], angka[2]))

	// clear (Go 1.21+) mengosongkan isi slice dan map.
	clear(angka)
	fmt.Println("slice setelah clear:", angka)

	stok := map[string]int{"pensil": 12, "pulpen": 7}
	clear(stok)
	fmt.Println("panjang map setelah clear:", len(stok))

	// new mengalokasikan zero value dan mengembalikan pointer-nya.
	pointer := new(int)
	fmt.Println("nilai *new(int):", *pointer)
}

Output yang Dihasilkan:

text
len: 3 cap: 4
salinan: [30 10 20]
min: 10
max: 30
slice setelah clear: [0 0 0]
panjang map setelah clear: 0
nilai *new(int): 0

Mari kita telaah bagian-bagian penting program di atas:

  1. Baris 7 (make): slice dibuat dengan panjang 0 dan kapasitas 4, sehingga tiga append berikutnya tidak memicu realokasi — cap tetap 4.
  2. Baris 10-11 (append, len, cap): setelah menambah 30, 10, 20, panjang menjadi 3 sementara kapasitas tetap 4.
  3. Baris 14-15 (copy): slice tujuan disiapkan sepanjang sumber, lalu copy memindahkan seluruh elemen — hasil cetaknya [30 10 20].
  4. Baris 19-20 (min dan max): kedua fungsi menerima tiga argumen terpisah; min menghasilkan 10 dan max menghasilkan 30.
  5. Baris 23-28 (clear): slice menjadi [0 0 0] (elemen diganti zero value) dan map menjadi kosong dengan panjang 0.
  6. Baris 31-32 (new): pointer baru menunjuk nilai 0, terbukti dari *pointer yang tercetak 0.

Referensi #

Fungsi bawaan hanya sebagian kecil dari perkakas standar Go; peta package standard library yang paling sering dipakai tersusun pada chapter Standard Library .

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

builtin-demo.go

Unduh berkas
go
package main

import "fmt"

func main() {
	// make menyiapkan slice dengan panjang 0 dan kapasitas 4.
	angka := make([]int, 0, 4)

	// append menambahkan elemen ke dalam slice.
	angka = append(angka, 30, 10, 20)
	fmt.Println("len:", len(angka), "cap:", cap(angka))

	// copy menyalin isi slice ke slice tujuan.
	salinan := make([]int, len(angka))
	copy(salinan, angka)
	fmt.Println("salinan:", salinan)

	// min dan max (Go 1.21+) menerima sejumlah argumen terurut.
	fmt.Println("min:", min(angka[0], angka[1], angka[2]))
	fmt.Println("max:", max(angka[0], angka[1], angka[2]))

	// clear (Go 1.21+) mengosongkan isi slice dan map.
	clear(angka)
	fmt.Println("slice setelah clear:", angka)

	stok := map[string]int{"pensil": 12, "pulpen": 7}
	clear(stok)
	fmt.Println("panjang map setelah clear:", len(stok))

	// new mengalokasikan zero value dan mengembalikan pointer-nya.
	pointer := new(int)
	fmt.Println("nilai *new(int):", *pointer)
}