Go小白入门3 - 运算符 & 控制语句

1. 运算符

1.1 基本运算符

  • 算术运算符 加减乘除

注意:自增,自减只能作为表达式使用,而不能用于赋值语句

// 不允许 - 会有编译错误 syntax error: unexpected ++ at end of statement
a = a++ 
  • 关系运算符 等于/小于
  • 逻辑运算符(&& || !)
  • 位运算符(& | ^ >> <<)
  • 赋值运算符(上述运算符后加=

1.2 指针相关的运算符

当变量前面有 * 标识时,才等同于 & 的用法,否则会直接输出地址

运算符描述实例
&变量存储地址(地址值)&a - 即变量的实际地址
*指针变量*a - 即一个指针变量

简单的栗子

package main

func main() {
	var a = 4
	var b int32
	var c float32
	var ptr *int

	ptr = &a
	println(a, *ptr, ptr) // 4 4 0xc000037f70 
	println(b, c)         // 0 +0.000000e+000
}

使用指针 VS 不使用指针

package main

func main() {
	// 不使用指针
	var a = 4
	var ptr int
	ptr = a
	println(ptr) // 4
	a = 12
	println(ptr) // 4

	// 使用指针
	var b = 5
	var ptr1 *int
	ptr1 = &b
	println(*ptr1) // 5
	b = 12
	println(*ptr1) // 12
}

2 条件语句

语法点

  • 判断条件不需要用括号括起来
  • 即使只有一行语句,大括号{}也必须存在
  • 左括号必须在ifelse同一行
  • 变量初始化语句,使用进行分隔
  • 在有返回值的函数中,最终的return不能在条件语句中

注意点

  • Go没有三目运算符,所以不支持 ?: 形式的条件判断
  • 条件判断语句里面允许声明一个变量(该变量的作用域只在该条件逻辑块内)

2.1 基本条件语句

  • if语句
  • if…else语句
  • if … else if … else… 语句
  • if 语句嵌套

2.2 switch 语句

  • 不同case间不使用 break 分隔,默认只执行一个 case
  • 如果想执行多个 case,需使用 fallthrough 关键字,也可用 break 提前终止
switch var1 {
    case val1:
        ...
    // 多条件判断
    case val, val3:
        ...
    default:
        ...
}
1)举个栗子
package main

import "fmt"

func main() {
	score := 90
	grade := 'B'

	// 形式1
	switch {
	case score >= 90:
		grade = 'A'
	case score >= 80:
		grade = 'B'
	case score >= 60:
		grade = 'C'
	default:
		grade = 'D'
	}

	// 形式2
	switch grade {
	case 'A':
		fmt.Print("Excellent!")
	case 'B':
		fmt.Print("Good")
	case 'C':
		fmt.Print("Passed")
	case 'D':
		fmt.Print("Failed")
	}
}
2)Type Switch

判断某个 interface 变量中实际存储的变量类型

var x interface{}
  
switch i := x.(type) {
   case nil:  
     ...  
3)fallthrough

fallthrough不会判断下一条 case 的表达式结果是否为 true,会强制执行后面的 case 语句

package main

import "fmt"

func main() {
	switch {
	case false:
		fmt.Println("1 - false")
		fallthrough
	case true:
		fmt.Println("2 - true")
		fallthrough
	case false:
		fmt.Println("3 - false")
		fallthrough
	case true:
		fmt.Println("4 - true")
	case false:
		fmt.Println("5 - false")
		fallthrough
	default:
		fmt.Println("6 - default")
	}
}

输出如下:

2 - true
3 - false
4 - true 

2.3 Select 语句

select 会循环检测条件,如果有满足则执行并退出,否则一直循环检测

https://www.runoob.com/go/go-select-statement.html

3 循环语句

Go没有while

3.1 for循环

/*
init - 赋初值
condition - 关系表达式,循环控制语句
post - 赋值(增量/减量)
*/
for init; condition; post {}
for condition {}
for {}

// Example
for key, value := range oldMap{
	newMap[key] = value
}

For-each range 循环

对字符串、数组、切片等迭代输出元素

package main

import "fmt"

func main() {
	strings := []string{"aa", "bb"}
	for i, s := range strings {
		fmt.Println(i, s)
	}

	numbers := [6]int{1, 2, 3, 4}
	for i, x := range numbers {
		fmt.Println(i, x)
	}
}

3.2 循环控制语句(break、continue & goto)

3.2.1 break和continue

可使用标记标出想 break 或 continue 的循环

package main

import "fmt"

func main() {
	// 使用标记
re:
	for i := 1; i <= 3; i++ {
		fmt.Printf("i: %d\n", i)
		for i2 := 11; i2 <= 13; i2++ {
			fmt.Printf("i2: %d\n", i2)
			break re
		}
	}
}
3.2.2 goto 语句
  • 可以无条件地转移到过程中指定的行
  • 常与条件语句配合使用,来实现条件转移, 构成循环,跳出循环体等功能
  • 不建议用goto,常造成混乱

九九乘法表

package main

import "fmt"

func main() {
	for m := 1; m < 10; m++ {
		n := 1
	LOOP:
		if n <= m {
			fmt.Printf("%dx%d=%d ", n, m, m*n)
			n++
			goto LOOP
		} else {
			fmt.Println("")
		}
		n++
	}
}

4. 小练习

4.1 运算符

1) 算术运算符 加减乘除

package main

func main() {
	a, b := 1, 2
	var c int

	println(a, b, c)	// 1 2 0
	println(a + b)	// 3
	println(a - b)	// -1
	println(a / b)	// 0
	println(a % b)	// 1
	a++
	println(a)	// 2
	a = 1
	a--
	println(a)	// 0
}

2)关系运算符 等于/小于

package main

func main() {
	a, b := 1, 2

	println(a == b) // false
	println(a != b) // true
	println(a < b)  // true
	println(a <= b) // true
}

3)逻辑运算符(&& || !)

package main

func main() {
	a, b := true, false

	println(a && b) // false
	println(a || b) // true
	println(!a)     // false
}

4.2 条件语句

1)判断输入是否为偶数

package main

import "fmt"

func main() {
	var s int
	fmt.Print("Please type a number: ")
	fmt.Scan(&s)

	if s%2 == 0 {
		fmt.Println("Input is even")
	} else {
		fmt.Println("Input is odd")
	}
	fmt.Print("Input value is: ", s)
}

2)在条件判断语句里声明变量

package main

import "fmt"

func main() {
	if num := 9; num < 0 {
		fmt.Println(num, "is negative")
	} else {
		fmt.Println(num, "is positive")
	}
}

3)判断用户密码输入

package main

import "fmt"

func main() {
	const PASSWORD = 1234
	var first int
	var second int

	fmt.Print("Please input the password: ")
	fmt.Scan(&first)

	if first == PASSWORD {
		fmt.Println("Password is correct. The door is open.")
	} else {
		fmt.Print("Your input is wrong. Please retry: ")
		fmt.Scan(&second)
		if second == PASSWORD {
			fmt.Println("Password is correct. The door is open.")
		} else {
			fmt.Println("An illegal invasion. An alert is fired...")
		}
	}
}

4.3 循环语句

1)计算 1 到 10 的数字之和

package main

import "fmt"

func main() {
	sum := 0
	for i := 0; i <= 10; i++ {
		sum += i
	}
	fmt.Println(sum)
}

2)输出 2 到 100 间的素数

package main

import "fmt"

func main() {
	for i := 2; i <= 100; i++ {
		flag := true
		for j := 2; j <= i/j; j++ {
			if i%j == 0 {
				flag = false
				break
			}
		}

		if flag {
			fmt.Println(i)
		}
	}
}

3)九九乘法表

package main

import "fmt"

func main() {
	for m := 1; m < 10; m++ {
		for n := 1; n <= m; n++ {
			fmt.Printf("%dx%d = %d ", m, n, m*n)
		}
		fmt.Println()
	}
}

5. 参考资料

  1. Go菜鸟教程
  2. Datawhale组队学习
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值