模块 1 · 第 4 课(共 5)课程中的4/50~8 min
模块课程(4/5)
运营商
Go 拥有您所期望的经典运算符,几乎没有什么惊喜:
算术、比较、逻辑、按位。没有三元运算符
(a ? b : c),没有重载,没有类型之间的隐式转换。
简单是一个特点。
算术
Go
a, b := 10, 3
fmt.Println(a + b) // 13
fmt.Println(a - b) // 7
fmt.Println(a * b) // 30
fmt.Println(a / b) // 3 ← divisione INTERA tra interi
fmt.Println(a % b) // 1 ← resto (modulo)自增和自减是语句,而不是表达式
x++ 和 x-- 不会产生值:它们是“操作”,什么也没有
更多。没有像 C 中那样的 y := x++ 。
Go
x := 5
x++ // ok: incrementa x
// y := x++ // ERRORE di compilazione
fmt.Println(x) // 6比较
== != < <= > >= 返回bool。它们适用于数字和字符串;为了
结构的所有字段必须是可比较的(内部没有切片/映射)。
Go
"abc" == "abc" // true
"abc" < "abd" // true (ordine lessicografico)
3 != 4 // true逻辑与短路
&&、||、!。他们从左到右短路:如果第一个
操作数足以确定结果,第二个不是偶数
评价。
Go
adult := age >= 18
seniorAdult := age >= 18 && age < 65按位
& AND、| OR、^ XOR、<< 左移、>> 右移、&^ AND
不是(有点清楚)。它们对于标志、二进制解析和
优化:
Go
flags := uint8(0b0000_0011)
flags |= 0b0000_0100 // imposta un bit: 0000_0111
flags &^= 0b0000_0010 // cancella un bit: 0000_0101
hasFlag := flags & 0b0000_0100 != 0 // true没有隐式转换
Go 中的 1 + 1.5 可以编译,因为两者都是无类型文字。
但 var i int = 1; i + 1.5 不:您需要 float64(i) + 1.5。
Go
i := 1
f := 1.5
// i + f // ERRORE
float64(i) + f // 2.5轮到你了
锻炼#go.m1.l4.e1
尝试:0加载中...
计算 17 除以 5 的余数并打印出来。预计:2。
正在加载编辑器...
显示提示
模运算符是“%”。
3 次尝试后可用的解决方案
锻炼#go.m1.l4.e2
尝试:0加载中...
如果年龄在 18 岁到 65 岁之间,则打印 true,否则打印 false。
正在加载编辑器...
显示提示
用“&&”组合两个比较。
3 次尝试后可用的解决方案
Quiz#go.m1.l4.e3
准备好这段代码打印什么?
Go
a, b := 7, 2
fmt.Println(a/b, a%b)回顾
- 经典算术; int 之间的
/是整数除法(截断)。 ++和--是语句,而不是表达式:无y := x++。- 比较和逻辑运算符产生
bool;&&/||短路。 - 按位
& | ^ << >> &^用于标志和二进制解析。 - 不同类型之间没有隐式转换:使用
type(x)。