运算符是一种特殊的符号,用于表示数据的运算、赋值、比较等

运算符的优先级

image.png

算术运算符

image.png
a % b = a - (a/b) * b

  1. // 参与运算的数都是int类型,结果也就是int类型,小数部分舍去, 保留整数部分
  2. var n = 10 / 4
  3. fmt.Printf("%T %v", n, n) // int 2
  4. // 如果需要保留小数部分,则需要浮点数参与运算
  5. var n = 10.0 / 4
  6. fmt.Printf("%T %v", n, n) // float64 2.5
  7. var n float64 = 10 / 4
  8. fmt.Printf("%T %v", n, n) // float64 2
  9. // % 取模
  10. var n1 = 10 % 3
  11. fmt.Printf("%T %v \n", n1, n1) // int 1
  12. // 公式: a % b = a - (a/b) * b
  13. var n1 = -10 % 3
  14. // -10 - (-3) * 3 = -10 - (-9) = -1
  15. fmt.Printf("%T %v \n", n1, n1) // int -1
  16. var n2 = 10 % -3
  17. fmt.Printf("%T %v \n", n2, n2) // int 1
  18. var n3 = -10 % -3
  19. fmt.Printf("%T %v \n", n3, n3) // int -1
  20. // ++ --
  21. // 只能独立使用
  22. // 只能写在变量后面 i++ i--
  23. var i int = 10
  24. var a int
  25. i++ // ++ -- 只能独立使用, a = i++ 报错, 因为golang会自动在一行语句后面添加 ; 分号
  26. a = i
  27. fmt.Printf("%T %v", a, a)
  28. if i++ > 10 { // 报错
  29. }
  30. // Golang的设计者,去掉c/java中自增自减容易混淆的写法,让Go更见简洁统一 ^v^

赋值运算符

赋值运算符就是将某个运算后的值,赋给指定变量
image.png
image.png

  1. func test() int {
  2. return 10
  3. }
  4. func main() {
  5. fmt.Println(model.Name)
  6. // 交换变量的值, 不使用中间变量
  7. // a = 9, b = 2 => a = 2, b = 9
  8. a := 9
  9. b := 2
  10. a = a + b
  11. b = a - b // b = a
  12. a = a - b // a = b
  13. fmt.Printf("a=%T %v \n", a, a)
  14. fmt.Printf("b=%T %v \n", b, b)
  15. var n int
  16. n = test() + 2 // 右边可以是表达式
  17. fmt.Printf("n=%T %v \n", n, n)
  18. }

比较运算符/关系运算符

关系运算符的结果都是bool型,要么是true,要么是false
关系表达式经常用在 if结构 或者 for循环结构
image.png

  1. var n1 int = 9
  2. var n2 int = 8
  3. var res = n1 > n2
  4. fmt.Printf("%T %v \n", res, res) // bool true

逻辑运算符

用于连接多个条件(一般来讲就是关系表达式),最终结果也是一个bool值
image.png
短路与
短路或

  1. // 与、或、非
  2. var age int = 20
  3. if age > 18 && age < 30 {
  4. fmt.Println("小伙纸")
  5. }
  6. if age > 70 || age < 10 {
  7. fmt.Println("老夫或者是小盆友")
  8. }
  9. if !(age > 50) {
  10. fmt.Println("钢铁侠")
  11. }
  12. // 短路与, 短路或
  13. // 声明一个函数
  14. func testfn() bool {
  15. fmt.Println("==^v^==")
  16. return true
  17. }
  18. func main() {
  19. fmt.Println(model.Name)
  20. var i int = 10
  21. if i < 9 && testfn() { // (i > 9 && testfn()) (i < 9 || testfn())
  22. fmt.Printf("%T %v", i, i)
  23. }
  24. }

位运算符

二进制运算
查看计算机底层知识
image.png

其它运算符

Go语言不支持三目运算
使用 if … else …
image.png

  1. a1 := 100
  2. fmt.Println("a1的地址:", &a1) // a1的地址: 0xc0000140d0
  3. var ptr *int = &a1
  4. fmt.Println("ptr指向的值是:", *ptr) // ptr指向的值是: 100