Go 語言中只有強制類型轉換,沒有隱式類型轉換。
1. 數值類型之間的相互轉換
1.1.?整型和整型之間的轉換
package main
import "fmt"func main() {var a int8 = 20var b int16 = 40fmt.Println(int16(a) + b)// 60
}
1.2.?浮點型和浮點型之間的轉換
package main
import "fmt"func main() {var a float32 = 20var b float64 = 40fmt.Println(float64(a) + b)// 60
}
1.3.?整型和浮點型之間的轉換
package main
import "fmt"func main() {var a float32 = 20.23var b int = 40fmt.Println(a + float32(b))// 60.23
}
注意:轉換的時候建議從低位轉換成高位,高位轉換成低位的時候如果轉換不成功就會溢出,和我們想的結果不一樣。
package main
func main() {var a int16 = 129var b = int8(a) // 范圍 -128 到 127println("b=", b) // b= -127
}
比如:計算直角三角形的斜邊長時使用 math 包的 Sqrt()函數,該函數接收的是 float64 類型的 參數,而變量 a 和 b 都是 int 類型的,這個時候就需要將 a 和 b 強制類型轉換為 float64 類型。
package main
import "fmt"
import "math"
func main() {var a, b = 3, 4var c int// math.Sqrt()接收的參數是 float64 類型,需要強制轉換c = int(math.Sqrt(float64(a*a + b*b)))fmt.Println(c)// 5
}
2.?其他類型轉換成 string 類型
2.1.?通fmt.Sprintf() 把其他類型轉換成 String 類型
package main
import ("fmt")
func main() {var i int = 20str1 := fmt.Sprintf("%d", i)fmt.Printf("值:%v 類型:%T\n", str1, str1)// 值:20 類型:stringvar f float64 = 12.456str2 := fmt.Sprintf("%.2f", f)fmt.Printf("值:%v 類型:%T\n", str2, str2)// 值:12.46 類型:stringvar t bool = truestr3 := fmt.Sprintf("%t", t)fmt.Printf("值:%v 類型:%T\n", str3, str3)// 值:true 類型:stringvar b byte = 'a'str4 := fmt.Sprintf("%c", b)fmt.Printf("值:%v 類型:%T\n", str4, str4)// 值:a 類型:string}
Sprintf 使用中需要注意轉換的格式 int為%d ,float為%f,?bool為%t,byte為%c
2.2.?通過strconv 把其他類型轉換成string類型
package main
import ("fmt""strconv"
)func main() {// 整型轉成字符串// FormatInt()// 參數1:int64的數值// 參數2:傳值int類型的進制var i int = 20str1 := strconv.FormatInt(int64(i), 10)fmt.Printf("值:%v 類型:%T\n", str1, str1)// 值:20 類型:string// 浮點型轉成字符串 // FormatFloat()// 參數 1:要轉換的值// 參數 2:格式化類型 'f'、'b'、'e'、'E'、'g'、'G',一般用f即可// 參數 3: 保留的小數點,如果為-1表示不對小數點格式化// 參數 4:格式化的類型傳入 64或32var f float32 = 20.231313str2 := strconv.FormatFloat(float64(f), 'f', 4, 32)fmt.Printf("值:%v 類型:%T\n", str2, str2)// 值:20.2313 類型:string// 布爾型轉成字符串,沒有任何意義str3 := strconv.FormatBool(true)fmt.Printf("值:%v 類型:%T\n", str3, str3)// 值:true 類型:string // 字符轉成字符串,沒有任何意義a:='b' str4 := strconv.FormatUint(uint64(a), 10)fmt.Printf("值:%v 類型:%T\n", str4, str4) //值:98 類型:string}
3.?String 類型轉換成數值類型
package mainimport ("fmt""strconv"
)func main() {// 字符串類型轉換成整型// ParseInt()// 參數1:string數據// 參數2:進制// 參數3:位數 16、32、64str1:= "123456"num1,_:= strconv.ParseInt(str1, 10, 64)fmt.Printf("%v--%T\n", num1, num1)// 123456--int64// 字符串類型轉換成浮點型// ParseFloat()// 參數1:string數據// 參數2:位數 32 64str2:= "123456.333xxxx"float2,_:= strconv.ParseFloat(str2, 64)fmt.Printf("%v--%T\n", float2, float2)// 0--float64// 字符串類型轉換成布爾型=>不建議這樣轉bool3, _ := strconv.ParseBool("xxxxxxx") fmt.Printf("值:%v 類型:%T\n", bool3, bool3)// 值:false 類型:bool}
4.?數值類型沒法和 bool 類型進行轉換
注意:在 go 語言中數值類型沒法直接轉換成 bool 類型,bool 類型也沒法直接轉換成數值類型。