学习参考网站: https://gopl-zh.github.io/

1
2
3
4
5
# 初始化 go mod
go mod init aliyun-exporter
# 下载 go mod里的第三方包
go mod tidy
go list -m -json all

switch case 语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 
func main() {
// 表达式
switch 1 + 1 {
case 1:
fmt.Println("等于1")
case 2:
fmt.Println("等于2")
case 3:
fmt.Println("等于3")
fmt.Println("等于3")
default:
fmt.Println("都不满足")
}
// 变量
var age int
fmt.Scanln(&age)
switch age {
case "1": //报错 int类型不能与string类型比较
fmt.Println("等于1")
case 2:
fmt.Println("等于2")
case 3:
fmt.Println("等于3")
fmt.Println("等于3")
default:
fmt.Println("都不满足")
}
// 注意事项: 数据类型一致的情况。 正确:1>2 3+4 错误: 1>"3" 5+"6"
}

For 语句

1
2
3
4
5
6
7
8
9
10
11
12
13
>for 1>2 {
>...
>}
>flag := true
>for flag {
# doing something
>}
>for i=1;i<5; i++ {
// doing something
>}
>for index, value := range 切片/map {
// doing something
>}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func main() {
fmt.Println("开始")
for {
fmt.Println("红鲤鱼与绿鲤鱼与驴")
time.Sleep(time.Second * 1) // 等一秒再继续执行
}
fmt.Println("结束")
// ------------
fmt.Println("开始")
number := 1
for number < 5 {
fmt.Println("钓鱼要钓刀鱼,刀鱼要到岛上钓")
number = number + 1
}
fmt.Println("结束")
// ------------
fmt.Println("开始")
flag := true
for flag {
fmt.Println("钓鱼要掉刀鱼,刀鱼要到岛上钓")
flag = false
}
fmt.Println("结束")
// ------------
// for range 语法
for i:=1;i<10;i++ {
fmt.Println("钓鱼要掉刀鱼,刀鱼要到岛上钓")
}
}

作业:

猜数字,设定一个理想数字比如:66,一直提示让用户输入数字,如果比66大,则显示猜测的结果大了;如果比66小,则显示猜测的结果小了;只有输入等于66,显示猜测结果正确,然后退出循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

func main() {
var number = 66
var guess int
for guess != number {
fmt.Println("请猜一个我设定的数字:")
fmt.Scan(&guess)
if guess < number {
fmt.Println("比你想想的要大哦")
}else if guess > number {
fmt.Println("比你想象的要小哦")
}else {
fmt.Println("wow,猜的这么准。。")
}
}

}

位运算

指的是二进制之间的运算:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 1.按位进行与运算(全为1,才得1)
r1 := 5 & 99
5 -> 0000101
99 -> 1100011
0000001 -> 1

// 2.按位进行或运算(只要有1,就得1)
r2 := 5 | 99
5 -> 0000101
99 -> 1100011
1100111 -> 2**6 + 2**5 + 2**2 + 2**1 + 2**0 = 64 + 32 + 4 + 2 + 1 = 103

// 3.按位进行异或运算(上下不同,就得1)
r3 := 5 ^ 99
5 -> 0000101
99 -> 1100011
1100110 -> 2**6 + 2**5 + 2**2 + 2**1 = 64 + 32 + 4 + 2 = 102

// 4.按位向左移动
r4 := 5 << 2
5 -> 101
向左移动2位 -> 10100 -> 2**4 + 2**2 = 16 + 4 = 20

// 5.按位向右移动
r5 := 5 >> 1
5 -> 101
向右移动1位 -> 10 -> 2**1 = 2

// 6.比较清除 // 以前面的值为基准,让前面的和后面的值的二进制位进行比较,如果两个位置都是1,则讲前面的值的那个位置置0
r6 := 5 &^ 99
5 -> 0000101
99 -> 1100011
0000100 -> 2**2 = 4

作业

  1. 猜年龄游戏,要求:允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出。

  2. 实现用户登录系统,并且要支持连续3次输错之后直接退出,并且在每次输错误时显示剩余错误次数(提示:使⽤字符串格式化)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for i:=1;i<=3;i++ {
var age int
number := 16
fmt.Print("请猜猜我的年龄:")
fmt.Scanln(&age)
if age == number {
fmt.Println("猜对,你可真棒,奖励你晚上吃鱼")
break
}else if age < number {
fmt.Println("我这么年轻的吗?嘻嘻,猜错了哦")
}else {
fmt.Println("我就这么老吗?瞎了你的狗眼啊,猜错了!")
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fmt.Println("欢迎登陆系统")
var username string
var password string
error_num := 1
for error_num < 4 {
fmt.Println("请输入您的用户名、密码:")
fmt.Scan(&username, &password)
if username == "jony" && password == "123456" {
fmt.Println("用户名密码验证成功!欢迎!")
break
} else {
fmt.Printf("用户名%s密码%s错误, 剩余错误次数 %d ", username, password, 3-error_num)
}
error_num += 1
}

函数

1
2
3
4
func 方法名(传入参数)(返回参数) {
// 逻辑处理
return
}

defer 方法

程序在运行完之后调用的方法,先进后出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func returnFunc()(int){
fmt.Print("return Func is called...")
return 0
}
func deferFunc()(int){
fmt.Print("defer Func is called...")
return 0
}
func main(){
defer deferFunc()
returnFunc()
}
// return Func is called...
// defer Func is called...

slice

1
2
slice_1 := []{}
var slice_2