A comprehensive reference for all type conversion patterns in Go, including numeric, string, composite, and financial precision types.
var i int = 42
var i8 int8 = int8(i) // int → int8
var i16 int16 = int16(i) // int → int16
var i32 int32 = int32(i) // int → int32
var i64 int64 = int64(i) // int → int64
var u uint = uint(i) // int → uint
var u8 uint8 = uint8(i) // int → uint8
var u16 uint16 = uint16(i) // int → uint16
var u32 uint32 = uint32(i) // int → uint32
var u64 uint64 = uint64(i) // int → uint64
<aside> ⚠️
Overflow Warning: Converting to a smaller type may cause overflow. Go does not panic — it silently wraps.
</aside>
var f32 float32 = 3.14
var f64 float64 = float64(f32) // float32 → float64
var f float64 = 3.14159265359
var f32b float32 = float32(f) // float64 → float32 (precision loss)
var i int = 42
var f float64 = float64(i) // int → float64
var f2 float64 = 3.99
var i2 int = int(f2) // float64 → int (truncates to 3)
var c64 complex64 = 1 + 2i
var c128 complex128 = complex128(c64) // complex64 → complex128
var r float64 = real(c128) // Extract real part
var im float64 = imag(c128) // Extract imaginary part
var c complex128 = complex(r, im) // float64, float64 → complex128
var s string = "hello"
var b []byte = []byte(s) // string → []byte
var s2 string = string(b) // []byte → string
var s string = "日本語"
var r []rune = []rune(s) // string → []rune (Unicode-aware)
var s2 string = string(r) // []rune → string
import "strconv"
// int → string
var i int = 42
var s string = strconv.Itoa(i)
var s2 string = strconv.FormatInt(int64(i), 10) // base 10
var s3 string = fmt.Sprintf("%d", i)
// string → int
var str string = "42"
i, err := strconv.Atoi(str)
i64, err := strconv.ParseInt(str, 10, 64) // base 10, 64-bit