Sebagian besar pengolahan teks sehari-hari tidak serumit regex: mencari kata di dalam kalimat, membersihkan spasi berlebih dari input pengguna, memecah nama lengkap, atau menyusun ulang potongan teks. Package strings dari standard library menyediakan seluruh peralatan tersebut sebagai fungsi siap pakai yang bekerja benar pada teks UTF-8. Pada chapter ini kita akan berlatih dengan data Indonesia — nama "Budi Santoso" dan kalimat "belajar go itu menyenangkan" — dari pencarian paling sederhana hingga pipeline pemotongan dan penggabungan.
Mencari Teks di dalam String #
Tiga pertanyaan paling awal tentang sebuah string: apakah memuat teks tertentu, apakah diawali atau diakhiri teks tertentu, dan di posisi mana teks itu berada. Fungsi Contains, HasPrefix, HasSuffix, dan Index menjawabnya sekaligus:
nama := "Budi Santoso"
fmt.Println(strings.Contains(nama, "Sant"), strings.Index(nama, "Sant"))Output yang Dihasilkan:
true 5Pemanggilan strings.Contains(nama, "Sant") memeriksa keberadaan substring Sant di dalam nama, sedangkan strings.Index(nama, "Sant") mengembalikan posisi byte pertama kemunculannya — angka 5 karena substring tersebut dimulai setelah Budi dan satu spasi. Bila substring tidak ditemukan, strings.Index mengembalikan -1; saudaranya strings.LastIndex mencari dari arah belakang. Ketiga fungsi ini tidak peduli huruf besar-kecil — untuk perbandingan abaik-huruf, gunakan strings.EqualFold.
Membersihkan dan Mengubah Huruf #
Input dari pengguna hampir selalu datang kotor: spasi di depan-belakang, tab, baris baru. strings.TrimSpace memangkas seluruh whitespace Unicode di kedua tepi string, sedangkan strings.Trim memangkas himpunan karakter yang kita tentukan sendiri:
fmt.Printf("[%s]\n", strings.TrimSpace(" \tbelajar go\n"))Output yang Dihasilkan:
[belajar go]Keluarga Trim punya varian searah: TrimPrefix dan TrimSuffix hanya memangkas satu awalan atau akhiran pasti, cocok untuk membersihkan label seperti data_2026.txt menjadi 2026.txt. Fungsi ToUpper dan ToLower mengubah huruf dengan sadar-Unicode: huruf é berubah menjadi É, bukan terabaikan. Untuk perbandingan dua string tanpa memedulikan huruf besar-kecil, strings.EqualFold("GO", "gO") bernilai true tanpa perlu mengubah keduanya lebih dulu.
Memotong, Menggabung, dan Mengganti #
strings.Split memecah string menjadi []string berdasarkan pemisah, lalu strings.Join menyusunnya kembali dengan pemisah baru — pasangan ini adalah tulang punggung pemrosesan teks terformat:
bagian := strings.Split("Budi Santoso", " ")
fmt.Println(bagian, strings.Join(bagian, "-"))Output yang Dihasilkan:
[Budi Santoso] Budi-SantosoPenggantian teks memakai strings.Replace dengan jumlah yang ditentukan, atau strings.ReplaceAll untuk seluruh kemunculan:
fmt.Println(strings.Replace("a-b-a-b", "a", "x", 1))
fmt.Println(strings.ReplaceAll("a-b-a-b", "a", "x"))Output yang Dihasilkan:
x-b-a-b
x-b-x-bArgumen 1 pada pemanggilan pertama membatasi penggantian hanya pada kemunculan pertama a. Fungsi pendukung lain: strings.Repeat menggandakan teks, strings.Count menghitung kemunculan substring, dan strings.Fields memotong berdasarkan whitespace bertumpuk.
Tabel Ringkas #
| Fungsi | Tugas | Contoh |
|---|---|---|
Contains(s, sub) | cek keberadaan substring | Contains("Budi Santoso", "Sant") → true |
HasPrefix / HasSuffix | cek awalan / akhiran | HasPrefix(nama, "Budi") → true |
Index(s, sub) | posisi byte substring | Index(nama, "Santoso") → 5 |
ToUpper / ToLower | ubah kapitalisasi | ToUpper("café") → "CAFÉ" |
TrimSpace / Trim | pangkas tepi | TrimSpace(" go ") → "go" |
TrimPrefix / TrimSuffix | pangkas awalan / akhiran | TrimPrefix("data_1", "data_") → "1" |
Split / Fields | pecah jadi slice | Split(nama, " ") → [Budi Santoso] |
Join | gabung slice | Join(bagian, ", ") → "Budi, Santoso" |
Replace / ReplaceAll | ganti substring | ReplaceAll(kalimat, "go", "Go") |
Repeat / Count | gandakan / hitung | Repeat("go-", 3) → "go-go-go-" |
EqualFold | bandingkan abaik kapital | EqualFold("GO", "gO") → true |
Program Utuh #
Berkas strings-demo.go merangkai seluruh fungsi di atas dalam satu program bertahap. Jalankan dari direktori chapter:
package main
import (
"fmt"
"strings"
)
func main() {
nama := "Budi Santoso"
kalimat := "belajar go itu menyenangkan"
// Mencari dan memeriksa isi string.
fmt.Println("Contains :", strings.Contains(nama, "Sant"))
fmt.Println("HasPrefix :", strings.HasPrefix(nama, "Budi"))
fmt.Println("HasSuffix :", strings.HasSuffix(nama, "oso"))
fmt.Println("Index :", strings.Index(nama, "Santoso"))
// Mengubah huruf dan memangkas tepi string.
fmt.Println("ToUpper :", strings.ToUpper(nama))
fmt.Println("ToLower :", strings.ToLower(nama))
fmt.Printf("TrimSpace : [%s]\n", strings.TrimSpace(" belajar go "))
// Memotong dan menggabung string.
kata := strings.Fields(kalimat)
fmt.Printf("Fields : %v (%d kata)\n", kata, len(kata))
bagian := strings.Split(nama, " ")
fmt.Println("Split :", bagian)
fmt.Println("Join :", strings.Join(bagian, ", "))
// Mengganti, mengulang, menghitung, membandingkan.
fmt.Println("ReplaceAll :", strings.ReplaceAll(kalimat, "go", "Go"))
fmt.Println("Repeat :", strings.Repeat("go-", 3))
fmt.Println("Count :", strings.Count(kalimat, "a"))
fmt.Println("EqualFold :", strings.EqualFold("GO", "gO"))
// Memangkas awalan tetap dari nama berkas.
berkas := "data_2026.txt"
fmt.Println("TrimPrefix :", strings.TrimPrefix(berkas, "data_"))
}go run strings-demo.goOutput yang Dihasilkan:
Contains : true
HasPrefix : true
HasSuffix : true
Index : 5
ToUpper : BUDI SANTOSO
ToLower : budi santoso
TrimSpace : [belajar go]
Fields : [belajar go itu menyenangkan] (4 kata)
Split : [Budi Santoso]
Join : Budi, Santoso
ReplaceAll : belajar Go itu menyenangkan
Repeat : go-go-go-
Count : 4
EqualFold : true
TrimPrefix : 2026.txtMari kita telaah baris demi baris program di atas:
- Baris 13-16 (blok pencarian): memeriksa substring, awalan, akhiran, dan posisi
Santosopada nama; keempatnya bekerja tanpa regex apa pun. - Baris 19-21 (blok pembersihan): mengubah kapitalisasi nama dan memangkas spasi tepi; tanda kurung siku pada format
[%s]membuat hasil pemangkasan terlihat jelas di output. - Baris 24-28 (blok pemotongan):
Fieldsmemecah kalimat menjadi 4 kata dari whitespace bertumpuk,Splitmemecah nama menurut spasi tunggal, laluJoinmenyusun ulang dengan pemisah koma. - Baris 31-34 (blok penggantian): mengganti semua
gomenjadiGo, menggandakango-tiga kali, menghitung 4 kemunculan hurufa, dan membuktikanEqualFoldmengabaikan kapitalisasi. - Baris 37-38 (TrimPrefix): membuang awalan
data_dari nama berkas sehingga tersisa2026.txt— pola umum saat memproses daftar berkas.
Dengan peralatan strings, teks biasa sudah tertangani. Tantangan berikutnya muncul saat angka berpindah bentuk: membaca "2026" dari berkas konfigurasi atau menulis angka ke laporan — tugas yang dikerjakan package strconv pada chapter Package strconv
.
Referensi #
- Dokumentasi package strings — daftar lengkap seluruh fungsi beserta contohnya.
- Blog Go: Strings, bytes, runes and characters — latar model UTF-8 yang dipakai fungsi-fungsi ini.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
strings-demo.go
Unduh berkaspackage main
import (
"fmt"
"strings"
)
func main() {
nama := "Budi Santoso"
kalimat := "belajar go itu menyenangkan"
// Mencari dan memeriksa isi string.
fmt.Println("Contains :", strings.Contains(nama, "Sant"))
fmt.Println("HasPrefix :", strings.HasPrefix(nama, "Budi"))
fmt.Println("HasSuffix :", strings.HasSuffix(nama, "oso"))
fmt.Println("Index :", strings.Index(nama, "Santoso"))
// Mengubah huruf dan memangkas tepi string.
fmt.Println("ToUpper :", strings.ToUpper(nama))
fmt.Println("ToLower :", strings.ToLower(nama))
fmt.Printf("TrimSpace : [%s]\n", strings.TrimSpace(" belajar go "))
// Memotong dan menggabung string.
kata := strings.Fields(kalimat)
fmt.Printf("Fields : %v (%d kata)\n", kata, len(kata))
bagian := strings.Split(nama, " ")
fmt.Println("Split :", bagian)
fmt.Println("Join :", strings.Join(bagian, ", "))
// Mengganti, mengulang, menghitung, membandingkan.
fmt.Println("ReplaceAll :", strings.ReplaceAll(kalimat, "go", "Go"))
fmt.Println("Repeat :", strings.Repeat("go-", 3))
fmt.Println("Count :", strings.Count(kalimat, "a"))
fmt.Println("EqualFold :", strings.EqualFold("GO", "gO"))
// Memangkas awalan tetap dari nama berkas.
berkas := "data_2026.txt"
fmt.Println("TrimPrefix :", strings.TrimPrefix(berkas, "data_"))
}