其实前面已经涉及到了数据类型的一些知识点。从本篇开始,将带你们仔细了解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 | - | "" | 字符串类型(实质是字节序列) |
宽度的含义框架
字节(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亿亿 |
下面一块儿来看以下示例:ide
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编码的字符。ui
能够用以下的5种方式表示一个rune字面量:编码
- 该rune字面量所对应的字符,这个字符必须是Unicode编码规范所支持的。
- 使用“\x”为前导并后跟两位十六进制数。这种能够表示一个ASCII编码值(一个字节)。
- 使用“\”为前导并后跟三位八进制。这种也是能够表示一个ASCII编码值(一个字节)。
- 使用“\u”为前导并后跟四位十六进制。Unicode编码规范中的UCS-2表示法(将会废止),只能用于表示2个字节宽度的值。
- 使用“\U”为前导并后跟八位十六进制。Unicode编码规范中的UCS-4表示法。可用于表示4个字节的值。
rune字面量能够支持一类特殊的字符序列------转义符(除了最后一个特殊)以下所示:code
转义符 | 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字面量中出现。字符串
在Go语言中,字符串类型属于预约义类型,表明了一个字符串值的集合。在底层,一个字符串值便是一个字节的序列。字符串的长度便是底层字节序列中字节的个数。长度为0的序列与一个空字符串相对应。get
字符串字面量(或者说是字符串常量)表明了一个连续的字符序列,它的长度在编译期间就能肯定。它有两种表示格式:编译器
1.原生字符串字面量string
它是在两个反引号 ` 之间的字符序列。在两个反引号之间,除了反引号以外的其余字符都是合法的。在两个反引号之间的内容是由若干在编译期间就能够肯定的字符组成。在原生字符串字面量中,不存在任何转义符,所见既所得。另外,其中的回车符会被编译器移除。
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。