Go 语言变量
变量声明
使用var关键字,格式:var xxx type
1,var v int
v = 1
2,自行判断变量类型 var v = 1
3,省略var,注意:=(声明语句)左侧如果没有生成新的变量,就产生编译错误,格式:v := 1
例如:var v int
v := 1 //编译错误
v, v1 := 1, 2 //正确,因为有新变量v1,因为 := 是一个声明语句
4,多变量声明
类型相同的多个变量,非全局变量
(a) var v, v1, v2 int
v, v1, v2 = 1, 2, 3
(b) var v, v1, v2 = 1, 2, 3
(c) v, v1, v2 := 1, 2, 3
// 这种因式分解关键字的写法一般用于声明全局变量
var (
vname1 v_type1
vname2 v_type2
)
iota
iota,特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
Go 语言运算符
Go的运算符和C++等语言基本一致,这里简单回顾一下运算符优先级即可。
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
优先级 | 运算符 |
---|---|
7 | ^ ! |
6 | * / % << >> & &^ |
5 | + - | ^ |
4 | == != < <= >= > |
3 | <- |
2 | && |
1 | || |
Go 语言条件语句
if、if...else等都一样,这里简短说一下Go特有的select语句。
select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。
以下描述了 select 语句的语法:
- 每个case都必须是一个通信
- 所有channel表达式都会被求值
- 所有被发送的表达式都会被求值
- 如果任意某个通信可以进行,它就执行;其他被忽略。
- 如果有多个case都可以运行,Select会随机公平地选出一个执行。其他不会执行。
否则:- 如果有default子句,则执行该语句。
- 如果没有default字句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值。