String di Go — Go

String di Go String di Go adalah immutable — sekali dibuat, isinya tidak bisa diubah. Untuk memanipulasi string, kita menggunakan package strings dan fmt. Membu

String di Go

String di Go adalah immutable — sekali dibuat, isinya tidak bisa diubah. Untuk memanipulasi string, kita menggunakan package strings dan fmt.

Membuat String

nama := "Budi"
pesan := "Halo, dunia!"
// Backtick untuk raw string (tanpa escape)
path := `C:\Users\Budi`

Package strings

import "strings"

s := "Hello, World!"

strings.ToUpper(s)             // "HELLO, WORLD!"
strings.ToLower(s)             // "hello, world!"
strings.Contains(s, "World")   // true
strings.Replace(s, "Hello", "Hi", 1) // "Hi, World!"
strings.Split("a,b,c", ",")   // ["a", "b", "c"]
strings.Join([]string{"a","b"}, "-") // "a-b"
strings.TrimSpace("  hi  ")   // "hi"
len(s)                         // 13

Format String dengan fmt.Sprintf

nama := "Budi"
umur := 25
// Sprintf mengembalikan string (tidak mencetak)
pesan := fmt.Sprintf("Halo, %s! Umur: %d", nama, umur)
fmt.Println(pesan) // "Halo, Budi! Umur: 25"

String Concatenation

a := "Hello"
b := "World"
c := a + ", " + b + "!"
fmt.Println(c) // "Hello, World!"

String = Byte Slice, BUKAN Rune

Ini gotcha penting yang sering bikin developer baru kaget. String di Go secara internal adalah sequence of bytes (UTF-8), bukan sequence of characters. Fungsi len() mengembalikan jumlah byte, bukan jumlah karakter/rune.

s := "halo"
fmt.Println(len(s))  // 4 — ASCII, satu karakter = satu byte

s2 := "hålö"
fmt.Println(len(s2)) // 6 — å dan ö masing-masing 2 byte (UTF-8)

// Iterasi per byte (SALAH untuk Unicode)
for i := 0; i < len(s2); i++ {
    fmt.Printf("%d ", s2[i]) // print byte mentah, bisa "setengah" karakter
}

// Iterasi per rune (BENAR untuk Unicode)
for _, r := range s2 {
    fmt.Printf("%c ", r) // h å l ö
}

Rune adalah alias untuk int32 — satu code point Unicode. Jika kamu butuh menghitung karakter Unicode, konversi dulu:

fmt.Println(len([]rune(s2))) // 4 — jumlah karakter sesungguhnya

Gunakan utf8.RuneCountInString(s) dari package unicode/utf8 untuk hitung rune tanpa alokasi.

Yang akan kamu pelajari