Go对类型转换非常严格,不支持自动类型转换。让我们用一个例子来看看这意味着什么。
package main
import (
"fmt"
)
func main() {
i := 55 //int
j := 67.8 //float64
sum := i + j //int + float64 不允许
fmt.Println(sum)
}
以上代码在C语言中是完全合法的。但在go语言中会报错。
i
的类型是int
, j
的类型是float64
。将这2个不同类型的数值相加,这是不允许的,会报错:main.go:10: invalid operation: i + j (mismatched types int and float64)
。
为了修正这个错误,i
和j
应该是相同类型。我们把j
转换成int
, T(v)
是把值v
转换成类型T
的语法
package main
import (
"fmt"
)
func main() {
i := 55 //int
j := 67.8 //float64
sum := i + int(j) //j 转换为 int
fmt.Println(sum)
}
输出:122
。
赋值也是一样,需要显式类型转换。
package main
import (
"fmt"
)
func main() {
i := 10
var j float64 = float64(i) // 必须显式转换
fmt.Println("j", j)
}
如果将i
赋值给j
,而不进行任何类型转换时,编译器会抛出一个错误。