Go语言学习3-基本数据类型

简介: 本篇介绍 Go 语言的基本数据类型

18a325e136e34114b15a6d2caa5b02de.jpeg

引言

上一篇博文《基本词法》其实已经涉及到了数据类型的一些知识点。从本篇开始,将带大家仔细了解Go语言的数据类型。

主要内容

Go语言基本数据类型一览表,如下所示:

名称 宽度(字节) 零值 说明
bool 1 false 布尔类型,真用常量true表示,假用常量false表示
byte 1 0 字节类型,可看作uint8的别名类型
rune 4 0 rune类型,专门存储Unicode编码,可看作uint32的别名类型
int/uint - 0 有符号整数类型/无符号整数类型,宽度与平台相关
int8/uint8 1 0 由8位二进制数表示的有符号整数类型/无符号整数类型
int16/uint16 2 0 由16位二进制数表示的有符号整数类型/无符号整数类型
int32/uint32 4 0 由32位二进制数表示的有符号整数类型/无符号整数类型
int64/uint64 8 0 由64位二进制数表示的有符号整数类型/无符号整数类型
float32 4 0.0 由32位二进制数表示的浮点数类型
float64 8 0.0 由64位二进制数表示的浮点数类型
complex64 8 0.0 由64位二进制数表示的复数类型,float32类型的实部和float32类型的虚部联合表示
complex128 16 0.0 由128位二进制数表示的复数类型,float64类型的实部和float64类型的虚部联合表示
string - "" 字符串类型(实质是字节序列)

1. 数值类型

宽度的含义

字节(byte) 比特(bit) 数值范围
1 8 无符号 0 ~ 255,有符号 -128 ~ 127
2 16 无符号0 ~ 65535,有符号-32768 ~ 32767
4 32 无符号0 ~ 4294967295,有符号-2147483648 ~ 2147483647
8 64 无符号 ≈ 0 ~ 1844亿亿,有符号 ≈ -922亿亿 ~ 922亿亿

我们来看看如下的例子:

12E+2    //浮点数字面量,代表浮点数 1200.0(12乘以10的2次方)
12e-3    //浮点数字面量,代表浮点数 0.012(12除以10的3次方)
1200.0     //浮点数字面量,可以被简写为 1200
0.012      //浮点数字面量,可以被简写为 .012
//浮点数字面量中的各个部分只能由十进制表示,而不能由八进制数和十六进制数表示
//浮点数字面量 056.78 和 56.78 都代表浮点数 56.78
12e+2 + 43.4e-3i //复数字面量,代表了复数 1200+0.0434i
0.1i        //复数字面量,代表了复数 0+0.1i
1E3        //这里可以是复数字面量,代表了复数 1000+0i

Go语言的一个特有的数值类型rune,专门用于存储经过 Unicode 编码的字符。

可以用如下的5种方式表示一个rune字面量:

  1. 该rune字面量所对应的字符,这个字符必须是 Unicode 编码规范所支持的。
  2. 使用 \x 为前导并后跟两位十六进制数。这种可以表示一个 ASCII 编码值(一个字节)。
  3. 使用 \ 为前导并后跟三位八进制。这种也是可以表示一个 ASCII 编码值(一个字节)。
  4. 使用 \u 为前导并后跟四位十六进制。Unicode 编码规范中的 UCS-2 表示法(将会废止),只能用于表示2个字节宽度的值。
  5. 使用 \U 为前导并后跟八位十六进制。Unicode 编码规范中的 UCS-4 表示法。可用于表示 4 个字节的值。

rune 字面量可以支持一类特殊的字符序列------转义符(除了最后一个特殊)如下所示:

转义符 Unicode代码点 说明
\a U+0007 告警铃声或蜂鸣声
\b U+0008 退格符
\f U+000C 换页符
\n U+000A 换行符
\r U+000D 回车符
\t U+0009 水平制表符
\v U+000B 垂直制表符
\\ U+005C 反斜杠
\' U+0027 单引号。仅在 rune 字面量中有效。
\" U+0022 双引号。仅在 string 字面量中有效。

注意:rune 字面量中,除了在上面表格中出现的转义符之外的以 \ 为前导的字符序列都是不合法的。当然,上表中的转义符 \" 也不能在 rune 字面量中出现。

2. 字符串类型

在Go语言中,字符串类型属于预定义类型,代表了一个字符串值的集合。在底层,一个字符串值即是一个字节的序列。字符串的长度即是底层字节序列中字节的个数。长度为0的序列与一个空字符串相对应。

字符串字面量(或者说是字符串常量)代表了一个连续的字符序列,它的长度在编译期间就能确定。它有两种表示格式:

1.原生字符串字面量
: 它是在两个反引号 ` 之间的字符序列。在两个反引号之间,除了反引号之外的其他字符都是合法的。在两个反引号之间的内容是由若干在编译期间就可以确定的字符组成。在原生字符串字面量中,不存在任何转义符,所见既所得。另外,其中的回车符会被编译器移除。

2.解释型字符串字面量
: 它是在两个双引号 " 之间的字符序列。在解释型字符串中的转义字符都是会被成功转义。

在字符串字面量中,转义符 \' 是不合法的,而转义符 \” 却是合法的。这与 rune 字面量刚好相反,但在字符串字面量中可以包含 rune 字面量。例如。在解释型字符串字面量中,rune 字面量'\101''\x41' 都代表了单字节字符 "A"(单字节字符就是经过 UTF-8 编码格式编码后的字节序列的大小为1的字符);而 rune 字面量 '\u4E00''\U00004E00' 都与 Unicode 字符 "一" 相对应。中文字符 "一"Unicode 代码点为 U+4E00,它会被UTF-8 编码格式编码为3个字节,即 "\xE4\xB8\x80"

字符串字面量与 rune 字面量的 本质区别 是所代表的 Unicode 字符的数量。rune 字面量仅用于代表一个 Unicode 字符,无论这个字符会被 UTF-8 编码格式编码为几个字节,而字符串字面量则用于代表一个由若干个 Unicode 字符组成的序列。

注意: 字符串值是不可变的,对字符串的操作只会返回一个新字符串,而不是改变源字符串并返回。

结语

以上讲解了Go语言的基本数据类型,由于篇幅过多,其他类型放到后续博文中讲解。

最后附上知名的Go语言开源框架(每篇更新一个):

Gogs: 一个国产的自助Git托管服务程序。我们可以用它来搭建自己的Git服务器。官网:https://gogs.io

目录
相关文章
|
11天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
52 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
41 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
102 71
|
30天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
106 67
|
1月前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
102 62
|
1月前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
6天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
34 12
|
1月前
|
存储 Go
go语言中映射
go语言中映射
38 11
|
1月前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
37 12