Go学习笔记
Go语言基础
标识符与关键字
标识符
- 在编程语言中标识符就是程序员定义的具有特殊意义的词, 比如 变量名、常量名、函数名等. Go语言中标识符由字母数据和
_
(下划线)组成,并且只能以字母和_
开头。比如Abc
、_Abc
、a123
关键字
关键字是指编程语言中预先定义了具有特殊含义的标识符。关键字和保留字都不建议用作变量名。
Go语言中有25个关键字:
|
|
- Go语言中的37个保留字:
|
|
变量
变量的含义: 程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。
变量类型: 变量 的功能是存储数据。不同的变量保存的数据类型可能会不一样。常见变量的数据类型有: 整型、浮点型、布尔型等。 Go语言中的每一个变量都有自己的类型,并且变量必须经过声明才能开始使用。
变量声明: Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。 并且Go语言的变量声明后必须使用, 否则会报错。
变量声明格式:
var 变量名 变量类型
, 函数外的变量声明必须都是以 var 开头进行声明。变量赋值:
var 变量名 变量类型 = 值
var 变量名1,变量名2 = 变量1的值, 变量2的值
。
|
|
常量
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var换成了const,常量在定义的时候必须赋值。
常量定义与赋值:
const 常量名 = 值
|
|
iota
关键字:iota
是go语言中的常量计数器, 只能在常量表达式中使用。iota
在const
关键字出现时将被重置为0。const
中每新增一行常量声明将使iota
计数一次(iota
可理解为const
语句块中的行索引)。 使用iota
能简化定义,在定义枚举时很有用。
|
|
iota
在常量使用_
(忽略)仍然会占用一位。
|
|
|
|
|
|
数据类型
- Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。
整型
- 整型分为以下两个大类: 按长度分为:
int8
、int16
、int32
、int64
对应的无符号整型:uint8
、uint16
、uint32
、uint64
其中,uint8
就是我们熟知的byte
型,int16
对应C语言中的short
型,int64
对应C语言中的long
型。
类型 | 描述 |
---|---|
int8 | 有符号 8位整型 (-128 到 127) |
int16 | 有符号 16位整型 (-32768 到 32767) |
int32 | 有符号 32位整型 (-2147483648 到 2147483647) |
int64 | 有符号 64位整型 (-9223372036854775808 到 9223372036854775807) |
uint8 | 无符号8位整型(0 到 255) |
uint16 | 无符号16位整型(0 到 65535) |
uint32 | 无符号32位整型(0 到 4294967295) |
uint64 | 无符号 64位整型 (0 到 18446744073709551615) |
特殊类型
int
,uint
在不同平台中有差异。
类型 | 描述 |
---|---|
uint | 32位操作系统上就是uint32,64位操作系统上就是uint64 |
int | 32位操作系统上就是int32,64位操作系统上就是int64 |
uintptr | 无符号整型,用于存放一个指针 |
- 获取对象的长度的内建
len()
函数返回的长度可以根据不同平台的字节长度进行变化。实际使用中,slice
切片或map
的元素数量等都可以用int
来表示。在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int
和uint
。
数字字面量语法(Number literals syntax)
- 数字字面量语法,便于开发者以二进制、八进制或十六进制浮点数的格式定义数字。
v := 0b00101101
, 代表二进制的 101101,相当于十进制的 45。v := 0o377
,代表八进制的 377,相当于十进制的 255。v := 0x1p-2
,代表十六进制的 1 除以 2²,也就是 0.25。 而且还允许我们用_
来分隔数字, 比如说:v := 123_456
等于 123456。
二进制、八进制和十六进制
二进制 以
0b
或0B
为前缀八进制 以
0o
或者0O
为前缀十六进制 以
0x
为前缀fmt
包中可转换成这类进制的值。
|
|
浮点型
- Go语言支持两种浮点型数:
float32
和float64
。这两种浮点型数据格式遵循IEEE 754标准:float32
的浮点数的最大范围约为 3.4e38, 可以使用常量定义:math.MaxFloat32
.float64
的浮点数的最大范围约为1.8e308
, 可以使用一个常量定义:math.MaxFloat64
。
|
|
复数
- 复数有实部和虚部,
complex64
的实部和虚部为32位,complex128
的实部和虚部为64位。
|
|
布尔类型
- Go语言中以
bool
类型进行声明布尔型数据,布尔型数据只有true
(真)和false
(假)两个值。 - 布尔类型变量的默认值为false。布尔类型不能进行数值运算,也无法与其他类型进行转换。
|
|
字符串(string)
- Go语言中的字符串以原生数据类型出现, 使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样. Go 语言里的字符串的内部实现使用UTF-8编码. 字符串的值为
双引号(")
中的内容, 可以在Go语言的源码中直接添加非ASCII码字符.
|
|
- 字符串转移 - Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。
转义符 | 含义 |
---|---|
\r | 回车符(返回行首) |
\n | 换行符(直接跳到下一行的同列位置) |
\t | 制表符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
|
|
- 多行字符串 - Go语言中要定义一个多行字符串时,就必须使用
反引号
字符
|
|
- 字符串常用操作
方法 | 介绍 |
---|---|
len(str) | 求长度 |
+或fmt.Sprintf | 拼接字符串 |
strings.Split | 分割 |
strings.contains | 判断是否包含 |
strings.HasPrefix ,strings.HasSuffix | 前缀/后缀判断 |
strings.Index() ,strings.LastIndex() | 子串出现的位置 |
strings.Join(a[]string, sep string) | join操作 |
|
|
byte 与 rune 类型
组成每个字符串的元素叫做“字符”, 可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号(’)包裹起来。
byte: 其实就是
uint8
类型,或者叫byte
型,代表了ASCII码的一个字符。rune: 其实就是
int32
类型, 代表一个 UTF-8 字符。
|
|
v1.4.14