Keyword adalah kata yang dicadangkan oleh spesifikasi bahasa Go sehingga tidak boleh dipakai sebagai nama variabel, fungsi, parameter, atau tipe. Bahasa Go hanya mendefinisikan tepat 25 keyword — jumlah yang sengaja dijauhkan tetap kecil agar bahasa mudah dihafal dan dipindai. Seluruh daftar resminya tercantum pada bagian Keywords di spesifikasi bahasa. Chapter ini menyusun 25 keyword tersebut ke dalam satu tabel rujukan yang dikelompokkan per kategori, lengkap dengan kegunaan dan contoh mini pemakaiannya.
Tabel 25 Keyword #
Tabel berikut memuat seluruh keyword Go dalam urutan alfabetis. Gunakan kolom Kategori untuk mencari kata berdasar kelompoknya, misalnya ketika kita hanya ingat bentuk pernyataan tetapi lupa nama keywordnya. Setiap contoh mini adalah potongan sintaks yang valid jika ditempatkan di posisi yang tepat.
| Keyword | Kategori | Kegunaan | Contoh |
|---|---|---|---|
break | Kendali alur | Menghentikan perulangan for, switch, atau select terdalam | break |
case | Kendali alur | Label cabang pada switch dan select | case 2: |
chan | Tipe komposit | Mendeklarasikan channel untuk komunikasi antar goroutine | ch := make(chan int) |
const | Deklarasi | Mendeklarasikan konstanta bernilai tetap | const Pi = 3.14 |
continue | Kendali alur | Melompati sisa isi iterasi dan lanjut ke iterasi berikutnya | continue |
default | Kendali alur | Cabang fallback ketika tidak ada case yang cocok | default: |
defer | Penundaan | Menjadwalkan pemanggilan fungsi saat fungsi sekarang selesai | defer f.Close() |
else | Kendali alur | Cabang alternatif dari if | else { ... } |
fallthrough | Kendali alur | Melanjutkan eksekusi ke case berikutnya pada switch | fallthrough |
for | Kendali alur | Satu-satunya konstruksi perulangan di Go | for i := range 10 { |
func | Deklarasi | Mendeklarasikan fungsi atau method | func main() {} |
go | Concurrency | Menjalankan pemanggilan fungsi sebagai goroutine baru | go kerjakan() |
goto | Kendali alur | Lompat tanpa syarat ke label dalam fungsi yang sama | goto selesai |
if | Kendali alur | Percabangan bersyarat | if x > 0 { |
import | Deklarasi | Memuat package agar identitasnya bisa dipakai | import "fmt" |
interface | Tipe komposit | Mendeklarasikan sekumpulan method sebagai tipe | type Reader interface { |
map | Tipe komposit | Mendeklarasikan tabel hash kunci-nilai | map[string]int |
package | Deklarasi | Menentukan nama package dari sebuah berkas | package main |
range | Kendali alur | Mengiterasi elemen slice, map, channel, string, atau integer | for k, v := range m |
return | Kendali alur | Mengakhiri fungsi dan mengembalikan nilai | return hasil |
select | Concurrency | Menunggu salah satu operasi channel siap dijalankan | select { |
struct | Tipe komposit | Mendeklarasikan tipe gabungan berisi field | type User struct { |
switch | Kendali alur | Percabangan multi-cabang | switch x { |
type | Deklarasi | Mendeklarasikan tipe baru, alias, atau interface | type ID int |
var | Deklarasi | Mendeklarasikan variabel | var nama string |
Perhatikan pembagian perannya: keyword for mencakup semua bentuk perulangan, dan if bersama switch menangani seluruh percabangan. Go tidak memiliki keyword while, do, atau class sebagaimana bahasa lain; peran tersebut diambil alih oleh kombinasi 25 kata di atas.
Identifier Terpasang yang Bukan Keyword #
Banyak kata yang terlihat seperti keyword padahal statusnya hanya predeclared identifier — nama yang sudah tersedia di setiap berkas, tetapi tetap boleh dibayangi (shadowing) oleh deklarasi kita. Kata int, len, true, dan nil masuk kelompok ini, bukan keyword. Tabel berikut merangkum identifier terpasang yang paling sering dikira keyword:
| Identifier | Kategori | Kegunaan |
|---|---|---|
any | Tipe terpasang | Alias resmi untuk interface{} sejak Go 1.18 |
comparable | Tipe terpasang | Constraint untuk tipe yang dapat dibandingkan dengan == |
error | Tipe terpasang | Interface standar untuk nilai error dengan method Error() string |
byte | Alias tipe | Alias untuk uint8 |
rune | Alias tipe | Alias untuk int32, mewakili satu titik kode Unicode |
nil | Nilai terpasang | Nilai nol untuk pointer, slice, map, channel, func, dan interface |
true, false | Konstanta boolean | Dua nilai yang mungkin dimiliki tipe bool |
iota | Konstanta terpasang | Penghitung otomatis di dalam blok deklarasi const |
Identifier len, cap, append, dan kawan-kawannya juga masuk kelompok ini sebagai fungsi bawaan; seluruh daftarnya dibahas pada chapter Built-in Function
. Karena bukan keyword, identifier terpasang secara teknis bisa dibayangi — misalnya mendeklarasikan variabel bernama error — tetapi praktik tersebut membingungkan pembaca kode dan sebaiknya dihindari.
Memverifikasi Daftar secara Programatik #
Daftar 25 keyword pada tabel di atas bukan sekadar salinan hafalan. Standard library menyediakan package go/token yang memetakan identifier menjadi token bahasa; fungsi token.Lookup mengembalikan token keyword untuk 25 kata resmi dan token.IDENT untuk kata lainnya. Berkas keyword-demo.go pada bagian bawah halaman memakai fungsi tersebut untuk memverifikasi kedua klaim sekaligus:
package main
import (
"fmt"
"go/token"
)
// kandidatKeyword berisi 25 keyword resmi dari spesifikasi bahasa Go.
var kandidatKeyword = []string{
"break", "case", "chan", "const", "continue", "default", "defer",
"else", "fallthrough", "for", "func", "go", "goto", "if", "import",
"interface", "map", "package", "range", "return", "select",
"struct", "switch", "type", "var",
}
// kandidatPredeclared berisi identifier terpasang yang sering dikira keyword.
var kandidatPredeclared = []string{
"any", "comparable", "error", "byte", "rune",
"nil", "true", "false", "iota",
}
func main() {
keyword := 0
for _, kata := range kandidatKeyword {
if token.Lookup(kata) != token.IDENT {
keyword++
}
}
fmt.Printf("keyword resmi terverifikasi: %d dari %d kandidat\n", keyword, len(kandidatKeyword))
bukanKeyword := 0
for _, kata := range kandidatPredeclared {
if token.Lookup(kata) == token.IDENT {
bukanKeyword++
}
}
fmt.Printf("predeclared identifier yang bukan keyword: %d dari %d\n", bukanKeyword, len(kandidatPredeclared))
}Output yang Dihasilkan:
keyword resmi terverifikasi: 25 dari 25 kandidat
predeclared identifier yang bukan keyword: 9 dari 9Mari kita telaah bagian-bagian penting program di atas:
- Baris 3-6 (import): program mengimpor
fmtuntuk mencetak hasil dango/tokenuntuk mengakses tabel token bahasa Go. - Baris 9-14 (
kandidatKeyword): slice berisi 25 kandidat keyword persis seperti tabel di awal chapter. - Baris 17-20 (
kandidatPredeclared): sembilan identifier terpasang yang sering dikira keyword. - Baris 24-28 (loop pertama): untuk setiap kandidat,
token.Lookupmengembalikan token selaintoken.IDENTapabila kata tersebut memang keyword resmi. - Baris 29: mencetak jumlah kandidat yang lolos verifikasi — hasilnya 25 dari 25.
- Baris 32-37 (loop kedua): pemeriksaan kebalikan — kesembilan identifier terpasang mengembalikan
token.IDENT, artinya semuanya terbukti bukan keyword.
Referensi #
- Spesifikasi Go — Keywords — daftar resmi 25 keyword yang dicadangkan.
- Spesifikasi Go — Predeclared identifiers — daftar identifier terpasang beserta kategorinya.
Dengan tabel keyword ini di tangan, saatnya kita melihat kumpulan kata lain yang menentukan bentuk data program: tipe-tipe bawaan beserta zero value dan rentang nilainya dibahas pada chapter Tipe Data .
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
keyword-demo.go
Unduh berkaspackage main
import (
"fmt"
"go/token"
)
// kandidatKeyword berisi 25 keyword resmi dari spesifikasi bahasa Go.
var kandidatKeyword = []string{
"break", "case", "chan", "const", "continue", "default", "defer",
"else", "fallthrough", "for", "func", "go", "goto", "if", "import",
"interface", "map", "package", "range", "return", "select",
"struct", "switch", "type", "var",
}
// kandidatPredeclared berisi identifier terpasang yang sering dikira keyword.
var kandidatPredeclared = []string{
"any", "comparable", "error", "byte", "rune",
"nil", "true", "false", "iota",
}
func main() {
keyword := 0
for _, kata := range kandidatKeyword {
if token.Lookup(kata) != token.IDENT {
keyword++
}
}
fmt.Printf("keyword resmi terverifikasi: %d dari %d kandidat\n", keyword, len(kandidatKeyword))
bukanKeyword := 0
for _, kata := range kandidatPredeclared {
if token.Lookup(kata) == token.IDENT {
bukanKeyword++
}
}
fmt.Printf("predeclared identifier yang bukan keyword: %d dari %d\n", bukanKeyword, len(kandidatPredeclared))
}