目录
一、强制类型转换
二、 strconv包:字符串和数值类型的相互转换
1. Itoa():整型转字符串 integer to alphanumeric
2. Atoi():字符串转整型 alphanumeric to integer
3. Parse 系列函数(str转其他): ParseBool()、ParseInt()、ParseUint()、ParseFloat()
4.Format 系列函数(其他转str): FormatBool()、FormatInt()、FormatUint()、FormatFloat()
5.Append 系列函数(其他转str后加到切片中): AppendBool()、AppendFloat()、AppendInt()、AppendUint()
类似于其他语言,Go语言也支持强制类型转换:
但是只有相同底层类型的变量之间可以进行相互转换(如将 int16 和 int32 相互转换,float 类型和 int 类型相互转换),不同底层类型的变量相互转换时会引发编译错误(如 bool 类型和 int 类型,string 与 int 类型之间的转换):
如果需要string、int、int64、float 等数据类型之间的转换功能,可以使用标准包中的 strconv 包。
strconv 包中常用的函数包括 Atoi()、Itia()、parse 系列函数、format 系列函数、append 系列函数等。
函数原型:func Itoa(i int) string 输入int,输出string
package main
import (
"fmt"
"strconv"
)
func main() {
num := 100
str := strconv.Itoa(num)
fmt.Printf("type:%T value:%#v\n", str, str)
}
//输出:
//type:string value:"100"
函数原型:func Atoi(s string) (i int, err error) 输入string,输出int 和 错误信息
package main
import (
"fmt"
"strconv"
)
func main() {
str1 := "110"
str2 := "s100"
num1, err := strconv.Atoi(str1)
if err != nil {
fmt.Printf("%v 转换失败!", str1)
} else {
fmt.Printf("type:%T value:%#v\n", num1, num1)
}
num2, err := strconv.Atoi(str2)
if err != nil {
fmt.Printf("%v 转换失败!", str2)
} else {
fmt.Printf("type:%T value:%#v\n", num2, num2)
}
}
//输出:
//type:int value:110
//s100 转换失败!
(1)ParseBool()
它只能接受 1、0、t、f、T、F、true、false、True、False、TRUE、FALSE,其它的值均返回错误。
函数原型:func ParseBool(str string) (value bool, err error)
package main
import (
"fmt"
"strconv"
)
func main() {
str1 := "110"
boo1, err := strconv.ParseBool(str1)
if err != nil {
fmt.Printf("str1: %v\n", err)
} else {
fmt.Println(boo1)
}
str2 := "t"
boo2, err := strconv.ParseBool(str2)
if err != nil {
fmt.Printf("str2: %v\n", err)
} else {
fmt.Println(boo2)
}
}
//输出:
//str1: strconv.ParseBool: parsing "110": invalid syntax
//true
(2)ParseInt()
函数用于返回字符串表示的整数值(可以包含正负号)。
函数原型:func ParseInt(s string, base int, bitSize int) (i int64, err error)
参数说明:
package main
import (
"fmt"
"strconv"
)
func main() {
str := "-11"
num, err := strconv.ParseInt(str, 10, 0)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(num)
}
}
//输出:
//-11
(3)ParseUint()
函数用于返回字符串表示的整数值,但 ParseUint() 函数不接受正负号,用于无符号整型。
函数原型:func ParseUint(s string, base int, bitSize int) (n uint64, err error)
参数说明:(同ParseInt())
package main
import (
"fmt"
"strconv"
)
func main() {
str := "11"
num, err := strconv.ParseUint(str, 10, 0)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(num)
}
}
//输出:
//11
(4)ParseFloat()
函数用于将一个表示浮点数的字符串转换为 float 类型。
函数原型:func ParseFloat(s string, bitSize int) (f float64, err error)
参数说明:
package main
import (
"fmt"
"strconv"
)
func main() {
str := "3.1415926"
num, err := strconv.ParseFloat(str, 64)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(num)
}
}
//输出:
//3.1415926
(1)FormatBool()
函数可以将一个 bool 类型的值转换为对应的字符串类型。
函数原型:func FormatBool(b bool) string
package main
import (
"fmt"
"strconv"
)
func main() {
num := true
str := strconv.FormatBool(num)
fmt.Printf("type:%T,value:%v\n ", str, str)
}
//输出:
//type:string,value:true
(2)FormatInt()
函数用于将整型数据转换成指定进制并以字符串的形式返回。
函数原型:func FormatInt(i int64, base int) string
参数说明:
package main
import (
"fmt"
"strconv"
)
func main() {
var num int64 = 100
str := strconv.FormatInt(num, 16)
fmt.Printf("type:%T,value:%v\n ", str, str)
}
//输出:
//type:string,value:64
(3)FormatUint()
函数用于将无符号的整型数据转换成指定进制并以字符串的形式返回。
函数原型:func FormatUint(i uint64, base int) string
参数说明:
package main
import (
"fmt"
"strconv"
)
func main() {
var num uint64 = 110
str := strconv.FormatUint(num, 16)
fmt.Printf("type:%T,value:%v\n ", str, str)
}
//输出:
//type:string,value:6e
(4)FormatFloat()
函数用于将浮点数转换为字符串类型并以字符串的形式返回。
函数原型:func FormatFloat(f float64, fmt byte, prec, bitSize int) string
参数说明:
package main
import (
"fmt"
"strconv"
)
func main() {
var num float64 = 3.1415926
str := strconv.FormatFloat(num, 'E', -1, 64)
fmt.Printf("type:%T,value:%v\n ", str, str)
}
//输出:
//type:string,value:3.1415926E+00
Append 系列函数和 Format 系列函数的使用方法类似,只不过是将转换后的结果追加到一个切片中。相比之下,入参多了一个[]string类型的数组,返回值是加完元素的数组。
函数原型:
func FormatBool(slice []string, b bool) []string
func FormatInt(slice []string, i int64, base int) []sting
func FormatUint(slice []string, i uint64, base int) []string
func FormatFloat(slice []string, f float64, fmt byte, prec, bitSize int) []string
package main
import (
"fmt"
"strconv"
)
func main() {
// 声明一个slice
b10 := []byte("int (base 10):")
// 将转换为10进制的string,追加到slice中
b10 = strconv.AppendInt(b10, -42, 10)
fmt.Println(string(b10))
b16 := []byte("int (base 16):")
b16 = strconv.AppendInt(b16, -42, 16)
fmt.Println(string(b16))
}
//输出:
//int (base 10):-42
//int (base 16):-2a