运算符的优先级
算术运算符

a % b = a - (a/b) * b
// 参与运算的数都是int类型,结果也就是int类型,小数部分舍去, 保留整数部分var n = 10 / 4fmt.Printf("%T %v", n, n) // int 2// 如果需要保留小数部分,则需要浮点数参与运算var n = 10.0 / 4fmt.Printf("%T %v", n, n) // float64 2.5var n float64 = 10 / 4fmt.Printf("%T %v", n, n) // float64 2// % 取模var n1 = 10 % 3fmt.Printf("%T %v \n", n1, n1) // int 1// 公式: a % b = a - (a/b) * bvar n1 = -10 % 3// -10 - (-3) * 3 = -10 - (-9) = -1fmt.Printf("%T %v \n", n1, n1) // int -1var n2 = 10 % -3fmt.Printf("%T %v \n", n2, n2) // int 1var n3 = -10 % -3fmt.Printf("%T %v \n", n3, n3) // int -1// ++ --// 只能独立使用// 只能写在变量后面 i++ i--var i int = 10var a inti++ // ++ -- 只能独立使用, a = i++ 报错, 因为golang会自动在一行语句后面添加 ; 分号a = ifmt.Printf("%T %v", a, a)if i++ > 10 { // 报错}// Golang的设计者,去掉c/java中自增自减容易混淆的写法,让Go更见简洁统一 ^v^
赋值运算符
赋值运算符就是将某个运算后的值,赋给指定变量

func test() int {return 10}func main() {fmt.Println(model.Name)// 交换变量的值, 不使用中间变量// a = 9, b = 2 => a = 2, b = 9a := 9b := 2a = a + bb = a - b // b = aa = a - b // a = bfmt.Printf("a=%T %v \n", a, a)fmt.Printf("b=%T %v \n", b, b)var n intn = test() + 2 // 右边可以是表达式fmt.Printf("n=%T %v \n", n, n)}
比较运算符/关系运算符
关系运算符的结果都是bool型,要么是true,要么是false
关系表达式经常用在 if结构 或者 for循环结构
var n1 int = 9var n2 int = 8var res = n1 > n2fmt.Printf("%T %v \n", res, res) // bool true
逻辑运算符
用于连接多个条件(一般来讲就是关系表达式),最终结果也是一个bool值
短路与
短路或
// 与、或、非var age int = 20if age > 18 && age < 30 {fmt.Println("小伙纸")}if age > 70 || age < 10 {fmt.Println("老夫或者是小盆友")}if !(age > 50) {fmt.Println("钢铁侠")}// 短路与, 短路或// 声明一个函数func testfn() bool {fmt.Println("==^v^==")return true}func main() {fmt.Println(model.Name)var i int = 10if i < 9 && testfn() { // (i > 9 && testfn()) (i < 9 || testfn())fmt.Printf("%T %v", i, i)}}
位运算符
二进制运算
查看计算机底层知识
其它运算符
Go语言不支持三目运算
使用 if … else …
a1 := 100fmt.Println("a1的地址:", &a1) // a1的地址: 0xc0000140d0var ptr *int = &a1fmt.Println("ptr指向的值是:", *ptr) // ptr指向的值是: 100
