Konversi antar tipe data
Ubah angka, string, dan byte dengan benar.
Pahami konsepnya
Konversi antar tipe numerik ditulis seperti pemanggilan fungsi: float64(n), int(f), string(r). Go tidak pernah mengonversi diam-diam — perbedaan tipe selalu eksplisit. Perlu diingat: int(f) memotong desimal (3.9 menjadi 3), dan mengecilkan rentang (int64→int8) memotong bit tinggi — hasilnya bisa mengejutkan bila nilai tak muat.
Antara string dan angka, Go sengaja tidak menyediakan cast langsung: string(65) menghasilkan "A" (rune!), bukan "65". Jembatannya adalah paket strconv: strconv.Itoa(65) → "65", strconv.Atoi("65") → (65, error), ParseFloat, ParseBool, FormatFloat, FormatInt dengan basis.
string dan []byte saling konversi langsung karena string memang potongan byte; []rune mengubah ke potongan karakter Unicode — penting untuk teks yang memuat emoji atau aksara non-Latin sebelum diindeks per karakter.
Coba contoh kode
package main
import (
"fmt"
"strconv"
)
func main() {
f := 3.9
fmt.Println(int(f)) // 3 — dipotong, bukan dibulatkan
n := 65
fmt.Println(strconv.Itoa(n)) // "65"
m, err := strconv.Atoi("42")
fmt.Println(m, err)
fmt.Println(string(rune(65))) // "A" — konversi rune, bukan angka
}Konversi numerik memotong (3.9→3). strconv menjadi jembatan angka↔teks yang benar: Itoa dan Atoi (yang mengembalikan error untuk teks tak valid). string(rune(65)) menegaskan jebakan: kode 65 menjadi huruf "A" — bukan teks "65" seperti dugaan banyak orang.
string, byte, dan rune
func main() {
s := "halo"
b := []byte(s)
fmt.Println(b, string(b)) // [104 97 108 111] halo
emoji := "café ☕"
fmt.Println(len(emoji), len([]rune(emoji))) // 10 byte, 7 karakter
}len(string) menghitung BYTE: é dan ☕ masing-masing memakan 2-3 byte sehingga len menghasilkan 10 padahal karakternya 7. []rune memecah per karakter Unicode — hitungan yang cocok dengan intuisi manusia. Kesadaran byte-vs-rune menyelamatkanmu dari bug indeks pada teks internasional.
Latihan singkat
Uji: ubah teks `42` menjadi int, kalikan dua, lalu kembalikan sebagai string — program harus mencetak persis `84`.