一、基本数据类型之间的转换
- Go在不同类型的变量之间赋值时需要显示转换,并且只有显示转换(强制转换)
- 语法:
- 表达式T(v)将值v转换为类型T
- T:就是是数据类型
- v:就是需要转换的变量
- 示例
package main
import "fmt"
func main() {
var n1 int = 100
//进行类型转换
var n2 float32 = float32(n1)
fmt.Println(n2)
//注意:n1的类型还是int,只是将n1的值转换成了float32而已
fmt.Printf("%T", n1) //int
//将int64转换为int8时,编译不会出错,但可能会存在数据的溢出
var n3 int64 = 999999
var n4 int8 = int8(n3)
fmt.Println(n4) //63
var n5 int32 = 12
var n6 int64 = int64(n5) + 30 //运算时一定要匹配数据类型
fmt.Println(n5, n6) //12 42
var n7 = 3
//var n8 int8 = int8(n7) + 128 //编译不会通过
var n9 int8 = int8(n7) + 127 //编译通过,但可能数据溢出
fmt.Println(n9) //-126
}
二、基本数据类型转换为string
- 方式一:使用func Sprintf() <----------推荐使用
package main
import "fmt"
func main() {
var n1 int = 19
var s1 string = fmt.Sprintf("%d", n1)
fmt.Printf("s1对应的类型是: %T , s1 = %q", s1, s1)
fmt.Println()
var n2 float32 = 4.78
var s2 string = fmt.Sprintf("%f", n2)
fmt.Printf("s2对应的类型是: %T, s2 = %q", s2, s2)
fmt.Println()
var n3 bool = false
var s3 string = fmt.Sprintf("%t", n3)
fmt.Printf("s2对应的类型是: %T, s2 = %q", s3, s3)
fmt.Println()
var n4 byte = 'a'
var s4 string = fmt.Sprintf("%c", n4)
fmt.Printf("s2对应的类型是: %T, s2 = %q", s4, s4)
}
- 示例:
func main() {
var n1 int = 18
//第一个参数必须转为int64类型,第二个参数指定字面值得进制形式为十进制
var s1 string = strconv.FormatInt(int64(n1), 10)
fmt.Printf("s1对应的类型是: %T , s1 = %q \n", s1, s1)
var n2 float64 = 1.69
//第二个参数:'f' (-ddd.dddd) 第三个参数:9 保留小数点后面9位 第四个参数:表示这个小数是float64类型
var s2 string = strconv.FormatFloat(n2, 'f', 9, 64)
fmt.Printf("s2对应的类型是: %T , s2 = %q \n", s2, s2)
var n3 bool = true
var s3 string = strconv.FormatBool(n3)
fmt.Printf("s3对应的类型是: %T , s3 = %q \n", s3, s3)
}
三、string转换为基本数据类型
- 示例
package main
import (
"fmt"
"strconv"
)
func main() {
var s1 string = "true"
var b bool
//ParseBool的返回值有两个:(value bool, err error)
//value就是我们所得到的bool类型的数据,err出现错误
//err用_忽略
b, _ = strconv.ParseBool(s1)
fmt.Printf("b的类型是: %T, b=%v", b, b)
//string ----> int64
var s2 string = "19"
var num1 int64
num1, _ = strconv.ParseInt(s2, 10, 64)
fmt.Printf("num1的类型是: %T, num1=%v", num1, num1)
//string ----> float32/float64
var s3 string = "3.14"
var f1 float64
f1, _ = strconv.ParseFloat(s3, 64)
fmt.Printf("f1的类型是: %T, num1=%v", f1, f1)
//注意:string向基本数据类型转换的时候,转不成功会返回对应的默认值
var s5 string = "go"
var b1 bool
b1, _ = strconv.ParseBool(s5)
fmt.Printf("b1的类型是: %T, b=%v", b1, b1) //false
}