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

Go语言学习系列

在这里插入图片描述

引言

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

主要内容

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

名称宽度(字节)零值说明
bool1false布尔类型,真用常量true表示,假用常量false表示
byte10字节类型,可看作uint8的别名类型
rune40rune类型,专门存储Unicode编码,可看作uint32的别名类型
int/uint-0有符号整数类型/无符号整数类型,宽度与平台相关
int8/uint810由8位二进制数表示的有符号整数类型/无符号整数类型
int16/uint1620由16位二进制数表示的有符号整数类型/无符号整数类型
int32/uint3240由32位二进制数表示的有符号整数类型/无符号整数类型
int64/uint6480由64位二进制数表示的有符号整数类型/无符号整数类型
float3240.0由32位二进制数表示的浮点数类型
float6480.0由64位二进制数表示的浮点数类型
complex6480.0由64位二进制数表示的复数类型,float32类型的实部和float32类型的虚部联合表示
complex128160.0由128位二进制数表示的复数类型,float64类型的实部和float64类型的虚部联合表示
string-“”字符串类型(实质是字节序列)

1. 数值类型

宽度的含义

字节(byte)比特(bit)数值范围
18无符号 0 ~ 255,有符号 -128 ~ 127
216无符号0 ~ 65535,有符号-32768 ~ 32767
432无符号0 ~ 4294967295,有符号-2147483648 ~ 2147483647
864无符号 ≈ 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代码点说明
\aU+0007告警铃声或蜂鸣声
\bU+0008退格符
\fU+000C换页符
\nU+000A换行符
\rU+000D回车符
\tU+0009水平制表符
\vU+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

  • 12
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huazie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值