首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go 语言中的基本数据类型

Go 语言中的基本数据类型

原创
作者头像
叫我阿杰好了
发布于 2025-06-15 11:30:08
发布于 2025-06-15 11:30:08
2150
举报
文章被收录于专栏:Go入门到入土Go入门到入土

这篇文章已经放到腾讯智能工作台的知识库啦,链接在这里:ima.copilot-Go 入门到入土。要是你有啥不懂的地方,就去知识库找 AI 聊一聊吧。

1、数值、浮点型、和字符类型

Go 语言提供了一套丰富的基础数据类型,主要可以分为三大类:布尔类型数值类型字符串类型。理解这些类型的特性和选择恰当的类型,对于编写高效、健壮的 Go 代码至关重要。

1、布尔类型 (Boolean)

布尔类型用于表示逻辑值,它只有两个可能的值:truefalse。这在所有编程语言中都非常基础和通用。

  • 关键字bool
  • truefalse (均为小写)

2、数值类型 (Numeric)

Go 语言的数值类型非常丰富,提供了多种大小和精度的选择,让开发者能在性能和内存占用之间做出精细的权衡。

2.1 整数类型 (Integer)

  • 有符号整数 (int):可以表示正数、负数和零。
    • int8: 占用 1 字节,范围 -128 到 127
    • int16: 占用 2 字节,范围 -32768 到 32767
    • int32: 占用 4 字节
    • int64: 占用 8 字节
  • 无符号整数 (uint):只能表示非负数(大于等于零)。
    • uint8: 占用 1 字节,范围 0 到 255
    • uint16: 占用 2 字节,范围 0 到 65535
    • uint32: 占用 4 字节
    • uint64: 占用 8 字节

选择合适的整数类型: 以表示“年龄”为例,年龄不可能是负数,且一般不会超过 255 岁。因此,使用 uint8 是最节省空间且最合适的选择。若使用 int8,则浪费了一半的表示范围来存储无意义的负数。

特殊的 intuint: 除了固定大小的整数类型,Go 还提供了 intuint 类型,它们的大小取决于目标平台的操作系统(32位或64位)。为方便起见,通常会使用 int,但当对内存或数值范围有精确要求时,应使用固定大小的类型。

严格的类型转换: Go 是一种强类型语言,不同类型的整数之间不能直接赋值,必须进行显式转换。

image.png
image.png

注意:从大范围类型向小范围类型转换时,可能会发生数据丢失(精度溢出)。

2.2 浮点数类型 (Floating-Point)

浮点数用于表示小数。

  • float32: 32位浮点数,精度较低。
  • float64: 64位浮点数,精度更高,是默认的小数类型。

它们的表示范围远大于整数类型,例如 float64 可以表示高达 1.8 x 10^308 的数值。

2.3 字符类型 (byterune)

Go 语言没有专门的 char 类型,而是用 byterune 来处理字符。

  • byte:
    • 它是 uint8别名,占用 1 个字节。
    • 主要用于表示 ASCII 字符(如英文字母、数字)。
    • 其本质是一个整数,可以直接进行数学运算。
image.png
image.png
image.png
image.png
  • rune: - 它是 int32别名,占用 4 个字节。 - 用于表示任意 Unicode 字符,包括中文、日文、韩文等。当你不确定要处理的字符范围时,rune 是更安全的选择。
image.png
image.png
image.png
image.png

3、字符串类型 (String)

字符串是字符的只读序列,在 Go 中使用 string 关键字定义。

  • 定义:使用双引号 "" 包裹。
  • 特性:字符串是不可变的,一旦创建,其内容不能被修改。
image.png
image.png

2、基本类型的装换

在 Go 语言中,数据类型转换是一项非常常见且重要的操作。由于 Go 提供了丰富的数值类型,并且拥有严格的类型系统,因此在不同类型之间传递数据时,必须进行显式转换。

1、数值类型之间的转换

在处理各种 intfloat 等数值类型时,转换过程非常直观。

1.1 整型与浮点型互转

不同数值类型之间的转换,无论是整型之间(如 int8int32),还是整型与浮点型之间,都使用 T(v) 的语法格式,其中 T 代表目标类型,v 是要转换的变量。

image.png
image.png

注意:将浮点型转换为整型时,小数部分会被直接舍弃(截断),而不是四舍五入。

1.2 类型别名与严格性

Go 允许使用 type 关键字为现有类型定义一个别名,这有助于提高代码的可读性。例如,byteuint8 的别名,runeint32 的别名。

当定义一个别名时,Go 会将其视为一个全新的、独立的数据类型。因此,即便是底层类型相同的变量,也必须进行显式转换。

image.png
image.png

Go 的这种严格类型检查机制,虽然要求开发者多写一些转换代码,但极大地增强了程序的健壮性和类型安全,避免了许多潜在的错误。

2、字符串与数字之间的转换

字符串与数字之间的转换是另一类常见的需求,这通常需要借助标准库 strconv 来完成。

2.1 字符串转数字

strconv.Atoi (ASCII to Integer) 函数用于将一个十进制字符串转换为 int 类型。由于字符串可能包含非数字字符,导致转换失败,因此该函数会返回两个值:转换后的结果和一个 error 对象。

在使用时,必须检查返回的 error 是否为 nil,以确保转换成功。

image.png
image.png
image.png
image.png

2.2 数字转字符串

strconv.Itoa (Integer to ASCII) 函数则用于将 int 类型转换为字符串。与 Atoi 不同,从整型到字符串的转换总是可以成功的,因此 Itoa 函数只返回一个转换后的字符串结果,不返回 error

image.png
image.png

掌握这些基本的类型转换方法是编写 Go 程序的基础。对于更复杂的转换场景,Go 标准库也提供了丰富的工具支持。

3、fromat 进行格式化转换

对于更复杂的场景,如不同进制、浮点数或需要格式化控制时,strconv 提供了功能更强大的 ParseFormat 系列函数。

1、Parse系列:字符串 -> 其他类型

Parse 系列函数用于将字符串解析为不同的数据类型,提供了比 Atoi 更丰富的控制选项。

  • ParseFloat: 将字符串解析为浮点数。
    • bitSize 参数指定了目标浮点数的位数(32 或 64)。
  • ParseInt: 将字符串解析为整数,可以指定进制。
    • base 参数指定了字符串的进制(2 到 36)。如果 base 为 0,则会根据字符串前缀(如 0x 为十六进制,0 为八进制)自动推断。
    • bitSize 指定了结果的整数类型(0, 8, 16, 32, 64 分别对应 int, int8, int16, int32, int64)。
  • ParseBool: 将字符串解析为布尔值。
    • 它能识别 "1", "t", "T", "true", "TRUE", "True" 为 true
    • 它能识别 "0", "f", "F", "false", "FALSE", "False" 为 false
image.png
image.png

2、Format系列:其他类型 -> 字符串

Format 系列函数是 Parse 的逆操作,它将不同的数据类型转换为字符串,并允许进行精细的格式化控制。

  • FormatFloat: 将浮点数转换为字符串。
    • fmt 参数是格式化字符(如 'f' 表示标准小数,'e' 表示科学计数法)。
    • prec 控制精度(小数位数)。
  • FormatInt: 将整数转换为指定进制的字符串。
    • base 参数指定目标进制(2 到 36)。
  • FormatBool: 将布尔值转换为字符串 "true" 或 "false"。
image.png
image.png

总结与选择

  • 简单场景: 当你只需要在十进制整数字符串之间进行转换时,strconv.Atoi()strconv.Itoa() 是最简洁、最常用的选择。
  • 复杂场景: 当你需要处理浮点数布尔值,或者需要在不同进制之间转换时,应使用功能更强大的 ParseFormat 系列函数。这些函数提供了必要的参数来精确控制转换过程和输出格式。

掌握这些类型转换方法是编写健壮、高效 Go 程序的基础。

4、运算符和表达式

Go 语言运算符和表达式

运算符是用于执行数据运算、赋值和比较的特殊符号。Go 语言的运算符与其他主流编程语言(如 C++ 或 Java)非常相似,理解它们是编写任何程序的基础。

1、算术运算符

算术运算符用于执行基本的数学运算。

运算符

描述

示例

+

相加

a + b

-

相减

a - b

*

相乘

a * b

/

相除

a / b

%

取余(取模)

a % b

++

自增

a++

--

自减

a--

注意

  • + 运算符也可用于拼接字符串。
  • ++-- 在 Go 中是语句,而不是表达式。因此,你不能写 c := a++ 这样的代码。
image.png
image.png

2、关系运算符

关系运算符用于比较两个值,其结果总是一个布尔值(truefalse)。

运算符

描述

==

等于

!=

不等于

>

大于

<

小于

>=

大于等于

<=

小于等于

3、逻辑运算符

逻辑运算符常用于组合多个关系表达式,其结果也是一个布尔值。

运算符

描述

&&

逻辑与 (AND),两者都为 true 时,结果为 true

||

左右条件任意一个为true ,结果即为true

!

逻辑非 (NOT),反转布尔值

image.png
image.png

4、位运算符

位运算符对整数在内存中的二进制位进行操作,常用于底层代码优化和数据处理,因为它们的执行效率非常高。

运算符

描述

&

按位与 (AND)

|

按位或(|)

^

按位异或 (XOR)

<<

左移

>>

右移

按位与 (&) 示例: 它会对两个数字的二进制表示的每一位进行比较,只有当两个相应的位都为 1 时,结果的该位才为 1。

例如,60 & 13 的计算过程如下:

  • 60 的二进制是 0011 1100
  • 13 的二进制是 0000 1101
  • 按位与的结果是 0000 1100,即十进制的 12
image.png
image.png

5、赋值运算符

赋值运算符用于给变量分配一个值。

运算符

等效于

=

a = b

+=

a = a + b

-=

a = a - b

*=

a = a * b

/=

a = a / b

%=

a = a % b

&=, |=

a = a & b ,a = a | b

<<=, >>=

按位左/右移赋值

image.png
image.png

6、其他运算符

Go 还有一些特殊的运算符,它们的功能会根据上下文发生变化。

运算符

描述

&

取地址运算符:当放在变量前时,返回该变量的内存地址。

*

指针运算符:当用在指针类型前时,获取该指针指向的变量的值。

image.png
image.png

这两个运算符与指针密切相关,我们将在后续的指针章节中详细讲解。

7、运算符优先级

当一个表达式中包含多个运算符时,会根据优先级来决定计算顺序。下表从高到低排列了运算符的优先级。

优先级

运算符

最高

^ !

* / % << >> &

+ - ` |

== != < <= > >=

&&

最低

,

在编写复杂表达式时,建议使用括号 () 来明确指定运算顺序,这能极大地提高代码的可读性。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Go语言知识查漏补缺|基本数据类型
学习Go半年之后,我决定重新开始阅读《The Go Programing Language》,对书中涉及重点进行全面讲解,这是Go语言知识查漏补缺系列的文章第二篇,前一篇文章则对应书中一二两章。
白泽z
2022/12/20
5530
Go语言知识查漏补缺|基本数据类型
Go 语言基础入门教程 —— 数据类型篇:基本数据类型之间的转化
通过前面几篇教程,我们已经陆续介绍完了 Go 语言中的基本数据类型,分别是布尔类型、整型、浮点型、复数类型、字符串和字符类型,和 PHP 一样,Go 语言也支持这些基本数据类型之间的转化,但是不是像 PHP 那种可以自动转化,比如下面这些语句在 PHP 中都是合法的:
学院君
2019/08/08
5510
Go 语言的基本数据类型
0)变量声明 var 变量名字 类型 = 表达式 例: var num int = 10 复制代码 其中“类型”或“= 表达式”两个部分可以省略其中的一个。 1)根据初始化表达式来推导类型信息 2)默认值初始化为0。 例: var num int // var num int = 0 var num = 10 // var num int = 10 复制代码 1)整型1.1)整型类型类型名称有无符号bit数 int8Yes8 int16Yes16 int32Yes32 int64Yes64 uint8
李海彬
2018/03/27
1.4K0
Go 语言学习之基础数据类型
整数类型按照有/无符号划分,可分为有符号整数和无符号整数,二者按照大小划分,有 8 位、16 位、32 位和 64 位:
frank.
2020/07/23
3950
Go基本数据类型
uintptr、int以及uint类型的值的尺寸依赖于具体编译器实现。 通常地,在64位的架构上,int和uint类型的值是64位的;在32位的架构上,它们是32位的。 编译器必须保证uintptr类型的值的尺寸能够存下任意一个内存地址。
宅蓝三木
2024/10/09
1060
Go语言学习3-基本数据类型
上一篇博文《基本词法》其实已经涉及到了数据类型的一些知识点。从本篇开始,将带大家仔细了解Go语言的数据类型。
huazie
2024/06/24
1630
Go语言学习3-基本数据类型
Go 数据类型篇(四):基本数据类型之间的转化
通过前面两篇教程,学院君已经介绍完了 Go 语言中的基本数据类型,分别是布尔类型、整型、浮点型、复数类型、字符串和字符类型,此外,Go 语言还支持这些基本数据类型之间的转化,不过由于 Go 是强类型语言,所以不支持动态语言那种自动转化,而是要对变量进行强制类型转化。
学院君
2023/03/03
6180
Go 数据类型篇(四):基本数据类型之间的转化
rust基本数据类型——标量类型
在rust里数据类型可以分为标量(scalar)和复合(compound)类型,标量类型代表一个单独的值。Rust 有四种基本的标量类型:整型、浮点型、布尔类型和字符类型。rust是静态强类型语言,它在编译时就需要知道所有变量的类型,并且不同类型的数据之间是不允许进行运算的。
zy010101
2022/12/20
1.2K0
Go语言中常用的基本数据类型
Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值。
极客运维圈
2020/03/23
1.3K0
go-基本数据类型和运算符
Go语言中的基本数据类型有: 整型、浮点型、布尔型、字符串、数组、切片、map、函数、结构体和通道(channel)等。
新人小试
2020/02/29
6600
分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03
    前文再续,Go lang和Python一样,基础数据类型有着很多分类,分门别类,一应俱全。它们对应着不同的使用场景,分别是:整形、浮点、字符、字符串、布尔等等。常用的基本数据类型经常会参与日常业务逻辑的运算、判断以及输入输出操作。
用户9127725
2022/08/08
3740
分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03
Go语言基础之基本数据类型
整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64 其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。
twelvecoder
2021/12/24
5790
Go 专栏|基础数据类型:整数、浮点数、复数、布尔值和字符串
Go 专栏的第三篇,本文内容依旧很基础,很简单。如果有编程经验的话,可能扫一眼就了然于胸了。但如果刚开始接触编程,建议还是好好看看,把文中的代码 demo 都自己跑一遍。只有基础打好了,才能向更高的目标迈进。
AlwaysBeta
2021/09/07
8950
Go 专栏|基础数据类型:整数、浮点数、复数、布尔值和字符串
一起来学Go --- (go的枚举以及数据类型)
枚举指一系列的相关的常量,比如下面关于一个星期的中每天的定义,通过上篇博文,我们可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在go语言中通常用于定义枚举值。go语言并不支持众多其他语言明确支持的enum关键字。
Wyc
2018/09/11
5950
Go语言学习系列——基础语法——【坚果派-红目香薰】
红目香薰
2025/03/06
1580
Go语言学习系列——基础语法——【坚果派-红目香薰】
Golang之旅3-基本数据类型
GO语言中的数据类型十分丰富,包含:整型、浮点型、布尔型,还有数组、切片、结构体、函数、map、通道chanel等
皮大大
2021/03/02
8620
go语言慢速入门——基本内置类型
表中特地强调了类型是否支持类型转换,这是因为go语言对类型要求是非常严格的,是真正的强类型语言。一个具体的例子如下所示:
zy010101
2022/07/27
5070
Python全网最全基础课程笔记(四)——基本数据类型
基本数据类型是Python中最基础的数据类型,它们用于存储单个值。Python中的基本数据类型包括:
小白的大数据之旅
2024/11/20
4740
Python全网最全基础课程笔记(四)——基本数据类型
Go 基础之基本数据类型
Go 语言整型可以分为平台无关整型和平台相关整型这两种,它们的区别主要就在,这些整数类型在不同 CPU 架构或操作系统下面,它们的长度是否是一致的。
贾维斯Echo
2023/10/18
6200
Go 基础之基本数据类型
Go 语言基本数据类型
注意: 在使用 int 和 uint 类型时,不能假定它是 32 位或 64 位的整型,而是考虑 int 和 uint可能在不同平台上的差异。
BUG弄潮儿
2024/01/22
1600
Go 语言基本数据类型
推荐阅读
相关推荐
Go语言知识查漏补缺|基本数据类型
更多 >
LV.0
山东有鸿信息技术有限公司架构师
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档