Go Variables, Constants, and Data Types
Estimated reading: 3 minutes 290 views

Go Type Casting – Convert Between Data Types Safely in Go (2025 Guide)

Introduction – What Is Type Casting in Go?

In Go, type casting (also known as type conversion) is the explicit process of converting a value from one data type to another. Go does not support implicit type conversion, making type safety a cornerstone of its design.

In this section, you’ll learn:

  • How to convert between integers, floats, strings, and booleans
  • Syntax and rules for safe type casting
  • Common pitfalls and how to avoid them
  • Real-world examples with outputs

Basic Type Conversion Syntax in Go

Go uses a function-style syntax for casting:

var a int = 42
var b float64 = float64(a) // Convert int to float64

You specify the target type and wrap the value inside it.


Numeric Type Conversions

Integer to Float

var i int = 10
var f float64 = float64(i)
fmt.Println(f)  // Output: 10.0

Float to Integer (Truncates)

var f float64 = 9.81
var i int = int(f)
fmt.Println(i)  // Output: 9

The fractional part is discarded, not rounded.


Integer to Byte

var i int = 65
b := byte(i)
fmt.Println(b)         // Output: 65
fmt.Println(string(b)) // Output: A

String Conversions

Go does not allow direct string ↔ numeric conversions without helper functions.

This is invalid:

var s string = string(123)  // Not "123"

This will output the Unicode character for code point 123 ({).

Use strconv package for safe conversions:

import (
    "fmt"
    "strconv"
)

func main() {
    num := 100
    str := strconv.Itoa(num)       // int to string
    fmt.Println(str)               // Output: "100"

    s := "42"
    i, _ := strconv.Atoi(s)        // string to int
    fmt.Println(i)                 // Output: 42
}

Boolean Conversions

Go does not support automatic boolean-to-integer or vice versa conversions.

// Invalid: var i int = int(true) 

Instead, use control logic:

var b bool = true
var i int
if b {
    i = 1
} else {
    i = 0
}

Real-World Example – Type Casting Combo

package main

import (
    "fmt"
    "strconv"
)

func main() {
    var score int = 87
    var percent float64 = float64(score) / 100
    str := strconv.Itoa(score)

    fmt.Printf("Score: %d\n", score)
    fmt.Printf("Percentage: %.2f\n", percent)
    fmt.Printf("Score (as string): %s\n", str)
}

Output:

Score: 87
Percentage: 0.87
Score (as string): 87

Pitfalls of Type Casting in Go

PitfallSolution
Loss of precision (float→int)Manually round or handle fractions
string(123)"123"Use strconv.Itoa() instead
No implicit castsAlways use explicit type conversion
Panic on invalid AtoiUse error handling with Atoi

Summary – Recap & Next Steps

Type casting in Go is explicit, strict, and safe. This prevents many bugs common in loosely typed languages and ensures your data stays valid throughout your program.

Key Takeaways:

  • Go requires explicit type conversion between types
  • Use function-style casts for numeric types
  • Use strconv package to convert strings ↔ numbers
  • No boolean ↔ numeric casting allowed
  • Watch out for truncation and data loss

Next: Learn about Go Operators, including arithmetic, relational, logical, and bitwise operators.


FAQs – Go Type Casting

Does Go support implicit type conversion?
No. Go requires explicit type conversion for safety and clarity.

How do I convert string to int or float in Go?
Use strconv.Atoi() for string to int, and strconv.ParseFloat() for string to float.

Can I convert boolean to integer in Go?
No direct conversion. Use if statements to assign 1 for true, 0 for false.

What happens when I convert a float to int?
The decimal part is discarded (truncated), not rounded.

Why does string(65) return "A" instead of "65"?
Because string(65) converts 65 to its Unicode character, not its string digits. Use strconv.Itoa() instead.


Share Now :
Share

Go – Type Casting

Or Copy Link

CONTENTS
Scroll to Top