Go数据类型转换
整型与浮点型转换
package mainimport ("fmt""strconv"
)func main() {// 类型转换建议是从低位的类型转换到高位的类型,比如从int转换到float64,从float32转换到float64d := 10f := 3.14fmt.Println(float64(d) + f)}
其他类转换成字符串
// 其他类型转换成字符串类型var i int = 10 // int类型var b bool = true // bool类型var l float64 = 3.14 // float64类型var a byte = 'a' // byte类型// 1. 使用Sprintf函数将其他类型转换成字符串类型str_i := fmt.Sprintf("%d", i) //Sprintf函数将其他类型转换成字符串类型,%d是int类型的格式str_b := fmt.Sprintf("%t", b) //Sprintf函数将其他类型转换成字符串类型,%t是bool类型的格式str_f := fmt.Sprintf("%f", l) //Sprintf函数将其他类型转换成字符串类型,%f是float64类型的格式str_C := fmt.Sprintf("%c", a) //Sprintf函数将其他类型转换成字符串类型,%c是byte类型的格式fmt.Println("使用Sprintf函数将其他类型转换成字符串类型") // 使用Sprintf函数将其他类型转换成字符串类型fmt.Printf("str_i类型 %T str_i值 %v\n", str_i, str_i) // string 10fmt.Printf("str_b类型 %T str_b值 %v\n", str_b, str_b) // string truefmt.Printf("str_f类型 %T str_f值 %v\n", str_f, str_f) // string 3.140000fmt.Printf("str_C类型 %T str_C值 %v\n", str_C, str_C) // string afmt.Println("----------------------------------------------------")// 2. 使用strconv包中的函数将其他类型转换成字符串类型str_i := strconv.Itoa(i) // strconv.Itoa函数将int类型转换成字符串类型str_b := strconv.FormatBool(b) // strconv.FormatBool函数将bool类型转换成字符串类型str_f := strconv.FormatFloat(l, 'f', 6, 64) // strconv.FormatFloat函数将float64类型转换成字符串类型,'f'表示格式为浮点数,6表示小数点后保留6位,64表示float64类型str_C := string(a) // string函数将byte类型转换成字符串类型fmt.Println("使用strconv包中的函数将其他类型转换成字符串类型") // 使用strconv包中的函数将其他类型转换成字符串类型fmt.Printf("str_i类型 %T str_i值 %v\n", str_i, str_i) // string 10fmt.Printf("str_b类型 %T str_b值 %v\n", str_b, str_b) // string truefmt.Printf("str_f类型 %T str_f值 %v\n", str_f, str_f) // string 3.140000fmt.Printf("str_C类型 %T str_C值 %v\n", str_C, str_C) // string a
字符串转换成其他类
// 字符串转换成其他类// 1. 使用strconv包中的函数将字符串类型转换成其他类型str_i := fmt.Sprintf("%d", i) //Sprintf函数将其他类型转换成字符串类型,%d是int类型的格式str_b := fmt.Sprintf("%t", b) //Sprintf函数将其他类型转换成字符串类型,%t是bool类型的格式str_f := fmt.Sprintf("%f", l) //Sprintf函数将其他类型转换成字符串类型,%f是float64类型的格式str_C := fmt.Sprintf("%c", a) //Sprintf函数将其他类型转换成字符串类型,%c是byte类型的格式var new_i int // int类型var new_b bool // bool类型var new_l float64 // float64类型var new_a []byte // byte切片类型new_i, _ = strconv.Atoi(str_i) // strconv.Atoi函数将字符串类型转换成int类型,_表示忽略错误new_b, _ = strconv.ParseBool(str_b) // strconv.ParseBool函数将字符串类型转换成bool类型,_表示忽略错误new_l, _ = strconv.ParseFloat(str_f, 64) // strconv.ParseFloat函数将字符串类型转换成float64类型,64表示float64类型,_表示忽略错误new_a = []byte(str_C) // string类型转换成byte类型fmt.Println("使用strconv包中的函数将字符串类型转换成其他类型")fmt.Printf("new_i类型 %T new_i值 %v\n", new_i, new_i) // int 10fmt.Printf("new_b类型 %T new_b值 %v\n", new_b, new_b) // bool truefmt.Printf("new_l类型 %T new_l值 %v\n", new_l, new_l) // float64 3.140000fmt.Printf("new_a类型 %T new_a值 %v\n", new_a, new_a) // []uint8 [97]
数值类型与布尔类型转换
注意:在Go中数值类型无法直接转换成布尔类型,布尔类型也无法直接转换成数值类型。
字符串型与布尔型转换
package mainimport ("fmt""strconv"
)func main() {b, _ := strconv.ParseBool("true")fmt.Printf("Value: %v type:%T\n", b, b) // Value: true type:boolc, _ := strconv.ParseBool("xxxxxxx")fmt.Printf("Value: %v type:%T\n", c, c) // Value: false type:bool
}
不建议将布尔类型转换成字符串型,因为Go中的布尔判断并不依照字符串是否非空进行判断,转换后可能会出现更多问题。