ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 基础类型转换 > 普通变量类型int,float 都可以使用 type (a)这种形式来进行强制类型转换 > string与其他基础类型之间的转换使用strconv包 ~~~ var a int32 = 10 var b int64 = int64(a) var c float32 = 12.3 var d float64 =float64(c) ~~~ ## 字符串相关转换 (strconv) > 与字符串转换相关的操作,使用strconv包,比如 int/float/bool与字符串的相互转换 > string到具体的数值,要判断err是否为nil之后,才可以使用 ### string与int互转 ~~~ // string 转 int intval, err := strconv.Atoi("1") if err == nil { fmt.Printf("%d:type is %T\n", intval, intval) } // int 转 string var num int = 1 str := strconv.Itoa(num) //str := strconv.FormatInt(int64(num), 10) fmt.Printf("%s:type is %T\n", str, str) ~~~ ### string与int64互转 ~~~ // string 转 int64 // 参数2:基于几进制,值可以是2,8,10,16 ,分别对应 二进制,八进制,十进制,十六进制 // 参数3:要转成哪个int类型:可以是0、8、16、32、64,分别对应 int,int8,int16,int32,int64 int64val, err := strconv.ParseInt("11222", 10, 64) if err == nil { fmt.Printf("%d:type is %T\n", int64val, int64val) } // int64 转 string,=> FormatInt()方式 var num int64 = 1 str := strconv.FormatInt(int64(num), 10) fmt.Printf("%s:type is %T\n", str, str) // int64 转 string,=> Sprintf()方式 str2 := fmt.Sprintf("%d", 12) fmt.Printf("%s:type is %T\n", str2, str2) ~~~ ### string与float64互转 ~~~ // string转成float64 // 参数2:指定浮点类型(32:float32、64:float64),好像该参数不起作用,最终都是返回的float64,以后尽量用float64吧 float64val, err := strconv.ParseFloat("11", 32) if err == nil { fmt.Printf("%f:type is %T\n", float64val, float64val) } // float64 转 string,=> FormatInt()方式 // func FormatFloat(f float64, fmt byte, prec, bitSize int) string // 第2个参数`fmt表示格式`:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制)、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、'g'(指数很大时用'e'格式,否则'f'格式)、'G'(指数很大时用'E'格式,否则'f'格式) // 第3个参数`prec表示控制精度`:对'f'、'e'、'E',它表示小数点后的数字个数;对'g'、'G',它控制总的数字个数。如果prec 为-1,则为不控制小数点精度 // 第3个参数`prec表示位数`:共32与64两个选择 var num float32 = 12.33333558 str := strconv.FormatFloat(float64(num), 'f', 1, 32) // float32=> 保留1位小数点 //str := strconv.FormatFloat(float64(num), 'f', 1, 64) // float64 fmt.Printf("%s:type is %T\n", str, str) // float64 转 string,=> Sprintf()方式 str2 := fmt.Sprintf("%.6f", num) fmt.Printf("%s:type is %T\n", str2, str2) ~~~ ### string与bool互转 ~~~ // string转成bool boolval, err := strconv.ParseBool("true") if err == nil { fmt.Printf("%t:type is %T\n", boolval, boolval) } // bool 转 string,=> FormatInt()方式 str := strconv.FormatBool(true) fmt.Printf("%s:type is %T\n", str, str) // bool 转 string,=> Sprintf()方式 str2 := fmt.Sprintf("%t", true) fmt.Printf("%s:type is %T\n", str2, str2) ~~~ ## 类型断言 ### 类型断言 ~~~ package main import "fmt" func main() { var a interface{} =10 switch a.(type){ case int: fmt.Println("int") case float32: fmt.Println("string") } } ~~~ ### 断言方式类型转换 ~~~ package main import "fmt" func main() { var a interface{} = 10 t, ok := a.(int) if ok { fmt.Println("int", t) }else { fmt.Println("format1 failed") } t2, ok := a.(float32) if ok { fmt.Println("float32", t2) } else { fmt.Println("format2 failed") } } ~~~