Golang数据类型和相互转换


Posted in Golang onApril 12, 2022

1、基本数据类型

数据类型有很多,先研究一下基础的,例如:布尔型、数字类型、字符串类型。

数字类型有uint8、uint16、uint32、uint64、int8、int16、int32、int64(uint和int区别在于uint为无符号整数,即只支持正数,不支持负数形式)

数字浮点型有fload32、float64、complex64、complex126(后面两个均为实数和虚数类型,暂时先不研究)

样例代码如下:

//数据类型
func test_data() {
	var a bool
	var b int16
	var c uint64 = 1231254353452
	var d float32 = 1.78
	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
	fmt.Println(d)
	fmt.Println("int8范围:", math.MinInt8, math.MaxInt8)
	fmt.Println("uint8范围:", math.MaxUint8)
}

执行结果

false
0                                               
1231254353452                                   
1.78                                            
int8范围: -128 127                              
uint8范围: 255   

注意

1、如果没有赋值的基础数据类型变量具有初始值,不像java默认为null。bool类型的初始值为false,int的初始值为0。

2、uint和int的取值范围不一样,uint只是正数。

2、基础数据类型转换

在工程中常常遇到数据类型转换问题,测试一下。

样例代码如下

//数据类型转换
func test_convert() {
	var num int = 10
	var num1 float32 = float32(num)
	var num2 float64 = float64(num)
	fmt.Printf("num类型为%T,num1类型为%T,num2类型为%T\n", num, num1, num2)
}

执行结果

num类型为int,num1类型为float32,num2类型为float64

注意一下Printf中格式化的动词使用,特意找了下,整理一下。

动词 功能
%v 按照值的本来值输出
%+v 在%v基础上,对结构体字段名和值进行展开
%#v 输出Go语言语法格式的值
%T 输出Go语言数据类型
%% 输出%本体
%b 输出以二进制方式显示的整型
%o 输出以八进制方式显示的整型
%d 输出以十进制方式显示的整型
%x 输出以十六进制方式显示的整型,小写
%X 输出以十六进制方式显示的整型,大写
%U 以Unicode字符方式输出
%f 以浮点型方式输出
%p 指针,十六进制方式显

3、基本数据类型转为字符串

这也是工程中经常使用的场景。

样例代码如下,先使用fmt的Sprintf方法转换。

//基础数据类型转为string
func test_convert_string() {
	var a int = 10
	var b float64 = 1.8
	var c bool = true
	var d byte = 'd'
	var e uint64 = 8
	var str string
	fmt.Println(str + "a")
	str = fmt.Sprintf("%d", a)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	str = fmt.Sprintf("%f", b)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	str = fmt.Sprintf("%t", c)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	str = fmt.Sprintf("%c", d)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	str = fmt.Sprintf("%b", e)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
}

执行结果

a                                               
str类型为string,str=10                          
str类型为string,str=1.800000                    
str类型为string,str=true                        
str类型为string,str=d                           
str类型为string,str=1000 

注意

1、可以看到如果没有对字符串类型做初始复制,会默认为空字符串。

4、strconv的使用

使用strconv可以对各种数据类型进行字符串转换。

样例如下

//strconv的使用
func test_strconv() {
	var i int = 10
	var x int = 999
	var f float64 = 1.8
	var t bool = false
	var z int = 97
	var str string
	// 十进制int
	str = strconv.FormatInt(int64(i), 10)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	//十六进制int
	str = strconv.FormatInt(int64(x), 16)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	//浮点型,f表示格式,3表示位数,64表示转换成float64
	str = strconv.FormatFloat(float64(f), 'f', 3, 64)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	//布尔类型
	str = strconv.FormatBool(t)
	fmt.Printf("str类型为%T,str=%v\n", str, str)
	//string函数和strconv.itoa区别
	var str1 = strconv.Itoa(z)
	var str2 = string(z)
	fmt.Printf("str1类型为%T,str1=%v\n", str1, str1)
	fmt.Printf("str2类型为%T,str2=%v\n", str2, str2)
}

执行结果

str类型为string,str=10                          
str类型为string,str=3e7                         
str类型为string,str=1.800                       
str类型为string,str=false                       
str1类型为string,str1=97                        
str2类型为string,str2=a

注意

1、FormatInt参数可以选择10进制或者16进制。

2、FormatFloat参数可以选择保留几位小数。

3、Itoa方法可以将int转为string,但是string方法会把数字转换为ASCII码值等于该整型数字的字符。

5、字符串转为基础类型

使用strconv可以将字符串转化为基础类型。

样例代码如下

//字符串转为基础类型
func test_string_convert() {
	var str string = "true"
	b, _ := strconv.ParseBool(str)
	fmt.Printf("b类型为%T,b=%v\n", b, b)
 
	str = "111"
	// 默认返回int64
	i, _ := strconv.ParseInt(str, 10, 64)
	fmt.Printf("i类型为%T,i=%v\n", i, i)
 
	str = "1.908"
	f, _ := strconv.ParseFloat(str, 64)
	fmt.Printf("f类型为%T,f=%v\n", f, f)
 
	str = "abc"
	c, c1 := strconv.ParseInt(str, 10, 64)
	fmt.Printf("c类型为%T,c=%v\n", c, c)
	fmt.Printf("c1类型为%T,c1=%v\n", c1, c1)
}

执行结果

b类型为bool,b=true                              
i类型为int64,i=111                              
f类型为float64,f=1.908
c类型为int64,c=0
c1类型为*strconv.NumError,c1=strconv.ParseInt: parsing "abc": invalid syntax   

注意

1、":="等于声明变量加赋值。

2、ParseInt返回的int类型为int64,ParseFloat返回的float类型为float64。

3、返回的值有两个,如果解析失败,则范围该数据类型的初始化值,比如:int类型返回0。第二个值为异常,如果没有异常则为空。

到此这篇关于详解Go语言中的数据类型及类型转换的文章就介绍到这了!

Golang 相关文章推荐
go语言求任意类型切片的长度操作
Apr 26 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
Golang之sync.Pool使用详解
May 06 Golang
goland 设置project gopath的操作
May 06 Golang
Go语言实现Snowflake雪花算法
Jun 08 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
Go语言实现Base64、Base58编码与解码
Jul 26 Golang
Golang原生rpc(rpc服务端源码解读)
Apr 07 Golang
GO语言字符串处理函数之处理Strings包
Apr 14 Golang
实现GO语言对数组切片去重
Apr 20 Golang
基于Python实现西西成语接龙小助手
Aug 05 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 #Golang
Golang 1.18 多模块Multi-Module工作区模式的新特性
Apr 11 #Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Golang原生rpc(rpc服务端源码解读)
Apr 07 #Golang
Go并发4种方法简明讲解
Go归并排序算法的实现方法
Apr 06 #Golang
golang操作rocketmq的示例代码
Apr 06 #Golang
You might like
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
深入分析javascript中的错误处理机制
2016/07/17 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
python生成二维码的实例详解
2017/10/29 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
python读取文件名称生成list的方法
2018/04/27 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
django如何通过类视图使用装饰器
2019/07/24 Python
详解python中docx库的安装过程
2019/11/08 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
优秀毕业大学生推荐信
2013/11/13 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
国旗下的演讲稿
2014/05/08 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL