golang基础学习——数据类型转换

基本数据类型的转换

介绍

golang和java/c不同,go在不同类型的变量之间赋值时需要显式转换(强制转换)。也就是说go中数据类型不能自动转换

基本语法

表达式T(v)将值转换为T
T是数据类型,比如int32,int64,float32等
v是需要转换的变量

案例演示

package main
import (
	"fmt"
)

//golang中基本数据类型的转换
func main() {
	var i int = 100
	//将i转换成float
	var b1 float32 = float32(i)
	fmt.Printf("b1的类型为:%T,值为:%v", b1, b1) //b1的类型为:float32,值为:100
}

细节说明

  1. go中,数据类型转换可以从 表示范围小-》表示范围大,也可以表示范围大-〉表示范围小
  2. 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化。
  3. 在转换中,比如将int64转换为int8,编译时不会报错,只是转换的结果会按溢出处理,与希望的结果不一样。
    demo:
func main() {
	
	var num1 int64 = 2500
	var num2 int8 = int8(num1)
	fmt.Printf("num2的类型为%T,值为:%v", num2, num2) //num2的类型为int8,值为:-60
}

练习,类型转换和数值相加

func main() {
	var n1 int32 = 12
	var n2 int8
	var n4 int8
	n4 = int8(n1) + 127 //编译通过,但是会溢出,结果不是12+127
	n2 = int8(n1) + 128 //编译不通过,直接报错,128超过int8的上界,可以改成n2 = int8(n1+128)
	fmt.Println(n4)
	fmt.Println(n2)
}

基本数据类型和string的转换

介绍

在开发中,经常需要将基本数据类型转换为string类型;或者将string类型转换为基本数据类型。

基本类型转string

  • 方式1:fmt.Sprintf("%参数", 表达式)
    demo:
package main

import (
	"fmt"
)
//golang中基本数据类型转换到string
func main() {
	var num1 int = 99
	var num2 float64 = 20.89
	var b bool = true
	var char byte = 'h'
	var str string

	//使用第一种方式转换fmt.Sprintf
	str = fmt.Sprintf("%d", num1)
	fmt.Printf("str的类型%T,str的值为:%v \n", str, str) //str的类型string,str的值为:99

	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str的类型%T,str的值为:%v\n", str, str) //str的类型string,str的值为:20.890000

	str = fmt.Sprintf("%t", b)
	fmt.Printf("str的类型%T,str的值为:%q\n", str, str) //%q:该值对应的双引号括起来的go语法字符串字面值
	//输出结果:str的类型string,str的值为:"true"

	str = fmt.Sprintf("%c", char)
	fmt.Printf("str的类型%T,str的值为:%q\n", str, str) //str的类型string,str的值为:"h"
}
  • 方式2:使用strconv包的函数。
    strconv包中的函数
    demo:
package main

import (
	"fmt"
	"strconv"
)

//golang中基本数据类型转换到string
func main() {
	//第二种方式
	var num3 int = 99
	var num4 float64 = 23.456
	var b2 bool = false

	str = strconv.FormatInt(int64(num3), 10)
	fmt.Printf("str的类型%T,str的值为:%q\n", str, str) //str的类型string,str的值为:"99"

	str = strconv.FormatFloat(num4, 'f', 10, 64)
	//‘f’代表格式 10:表示小数位保留10位 64:表示这个浮点数是float64
	fmt.Printf("str的类型%T,str的值为:%q\n", str, str) //str的类型string,str的值为:"23.4560000000"

	str = strconv.FormatBool(b2)
	fmt.Printf("str的类型%T,str的值为:%q\n", str, str) //str的类型string,str的值为:"false"
	//strconv包中有一个函数Itoa
	var num5 int = 4567
	str = strconv.Itoa(num5)
	fmt.Printf("str的类型%T,str的值为:%q\n", str, str)//str的类型string,str的值为:"4567"
}

String类型转换为基本数据类型

  • 使用strconv包的函数
    strconv包中转为基本类型的函数
    demo:
package main
import (
	"fmt"
	"strconv"
)
//golang中string转换到基本数据类型
func main() {

	var str string = "true"
	var b bool
	b, _ = strconv.ParseBool(str)
	//函数会返回两个值(value bool, err error),只想获取value bool,不想获取err ,所以使用_忽略
	fmt.Printf("b的类型%T,b的值为:%v\n", b, b) //b的类型bool,b的值为:true

	var str2 string = "123456"
	num1, _ := strconv.ParseInt(str2, 10, 0)
	fmt.Printf("num1的类型%T,num1的值为:%v\n", num1, num1) //num1的类型int64,num1的值为:123456

	var str3 string = "12.345"
	num2, _ := strconv.ParseFloat(str3, 64)
	fmt.Printf("num2的类型%T,num2的值为:%v\n", num2, num2) //num2的类型float64,num2的值为:12.345

}
note :返回的值为int64或者float64,因此如果希望得到int32或者float32可以使用基本类型转换

String类型转换为基本数据类型注意事项

在将string类型转换为基本数据类型时,要确保string类型能够转换成有效的数据。比如可以把“123”转换成一个整数,但不能把“hello”转换成一个整数,如果这样做,go直接把它转成0,其他类型类似float->0, bool->false。
demo:

func main() {
	var str4 string = "hello"
	var n3 int64
	n3, _ = strconv.ParseInt(str4, 10, 64)
	fmt.Printf("n3的类型%T,n3的值为:%v\n", n3, n3) //n3的类型int64,n3的值为:0
}
demo2
func main() {
	var str string = "hello"
	var b bool
	b, _ = strconv.ParseBool(str)
	fmt.Printf("b的类型%T,b的值为:%v\n", b, b) //b的类型bool,b的值为:false
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值