一.基础类型的互相转换
Java中的数据类型之间存在一些隐式转换,例如声明一个变量 byte b = 125; int i = b; 这种由小向大的类型转换可以自动完成。Golang中的类型转换,必须显式完成。
1.转换用法
表达式 T(v)将值 v 转换为类型 T
T∶就是数据类型,比如 int32,int64,float32等等
v∶就是需要转换的变量
package main
import "fmt"
func main() {
var num int = 10
var num1 float64 = float64(num)
var num2 int64 = int64(num)
fmt.Printf("num类型是%T, num1的类型是%T, num2的类型是%T", num, num1, num2)
//num类型是int, num1的类型是float64, num2的类型是int64
}
2.注意点
1)从上面的代码中可以看出,Golang中数据转换,被转换的是变量中存储的数值,而不是变量本身,num的类型并未发生改变;
2)Golang中的数据转换,和Java等语言类似,由大类型向小类型转换的时候,也会存在溢出的问题,因此需要注意取值范围;
package main
import "fmt"
func main() {
var num int64 = 1000
var num1 int8 = int8(num)
fmt.Printf("num1 = %v", num1)//num1 = -24
}
二.基础类型转换为string
1.fmt.Sprint("%参数",表达式)
Sprint根据fomat参数生成格式化的字符串并返回该字符串
package main
import "fmt"
func main() {
var i int = 10
var f float64 = 1.2
var t bool = true
var c byte = 'h'
var str string
str = fmt.Sprintf("%d", i)
fmt.Printf("str类型是%T,str=%v\n", str, str)//str类型是string,str=10
str = fmt.Sprintf("%f", f)
fmt.Printf("str类型是%T,str=%v\n", str, str)//str类型是string,str=1.200000
str = fmt.Sprintf("%t", t)
fmt.Printf("str类型是%T,str=%v\n", str, str)//str类型是string,str=true
str = fmt.Sprintf("%c", c)
fmt.Printf("str类型是%T,str=%v\n", str, str)//str类型是string,str=h
}
下表中标出了常用的一些格式化样式中的动词及功能:
动 词 | 功 能 |
---|---|
%v | 按值的本来值输出 |
%+v | 在 %v 基础上,对结构体字段名和值进行展开 |
%#v | 输出 Go 语言语法格式的值 |
%T | 输出 Go 语言语法格式的类型和值 |
%% | 输出 % 本体 |
%b | 整型以二进制方式显示 |
%o | 整型以八进制方式显示 |
%d | 整型以十进制方式显示 |
%x | 整型以十六进制方式显示 |
%X | 整型以十六进制、字母大写方式显示 |
%U | Unicode 字符 |
%f | 浮点数 |
%p | 指针,十六进制方式显示 |
2.使用strconv包的FormatXXX函数
package main
import (
"fmt"
"strconv"
)
func main() {
var i int = 10
var f float64 = 1.2
var t bool = true
var str string
//十进制
str = strconv.FormatInt(int64(i), 10)
fmt.Printf("str类型是%T,str=%v\n", str, str)//str类型是string,str=10
//f表示格式,5表示位数,64表示转换成float64
str = strconv.FormatFloat(f, 'f', 5, 64)
fmt.Printf("str类型是%T,str=%v\n", str, str)//str类型是string,str=1.20000
str = strconv.FormatBool(t)
fmt.Printf("str类型是%T,str=%v\n", str, str)//str类型是string,str=true
str = strconv.Itoa(i)
fmt.Printf("str类型是%T,str=%v\n", str, str)//str类型是string,str=10
}
三.string转换为其他基础类型
使用strconv包中的ParseXXX函数
package main
import (
"fmt"
"strconv"
)
func main() {
var str = "true"
b, _ := strconv.ParseBool(str)
fmt.Printf("b type is %T, b = %v\n", b, b)//b type is bool, b = true
str = "1234"
//转换出来的结果是一个int64类型的,可以强转为其他int类型
i, _ := strconv.ParseInt(str, 10, 64)
fmt.Printf("i type is %T, i = %v\n", i, i)//i type is int64, i = 1234
str = "123.123"
f, _ := strconv.ParseFloat(str, 64)
fmt.Printf("f type is %T, f = %v\n", f, f)//f type is float64, f = 123.123
str = "abd"
p, _ := strconv.ParseInt(str, 10, 64)
//若转换失败,不会报错,会返回目标类型的默认值
fmt.Printf("p type is %T, p = %v\n", p, p)//p type is int64, p = 0
}
注意:string类型转换为其他类型的前提,是string变量的值能转为目标类型的有效值,比如,我们无法将"abc"转换为int类型。从上例可以看出,若转换失败,不会报错,会返回目标类型的默认值。
引用:本文内容主要引用自尚硅谷韩顺平go语言核心编程的视频教学内容。