Topik ini membahas package fmt, yaitu package pustaka standar untuk pemformatan teks, yang mencakup Println untuk pencetakan apa adanya, Printf dengan verb pemformatan, dan Sprintf yang mengembalikan hasil format sebagai string. Ketiga fungsi ini adalah alat pencetakan yang paling sering dipakai pada contoh-contoh awal Go. Setelah membaca topik ini, pemilihan di antara ketiganya dapat dilakukan tepat, dan verb yang lazim dapat dipakai tanpa menebak-nebak keluarannya.
Println dan keluarga pencetaknya#
fmt.Println menerima operan sebanyak apa pun, menambahkan satu spasi di antara setiap pasang operan, lalu menambahkan baris baru di akhir. Saudaranya fmt.Print tidak menambahkan baris baru dan menyisipkan spasi hanya di antara dua operan yang keduanya bukan string, sedangkan fmt.Printf memformat operan menurut pola yang ditentukan. Ketiganya mengembalikan jumlah byte yang tertulis dan error penulisan, yang pada pencetakan ke terminal hampir selalu diabaikan.
Perilaku spasi otomatis Println perlu diingat karena spasi itu menempel di antara operan, bukan mengelilinginya. Pemanggilan fmt.Println("total:", 77) menghasilkan total: 77, tetapi pemanggilan fmt.Println("total:", 77, "kWh") menghasilkan spasi sebelum satuan juga, yaitu total: 77 kWh. Bila posisi spasi harus diatur presisi, itu tugas Printf, bukan Println.
Operan yang bukan string diformat dengan aturan bawaan yang sama dengan %v, sehingga bilangan dan nilai logika dicetak dalam bentuk yang wajar tanpa persiapan apa pun. Pemanggilan fmt.Println(77, 3.2, true) menghasilkan 77 3.2 true, dan pola inilah yang menjadikan fungsi ini alat intip yang praktis saat menyelidiki isi variabel. Untuk keluaran yang akan dibaca pengguna, kontrol yang lebih rinci biasanya masih diperlukan, dan di sinilah Printf mengambil alih.
Printf dan verb pemformatan#
fmt.Printf menerima string format yang memuat verb, yaitu penanda berawalan % yang digantikan nilai operan sesuai aturan masing-masing. Program berikut memakai beberapa verb yang paling sering diperlukan:
package main
import "fmt"
func main() {
nama := "Budi"
umur := 25
tinggi := 1.74
ukuran := 1024
fmt.Println("Nama :", nama)
fmt.Println("Umur :", umur)
fmt.Printf("%s berumur %d tahun\n", nama, umur)
fmt.Printf("Tinggi %.2f meter\n", tinggi)
fmt.Printf("Ukuran berkas %d byte sama dengan %x dalam heksadesimal\n", ukuran, ukuran)
fmt.Printf("Nilai boolean: %t\n", true)
fmt.Printf("Seratus persen ditulis 100%%\n")
}Nama : Budi
Umur : 25
Budi berumur 25 tahun
Tinggi 1.74 meter
Ukuran berkas 1024 byte sama dengan 400 dalam heksadesimal
Nilai boolean: true
Seratus persen ditulis 100%Perhatikan bahwa baris baru \n pada akhir pola wajib ditulis sendiri, karena Printf tidak menambahkan baris baru secara otomatis. Tabel berikut merangkum verb yang paling sering dipakai sehari-hari.
| Verb | Menerima | Hasil |
|---|---|---|
%v | Nilai apa pun | Format bawaan yang masuk akal untuk nilai itu |
%d | Bilangan bulat | Desimal |
%s | String | Teks apa adanya |
%q | String atau rune | Teks dengan tanda kutip |
%f, %.2f | Bilangan pecahan | Titik apung, dengan 2 angka di belakang titik |
%t | bool | true atau false |
%x | Bilangan | Heksadesimal huruf kecil |
%T | Nilai apa pun | Nama tipe nilainya |
%% | Tanpa operan | Satu tanda persen |
Verb %v layak menjadi pilihan cadangan, yaitu mencetak apa pun secara wajar, sehingga praktis untuk mengintip nilai yang tipenya belum diketahui. Presisi seperti %.2f ditulis di antara tanda % dan huruf verb, dan angkanya dapat diganti sesuai kebutuhan.
Sprintf untuk membangun string#
fmt.Sprintf bekerja persis seperti Printf dengan satu perbedaan, yaitu hasil format tidak dicetak, melainkan dikembalikan sebagai string. Fungsi ini adalah cara baku menyusun teks dari nilai-nilai terpisah, misalnya untuk pesan log atau kunci identitas. Program berikut menyusun ringkasan konversi suhu, kemudian mencetaknya:
package main
import "fmt"
func main() {
celsius := 25.0
fahrenheit := celsius*9.0/5.0 + 32.0
ringkasan := fmt.Sprintf("%.1f derajat Celsius sama dengan %.1f derajat Fahrenheit", celsius, fahrenheit)
fmt.Println(ringkasan)
fmt.Println("Panjang teks ringkasan:", len(ringkasan), "byte")
}25.0 derajat Celsius sama dengan 77.0 derajat Fahrenheit
Panjang teks ringkasan: 56 bytePola Sprintf menghindari penyambungan teks dengan + yang rawan lupa menyisipkan spasi. Satu pola format membaca seperti kalimat utuh, sehingga niatnya langsung terlihat. Apabila hasilnya memang akan dicetak segera, panggil Printf langsung dan hindari satu langkah perantara yang tidak perlu.
Kebutuhan khas Sprintf muncul ketika teks yang tersusun belum tentu dicetak, misalnya pesan yang disimpan ke berkas log, kunci identitas yang memuat angka, atau nilai kembalian sebuah fungsi. Pemanggilan Printf langsung menulis ke aliran keluaran standar, sedangkan Sprintf menyerahkan hasilnya kepada pemanggil untuk menentukan nasibnya. Karena keduanya memakai mesin format yang sama, verb pada tabel di atas berlaku identik di keduanya.
go doc sebagai rujukan cepat#
Dokumentasi lengkap fmt tersedia daring di pkg.go.dev, tetapi rincian satu fungsi dapat ditanyakan langsung dari terminal dengan go doc. Perintah berikut menampilkan tanda tangan (signature) dan deskripsi resmi fmt.Sprintf:
go doc fmt.Sprintfpackage fmt // import "fmt"
func Sprintf(format string, a ...any) string
Sprintf formats according to a format specifier and returns the resulting
string.Keluaran ini bersumber dari komentar dokumentasi yang menyertai kode sumber fmt itu sendiri, sehingga selalu cocok dengan versi Go yang terpasang. Kebiasaan menanyakan go doc sebelum menebak perilaku verb akan menghemat banyak uji coba, karena halaman dokumentasi fmt memuat aturan lengkap presisi, lebar, dan bendera (flag) pemformatan.
Kesalahan umum#
Kesalahan pertama adalah jumlah operan yang tidak cocok dengan jumlah verb. Operan yang kurang meninggalkan penanda %!d(MISSING) pada posisi verb yang bermasalah, sedangkan operan yang berlebih dicetak sebagai penanda %!(EXTRA tipe=nilai) pada akhir keluaran. Gejala semacam ini hampir selalu muncul setelah pola format disunting tanpa menyesuaikan operannya, sehingga pencarian teks %! pada keluaran cukup untuk menemukan sebagian besar kesalahan format.
Kesalahan kedua adalah memilih verb yang tidak cocok dengan tipe operannya. Verb %d yang diberi string mencetak %!d(string=x), yaitu penanda yang memuat verb, tipe, dan nilainya sekaligus. Keluaran semacam ini tidak menghentikan program, sehingga mudah lolos pada pembacaan sekilas, tetapi keseluruhannya bermula dengan %! dan dapat dibedakan dari teks yang dimaksudkan.
Kesalahan ketiga adalah lupa menulis %% untuk satu tanda persen pada pola format. Tanda persen yang diikuti huruf apa pun dibaca sebagai awal verb, sehingga pola memaksakan format yang tidak dimaksudkan. Aturan ringkasnya, tanda persen pada pola Printf dan Sprintf selalu dibaca sebagai bagian verb, dan %v adalah pilihan aman ketika bentuk bawaan memang cukup.
Ringkasan#
Printlnmenambahkan spasi antar operan dan baris baru di akhir, sedangkanPrintfmengikuti pola format secara presisi tanpa baris baru otomatis.- Verb seperti
%v,%d,%s,%.2f,%t,%T, dan%%menentukan bentuk tiap operan padaPrintfdanSprintf. Sprintfmengembalikan hasil format sebagaistring, sehingga menjadi cara baku menyusun teks dari nilai terpisah.go doc fmt.Sprintfmenampilkan dokumentasi resmi langsung dari terminal, selalu cocok dengan versi Go terpasang.
Referensi#
- fmt package — Go Standard Library
— Dokumentasi resmi seluruh verb, bendera, dan fungsi pencetakan paket
fmt. - Effective Go: Printing — Go Documentation
— Bagian resmi tentang kebiasaan memakai
fmtdan verb-nya. - A Tour of Go: Basics — Go Documentation
— Latihan resmi yang memakai
fmtsebagai alat pencetakan utama.