← Kembali ke kursus
Pelajaran kursus · Go
Pelajaran 38

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`.