Golang数据类型转换

avatar 2020年4月5日18:06:36 评论 1,150 次浏览

通过上面的学习我们了解到了在Golang中有很多数据类型,每一个数据类型都有一个暂时叫标签吧,例如整数类型就是int,字符串就是string。知道了数据类型的标签,我们在进行转换的时候就需要用到了,上面看到过使用uint8转成字符串,用到了string()函数。那么我们尝试一下把整数转成string是否可以。看下面的例子:

package main
// 吴老二 个人博客地址 http://www.wulaoer.org
import (
	"fmt"
	"strconv"
)
func main()  {
	wulaoer := "987654321"
	if wulaoer, err := strconv.Atoi(wulaoer); err == nil {
		fmt.Printf("字符串转整数结果:i=%d, type: %T\n",wulaoer,wulaoer)
	}
}

输出结果:

字符串转整数结果:i=987654321, type: int

这里使用了strconv.Atoi()函数在Atoi()中的代码是这样的func Atoi(s string) (int, error),返回的是两个值,一个是转换成int的值,一个是返回值的判断是否转换成功。我们可以不用判断,直接返回结果。

package main
// 吴老二 个人博客地址 http://www.wulaoer.org
import (
	"fmt"
	"strconv"
)
func main()  {
	wulaoer := "987654321"
	wulaoer := "987654321"
	i, _ := strconv.Atoi(wulaoer)
	wolf := reflect.TypeOf(wulaoer)
	wolf2 := reflect.TypeOf(i)
	fmt.Println("转换后原字符串,原字符串类型,转换后整数,转换后整数类型",wulaoer,wolf,i,wolf2)
}

输出结果:

转换后原字符串,原字符串类型,转换后整数,转换后整数类型 987654321 string 987654321 int

这里不进行判断,直接进行转换,相比简单一些,不过使用的都是同一个方法。

字符串转int64

字符串转int64也用到了strconv()包中的ParseInt()方法,方法的代码是func ParseInt(s string, base int, bitSize int) (i int64, err error),这里的bitSize表示参数转换为多少位的int/uint,有效值为0,8,16,32,64.当bitSize=0时,表示转换为int或uint类型,例如bitSize=8表示转换后的值的类型为int8或uint8。base表示以多少禁止的方式去解析给指定的字符串,有效值0,2-36。当base=0时,表示跟进的string的前缀来判断以什么进制去解析:0x开头的以16进制的方式去解析,0开头的以8进制去解析,其他的以十进制去解析。看下面的例子:

package main
// 吴老二 个人博客地址 http://www.wulaoer.org
import (
	"fmt"
	"strconv"
)

func main()  {
	wulaoer := "987654321"
	if wulaoer,err := strconv.ParseInt(wulaoer, 10 ,64); err == nil {
		fmt.Printf("字符串转int64结果i=%d,type:%T\n",wulaoer,wulaoer)
	}

}

输出结果:

字符串转int64结果i=987654321,type:int64

这里使用的是字符串转整数,使用了10进制去解析,保存类型为64.还可以使用浮点数或者布尔类型以及无符合整型等等,看看他们的方法有哪些?浮点数可以使用ParseFloat(),布尔类型可以使用ParseBool(),无符号整型可以使用ParseUint()。看下面的例子:

package main
// 吴老二 个人博客地址 http://www.wulaoer.org
import (
	"fmt"
	"reflect"
	"strconv"
)

func main()  {
	wulaoer := "987654321"
	b, _ := strconv.ParseBool("true")
	b_type := reflect.TypeOf(b)
	fmt.Println("布尔类型值,转换后类型",b,b_type)
	f, _ := strconv.ParseFloat("3.1415926",64)
	f_type := reflect.TypeOf(f)
	fmt.Println("浮点数类型值,转换后类型",f,f_type)
	wulaoer, _ := strconv.ParseUint("27",10,64)
	wulaoer_type := reflect.TypeOf(wulaoer)
	fmt.Println("无符号整数类型值,转换后类型",wulaoer,wulaoer_type)
	wolf, _ := strconv.ParseInt("-27",10,64)
	wolf_type := reflect.TypeOf(wolf)
	fmt.Println("整数类型值,转换后类型",wolf,wolf_type)
}

输出结果:

布尔类型值,转换后类型 true bool
浮点数类型值,转换后类型 3.1415926 float64
无符号整数类型值,转换后类型 27 uint64
整数类型值,转换后类型 -27 int64

这就是布尔类型,字符串对浮点数,整型的转换过程。以上是string类型转换为给定的类型,下面进行给定类型转换为string类型。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: