在声明一个变量而不指定其类型时(即使用不带类型的 :=
语法或 var =
表达式语法),变量的类型由右值推导得出。
1、类型转换
需要注意的是在Go
当中没有隐式转换
,只有显式转换
。
表达式 T(v)
将值 v
转换为类型 T
。
package main
import (
"fmt"
"math"
)
func main() {
var x, y int = 3, 4
var f float64 = math.Sqrt(float64(x*x + y*y))
var z uint = uint(f)
fmt.Println(x, y, z)
}
而如果是字符串
要和数值进行转换。有两种方式,一种是使用rune
(int32)来转换,另一种则是使用strconv
包来转换,Itoa
方法是将整型
转换为字符串
类型,而Atoi
则相反,它是将字符串数值
转换为整型。
// hello project main.go
package main
import (
"fmt"
"strconv"
)
func main() {
var site string = "https://qiucode.cn 已经悄然上线了"
var age int = 4
fmt.Printf("%s%d年! ", site, age)
fmt.Println()
fmt.Println(site + strconv.Itoa(age) + "年!")
str := site + strconv.Itoa(age) + "年!"
fmt.Println(str)
}
2、类型推导
其实,类型推导前面几篇以及本文实例都有涉及到,只是你没有注意到而已。
在声明一个变量而不指定其类型时(即使用不带类型的 :=
语法或 var =
表达式语法),变量的类型由右值推导得出。
当右值声明了类型时,新变量的类型与其相同:
var i int
j := i // j 也是一个 int
不过当右边包含未指明类型的数值常量时,新变量的类型就可能是 int
, float64
或 complex128
了,这取决于常量的精度:
i := 42 // int
f := 3.142 // float64
g := 0.867 + 0.5i // complex128