Go核心开发学习笔记(四) —— 基本数据类型与String互相转换

基本数据类型的转换:
Golang不同类型变量之间赋值时需要显式转换(强制转换),Goalng数据类型不能自动转换!

转换方法:类似python,沟通过T(v)函数方式来转换。
示例如下

	package main
	import "fmt"
	
	func main() {
	//尝试使用 i = float32(i)不可行,必须要重新定义变量
	var i int = 100
	var i1 float32 = float32(i)
	fmt.Printf("i1=%v\n",i1)
	fmt.Printf("i的类型为:%T\n",i)      //int
	fmt.Printf("i1的类型为:%T",i1)      //float32
	}

示例说明:

  1. 范围大变成范围小,范围小变成范围大的都可以,int8变int16,int16变成int8都可以。

  2. 数据转换类型考点:通过转换只是把i的值转换为指定类型赋予i1,而i本身数据类型并未改变;
    被转换的是变量存储的数值,变量本身数据类型并未发生变化。

  3. 在转换中,如果int64转换成int8,编译不会报错,但是转换结果会按照二进制溢出处理,结果肯定不一致,所以不要强转数据类型。

  4. 两个例子深刻理解数据类型:

    //数据转换类型不可以交叉赋不通数据类型的值,例如int32赋值给int64,这个肯定不可以,必须把int32变量值转换为int64

    var (
    	n1 int32
    	n2 int64
    	n3 int8
    )
    n1 = 32
    n2 = int64(n1) + 10
    n3 = int8(n2) + 10
    fmt.Printf("%d %d %d",n1,n2,n3)
    

    //符合intxx类型但是不符合数值范围,编译不会报错,但是数值会溢出;上来赋值不符合数值范围的数值,编译直接报错,没有然后了
    //编译直接无法通过,n5数据溢出,n6本身+128就不能赋值给n6

    var (
    n4 int8
    n5 int8
    n6 int8
    )
    n4 = 10
    n5 = int8(n4) + 127
    n6 = int8(n4) + 128
    fmt.Printf("%d %d %d",n4,n5,n6)
    

★基本数据类型与string类型互相转化

  1. 程序开发中经常需要string与其他类型互转。

  2. 基本类型转string:
    (1)fmt.Sprintf():Sprintf根据format参数生成格式化的字符串并返回该字符串。

    (2)strconv():
    func FormatBool(b bool) string
    func FormatInt(i int64, base int) string
    func FormatUint(i uint64, base int) string
    func FormatFloat(f float64, fmt byte, prec, bitSize int) string

    举例说明两种转换方式代码:

    package main
    
    import (
    	"fmt"
    	"strconv"
    )
    
    func main() {
    	//第一种方式,使用fmt.Sprintf()函数来转
    	num1,num2,bo,char := 90,20.5,true,"b"
    	var str,str1,str2,str3 string
    	str = fmt.Sprintf("%d\n",num1)
    	str1 = fmt.Sprintf("%f\n",num2)
    	str2 = fmt.Sprintf("%t\n",bo)
    	str3 = fmt.Sprintf("%v\n",char)
    	fmt.Println(str,str1,str2,str3)
    
    	/*第二种方式,使用package strconv:
    	func FormatBool(b bool) string
    	func FormatInt(i int64, base int) string
    	func FormatUint(i uint64, base int) string
    	func FormatFloat(f float64, fmt byte, prec, bitSize int) string
    	 */
    	var str4,str5,str6 string
    	num3,num4,bo1 := 99,13.56,true
    	//参数1:必须为int64, 参数2:多少进制
    	str4 = strconv.FormatInt(int64(num3),10)
    	//参数1:必须为float64,参数2:f是正常输出,e则是e的n次方格式
    	//参数3:小数点后多少位,参数4:bitSize为64
    	str5 = strconv.FormatFloat(float64(num4),'f',2,64)
    	//参数1:直接传变量即可                
    	str6 = strconv.FormatBool(bo1)
    	fmt.Println(str4,str5,str6)
        
        //Itoa()函数挺好使的,直接把一个int转换成字符串,但是不支持int64,相当于num5如果不是int还需要转int
    	var num5 int = 100
    	str7 = strconv.Itoa(num5)
    	fmt.Println(str7)
    }
    

3. string类型转基本数据类型
func ParseBool(str string) (value bool, err error)
func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
func ParseFloat(s string, bitSize int) (f float64, err error)

使用strconv.Parsexxxx()函数来做不同类型的转换。
下面为案例,充分说明如何将字符串回转基本类型:

	package main
	
	import (
	"fmt"
	"strconv"
	)
	
	func main() {
	/*
	可以看出来这里面几个函数都会返回两个值,一个是value,一个是error,我们
	需要的只是value,对error并不关心,所以可以使用"_"来忽略这个error
	例如:
	b , _ = strconv.ParseBool(str)
	func ParseBool(str string) (value bool, err error)
	func ParseInt(s string, base int, bitSize int) (i int64, err error)
	func ParseUint(s string, base int, bitSize int) (n uint64, err error)
	func ParseFloat(s string, bitSize int) (f float64, err error)
	*/
	
	//布尔值转换
	var str string = "true"
	var b bool
	b , _ = strconv.ParseBool(str)      //这个写法要注意,因为返回两个值
	fmt.Println(b)
	
	//int转换
	var str1 string = "123456"
	var num int64
	num , _  = strconv.ParseInt(str1,10,64)
	fmt.Printf("%T\n",num)
	
	//float转换
	var str2 string = "123.456"
	var num1 float32
	var num2 = float64(num1)
	num2 , _ = strconv.ParseFloat(str2,64)
	fmt.Println(num2)
	}

发布了50 篇原创文章 · 获赞 18 · 访问量 4025

猜你喜欢

转载自blog.csdn.net/weixin_41047549/article/details/89574743