Go语言基础数据类型详解:整型、浮点型、复数与字符串

news/2024/12/25 15:32:13/文章来源:https://www.cnblogs.com/QiaoPengjun/p/18630550

Go语言基础数据类型详解:整型、浮点型、复数与字符串

Go语言作为一门静态强类型的语言,其数据类型设计简洁而高效。掌握Go的基本数据类型是每个开发者深入理解Go语言的基础。本篇文章将详细介绍Go语言中最常见的基本数据类型,包括整型、浮点型、复数、布尔型、字符串等,并结合实例代码演示如何在Go中使用这些数据类型。通过对这些类型的深入理解,读者将能够更好地在项目中应用Go语言,提升代码的质量与效率。

Go语言提供了丰富的数据类型支持,涵盖了从简单的整型到复杂的复数、字符串等多种类型。在整型部分,我们将讲解有符号和无符号整型的区别,并展示其在不同平台上的表现。浮点型支持 float32 和 float64 两种类型,遵循IEEE 754标准,适用于不同精度要求的数值计算。复数类型包括 complex64 和 complex128,用于处理复数运算。布尔类型仅包含 true 和 false,且不能与其他类型直接转换或参与运算。字符串则是Go语言的基础数据类型之一,采用UTF-8编码,并支持各种常见操作如拼接、切割、查找等。

Go语言之基本数据类型

整型

整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64

其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。

类型 描述
uint8 无符号 8位整型 (0 到 255)
uint16 无符号 16位整型 (0 到 65535)
uint32 无符号 32位整型 (0 到 4294967295)
uint64 无符号 64位整型 (0 到 18446744073709551615)
int8 有符号 8位整型 (-128 到 127)
int16 有符号 16位整型 (-32768 到 32767)
int32 有符号 32位整型 (-2147483648 到 2147483647)
int64 有符号 64位整型 (-9223372036854775808 到 9223372036854775807)

特殊整型

类型 描述
uint 32位操作系统上就是uint32,64位操作系统上就是uint64
int 32位操作系统上就是int32,64位操作系统上就是int64
uintptr 无符号整型,用于存放一个指针

注意: 在使用intuint类型时,不能假定它是32位或64位的整型,而是考虑intuint可能在不同平台上的差异。

注意事项 获取对象的长度的内建len()函数返回的长度可以根据不同平台的字节长度进行变化。实际使用中,切片或 map 的元素数量等都可以用int来表示。在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用intuint

package mainimport "fmt"// 整型func main()  {var i1 = 101fmt.Printf("%d\n", i1)fmt.Printf("%b\n", i1) // 把十进制转换成二进制fmt.Printf("%o\n", i1) // 把十进制转换成八进制fmt.Printf("%x\n", i1) // 把十进制转换成十六进x// 八进制i2 := 077fmt.Printf("%d\n", i2)// 十六进制i3 := 0x1234567fmt.Printf("%d\n", i3)// 查看变量的类型fmt.Printf("%T\n", i3)// 声明int8类型的变量i4 := int8(9)  // 明确指定int8类型,否则默认int类型fmt.Printf("%T\n", i4)
}

浮点型

Go语言支持两种浮点型数:float32float64。这两种浮点型数据格式遵循IEEE 754标准: float32 的浮点数的最大范围约为 3.4e38,可以使用常量定义:math.MaxFloat32float64 的浮点数的最大范围约为 1.8e308,可以使用一个常量定义:math.MaxFloat64

package mainimport "fmt"// 浮点数
func main(){// math.MaxFloat32 // float32最大值f1 := 1.23456fmt.Printf("%T\n", f1) // 默认Go语言中的小数都是float64类型
}E:\go\src\github.com\qiaopengjun\day01\05float>go buildE:\go\src\github.com\qiaopengjun\day01\05float>05float.exe
float64package mainimport "fmt"// 浮点数
func main(){// math.MaxFloat32 // float32最大值f1 := 1.23456fmt.Printf("%T\n", f1) // 默认Go语言中的小数都是float64类型f2 := float32(1.23456) fmt.Printf("%T\n", f2) // 显示声明float32类型// f1 = f2 // float32类型的值不能直接赋值给float64类型的变量
}

复数

complex64和complex128

var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)

复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。

布尔值

Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)false(假)两个值。

注意:

  1. 布尔类型变量的默认值为false
  2. Go 语言中不允许将整型强制转换为布尔型.
  3. 布尔型无法参与数值运算,也无法与其他类型进行转换。
package mainimport "fmt"// 布尔类型func main(){b1 := truevar b2 bool // 默认是falsefmt.Printf("%T value:%v\n", b1, b1)fmt.Printf("%T value:%v\n", b2, b2)
}E:\go\src\github.com\qiaopengjun\day01\06bool>go build   E:\go\src\github.com\qiaopengjun\day01\06bool>06bool.exe
bool value:true
bool value:false
fmt占位符
package mainimport "fmt"// fmt占位符
func main(){var n = 100// 查看类型fmt.Printf("%T\n", n)fmt.Printf("%v\n", n)fmt.Printf("%b\n", n)fmt.Printf("%d\n", n)fmt.Printf("%o\n", n)fmt.Printf("%x\n", n)var s = "Hello 沙河!"fmt.Printf("字符串:%s\n", s)fmt.Printf("字符串:%v\n", s)fmt.Printf("字符串:%#v\n", s)}E:\go\src\github.com\qiaopengjun\day01\07fmt>go buildE:\go\src\github.com\qiaopengjun\day01\07fmt>07fmt.exe
int
100
1100100
100
144
64
Hello 沙河!
Hello 沙河!E:\go\src\github.com\qiaopengjun\day01\07fmt>go build  E:\go\src\github.com\qiaopengjun\day01\07fmt>07fmt.exe
int
100
1100100
100
144
64
字符串:Hello 中国!
字符串:Hello 中国!
字符串:"Hello 中国!"E:\go\src\github.com\qiaopengjun\day01\07fmt>

字符串

Go语言中的字符串以原生数据类型出现。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非ASCII码字符

GO语言中字符串是用双引号包裹的

GO语言中单引号包裹的是字符

// 字符串
s := "Hello 中国"
// 单独的字母、汉字、符合表示一个字符
c1 := 'h'
c2 := '1'
c3 := '中'
// 字节:1字节=8Bit(8个二进制位)
// 1个字符'A'=1个字节
// 1个utf8编码的汉字'中'= 一般占3个字节

字符串转义符

转义符 含义
\r 回车符(返回行首)
\n 换行符(直接跳到下一行的同列位置)
\t 制表符
\' 单引号
\" 双引号
\\ 反斜杠

字符串的常用操作

方法 介绍
len(str) 求长度
+或fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string, sep string) join操作
package mainimport ("fmt""strings"
)// 字符串func main(){// \ 本来是具有特殊含义的,告诉程序\就是一个单纯的\path := "\"E:\\36期Python全栈开发资料\\Administrator(8E5370323193)\\预习(2)\""path1 := "'E:\\36期Python全栈开发资料\\Administrator(8E5370323193)\\预习(2)'"fmt.Println(path)fmt.Println(path1)s := "I'm ok"fmt.Println(s)// 多行的字符串s2 := `世情薄人情恶雨送黄昏花易落`fmt.Println(s2)s3 := `E:\36期Python全栈开发资料\Administrator(8E5370323193)\预习(2)`fmt.Println(s3)// 字符串相关操作fmt.Println(len(s3))// 字符串拼接name := "理想"world := "远大"ss := name + worldfmt.Println(ss)ss1 := fmt.Sprintf("%s%s", name, world)// fmt.Printf("%s%s", name, world)fmt.Println(ss1)// 分割ret := strings.Split(s3, "\\")fmt.Println(ret)// 包含fmt.Println(strings.Contains(ss, "理想"))// 前缀fmt.Println(strings.HasPrefix(ss, "理想"))// 后缀fmt.Println(strings.HasSuffix(ss, "理想"))s4 := "abcded"fmt.Println(strings.Index(s4, "c"))fmt.Println(strings.LastIndex(s4, "c"))fmt.Println(strings.Index(s4, "d"))fmt.Println(strings.LastIndex(s4, "d"))// 拼接fmt.Println(strings.Join(ret, "+"))}

byte和rune类型

字符用单引号(’)包裹起来

Go 语言的字符有以下两种:

  1. uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
  2. rune类型,代表一个 UTF-8字符。rune类型实际是一个int32

字符串底层是一个byte数组,可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。

修改字符串

要修改字符串,需要先将其转换成[]rune[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。

类型转换

强制类型转换的基本语法如下:

T(表达式)

其中,T表示要转换的类型。表达式包括变量、复杂算子和函数返回值等.

package mainimport ("fmt"
)func main() {s := "Hello 中国"// len()求的是byte字节的数量n := len(s)fmt.Println(n)// for i := 0; i < len(s); i++ {//  fmt.Println(s[i])//  fmt.Printf("%c\n", s[i]) // %c:字符// }// 字符串修改s2 := "白萝卜" // [白 萝 卜]s3 := []rune(s2) // 把字符串强制转换成了一个rune切片s3[0] = '红' // 单引号表示字符fmt.Println(string(s3)) // 把rune切片强制转换成字符串c1 := "红"c2 := '红' // rune(int32)fmt.Printf("c1:%T c2:%T\n", c1, c2) // c1:string c2:int32c3 := "H"c4 := 'H'c5 := byte('H')fmt.Printf("c3:%T c4:%T\n", c3, c4) // c3:string c4:int32fmt.Printf("c4:%d\n", c4) // c4:72fmt.Printf("c5:%T\n", c5) // c5:uint8// 类型转换n1 := 10 // intvar f float64f = float64(n1)fmt.Println(f)fmt.Printf("%T\n", f) // float64}

总结

本文通过示例代码详细讲解了Go语言的基本数据类型及其应用,帮助开发者深入理解如何使用这些类型进行高效编程。通过对整型、浮点型、复数、布尔型和字符串等基本数据类型的分析,读者能够更加灵活地选择合适的类型来处理不同的数据和场景。此外,Go语言还提供了强大的类型转换机制,使得开发者能够在不同的数据类型之间进行转换,进一步提高代码的灵活性和可维护性。掌握这些基础知识将为深入学习Go语言和开发高效Go程序奠定坚实的基础。

🚀 我的个人博客网站正式上线啦!
欢迎大家访问 https://paxon.fun 🎉
博客名称:Paxon Qiao’s Tech Blog ---
未来我会在这里分享 Web3、区块链、编程等技术文章,敬请期待!🙏

🌐 欢迎访问并留言交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858676.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pycharm2024.3完整的安装教程(附激活,常见问题处理)

卸载老版本 Pycharm 首先,如果小伙伴的电脑上有安装老版本的Pycharm , 需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即可): TIP:如果你之前使用过本站提供的 激活到 2025 年版本脚本,需要执行对应卸载脚本 /适用2024版本/JetBrains 2023 最新全家桶/jetbra /…

搭建npm私有仓库——verdaccio

前言Verdaccio 是一个简单的、零配置要求的本地私有 npm 注册表。无需整个数据库即可开始!Verdaccio 开箱即用,带有自己的小型数据库,并且能够代理其他注册表(例如 npmjs.org),并在此过程中缓存下载的模块。对于那些希望扩展其存储功能的人,Verdaccio 支持各种社区制作的…

门店协作的未来:协作文档如何提升客户体验?

汽车销售是一种高竞争、高需求精细化管理的业务形态。门店销售团队不仅需要对接客户,还要实时反馈总部的策略与数据。如果销售流程中协同效率不足,往往会导致商机流失和客户满意度下降。协作文档工具的普及,为车企门店带来了全新解决方案。 车企门店销售面临的核心问题 在车…

功率器件的热设计基础(二)——热阻的串联和并联

功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计基础知识,才能完成精确热设计,提高功率器件的利用率,降低系统成本,并保证系统的可靠性。/ 前言 / 功率半导体热设计是实现IGBT、碳化硅SiC高功率密度的基础,只有掌握功率半导体的热设计…

视频分析设备平台EasyCVR关于未来监控系统可能会集成哪些新技术?

随着科技的飞速发展,监控系统正经历着一场革命性的变革。未来的监控系统将不再是单一的观察和记录工具,而是集成了多种前沿技术的智能平台,它们将极大地提高安全性、效率和响应速度。以下是未来监控系统可能集成的一些关键技术。1、人工智能技术 1)监控系统将越来越多地应用…

【亲测能用】专业音乐制作软件Ableton Live Suite v12.1.5 中文版(附安装教程)

软件介绍 在数字音频工作站(DAW)的领域中,Ableton Live以其创新和灵活性脱颖而出,成为全球音乐家和制作人的首选工具。由德国Ableton公司精心打造,这款软件不仅支持无缝的音乐播放和即时编辑,还提供了强大的音频效果和虚拟乐器,让音乐创作变得无限可能。 功能亮点 Ablet…

【测试侧】产品场景用例模板

产品的场景法用例设计的测试场景用例模板

宝藏推荐!J 人电商零售圣诞忙,哪 6 款办公软件能提升工作学习效能?

圣诞节的钟声敲响,电商零售行业瞬间陷入紧张而激烈的竞争漩涡。对于 J 人特质主导的电商团队而言,这不仅是一场销售大战,更是对团队协作与个人能力的严峻考验。在这关键时期,高效的办公软件犹如得力助手,能够帮助团队优化工作流程、提升沟通效率,实现工作与学习的双丰收。…

源码编译geoserver(idea)

官方教程:https://docs.geoserver.org/main/en/developer/quickstart/intellij.html从 git 存储库中检出源代码:git clone https://github.com/geoserver/geoserver.git geoserver列出可用的分支:% git branch2.21.x2.22.x* main选择main最新动态:% git checkout main或者为…

MFC中CBitmap、CBrush、CFont、CPalette、CPen、CRgn删除GDI对象问题

CBitmap、CBrush、CFont、CPalette、CPen、CRgn均继承自CGdiObject,CDI对象属于CGdiObject,在该类的析构函数中会释放,因此CBitmap、CBrush、CFont、CPalette、CPen、CRgn不必要显式调用DeleteObject()。如果GDI对象在在堆上分配的,则在特定时刻需要删除它,以便执行其析构…

【甲方安全】政府行业+80个威胁检测与安全事件分析场景(2025)

本篇幅详细梳理了 80 个在政企网络安全分析中常见的应用场景,这些场景涵盖了从攻击前兆(如漏洞扫描、情报收集)、攻击过程(如漏洞利用、横向移动)到攻击结果(如数据加密、信息泄露)的各个阶段,旨在协助 SOC 分析师们更好地构建主动防御体系。这些场景并非抽象概念,而是…

想自己做大模型备案的企业看过来【评估测试题+备案源文件】

大模型备案,大模型语料标注规则,大模型安全评估报告文章目录 (一)适用主体 (二)语料安全 (三)模型安全 (四)安全措施要求 (五)词库要求 (六)安全评估要求 (七)附录大模型备案材料源文件 2024年3月1日,我国通过了《生成式人工智能服务安全基本要求》(以下简称…