当前位置: 首页 > news >正文

Go语言数据类型实例讲解 - Go语言从入门到实战

Go语言数据类型实例讲解 - Go语言从入门到实战

基础数据类型

bool
string	
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte
rune
float32 float64
complex64 complex128
类型描述
bool布尔型(bool):可以是true或false。
string字符串类型:表示文本数据。
int整型:根据平台不同,可以是32位或64位。
int88位整型:取值范围为-128到127。
int1616位整型:取值范围为-32768到32767。
int3232位整型:取值范围为-2147483648到2147483647。
int6464位整型:取值范围为-9223372036854775808到9223372036854775807。
uint无符号整型:根据平台不同,可以是32位或64位。
uint88位无符号整型:取值范围为0到255。
uint1616位无符号整型:取值范围为0到65535。
uint3232位无符号整型:取值范围为0到4294967295。
uint6464位无符号整型:取值范围为0到18446744073709551615。
uintptr用于保存指针的无符号整型。
byteuint8的别名。
runeint32的别名,代表一个Unicode编码点。
float3232位浮点数类型。
float6464位浮点数类型。
complex6464位复数类型,由两个32位浮点数表示实部和虚部。
complex128128位复数类型,由两个64位浮点数表示实部和虚部。

类型转换

与其他主要编程语言的差异

  1. Go语言不允许隐式类型转换
  2. 别名和原有类型也不能进行隐式类型转换
package main  import "testing"  func TestType(t *testing.T) {  var a int = 1  var b int64 = 2  // 这行代码会编译错误,因为无法完成从int到int64的隐式转换, 不允许将一个int类型的变量a赋值给int64类型的变量b。必须显式地将a转换为int64类型,才能赋值给b。// b = a  // 必须显式转换类型  b = int64(a)  t.Log(a, b)  
}

类型的预定义值

  1. math.MaxInt64:这是int64类型的最大值,即9223372036854775807。
  2. math.MaxFloat64:这是float64类型的最大值,即1.8e308。
  3. math.MaxUint32:这是uint32类型的最大值,即4294967295。

这些值是在math包中定义的,它们可以用于比较和限制数值的范围,以防止溢出或下溢。

指针类型

Go语言指针主要包含两个重要概念:指针和切片

  1. 指针:
    • 指针是Go语言中的一种特殊数据类型,它存储了一个变量的内存地址。通过使用指针,可以直接访问指向的内存地址上的值。
    • 传递指针可以避免数据拷贝,提高性能。当传递大型数据结构时,使用指针可以避免将数据整体复制到函数栈上,而是直接操作原始数据。
    • 可以使用指针来修改所指向的值。通过指针访问并修改内存地址上的值,会影响到原始变量的值。
    • 类型指针是指向特定类型变量的指针。类型指针不能进行算术运算或偏移操作,只能与nil进行比较。
  2. 切片:
    • 切片是对数组的一个引用,它包含了指向数组起始元素的指针、切片长度和切片容量。切片长度是切片中元素的数量,切片容量是从起始元素到底层数组的最后一个元素的数量。
    • 切片比使用原始指针更安全,因为它具有内置的长度和容量检查。当尝试访问超出切片长度的索引时,Go语言会抛出运行时错误(panic),并显示堆栈信息,有助于调试。而使用原始指针时,越界访问可能导致程序崩溃,导致不会提供详细的错误信息。
    • 切片是动态长度的,可以根据需要增长或缩小。这使得切片非常适合用于处理可变长度的数据序列。

与其他主要编程语言的差异

  1. 不支持指针运算,不能通过增加或减少指针的值来访问内存中的其他位置。
  2. string是值类型,其默认的初始化值为空字符串,而不是nil。在Go语言中,字符串是一种值类型,当创建一个字符串变量时,它会在内存中有一个具体的值。
package type_testimport "testing"type MyInt int64func TestPoint(t *testing.T) {a := 1aPtr := &a	//创建了一个指向a的指针aPtr//aPtr = aPtr + 1t.Log(a, aPtr)t.Logf("%T %T", a, aPtr)	//打印它们的类型
}func TestString(t *testing.T) {var s stringt.Log("*" + s + "*") //初始化零值是“”t.Log(len(s))	//s的值为默认的空字符串。打印s的长度,应为0。}

学习Go语言主要是多练,多找些代码段写写,不懂可以私聊咨询。

欢迎关注云尔Websites CSDN博客

欢迎进入Golang交流社区

http://www.lryc.cn/news/179149.html

相关文章:

  • RocketMQ 事务消息发送
  • 后端-POST请求中只需要两个参数,后端不想创建对象时
  • UG\NX二次开发 通过点云生成曲面 UF_MODL_create_surf_from_cloud
  • Linux常用指令(二)
  • 【HUAWEI】单臂路由
  • 安全学习_开发相关_Java第三方组件Log4jFastJSON及相关安全问题简介
  • 零代码编程:用ChatGPT批量自动下载archive.org上的音频书
  • 力扣用队列实现栈
  • 一朵华为云,如何做好百模千态?
  • 华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker
  • 小程序编译器性能优化之路
  • FFmpeg 命令:从入门到精通 | ffmpeg 命令分类查询
  • Linux学习记录——삼십일 socket编程---TCP套接字
  • 【学习笔记】深度学习分布式系统
  • 【数据结构】树、二叉树的概念和二叉树的顺序结构及实现
  • rust学习-string
  • No167.精选前端面试题,享受每天的挑战和学习
  • 【python】pycharm导入anaconda环境
  • 【数据结构】逻辑结构与物理结构
  • HTML5高级部分
  • 浏览器输入 URL 并回车发生了什么
  • asp.net core mvc 文件上传,下载,预览
  • Axios有哪些常用的方法?
  • PL/SQL+cpolar公网访问内网Oracle数据库
  • stable diffusion和gpt4-free快速运行
  • 分享三个国内可用的免费GPT-AI网站
  • 使用SDKMAN在Linux系统上安装JDK
  • MySQL(8) 优化、MySQL8、常用命令
  • 前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(三)
  • 嵌入式汇编大合集