前言
类型转换是编程语言当中最为常见不过的数据操作, 像javascript中的类型转换可以通过函数显示的转换, 也可以通过操作符隐式转换, 但是在go中必须显示的转换, 小值可转大类型, 大值可转小类型
一、什么是类型转换?
二、类型转换演示类型转换是将数据转换成另一种类型输出出来, 不会变量的类型
注意: 只有相同底层数据类型的双方才可以使用T(x)模式进行转换, 底层数据类型不同则需要借助 strconv 包
0. strconv 接收
strconv 提供了很多转换函数
append 追加系列函数
format 格式化类型系列函数
parse 转换系列函数
1. 数字类型
(1) 数字类型相互转换
package main
import (
"fmt"
)
func main() {
var pub = 123
var num1 int8 = int8(pub)
var num2 int16 = int16(pub)
var num3 uint32 = uint32(pub)
var num4 uint64 = uint64(pub)
var num5 float32 = float32(pub)
var num6 float64 = float64(pub)
fmt.Printf(`num1的类型 %T, num2的类型 %T, num3的类型 %T, num4的类型 %T,
num5的类型 %T, num6的类型 %T`,num1,num2,num3,num4,num5,num6)
}
变量pub没有指定类型, 因此会做类型推导, 推导出pub的类型为int, 由于int和int8,16,32,64,float类型底层数据类型都是数字所以可以使用T(x)模式转换, 如果转换的是字符串会报错
2. 字符串类型
(1) 字符串类型转成其他基础数据类型
package main
import (
"fmt"
"strconv"
)
func main() {
str := "123123123" // 类型推导为 string 类型
var b bool
b, _ = strconv.ParseBool(str) // 将str转成bool类型
fmt.Printf("b %T - %v\n", b, b)
var num1 int64
num1, _ = strconv.ParseInt(str, 10, 64) // 将str转成int64
fmt.Printf("num1 %T - %v\n", num1, num1)
floatStr := "1.33232313123123"
var num2 float64
num2, _ = strconv.ParseFloat(floatStr, 64) // 将floatStr转成float64
fmt.Printf("num2 %T - %v\n", num2, num2)
}
(2) 其他基础数据类型转成字符串类型
package main
import (
"fmt"
"strconv"
)
func main() {
s1 := strconv.FormatBool(true)
s2 := strconv.FormatFloat(3.1415, 'E', -1, 64)
s3 := strconv.FormatInt(-42, 16)
s4 := strconv.FormatUint(42, 16)
fmt.Printf("s1 %T - %v\n", s1, s1)
fmt.Printf("s2 %T - %v\n", s2, s2)
fmt.Printf("s3 %T - %v\n", s3, s3)
fmt.Printf("s4 %T - %v\n", s4, s4)
}
总结
1. 同底使用T(x) 转, 不同底使用 strconv 转
2. 不会就找文档