数据类型
序号 | 类型和描述 |
---|---|
1 | 布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 |
2 | 数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。 |
3 | 字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。 |
4 | 派生类型: 包括:
|
数字类型
序号 | 类型和描述 |
---|---|
1 | uint8 无符号 8 位整型 (0 到 255) |
2 | uint16 无符号 16 位整型 (0 到 65535) |
3 | uint32 无符号 32 位整型 (0 到 4294967295) |
4 | uint64 无符号 64 位整型 (0 到 18446744073709551615) |
5 | int8 有符号 8 位整型 (-128 到 127) |
6 | int16 有符号 16 位整型 (-32768 到 32767) |
7 | int32 有符号 32 位整型 (-2147483648 到 2147483647) |
8 | int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
浮点型
序号 | 类型和描述 |
---|---|
1 | float32 IEEE-754 32位浮点型数 |
2 | float64 IEEE-754 64位浮点型数 |
3 | complex64 32 位实数和虚数 |
4 | complex128 64 位实数和虚数 |
其他数字类型
序号 | 类型和描述 |
---|---|
1 | byte 类似 uint8 |
2 | rune 类似 int32 |
3 | uint 32 或 64 位 |
4 | int 与 uint 一样大小 |
5 | uintptr 无符号整型,用于存放一个指针 |
变量: 全局变量、局部变量、形式参数
// 第一种声明变量方式: 指定变量类型,进行初始化或使用默认值var boolean1 bool // 声明单个变量 var num1, num2 int // 声明多个相同类型的变量// 第二种声明变量方式: 系统根据 值 自行判定变量类型var num4 = 5// 第三种声明变量方式: 省略 var,若 := 左侧未声明新的变量,则产生编译错误str3 := "u_u"
常量:类型仅可为 布尔型、数字型(整型、浮点型、复数型)、字符串型;多行字符串使用 `` 定义
- &variable :获取变量的内存地址,每个变量都拥有地址,指针的值就是地址。
- 已存在的变量,不可再对其使用初始化声明 :=
- 声明的局部变量必须在其代码块中使用,全局变量可不必
- `_` 空白标识符,用于抛弃值,是一个只写变量
运算符
算术运算符 | 描述 |
---|---|
+ | 相加 |
- | 相减 |
* | 相乘 |
/ | 相除 |
% | 求余 |
++ | 自增 |
-- | 自减 |
关系运算符 | 描述 |
---|---|
== | 检查两个值是否相等,如果相等返回 True 否则返回 False。 |
!= | 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 |
> | 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 |
< | 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 |
>= | 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 |
<= | 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 |
逻辑运算符 | 描述 |
---|---|
&& | 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 |
|| | 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 |
! | 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 |
赋值运算符 | 描述 |
---|---|
= | 简单的赋值运算符,将一个表达式的值赋给一个左值 |
+= | 相加后再赋值 |
-= | 相减后再赋值 |
*= | 相乘后再赋值 |
/= | 相除后再赋值 |
%= | 求余后再赋值 |
<<= | 左移后赋值 |
>>= | 右移后赋值 |
&= | 按位与后赋值 |
^= | 按位异或后赋值 |
|= | 按位或后赋值 |
其他运算符 | 描述 |
---|---|
& | 返回变量存储地址 |
* | 指针变量。 |
分支循环语句
if 语句
if condition { // do something } // condition 为 布尔类型
if-else 语句
if condition { // do something } else { // do something } // if 为真即成立,执行 if代码块;否则执行 else代码块
if-else if-else 语句
if condition1 { // do something } else if condition2 { // do something else }else { // catch-all or default }
if 的特殊姿势
if err := Connect(); err != nil { fmt.Println(err) return } // Connect() 为带有返回的函数,此条件先获取函数的返回值,再根据这个返回值进行判断
switch 语句
var a = "hello" switch a { case "hello": fmt.Println(1) case "world": fmt.Println(2) default: fmt.Println(0) }
// 一分支多值
var a = "mum" switch a { case "mum", "daddy": fmt.Println("family") } // 分支表达式 var r int = 11 switch { case r > 10 && r < 20: fmt.Println(r) }注意:
每个 switch 只能有一个 default 分支
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。
switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break。
switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough 。
select 语句
select { case communication clause : statement(s); case communication clause : statement(s); // 可以定义任意数量的 case default : // 可选 statement(s); } // select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。
- 每个 case 都必须是一个通信
- 所有 channel 表达式都会被求值
- 所有被发送的表达式都会被求值
- 如果任意某个通信可以进行,它就执行,其他被忽略。
- 如果有多个 case 都可以运行,Select 会随机公平地选出一个执行。其他不会执行。
否则:- 如果有 default 子句,则执行该语句。
- 如果没有 default 子句,select 将阻塞,直到某个通信可以运行;Go 不会重新对 channel 或值进行求值。
Go 没有三目运算符,所以不支持 ?: 形式的条件判断
for 循环
break 语句
continue 语句
goto 语句