Golang 类型铸造或类型转换
类型转换发生在我们将一种数据类型的值分配给另一种数据类型的时候。静态类型语言如C/C++,Java,提供了对隐式类型转换的支持,但Golang不同,因为它 不支持自动类型转换或隐式类型转换_ ,即使数据类型是兼容的。其原因是Golang的强类型系统不允许这样做。对于类型转换,你必须执行显式转换。
根据 Golang 规范,在 Golang 中没有类型转换这个词或术语。如果你试图在 Golang 规范或文档中搜索类型转换,你会发现没有这样的东西。这里只有类型转换。在其他编程语言中,类型转换也被称为类型转换。
什么是类型转换的需要?
好吧,如果你需要利用数据类型层次的某些特性,那么我们必须将实体从一种数据类型变为另一种。将一个值val
转换为一个类型T
的一般语法是T(val)
。
例子:
var geek1 int = 845
// explicit type conversion
var geek2 float64 = float64(geek1)
var geek3 int64 = int64(geek1)
var geek4 uint = uint(geek1)
// Go program to find the
// average of numbers
package main
import "fmt"
func main() {
// taking the required
// data into variables
var totalsum int = 846
var number int = 19
var avg float32
// explicit type conversion
avg = float32(totalsum) / float32(number)
// Displaying the result
fmt.Printf("Average = %f\n", avg)
}
输出:
Average = 44.526318
注意: 由于Golang有一个强类型系统,它不允许在表达式中混合(如加、减、乘、除等)数字类型,也不允许在两个混合类型之间执行赋值。
例子:
var geek1 int64 = 875
// it will give compile time error as we
// are performing an assignment between
// mixed types i.e. int64 as int type
var geek2 int = geek1
var geek3 int = 100
// it gives compile time error
// as this is invalid operation
// because types are mix i.e.
// int64 and int
var addition = geek1 + geek3