文章目录
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 条件语句
语法点
- 判断条件不需要用括号括起来
- 即使只有一行语句,大括号
{}
也必须存在- 左括号必须在
if
或else
同一行- 变量初始化语句,使用
;
进行分隔- 在有返回值的函数中,最终的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()
}
}