String, Byte & Rune
Memahami string sebagai byte UTF-8, rune, dan paket strings.
String di Go
String adalah deretan byte (disandikan UTF-8) dan bersifat immutable (tidak bisa diubah setelah dibuat).
s := "Halo"
// s[0] = 'h' // ERROR: tidak bisa diubah
Untuk string multi-baris gunakan backtick:
teks := `baris 1
baris 2`
len menghitung byte
Huruf Latin = 1 byte, tetapi huruf seperti 世 atau emoji memakai 3-4 byte.
s := "Go 世界"
fmt.Println(len(s)) // 9 (byte)
fmt.Println(len([]rune(s))) // 5 (karakter)
rune
rune adalah satu code point Unicode (alias int32). Ubah string ke []rune agar bisa mengiris atau menghitung karakter dengan benar. for range pada string menelusuri rune:
for i, r := range "Go世" {
fmt.Println(i, string(r))
}
Menggabung & membandingkan
a := "Halo" + " " + "Dunia"
fmt.Println(a == "Halo Dunia") // true
Menggabung banyak string dalam perulangan lebih efisien dengan strings.Builder.
Paket strings
| Fungsi | Contoh |
|---|---|
| --- | --- |
strings.ToUpper(s) / ToLower | "go" → "GO" |
strings.Contains(s, sub) | apakah mengandung |
strings.HasPrefix / HasSuffix | awalan / akhiran |
strings.Split(s, sep) | "a,b" → ["a" "b"] |
strings.Join(slice, sep) | gabungkan |
strings.Fields(s) | pecah berdasarkan spasi |
strings.TrimSpace(s) | buang spasi tepi |
strings.ReplaceAll(s, a, b) | ganti semua |
strings.Repeat(s, n) | ulangi |
strings.Index(s, sub) | posisi pertama (-1 jika tidak ada) |
strconv
n, err := strconv.Atoi("42")
s := strconv.Itoa(42)
f, _ := strconv.ParseFloat("3.14", 64)