Pada pembahasan-pembahasan sebelumnya kita telah banyak menggunakan layout format string seperti %s
, %d
, %.2f
, dan lainnya; untuk keperluan menampilkan output ke layar ataupun untuk memformat string.
Layout format string digunakan dalam konversi data ke bentuk string. Contohnya seperti %.3f
yang untuk konversi nilai double
ke string
dengan 3 digit desimal.
Pada chapter ini kita akan mempelajari satu per satu layout format string yang tersedia di Golang. Kode berikut adalah sample data yang akan kita digunakan sebagai contoh.
type student struct {
name string
height float64
age int32
isGraduated bool
hobbies []string
}
var data = student{
name: "wick",
height: 182.5,
age: 26,
isGraduated: false,
hobbies: []string{"eating", "sleeping"},
}
Digunakan untuk memformat data numerik, menjadi bentuk string numerik berbasis 2 (biner).
fmt.Printf("%b\n", data.age)
// 11010
Digunakan untuk memformat data numerik yang merupakan kode unicode, menjadi bentuk string karakter unicode-nya.
fmt.Printf("%c\n", 1400)
// ո
fmt.Printf("%c\n", 1235)
// ӓ
Digunakan untuk memformat data numerik, menjadi bentuk string numerik berbasis 10 (basis bilangan yang kita gunakan).
fmt.Printf("%d\n", data.age)
// 26
Digunakan untuk memformat data numerik desimal ke dalam bentuk notasi numerik standar Scientific notation.
fmt.Printf("%e\n", data.height)
// 1.825000e+02
fmt.Printf("%E\n", data.height)
// 1.825000E+02
1.825000E+02 maksudnya adalah 1.825 x 10^2, dan hasil operasi tersebut adalah sesuai dengan data asli = 182.5.
Perbedaan antara %e
dan %E
hanya pada bagian huruf besar kecil karakter e
pada hasil.
%F
adalah alias dari %f
. Keduanya memiliki fungsi yang sama.
Berfungsi untuk memformat data numerik desimal, dengan lebar desimal bisa ditentukan. Secara default lebar digit desimal adalah 6 digit.
fmt.Printf("%f\n", data.height)
// 182.500000
fmt.Printf("%.9f\n", data.height)
// 182.500000000
fmt.Printf("%.2f\n", data.height)
// 182.50
fmt.Printf("%.f\n", data.height)
// 182
%G
adalah alias dari %g
. Keduanya memiliki fungsi yang sama.
Berfungsi untuk memformat data numerik desimal, dengan lebar desimal bisa ditentukan. Lebar kapasitasnya sangat besar, pas digunakan untuk data yang jumlah digit desimalnya cukup banyak.
Bisa dilihat pada kode berikut perbandingan antara %e
, %f
, dan %g
.
fmt.Printf("%e\n", 0.123123123123)
// 1.231231e-01
fmt.Printf("%f\n", 0.123123123123)
// 0.123123
fmt.Printf("%g\n", 0.123123123123)
// 0.123123123123
Perbedaan lainnya adalah pada %g
, lebar digit desimal adalah sesuai dengan datanya, tidak bisa dicustom seperti pada %f
.
fmt.Printf("%g\n", 0.12)
// 0.12
fmt.Printf("%.5g\n", 0.12)
// 0.12
Digunakan untuk memformat data numerik, menjadi bentuk string numerik berbasis 8 (oktal).
fmt.Printf("%o\n", data.age)
// 32
Digunakan untuk memformat data pointer, mengembalikan alamat pointer referensi variabel-nya.
Alamat pointer dituliskan dalam bentuk numerik berbasis 16 dengan prefix 0x
.
fmt.Printf("%p\n", &data.name)
// 0x2081be0c0
Digunakan untuk escape string. Meskipun string yang dipakai menggunakan literal </code> akan tetap di-escape.
fmt.Printf("%q\n", `" name \ height "`)
// "\" name \\ height \""
Digunakan untuk memformat data string.
fmt.Printf("%s\n", data.name)
// wick
Digunakan untuk memformat data boolean, menampilkan nilai bool
-nya.
fmt.Printf("%t\n", data.isGraduated)
// false
Berfungsi untuk mengambil tipe variabel yang akan diformat.
fmt.Printf("%T\n", data.name)
// string
fmt.Printf("%T\n", data.height)
// float64
fmt.Printf("%T\n", data.age)
// int32
fmt.Printf("%T\n", data.isGraduated)
// bool
fmt.Printf("%T\n", data.hobbies)
// []string
Digunakan untuk memformat data apa saja (termasuk data bertipe interface{}
). Hasil kembaliannya adalah string nilai data aslinya.
Jika data adalah objek cetakan struct
, maka akan ditampilkan semua secara property berurutan.
fmt.Printf("%v\n", data)
// {wick 182.5 26 false [eating sleeping]}
Digunakan untuk memformat struct, mengembalikan nama tiap property dan nilainya berurutan sesuai dengan struktur struct.
fmt.Printf("%+v\n", data)
// {name:wick height:182.5 age:26 isGraduated:false hobbies:[eating sleeping]}
Digunakan untuk memformat struct, mengembalikan nama dan nilai tiap property sesuai dengan struktur struct dan juga bagaimana objek tersebut dideklarasikan.
fmt.Printf("%#v\n", data)
// main.student{name:"wick", height:182.5, age:26, isGraduated:false, hobbies:[]string{"eating", "sleeping"}}
Ketika menampilkan objek yang deklarasinya adalah menggunakan teknik anonymous struct, maka akan muncul juga struktur anonymous struct nya.
var data = struct {
name string
height float64
}{
name: "wick",
height: 182.5,
}
fmt.Printf("%#v\n", data)
// struct { name string; height float64 }{name:"wick", height:182.5}
Format ini juga bisa digunakan untuk menampilkan tipe data lain, dan akan dimunculkan strukturnya juga.
Digunakan untuk memformat data numerik, menjadi bentuk string numerik berbasis 16 (heksadesimal).
fmt.Printf("%x\n", data.age)
// 1a
Jika digunakan pada tipe data string, maka akan mengembalikan kode heksadesimal tiap karakter.
var d = data.name
fmt.Printf("%x%x%x%x\n", d[0], d[1], d[2], d[3])
// 7769636b
fmt.Printf("%x\n", d)
// 7769636b
%x
dan %X
memiliki fungsi yang sama. Perbedaannya adalah %X
akan mengembalikan string dalam bentuk uppercase atau huruf kapital.
Cara untuk menulis karakter %
pada string format.
fmt.Printf("%%\n")
// %
Source code praktek chapter ini tersedia di Github
https://github.com/novalagung/dasarpemrogramangolang-example/.../chapter-A.38...