A comprehensive reference for all type conversion patterns in Go, including numeric, string, composite, and financial precision types.


Numeric Conversions

Integer to Integer

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>

Float to Float

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)

Integer ↔ Float

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)

Complex Numbers

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

String Conversions

String ↔ Byte Slice

var s string = "hello"
var b []byte = []byte(s)   // string → []byte
var s2 string = string(b)  // []byte → string

String ↔ Rune Slice

var s string = "日本語"
var r []rune = []rune(s)   // string → []rune (Unicode-aware)
var s2 string = string(r)  // []rune → string

Integer ↔ 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