💌 这是我参与「第五届青训营」伴学笔记创作活动的第 1 天。
🧡 本堂课重点内容
-
Go 语言学习背景介绍
-
Go 语言基础语法详细讲解
1、配置开发环境
2、基础语法
3、标准库
-
Go 语言实战
1、项目一:猜谜游戏
2、项目二:命令行词典
3、项目三:SOCKS5 代理
🧡 知识点介绍
💌 首先在本机安装 Go 开发环境,在 VS Code 上安装插件之后发现有些代码编译会报错,因此下载了 Goland 作为主要开发软件。在 Gitpod 中也可以在线编译学习:main.go - go-by-example - Gitpod Code - Insiders 。
🍠 变量:常见的变量类型包括字符串、整数、浮点型、布尔型等。
var e float64
f := float32(e)
const s string = "constant"
const h = 500000000
🍠 for/if:Go 语言只有for循环,条件不用小括号,结构必须要有大括号,哪怕结构中只有一行语句。
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
🍠 switch:只跑相应case中的代码,无需break自动跳出。
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
🍠 数组/切片:不同于固定长度的数组,切片可以使用append追加长度,也可以像数组一样取值。
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
s = append(s, "d")
fmt.Println(s) // [a b c d]
fmt.Println(s[2:]) // [c d]
🍠 map:哈希key-value。
🍠 range:可遍历切片或者map,返回索引和对应位置的值。
🍠 函数:Go 语言中函数可以返回多个值,一般是计算结果+错误信息。
🍠 指针:没什么特殊的,函数传参加*,调用加&。
🍠 结构体:用结构体的名称初始化结构体变量,构造的时候需要传入每个字段的初始值,也可以用键值对的方式指定初始值。
type user struct {
name string
password string
}
func main() {
a := user{name: "wang", password: "1024"}
b := user{"wang", "1024"}
c := user{name: "wang"}
c.password = "1024"
var d user
d.name = "wang"
d.password = "1024"
fmt.Println(a, b, c, d) // {wang 1024} {wang 1024} {wang 1024} {wang 1024}}
🍠 结构体方法:为结构体定义一些方法,在函数中调用结构体字段。
func (u user) checkPassword(password string) bool {
return u.password == password
}
func (u *user) resetPassword(password string) {
u.password = password
}
🍠 错误处理:函数有单独的返回值返回错误信息,若没有错误返回结果+nil,若有错误返回nil+error。
🍠 字符串操作:标准库strings中有很多字符串操作,count:字符串计数,index:查找某个字符串的位置,join:连接多个字符串,repeat:重复多个字符串,replace:替换字符串。 可以用%v打印任意类型变量。
🍠 其他标准库:time:处理时间,strconv:字符串和数字类型转换,os:进程信息。
🧡 实战练习
- 项目一:猜谜游戏
💌 第一个例子是猜谜游戏。程序首先会生成一个介于1到100的随机整数,然后提示玩家进行猜测。玩家每次输入一个数字,程序会告诉玩家这个值是高于还是低于这个随机数,并且让玩家再次猜测。如果猜对了,就告诉玩家胜利并且退出程序。
🍠 需要先依赖time时间戳初始化随机数种子,不然每次出来的随机数都是一样的。
- 项目二:命令行词典
💌 第二个例子是命令行词典。输入一个单词,调用第三方API查询单词,输出单词音标和注释。
🍠 直接去翻译网站右键查看浏览器的HTTP请求,右键copy as curl,并将JSON转换成Go语言。
🍠 将JSON序列化,生成request body进行解析。
- 项目三:SOCKS5 代理
💌 第二个例子是SOCKS5 代理。写一个代理服务器。
🧡 课后总结
💌 本节课最难的还是后面两个实战部分,目前对很多更深入的语法还不够了解,努力读懂代码ing QAQ。