【Go入门教程3】基本类型 和 高级类型

基本类型

Go 有很多预定义类型,这里简单地把它们分为 基本类型 和 高级类型。Go 的基本类型并不多,而且大部分都与整数相关,如下表所示:

名 称宽度(字节)零 值说 明
bool 1 false 布尔类型,其值不为真即为假。真用常量 true 表示,假由常量 false 表示
byte 1 0 字节类型,它也可以看作是一个由 8 位二进制数表示的无符号整数类型
rune 4 0 rune 类型,它是有 Go 语言定义的特有的数据类型,专用于存储 Unicode 字符。它也可以看作一个由 32 位二进制数表示的有符号整数类型
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 + 0.0i 由 64 位二进制数表示的复数类型,它由 float32 类型的实部 和 虚部 联合表示
complex128 16 0.0 + 0.0i 由 128 位二进制数表示的复数类型,它由 float64 类型的实部和虚部联合表示
string - "" 字符串类型。一个字符串类型表示了一个字符串值的集合。而一个字符串值实质上是一个字节序列。注意:字符串类型的值是不可变的,即一旦创建,其内容就不可改变

Go 的基本类型共有 18 个,其中 int 和 uint 的实际宽度会根据计算架构的不同而不同。在 386 计算架构下,它的宽度为 32 比特,即 4 字节。在 amd64 (有时也称为 x86-64)计算架构下,它们的宽度为 64 比特。即 8 字节。

byte 可以看作类型 uint8 的别名类型,而 rune 可以看作 int32 的别名类型。rune 类型专用于存储 Unicode 编码的 单个字符

我们可以用 5 种方式来表示一个 rune 字面量,具体如下:

1、该 rune 字面量所对应的字符,比如 'a'、'b'、'-',这个字符必须是 Unicode 编码规范所支持的。

2、使用“\x”为前导并后跟 2 位十六进制数,表示宽度为 1 字节的值,即一个 ASCII 编码值。

3、使用“\”为前导并后跟 3 位八进制数,这种表示法也只能表示有限宽度的值,即它只能用于表示在 0 和 255 之间的值。它与上一个表示法的表示范围是一致的。

4、使用“\u”为前导并后跟 4 位十六进制数,它只能用于表示 2 字节宽度的值。

5、使用“\U”为前导并后跟 8 位十六进制数,它只能用于表示 4 字节宽度的值,这种方式即为 Unicode 编码规范中的 UCS-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 字面量中有效

除了上述转义符外,ruen 字面量中以 “\”为前导的字符序列都是不合法的。

在 Go 中,字符串值 表示了一个字符值的集合。在底层,一个字符串值即一个包含了若干字节的序列。长度为 0 的序列与一个空字符串相对应。字符串的长度即底层字符序列中字节的个数。一个字符串字面量的长度在编译期间就能够确定。字符串字面量有 2 种表示形式:原生字符串字面量(由反引号“·”包裹)和 解释型字符串字面量(由双引号“"”包裹)。前者所见即所得,而后者则可以解析转义字符。

注意:字符串值 是不可变的!我们不可能改变一个字符串的内容。对字符串的操作只返回一个新字符串,而不会改变原字符串并返回。

只有基本类型及其别名类型才可以作为 常量的类型。常量的声明会用到关键字 const。单一常量声明一般由关键字 const、常量名、常量类型、符号= 和 常量值 组成。下面是 2 个常量的声明:

const DEFAULT_IP string = "192.168.0.1"
const DEFAULT_PORT int = 9001

像这样多个常量同时声明还可以简写成:

const (
    DEFAULT_IP string = "192.168.0.1"
    DEFAULT_PORT int = 9001
)

注意:Go 官方的命名规范中指出常量的命名要用驼峰法。但是,我认为常量的命名应该使用大小写一致的单词,且多个单词时用下划线进行分割,这样才能从名称上快速区分常量和变量。

高级类型

Go 的基本数据类型都完整地确认了类型的方方面面。而其高级数据类型却不同,它们是为用户自定义自己的数据类型而服务的。比如,我们可以通过制定 元素类型 和 长度 来形成一个确切的数组类型,也可以通过指定键类型和元素类型来形成一个确切的字典类型,等待。Go 的高级数据类型相当于自定义数据类型的模板或制作工具。

数组切片字典函数方法

更详细的介绍,请查看

http://www.cnblogs.com/52php/p/6044873.html

 

 

摘自:《Go并发编程实战(第2版)》

posted @ 2017-05-22 18:20  52php  阅读(352)  评论(0编辑  收藏  举报