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

打印 上一主题 下一主题

主题 860|帖子 860|积分 2580

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)特殊整型

类型形貌uint32位操作系统上就是uint32,64位操作系统上就是uint64int32位操作系统上就是int32,64位操作系统上就是int64uintptr无符号整型,用于存放一个指针留意: 在利用int和 uint类型时,不能假定它是32位或64位的整型,而是思量int和uint可能在不同平台上的差异。
留意事项 获取对象的长度的内建len()函数返回的长度可以根据不同平台的字节长度进行变革。实际利用中,切片或 map 的元素数量等都可以用int来表现。在涉及到二进制传输、读写文件的结构形貌时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要利用int和 uint。
  1. package main
  2. import "fmt"
  3. // 整型
  4. func main()  {
  5. var i1 = 101
  6. fmt.Printf("%d\n", i1)
  7. fmt.Printf("%b\n", i1) // 把十进制转换成二进制
  8. fmt.Printf("%o\n", i1) // 把十进制转换成八进制
  9. fmt.Printf("%x\n", i1) // 把十进制转换成十六进x
  10. // 八进制
  11. i2 := 077
  12. fmt.Printf("%d\n", i2)
  13. // 十六进制
  14. i3 := 0x1234567
  15. fmt.Printf("%d\n", i3)
  16. // 查看变量的类型
  17. fmt.Printf("%T\n", i3)
  18. // 声明int8类型的变量
  19. i4 := int8(9)  // 明确指定int8类型,否则默认int类型
  20. fmt.Printf("%T\n", i4)
  21. }
复制代码
浮点型

Go语言支持两种浮点型数:float32和float64。这两种浮点型数据格式遵循IEEE 754标准: float32 的浮点数的最大范围约为 3.4e38,可以利用常量定义:math.MaxFloat32。 float64 的浮点数的最大范围约为 1.8e308,可以利用一个常量定义:math.MaxFloat64。
  1. package main
  2. import "fmt"
  3. // 浮点数
  4. func main(){
  5. // math.MaxFloat32 // float32最大值
  6. f1 := 1.23456
  7. fmt.Printf("%T\n", f1) // 默认Go语言中的小数都是float64类型
  8. }
  9. E:\go\src\github.com\qiaopengjun\day01\05float>go build
  10. E:\go\src\github.com\qiaopengjun\day01\05float>05float.exe
  11. float64
  12. package main
  13. import "fmt"
  14. // 浮点数
  15. func main(){
  16. // math.MaxFloat32 // float32最大值
  17. f1 := 1.23456
  18. fmt.Printf("%T\n", f1) // 默认Go语言中的小数都是float64类型
  19. f2 := float32(1.23456)
  20. fmt.Printf("%T\n", f2) // 显示声明float32类型
  21. // f1 = f2 // float32类型的值不能直接赋值给float64类型的变量
  22. }
复制代码
复数

complex64和complex128
  1. var c1 complex64
  2. c1 = 1 + 2i
  3. var c2 complex128
  4. c2 = 2 + 3i
  5. fmt.Println(c1)
  6. fmt.Println(c2)
复制代码
复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。
布尔值

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

  • 布尔类型变量的默认值为false。
  • Go 语言中不允许将整型逼迫转换为布尔型.
  • 布尔型无法参与数值运算,也无法与其他类型进行转换。
  1. package main
  2. import "fmt"
  3. // 布尔类型
  4. func main(){
  5. b1 := true
  6. var b2 bool // 默认是false
  7. fmt.Printf("%T value:%v\n", b1, b1)
  8. fmt.Printf("%T value:%v\n", b2, b2)
  9. }
  10. E:\go\src\github.com\qiaopengjun\day01\06bool>go build   
  11. E:\go\src\github.com\qiaopengjun\day01\06bool>06bool.exe
  12. bool value:true
  13. bool value:false
复制代码
fmt占位符
  1. package main
  2. import "fmt"
  3. // fmt占位符
  4. func main(){
  5. var n = 100
  6. // 查看类型
  7. fmt.Printf("%T\n", n)
  8. fmt.Printf("%v\n", n)
  9. fmt.Printf("%b\n", n)
  10. fmt.Printf("%d\n", n)
  11. fmt.Printf("%o\n", n)
  12. fmt.Printf("%x\n", n)
  13. var s = "Hello 沙河!"
  14. fmt.Printf("字符串:%s\n", s)
  15. fmt.Printf("字符串:%v\n", s)
  16. fmt.Printf("字符串:%#v\n", s)
  17. }
  18. E:\go\src\github.com\qiaopengjun\day01\07fmt>go build
  19. E:\go\src\github.com\qiaopengjun\day01\07fmt>07fmt.exe
  20. int
  21. 100
  22. 1100100
  23. 100
  24. 144
  25. 64
  26. Hello 沙河!
  27. Hello 沙河!
  28. E:\go\src\github.com\qiaopengjun\day01\07fmt>go build  
  29. E:\go\src\github.com\qiaopengjun\day01\07fmt>07fmt.exe
  30. int
  31. 100
  32. 1100100
  33. 100
  34. 144
  35. 64
  36. 字符串:Hello 中国!
  37. 字符串:Hello 中国!
  38. 字符串:"Hello 中国!"
  39. E:\go\src\github.com\qiaopengjun\day01\07fmt>
复制代码
字符串

Go语言中的字符串以原生数据类型出现。 Go 语言里的字符串的内部实现利用UTF-8编码。 字符串的值为双引号(")中的内容,可以在Go语言的源码中直接添加非ASCII码字符
GO语言中字符串是用双引号包裹的
GO语言中单引号包裹的是字符
  1. // 字符串
  2. s := "Hello 中国"
  3. // 单独的字母、汉字、符合表示一个字符
  4. c1 := 'h'
  5. c2 := '1'
  6. c3 := '中'
  7. // 字节:1字节=8Bit(8个二进制位)
  8. // 1个字符'A'=1个字节
  9. // 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操作
  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. // 字符串
  7. func main(){
  8. // \ 本来是具有特殊含义的,告诉程序\就是一个单纯的\
  9. path := ""E:\\36期Python全栈开发资料\\Administrator(8E5370323193)\\预习(2)""
  10. path1 := "'E:\\36期Python全栈开发资料\\Administrator(8E5370323193)\\预习(2)'"
  11. fmt.Println(path)
  12. fmt.Println(path1)
  13. s := "I'm ok"
  14. fmt.Println(s)
  15. // 多行的字符串
  16. s2 := `
  17. 世情薄
  18. 人情恶
  19. 雨送黄昏花易落
  20. `
  21. fmt.Println(s2)
  22. s3 := `E:\36期Python全栈开发资料\Administrator(8E5370323193)\预习(2)`
  23. fmt.Println(s3)
  24. // 字符串相关操作
  25. fmt.Println(len(s3))
  26. // 字符串拼接
  27. name := "理想"
  28. world := "远大"
  29. ss := name + world
  30. fmt.Println(ss)
  31. ss1 := fmt.Sprintf("%s%s", name, world)
  32. // fmt.Printf("%s%s", name, world)
  33. fmt.Println(ss1)
  34. // 分割
  35. ret := strings.Split(s3, "\")
  36. fmt.Println(ret)
  37. // 包含
  38. fmt.Println(strings.Contains(ss, "理想"))
  39. // 前缀
  40. fmt.Println(strings.HasPrefix(ss, "理想"))
  41. // 后缀
  42. fmt.Println(strings.HasSuffix(ss, "理想"))
  43. s4 := "abcded"
  44. fmt.Println(strings.Index(s4, "c"))
  45. fmt.Println(strings.LastIndex(s4, "c"))
  46. fmt.Println(strings.Index(s4, "d"))
  47. fmt.Println(strings.LastIndex(s4, "d"))
  48. // 拼接
  49. fmt.Println(strings.Join(ret, "+"))
  50. }
复制代码
byte和rune类型

字符用单引号(’)包裹起来
Go 语言的字符有以下两种:

  • uint8类型,大概叫 byte 型,代表了ASCII码的一个字符。
  • rune类型,代表一个 UTF-8字符。rune类型实际是一个int32
字符串底层是一个byte数组,可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表现utf8字符,一个rune字符由一个或多个byte组成。
修改字符串

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

逼迫类型转换的基本语法如下:
  1. T(表达式)
复制代码
此中,T表现要转换的类型。表达式包罗变量、复杂算子和函数返回值等.
  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. s := "Hello 中国"
  7. // len()求的是byte字节的数量
  8. n := len(s)
  9. fmt.Println(n)
  10. // for i := 0; i < len(s); i++ {
  11. //  fmt.Println(s[i])
  12. //  fmt.Printf("%c\n", s[i]) // %c:字符
  13. // }
  14. // 字符串修改
  15. s2 := "白萝卜" // [白 萝 卜]
  16. s3 := []rune(s2) // 把字符串强制转换成了一个rune切片
  17. s3[0] = '红' // 单引号表示字符
  18. fmt.Println(string(s3)) // 把rune切片强制转换成字符串
  19. c1 := "红"
  20. c2 := '红' // rune(int32)
  21. fmt.Printf("c1:%T c2:%T\n", c1, c2) // c1:string c2:int32
  22. c3 := "H"
  23. c4 := 'H'
  24. c5 := byte('H')
  25. fmt.Printf("c3:%T c4:%T\n", c3, c4) // c3:string c4:int32
  26. fmt.Printf("c4:%d\n", c4) // c4:72
  27. fmt.Printf("c5:%T\n", c5) // c5:uint8
  28. // 类型转换
  29. n1 := 10 // int
  30. var f float64
  31. f = float64(n1)
  32. fmt.Println(f)
  33. fmt.Printf("%T\n", f) // float64
  34. }
复制代码
总结

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表