go语言—字符串与其它类型转换(strconv包)

与字符串相关的类型转换都是通过 strconv 包实现的

1、string与int类型转换

1.1、Atoi()函数用于将字符串类型的整数转换为int类型
strconv.Atoi(s string) (i int, err error)

由于string可能无法转换为int,所以有两个返回值:第一个返回值是转换成的int值,第二个返回值判断是否转换成功

//var age ="22岁" 转换失败
var age ="22" // 转换成功
age1,err:=strconv.Atoi(age)
if err != nil {
    fmt.Println("转换出错")
    return
}else {
    fmt.Printf("类型是:%T,值是:%d",age1,age1)
}

1.2、Itoa()函数用于将int类型数据转换为对应的字符串表示
strconv.Itoa(i int) string

i := 100
s := strconv.Itoa(i)
fmt.Println("类型是:%T 值是:%#v\n", s2, s2) // 类型是:string 值是:"999"

2、Parse系列函数

Parse类函数用于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()

2.1、ParseBool()
strconv.ParseBool(str string) (value bool, err error)

返回字符串表示的bool值,它只接受值为10、t、f、T、F、truefalse、True、False、TRUE、FALSE的字符串,否则返回错误

fmt.Println(strconv.ParseBool("1"))    // true
fmt.Println(strconv.ParseBool("t"))    // true
fmt.Println(strconv.ParseBool("T"))    // true
fmt.Println(strconv.ParseBool("true")) // true
fmt.Println(strconv.ParseBool("True")) // true
fmt.Println(strconv.ParseBool("TRUE")) // true
fmt.Println(strconv.ParseBool("0"))     // false
fmt.Println(strconv.ParseBool("f"))     // false
fmt.Println(strconv.ParseBool("F"))     // false
fmt.Println(strconv.ParseBool("false")) // false
fmt.Println(strconv.ParseBool("False")) // false
fmt.Println(strconv.ParseBool("FALSE")) // false

2.2、ParseInt()
返回字符串表示的整数值,接受正负号
strconv.ParseInt(s string, base int, bitSize int) (i int64, err error)

  • s:要转换的字符串
  • base:指定进制(2进制到36进制) ,当base=0的时候,表示根据string的前缀来判断以什么进制去解析:0x开头的以16进制的方式去解析,0开头的以8进制方式去解析,其它的以10进制方式解析
  • bitSize:起到string转int时的一个限制作用,有效值为0、8、16、32、64。如果超过了bitSize的限制作用就会将报错信息输出到error中
  • 返回转换后的结果和转换失败的错误
//转换成功
s1 := "123"
ps1,err := strconv.ParseInt(s1, 10, 8) // 指将s1转换为10进制数,8指的是转换结果最大值不超过int8,即127
if err != nil{
	fmt.Printf("err is %v\n", err)
	return
}else{
	fmt.Printf("类型: %T ,值: %d", ps1, ps1) //类型: int64 ,值: 123
}

//转换失败
s1 := "129" // 超过int8最大值127
ps1,err := strconv.ParseInt(s1, 10, 8) // 指将s1转换为10进制数,8指的是转换结果最大值不超过int8,即127
if err != nil{
	fmt.Printf("err is %v\n", err)
	return
}else{
	fmt.Printf("类型: %T ,值: %d", ps1, ps1) //err is strconv.ParseInt: parsing "129": value out of range
}

2.3 ParseUint()
ParseUint类似ParseInt但不接受正负号,用于无符号整型
strconv.ParseUint(s string, base int, bitSize int) (i int64, err error)

2.4、ParseFloat()
strconv.ParseFloat(s string, bitSize int) (f float64, err error)

  • s:要转换的字符串
  • bitSize:指定浮点类型(32:float32、64:float64)
  • 如果 s 是合法的格式,而且接近一个浮点值,则返回浮点数的四舍五入值
  • 如果 s 不是合法的格式,则返回“语法错误”
  • 如果转换结果超出 bitSize 范围,则返回“超出范围”
	f := "1.2342332"
	f1, err := strconv.ParseFloat(f, 64)
	if err != nil {
		fmt.Printf("err is %v\n", err)
		return
	} else {
		fmt.Printf("类型为:%T,值为:%f", f1, f1)
	} //类型为:float64,值为:1.234230

3、Format系列函数

将给定类型格式化为string类型数据

3.1、FormatBool()
用于将布尔类型的值转换为字符串类型
strconv.FormatBool(b bool) string

  • 如果 b 的值为 true,则将返回字符串 “true”,否则将返回 “false”
fmt.Println(strconv.FormatBool(0 < 1)) // true
fmt.Println(strconv.FormatBool(0 > 1)) // false
fmt.Println(strconv.FormatBool(true)) // 将true转换为字符串

3.2、FormatInt()
strconv.FormatInt(i int64, base int) string

  • i :要转换的整数类型
  • base:2-32进制,结果中会使用小写字母’a’到’z’表示大于10的数字
s3 := strconv.FormatInt(-2, 16) 
fmt.Printf("类型为:%T,值为:%#v",s3,s3) // 类型为:string,值为:"-2"

3.3、FormatUint()
是FormatInt的无符号整数版本
strconv.FormatUint(i int64, base int) string

3.4、FormatFloat()
将浮点数表示为字符串并返回
strconv.FormatFloat(f float64, fmt byte, prec, bitSize int) string

  • f:要转换的浮点数
  • fmt表示格式:
    ‘b’ (-ddddp±ddd,二进制指数)
    ‘e’ (-d.dddde±dd,十进制指数)
    ‘E’ (-d.ddddE±dd,十进制指数)
    ‘f’ (-ddd.dddd,没有指数)
    ‘g’ (‘e’:大指数,‘f’:其它情况)
    ‘G’ (‘E’:大指数,‘f’:其它情况)
  • prec控制精度
    如果格式标记为 ‘e’,‘E’和’f’,则 prec 表示小数点后的数字位数
    如果格式标记为 ‘g’,‘G’,则 prec 表示总的数字位数(整数部分+小数部分)
f := 100.123456789

fmt.Println(strconv.FormatFloat(f, 'g', 5, 64))
// 100.12
fmt.Println(strconv.FormatFloat(f, 'G', 5, 64))
// 100.12
fmt.Println(strconv.FormatFloat(f, 'f', 5, 64))
// 100.12346
fmt.Println(strconv.FormatFloat(f, 'e', 5, 64))
// 1.00123e+02
fmt.Println(strconv.FormatFloat(f, 'E', 5, 64))
// 1.00123E+02

4、Append系列

Append类的函数和Format类的函数工作方式类似,只不过将转换后的结果追加到一个slice中

4.1、AppendBool()
strconv.AppendBool(num1 []byte, num2 bool) []byte

  • 根据num2的值将bool(即true或false)追加到num1中,并返回扩展的缓冲区
val := []byte("Is Bool: ")
val = strconv.AppendBool(val, true)    
fmt.Println(string(val)) // Is Bool: true

4.2、AppendFloat()
strconv.AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte

  • 将浮点数 f 转换为字符串值,并将转换结果追加到 dst 的尾部
  • 返回追加后的 []byte
val1 := []byte("Float32值:")
val1 = strconv.AppendFloat(val1,4.5683568954,'E',-1,32)
fmt.Println(string(val1))
val2 := []byte("Float64值:")
val2 = strconv.AppendFloat(val2,6.7415678653,'E',-1,64)
fmt.Println(string(val2))

4.3、AppendInt()
将 int 型整数 i 转换为字符串形式,并追加到 dst 的尾部
strconv.AppendInt(dst []byte, i int64, base int) []byte

  • i:要转换的字符串
  • base:进位制
  • 返回追加后的 []byte
val1 := []byte("整数值(进制10): ")
val1 = strconv.AppendInt(val1, -35, 10)
fmt.Println(string(val1)) //整数值(进制10): -35
  
val2 := []byte("整数值(进制16): ")
val2 = strconv.AppendInt(val2, -44, 16)
fmt.Println(string(val2)) //整数值(进制16): -2c

4.4、AppendUint()
是AppendInt的无符号整数版本

5、其它

5.1、isPrint()
返回一个字符是否是可打印的,r必须是:字母(广义)、数字、标点、符号、ASCII空格

res:=strconv.IsPrint('n')  // true 可打印
res:=strconv.IsPrint('\n')  // false  不可打印

5.2、CanBackquote()
返回字符串s是否可以不被修改的表示为一个单行的、没有空格和tab之外控制字符的反引号字符串

	res:=strconv.CanBackquote(`lxx is Nb`) // true
	res:=strconv.CanBackquote(`lxx is
Nb`) // false :因为带回车
	fmt.Println(res)

你可能感兴趣的:(go语言,golang,开发语言,go)