Paket strings dan strconv adalah dua bagian pustaka standar yang paling sering disentuh ketika program Go mengolah teks. Paket strings menyediakan fungsi pencarian, pemotongan, dan penggabungan string, sedangkan strconv mengurus konversi dua arah antara string dan bilangan. Topik ini membahas fungsi yang paling sering dipakai dari kedua paket tersebut beserta cara menangani error saat parsing. Sebagai contoh yang dijalankan, teks mentah sebuah catatan arsip dibersihkan, dipecah, dan disusun ulang, kemudian angka yang terkandung di dalamnya diurai menjadi nilai bertipe bilangan.
Fungsi inti paket strings#
Semua fungsi pada strings berupa fungsi biasa yang menerima string dan mengembalikan hasilnya, sehingga teks diolah berurutan dari masukan ke keluaran tanpa keadaan yang tersimpan. Fungsi TrimSpace membuang spasi di kedua ujung teks, ToUpper mengubah huruf kecil menjadi huruf besar, dan Contains memeriksa keberadaan substring. Untuk mencari posisi, Index mengembalikan indeks kemunculan pertama atau -1 apabila tidak ditemukan. Fungsi Split memecah satu string menjadi irisan string berdasarkan pemisahnya, sedangkan Join menggabungkan kembali irisan itu dengan pemisah yang dipilih. Untuk penggantian teks, ReplaceAll mengganti seluruh kemunculan substring, dan Count menghitung banyaknya kemunculannya. Program berikut menerapkan fungsi-fungsi itu pada satu baris catatan arsip yang masih kotor.
package main
import (
"fmt"
"strings"
)
func main() {
mentah := " arsip catatan: suhu pagi; suhu siang; suhu malam "
bersih := strings.TrimSpace(mentah)
fmt.Printf("%d karakter sebelum dibersihkan, %d sesudah\n", len(mentah), len(bersih))
isi := strings.TrimPrefix(bersih, "arsip catatan: ")
bagian := strings.Split(isi, "; ")
for i, b := range bagian {
fmt.Printf("%d. %s\n", i+1, strings.ToUpper(b))
}
ringkas := strings.Join(bagian, " / ")
fmt.Println(ringkas)
fmt.Println(strings.ReplaceAll(ringkas, "suhu", "temperatur"))
fmt.Println(strings.Count(ringkas, "suhu"))
}52 karakter sebelum dibersihkan, 48 sesudah
1. SUHU PAGI
2. SUHU SIANG
3. SUHU MALAM
suhu pagi / suhu siang / suhu malam
temperatur pagi / temperatur siang / temperatur malam
3Program di atas memperlihatkan urutan pembersihan yang umum dijumpai. Baris pertama mencatat bahwa TrimSpace membuang empat karakter spasi pada kedua ujung teks, yaitu dua spasi di awal dan dua spasi di akhir. Setelah awalan “arsip catatan: " dilepas dengan TrimPrefix, sisa teksnya dipecah oleh Split menjadi tiga bagian. Join kemudian menyusun ulang bagian-bagian itu dengan pemisah yang lebih ringkas, dan Count mengonfirmasi bahwa kata “suhu” muncul tiga kali pada hasilnya. Rantai fungsi semacam ini menjadi pola dasar pembersihan teks sebelum data diolah lebih lanjut.
Selain fungsi-fungsi di atas, strings.HasPrefix dan strings.HasSuffix memeriksa awalan serta akhiran teks, sedangkan strings.Trim membuang karakter tertentu dari kedua ujungnya sesuai daftar karakter yang diberikan. Untuk penggabungan teks di dalam perulangan yang panjang, paket ini menyediakan strings.Builder yang mengumpulkan potongan string tanpa menyalin ulang seluruh isi pada setiap langkahnya. Pemilihan fungsinya mengikuti bentuk data yang diolah, dan kebanyakan pekerjaan teks sehari-hari cukup dilayani oleh fungsi-fungsi yang telah dicontohkan.
Konversi bilangan dengan strconv#
Paket strconv menangani dua arah konversi, yaitu penguraian string menjadi bilangan dan pemformatan bilangan menjadi string. Fungsi Atoi (ASCII to integer) mengurai string menjadi int dan mengembalikan dua nilai, yakni hasilnya dan error. Apabila stringnya bukan bilangan yang sah, nilai kembalian berupa nol beserta error yang menjelaskan penyebabnya. Untuk kebutuhan lain, ParseFloat mengurai bilangan pecahan, ParseInt mengurai bilangan bulat pada basis tertentu, dan Itoa (integer to ASCII) membentuk string dari satu int. Program berikut mengurai beberapa bentuk teks angka sekaligus menunjukkan perilakunya ketika masukan tidak sah.
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
n, err := strconv.Atoi("42")
fmt.Println("Atoi:", n, err)
fmt.Println("Itoa:", strconv.Itoa(n))
f, err := strconv.ParseFloat("24.5", 64)
fmt.Println("ParseFloat:", f, err)
basis16, err := strconv.ParseInt("ff", 16, 64)
fmt.Println("ParseInt heksadesimal:", basis16, err)
salah, err := strconv.Atoi("tujuh")
fmt.Println("Atoi teks bukan angka:", salah, "error:", err != nil)
catatan := "suhu 24.5 kelembapan 60"
for i, token := range strings.Fields(catatan) {
if angka, err := strconv.ParseFloat(token, 64); err == nil {
fmt.Printf("token %d adalah angka: %g\n", i, angka)
}
}
}Atoi: 42 <nil>
Itoa: 42
ParseFloat: 24.5 <nil>
ParseInt heksadesimal: 255 <nil>
Atoi teks bukan angka: 0 error: true
token 1 adalah angka: 24.5
token 3 adalah angka: 60Perhatikan baris “Atoi teks bukan angka”. Nilai yang dikembalikan adalah nol dan errornya tidak bernilai nil, sehingga program harus memeriksa error terlebih dahulu sebelum memakai hasilnya. Bagian akhir program memakai strings.Fields, yaitu fungsi yang memecah teks berdasarkan spasi tanpa menyisakan bagian kosong, lalu mencoba mengurai setiap token dengan ParseFloat. Token yang berhasil diurai dicetak, sedangkan token berupa kata biasa diamkan karena errornya tidak bernilai nil. Pola mencoba-mengurai lalu memeriksa error inilah bentuk paling aman untuk membaca angka dari masukan teks yang bentuknya belum pasti.
Selain mengurai, strconv juga memformat bilangan menjadi teks melalui FormatInt dan FormatFloat, lengkap dengan basis serta presisinya. Fungsi Quote membungkus teks dengan tanda kutip dan mengubah karakter kendali (control character) di dalamnya menjadi bentuk escape, sehingga berguna ketika nilai teks dicetak untuk keperluan debug. Penguraian dan pemformatan pada paket ini saling mencerminkan, tetapi hanya fungsi penguraian yang mengembalikan error ketika bentuk masukannya tidak dapat ditangani, sedangkan fungsi pemformat mengembalikan teks tanpa error.
Kedua program dapat dijalankan dari terminal sebagaimana berikut. Folder kerjanya diletakkan di /tmp agar berkas latihan tidak bercampur dengan sumber situs.
# siapkan folder kerja untuk topik ini
mkdir -p /tmp/gopustaka/strings-strconv
cp susun-catatan.go konversi-angka.go /tmp/gopustaka/strings-strconv/
cd /tmp/gopustaka/strings-strconv
# jalankan program penyusun catatan
go run susun-catatan.go
# jalankan program konversi angka
go run konversi-angka.go52 karakter sebelum dibersihkan, 48 sesudah
1. SUHU PAGI
2. SUHU SIANG
3. SUHU MALAM
suhu pagi / suhu siang / suhu malam
temperatur pagi / temperatur siang / temperatur malam
3
Atoi: 42 <nil>
Itoa: 42
ParseFloat: 24.5 <nil>
ParseInt heksadesimal: 255 <nil>
Atoi teks bukan angka: 0 error: true
token 1 adalah angka: 24.5
token 3 adalah angka: 60Kesalahan umum#
- Mengabaikan nilai kembalian error dari
Atoi,ParseInt, atauParseFloat. Hasil penguraian yang gagal berupa nol, sehingga program berlanjut dengan angka nol tanpa pesan apa pun. Perbaikannya, selalu periksa error sebelum nilai hasilnya dipakai. - Menganggap
lenmenghitung banyaknya karakter. Fungsilenmenghitung banyaknya byte, sedangkan satu karakter non-ASCII seperti “é” menempati lebih dari satu byte. Gunakanstrings.RuneCountInStringapabila yang diinginkan adalah banyaknya rune. - Memakai
ReplaceAllpadahal hanya sebagian kemunculan yang boleh diganti. Fungsi tersebut mengganti seluruh kemunculannya tanpa kecuali. Gunakanstrings.Replacedengan argumen pembatas banyaknya penggantian. - Menyambung string dengan operator
+pada nilai angka. Penjumlahan itu tidak memenuhi aturan tipe Go, sehingga kode seperti"suhu: " + suhugagal dikompilasi. Perbaikannya, format denganfmt.Sprintfatau ubah bilangannya terlebih dahulu denganstrconv. - Menyisakan bagian kosong hasil
Split. Apabila pemisah muncul berurutan, misalnya dua spasi,Splitmenghasilkan elemen string kosong di antaranya. Gunakanstrings.Fieldsuntuk pemisahan berbasis spasi, atau saring elemen kosong sebelum dipakai.
Ringkasan#
- Paket
stringsmenyediakan fungsi teks murni sepertiTrimSpace,Split,Join,ReplaceAll, danCount, semuanya menerima string dan mengembalikan hasilnya tanpa keadaan tersembunyi. - Paket
strconvmenangani konversi string ke bilangan melaluiAtoi,ParseInt, danParseFloat, serta bilangan ke string melaluiItoa. - Fungsi penguraian mengembalikan hasil beserta error, sehingga hasilnya wajib diperiksa errornya sebelum dipakai.
- Kombinasi
strings.Fieldsdanstrconv.ParseFloatmenjadi pola aman untuk mengambil angka dari teks bebas.
Referensi#
- Package strings — The Go Authors — Dokumentasi resmi fungsi-fungsi manipulasi string seperti TrimSpace, Split, dan ReplaceAll.
- Package strconv — The Go Authors — Dokumentasi resmi Atoi, ParseInt, ParseFloat, dan Itoa beserta semantik errornya.
- The Go Documentation — Halaman induk dokumentasi resmi Go yang memuat panduan pustaka standar.