数据类型转换:
类型转换是将一种数据类型的变量转为另一种类型的变量Go强制要求使用显式类型转换。所以语法更能确定语句及表达式的明确含义转换的时候如果大的转给小的,会有精度损失(数据溢出)比如int64转int8
转换必须确保类型一致,同样不能将非bool类型结果当做true/false使用
x := 100
var b bool = x // 错误:cannot use x (type int) as type bool in assignment
if x { // 错误:non-bool x (type int) used as if condition
}
转换格式:
// 将v转成T类型,但是v本身的数据类型并不会改变,只是把v变量的值类型转成T
表达式 T(v)
演示:
func main() {
var a int = 1
// a转va的本身数据类型并不会改变,只是把a变量的值类型的值转成T了
var b float64 = float64(a)
var c int = int(b)
fmt.Printf("%T,%T", b, c)
}
输出:
float64,int
基本类型转string类型:
Sprintf方式:
Sprintf():生成一个格式化的字符串
演示:
func main() {
var num1 int = 9
var num2 float64 = 9.99
var b bool = false
var str string
str = fmt.Sprintf("%d", num1)
fmt.Printf("str type %T str=%v\n ", str, str)
str = fmt.Sprintf("%f", num2)
fmt.Printf("%T str=%v\n", str, str)
str = fmt.Sprintf("%t", b)
fmt.Printf("%T str=%v\n", str, str)
str = strconv.Itoa(num1)
fmt.Printf("%T str=%v\n", str, str)
}
Format方式:
func main() {
var num3 int = 24
var num4 float64 = 1.111
// 参数1:要转的变量 参数2:进制
str = strconv.FormatInt(int64(num3), 10)
// 'f':格式 10:保留10位 64:float64
str = strconv.FormatFloat(num4, 'f', 10, 64)
fmt.Printf("%T str=%v\n", str, str)
// bool转字符串类型
str := strconv.FormatBool(false)
fmt.Printf("%T", str)
// int类型转字符串
str2 := strconv.Itoa(24)
fmt.Printf("\n%T", str2)
}
Append:
把整数等转换为字符串后,添加到现有的字节数组中。
演示:
func main() {
// 整数转字符串,添加到字节数组中
bytes := make([]byte, 0, 1024)
bytes = strconv.AppendBool(bytes, true)
// 第二个参数是要追加的数,指定10进制的方式追加
bytes = strconv.AppendInt(bytes, 123456, 10)
bytes = strconv.AppendQuote(bytes, "追加了吗")
fmt.Println("bytes:", string(bytes)) //字节转字符
}
string类型转基本类型:
在将string类型转换成基本数据类型时,要确保string类型能够转成有有效的数据例:可以把"123"转成int类型,但是不可以将"aaa"转成int类型,编译器不会报错,go会把它变成默认值0,因为go会判断这个值能不能转成有效的数据,如果不可以会按照该数据的数据类型的默认值赋值。
strconv方式:
func main() {
var str1 string = "123"
fmt.Println(i)
i, _ = strconv.ParseInt(str1, 10, 64)
// 字符串转为其它类型,只能是false和true
str3, err := strconv.ParseBool("false")
if err != nil {
fmt.Println(err)
}
fmt.Printf("\n%T", str3)
//字符串转换为整型
str4, _ := strconv.Atoi("24")
fmt.Printf("\n%T", str4)
//字符串转换为浮点数
str5, _ := strconv.ParseFloat("24.99", 64) //参数2是数据类型大小
fmt.Printf("\n%T", str5)
fmt.Println(str5)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)