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 #
| Fungsi | Berlaku pada | Kegunaan | Catatan |
|---|---|---|---|
append | Slice | Menambahkan elemen di akhir slice | Mengalokasikan array dasar baru bila kapasitas penuh; selalu simpan hasilnya |
cap | Slice, array, channel | Kapasitas slice/array atau ukuran buffer channel | — |
clear | Map, slice | Map: hapus semua pasangan; slice: setiap elemen diganti zero value | Mulai Go 1.21 |
close | Channel | Menandai bahwa tidak ada kirim lagi | Hanya dipanggil pengirim; penerima melihat zero value + flag closed |
complex | Bilangan | Membangun bilangan kompleks dari real dan imajiner | — |
copy | Slice | Menyalin elemen slice sumber ke slice tujuan | Mengembalikan jumlah elemen yang tersalin |
delete | Map | Menghapus pasangan berdasarkan kunci | Aman meskipun kunci tidak ada |
imag | Bilangan kompleks | Mengambil bagian imajiner | — |
len | String, array, slice, map, channel | Panjang koleksi; jumlah byte untuk string | Bukan jumlah karakter pada string UTF-8 |
make | Slice, map, channel | Mengalokasikan dan menginisialisasi nilai siap pakai | Bentuk make([]int, 0, 8) mengatur panjang dan kapasitas |
max | Nilai terurut | Mengembalikan nilai terbesar | Mulai Go 1.21; minimal satu argumen; tidak menerima spread s... |
min | Nilai terurut | Mengembalikan nilai terkecil | Mulai Go 1.21; aturan sama dengan max |
new | Semua tipe | Mengalokasikan zero value dan mengembalikan pointer-nya | new(int) menghasilkan *int berisi 0 |
panic | — | Menghentikan goroutine dengan error runtime | Deferred function tetap berjalan; tidak untuk kontrol alur biasa |
print, println | — | Mencetak nilai ke stderr internal | Diperuntukkan debugging toolchain, bukan program akhir — gunakan fmt |
real | Bilangan kompleks | Mengambil bagian real | — |
recover | — | Menangkap nilai panic dari dalam deferred function | Mengembalikan 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 :
| Identifier | Kategori | Kegunaan |
|---|---|---|
true, false | Konstanta boolean | Dua nilai bool |
iota | Konstanta | Penghitung otomatis dalam blok const |
nil | Nilai | Nilai nol pointer, slice, map, channel, func, interface |
any | Tipe | Alias interface{} sejak Go 1.18 |
comparable | Tipe | Constraint untuk tipe yang bisa dibandingkan == |
error | Tipe | Interface standar Error() string |
byte, rune | Alias tipe | Alias 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:
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:
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): 0Mari kita telaah bagian-bagian penting program di atas:
- Baris 7 (
make): slice dibuat dengan panjang 0 dan kapasitas 4, sehingga tigaappendberikutnya tidak memicu realokasi —captetap 4. - Baris 10-11 (
append,len,cap): setelah menambah 30, 10, 20, panjang menjadi 3 sementara kapasitas tetap 4. - Baris 14-15 (
copy): slice tujuan disiapkan sepanjang sumber, lalucopymemindahkan seluruh elemen — hasil cetaknya[30 10 20]. - Baris 19-20 (
mindanmax): kedua fungsi menerima tiga argumen terpisah;minmenghasilkan 10 danmaxmenghasilkan 30. - Baris 23-28 (
clear): slice menjadi[0 0 0](elemen diganti zero value) dan map menjadi kosong dengan panjang 0. - Baris 31-32 (
new): pointer baru menunjuk nilai 0, terbukti dari*pointeryang tercetak 0.
Referensi #
- Dokumentasi package builtin — definisi resmi seluruh fungsi, konstanta, dan tipe terpasang.
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 berkaspackage 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)
}