×

Golang Tutorial

Golang Reference

Golang Programs

Golang Practice

Golang Miscellaneous

Type Casting or Type Conversion in Golang

By IncludeHelp Last updated : October 05, 2024

Prerequisites

Type Conversion in Golang

In Golang, the type conversion or typecasting is used to change an entity of one data type into another. There are two types of type conversion: implicit type conversion and explicit type conversion. The term for implicit type conversion is coercion. Explicit type conversion in some specific way is known as casting.

Statically typed languages like C, C++, Java provide the feature of implicit type conversion. Many times (if datatypes are compatible) there is no need to convert a type to another, it happens automatically. But Go language does not support the implicit type conversion even if the datatypes are compatible. This is because of the Strong Type System provided by the Go language. Whenever we need to convert a type to another – we use explicit type conversion in the Go language.

Note
In the Go language, there is no typecasting terminology. There is only Type Conversion. In Other programming languages, typecasting is also termed as the "type conversion".

Explicit Type Conversion

To convert a data type to another in Golang – The expression T(v) converts the value v to the type T. The system for explicit type conversion is,

T(v)

Here,

  • T is the targeted Type.
  • v is the value/ variable to be converted to the T type.

Example:

(float64)42

Example 1

// Golang program to demonstrate the
// concept of type conversion

package main

import (
	"fmt"
)

func main() {
	var x int = 42
	// converting int to float64
	var y float64 = float64(x)
	// converting float64 to uint
	var z uint = uint(y)

	// printing the types and values of the variables
	fmt.Printf("Value of x is %d and type is %T\n", x, x)
	fmt.Printf("Value of y is %.2f and type is %T\n", y, y)
	fmt.Printf("Value of z is %d and type is %T\n", z, z)
}

Output:

Value of x is 42 and type is int
Value of y is 42.00 and type is float64
Value of z is 42 and type is uint

Example 2

// Golang program to demonstrate the
// concept of type conversion
// Find the average of two integer numbers

package main

import (
	"fmt"
)

func main() {
	// Declare the variables
	var num1 int
	var num2 int
	var avg float64

	// Assign the values
	num1 = 10
	num2 = 5

	// Calculate the average
	// Here, we will use the
	// explicit type conversion
	avg = (float64(num1) + float64(num2)) / 2

	// Print the values
	fmt.Printf("Average of %d and %d is %.2f\n", num1, num2, avg)
}

Output:

Average of 10 and 5 is 7.50

If we don't use the explicit type conversion, the program will generate an error. In the above program, remove the type conversion,

avg = (num1 + num2) / 2

And, run the program – you will find the following error,

cannot use (num1 + num2) / 2 (type int) as type float64 in assignment

Because the variables num1 and num2 are as integer (int) types and avg is float64 types. The result will not be assigned to the variables avg if types of num1 and num2 are not changed.

Example 3: When types are compatible

In the C programming language – a positive integer value (int) can be assigned in an unsigned integer (unsigned int or uint) automatically (implicit type conversion). But in the Go language, this assignment will not happen.

See the below examples (C language code & Go language code) demonstrating the concept of implicit type conversation.

C code:

#include <stdio.h>

int main()
{
    int a = 123;
    unsigned int b =0;
    
    // Assign the value of a to the b
    b =a;
    
    // Printing the both values
    printf("a = %d, b = %u\n",a,b);

    return 0;
}

Output:

a = 123, b = 123

Go code:

package main

import (
	"fmt"
)

func main() {
	var a int = 123
	var b uint = 0

	// Assign the value of a to the b
	b = a

	// Printing the both values
	fmt.Printf("a = %d, b = %d\n", a, b)
}

Output:

cannot use a (type int) as type uint in assignment

As explained, the Go language doesn't support the implicit type conversion even if the types are compatible. To fix the above error, we have to use explicit type conversion (b = uint(a)).

Correct Go code:

package main

import (
	"fmt"
)

func main() {
	var a int = 123
	var b uint = 0

	// Assign the value of a to the b
	b = uint(a)

	// Printing the both values
	fmt.Printf("a = %d, b = %d\n", a, b)
}

Output:

a = 123, b = 123

Example 4

// Golang program to demonstrate the
// concept of type conversion
// Find the square root of a number

package main

import (
	"fmt"
	"math"
)

func main() {
	var x int = 225
	var SqrtX float64

	// Find the square root
	SqrtX = math.Sqrt(float64(x))

	// Print the values
	fmt.Printf("Square root of %d is %.2f\n", x, SqrtX)
}

Output:

Square root of 225 is 15.00

In the above program, we also convert the x from int type to the float64 type, because the math.Sqrt() function accepts the float64 type value.




Comments and Discussions!

Load comments ↻





Copyright © 2024 www.includehelp.com. All rights reserved.