数据类型转换
- C 语言中数据可以隐式转换或显示转换, 但是 Go 语言中数据只能显示转换
- 格式: 数据类型(需要转换的数据)
- 注意点: 和 C 语言一样数据可以从大类型转换为小类型, 也可以从小类型转换为大类型. 但是大类型转换为小类型可能会丢失精度
# Go 语言中不能通过 数据类型(变量)的格式将数值类型转换为字符串, 也不能通过 数据类型(变量)的格式将字符串转换为数值类型
package main
import "fmt"
func main() {
var num1 int32 = 65
// 可以将整型强制转换, 但是会按照ASCII码表来转换
// 但是不推荐这样使用
var str1 string = string(num1)
fmt.Println(str1)
var num2 float32 = 3.14
// 不能将其它基本类型强制转换为字符串类型
var str2 string = string(num2)
fmt.Println(str2)
var str3 string = "97"
// 不能强制转换, cannot convert str2 (type string) to type int
var num3 int = int(str3)
fmt.Println(num3)
}
# 其它类型转字符串类型 strconv.FormatXxx()
package main
import (
"fmt"
"strconv"
)
func main() {
// 字符串转换成字符切片
slice := []byte("hello") // 强制类型转换 string-->[]byte
fmt.Println(slice) // [104 101 108 108 111]
// 字符切片转换成字符串
slice2 := []byte{'h', 'e', 'l', 'l', 'o', 97}
fmt.Println(string(slice2)) // helloa 强制类型转换 []byte-->string
// strconv.FormatXXX() 其他类型转换成字符串
str1 := strconv.FormatBool(true) // bool-->string
fmt.Println(str1) // true
fmt.Println(strconv.FormatInt(123, 10)) // 123 int-->string 10表示十进制
fmt.Println(strconv.Itoa(123)) // 123 十进制int-->string
fmt.Println(strconv.FormatFloat(3.14, 'f', 6, 64)) // 3.140000 float-->string 6:保留6位 64:float64
}
# 字符串类型转其它类型 strconv.ParseXxx()
package main
import (
"fmt"
"strconv"
)
func main() {
// strconv.ParseXXX() 字符串转换成其他类型
// strconv.ParseBool() string-->bool
b, err_info := strconv.ParseBool("false")
if err_info != nil { // 如果有错误信息
fmt.Println("类型转换出错")
} else {
fmt.Println(b) // false
}
// strconv.ParseInt() string-->int64
val, err_info := strconv.ParseInt("11011001", 2, 64) // 2:二进制 64:int64
fmt.Println(val) // 217
// strconv.ParseFloat() string-->float64
val2, err_info := strconv.ParseFloat("3.1415", 64) // 64:float64
fmt.Println(val2) // 3.1415
// strconv.Atoi() string-->十进制int
val3, _ := strconv.Atoi("123")
fmt.Println(val3) // 123
}