类型转换用于将一种数据类型的变量转换为另外一种类型的变量。
Go语言类型转换基本格式如下:
表达式 T(v) 将值 v 转换为类型 T 。
Go语言各种类型转换及函数的高级用法:
strconv包实现了基本数据类型和其字符串表示的相互转换。
转字节
reflect.TypeOf() 查看类型
字符串转字节
package main
import ("fmt"
"reflect")
func main() {var str string = "oldboy"result := []byte(str)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
32位整形转字节
package main
import ("bytes"
"encoding/binary"
"fmt"
"reflect")
// reflect.TypeOf() 查看类型
func main() {varx int32
x= 100bytesBuffer := bytes.NewBuffer([]byte{})
binary.Write(bytesBuffer, binary.BigEndian, x)
result :=bytesBuffer.Bytes()
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
转字符串
字节转字符串
package main
import ("fmt"
"reflect")
func main() {var b []byte = []byte{111, 108, 100, 98, 111, 121}
result := string(b)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
整形转字符串
strconv.Itoa(x)
package main
import ("fmt"
"reflect"
"strconv")
func main() {var x intx= 100result :=strconv.Itoa(x)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
FormatInt 将 int 型整数 i 转换为字符串形式
base:进位制(2 进制到 36 进制) 大于 10 进制的数,返回值使用小写字母 ‘a’ 到 ‘z’
func FormatInt(i int64, base int) string
Itoa 相当于 FormatInt(i, 10)
64位整形转字符串
package main
import ("fmt"
"reflect"
"strconv")
func main() {vari int64
i= 0x100result := strconv.FormatInt(i, 10)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
布尔值转字符串
package main
import ("fmt"
"reflect"
"strconv")
func main() {
t := strconv.FormatBool(true)
f := strconv.FormatBool(false)
fmt.Printf("t is %v , t type is %v\n", t, reflect.TypeOf(t))
fmt.Printf("f is %v , f type is %v\n", f, reflect.TypeOf(f))
}
浮点数转字符串
strconv.FormatFloat(f,fmt,prec,bitSize)
f:要转换的浮点数
fmt:格式标记(b、e、E、,f、g、G)
prec:精度(数字部分的长度,不包括指数部分)
bitSize:指定浮点类型(32:float32、64:float64)
格式标记:
‘b’ (-ddddp±ddd,二进制指数)
‘e’ (-d.dddde±dd,十进制指数)
‘E’ (-d.ddddE±dd,十进制指数)
‘f’ (-ddd.dddd,没有指数)
‘g’ (‘e’:大指数,’f’:其它情况)
‘G’ (‘E’:大指数,’f’:其它情况)
package main
import ("fmt"
"reflect"
"strconv")
func main() {
f := 100.12345678901234567890123456789result := strconv.FormatFloat(f, 'e', 30, 32)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
转整形
int转int64
package main
import ("fmt"
"reflect")
func main() {var x int = 100result :=int64(x)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
字节转32位整形
package main
import ("bytes"
"encoding/binary"
"fmt"
"reflect")
func main() {
b := []byte{0x00, 0x00, 0x03, 0xe8}
bytesBuffer :=bytes.NewBuffer(b)varresult int32
binary.Read(bytesBuffer, binary.BigEndian,&result)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
转浮点型
float32转float64
package main
import ("fmt"
"reflect")
func main() {var x float32 = 100result :=float64(x)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
整型转浮点型
package main
import ("fmt"
"reflect")
func main() {var x int = 100result :=float32(x)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
字符串转浮点数
strconv.ParseFloat(str,bitSize)
str:要转换的字符串
bitSize:指定浮点类型(32:float32、64:float64)
如果 str 是合法的格式,而且接近一个浮点值,
则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)
如果 str 不是合法的格式,则返回“语法错误”
如果转换结果超出 bitSize 范围,则返回“超出范围”
package main
import ("fmt"
"reflect"
"strconv")
func main() {var str string = "0.12345678901234567890"result, _ := strconv.ParseFloat(str, 32)
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
转布尔值
字符串转布尔值
ParseBool 将字符串转换为布尔值
它接受真值:1, t, T, TRUE, true, True
它接受假值:0, f, F, FALSE, false, False.
其它任何值都返回一个错误
package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
result, _ := strconv.ParseBool("1")
fmt.Printf("result is %v , result type is %v\n", result, reflect.TypeOf(result))
}
注意:Go语言不能将其他类型当 bool 值使用
package main
func main() {
a := 100
ifa {
}
}
编译错误:
./main.go:5:2: non-bool a (type int) used as if condition