这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
对课程中学到的重要知识点做了笔记,方便后续的回顾
简介
GO语言的特点:
1.高性能、高并发
2.语法简单、学习曲线平缓
3.丰富的标准库
4.完善的工具链
5.静态链接
6.快速编译
7.跨平台
8.垃圾回收
入门
1.安装golang
go.dev/
studygolang.com/dl
goproxy.cn/
- 基础语法
- 变量
- if else
- 循环
- switch
- 数组
7. 切片
go语言切片是对数组的抽象 go数组的长度不可改变,切片相当于go语言中的动态数组 与数组相比切片的长度不固定,可以追加元素,在追加时可能使切片的容量增大
s := make([]string, 3)
s = append(s, "e", "f")
good := []string{"g", "o", "o", "d"}
- map
9. range
range用于循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素 数组和切片中,返回元素的索引和索引对应的值,在集合中返回k-v对
m := map[string]string{"a": "A", "b": "B"}
for k, v := range m {
fmt.Println(k, v) // b 8; a A
}
- 函数
11. 指针
只能初步的使用,没有C++那么丰富 go语言不支持指针运算
func add2ptr(n *int) {
*n += 2
}
- 结构体
13. 结构体方法
go语言可以定义结构体,可以定义结构体方法 可以是指针或者非指针类型 调用的时候可以用函数的方法调用
type user struct {
name string
password string
}
func (u *user) resetPassword(password string) {
u.password = password
}
a := user{name: "wang", password: "1024"}
a.resetPassword("2048")
- 错误处理
- 字符串操作
16. 字符串格式化
%v会做自适应的打印
fmt.Printf("p=%v\n", p) // p={1 2}
fmt.Printf("p=%+v\n", p) // p={x:1 y:2}
fmt.Printf("p=%#v\n", p) // p=main.point{x:1, y:2}
17. json处理
json.Marshal()将数据编码成json字符串 json.MarshalIndent()应用缩进来格式化输出 json.Unmarshal()将json字符串解码到相应的数据结构
a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)
buf, err = json.MarshalIndent(a, "", "\t")
var b userInfo
err = json.Unmarshal(buf, &b)
18. 时间处理
now := time.Now()// 2022-03-27 18:04:59.433297 +0800 CST m=+0.000087933
t := time.Date(2022, 3, 27, 1, 25, 36, 0, time.UTC)
t2 := time.Date(2022, 3, 27, 2, 30, 36, 0, time.UTC)
fmt.Println(t) // 2022-03-27 01:25:36 +0000 UTC
fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute()) // 2022 March 27 1 25
fmt.Println(t.Format("2006-01-02 15:04:05")) // 2022-03-27 01:25:36
diff := t2.Sub(t)
fmt.Println(diff) // 1h5m0s
fmt.Println(diff.Minutes(), diff.Seconds()) // 65 3900
t3, err := time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36")
- 数字解析
- 进程信息
实战
1. 猜谜游戏
2. 在线词典
- 先从彩云字典的HTTP页面中通过开发者模式,查看查字典调用的API接口是什么
- 确认需要传输的json形式
- 通过在线网站,生成curl命令
- 将传输的数据json序列化
- 将返回值反序列化到json里面
- 使用网站自动将json转成go结构体
- 对main函数添加输出参数
3. socket5代理
socket5代理的含义
代理就是中间人,在客户端看来是目标服务器,在目标服务器看来是客户端,所以代理必须同时满足C/S 双方的规范。 如果只是简单的传送 C/S 两端数据,那他就是个“透明代理”;一旦代理对请求或响应进行了修改,那就是“非透明代理”。
socket5代理的流程
- 客户端进行协议认真
- 代理服务器对认证进行回复
- 客户端发送希望连接的目标信息
- 代理服务器表示确认或接收
- 代理服务器连接到目标开始传输数据
课后个人总结
- 入门部分的内容都比较基础,但是有些细节的语法点比较模糊,所以做了笔记方便以后的翻看
- 关于实战项目
- 第一个实战项目比较简单
- 第二个用到了之前没有用到过的在线程序生成工具,还需要多了解,多学习
- 第三个例子有有了稍许难度,而且是之前没有接触过的概念,所以先去了解了基础的概念,然后对具体的编码进行学习
参考资料
github.com/wangkechun/… www.moye.me/2017/08/03/… fanyi.caiyunapp.com/ curlconverter.com/#go oktools.net/json2go