这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
通过今天的两节视频课,对Go语言的基础知识进行了学习并依照视频完成了猜谜游戏(猜数字)、在线词典、socks5代理服务三个示例项目。
第一节课:Go基础知识学习
本节课主要介绍了Go的特性与Go的语法知识
Go特性
- 语法简单,易于上手
- 作为静态语言,性能更高,原生支持高并发
- 相较于C/C++支持垃圾回收且支持快速的增量编译
- 有丰富标准库与工具链完备
- 支持跨平台
Go语法知识
switch-case
Go中switch-case中进入到case中执行完成后自动break
切片
切片本质上是变长数组,实际占用的空间会随着数据量增加而增加,占用空间不足时会重新分配空间
s := make([]string,3)
s = append(s, "a") // 这里需要给s赋值的原因为:s为动态数组,s可视作一个指针,当重新分配空间时地址会发生变化,应该将变化后的地址赋值给s
map
Go中map为hashmap,键值对随机排布,不能以key或者value值顺序遍历
函数
Go中函数支持多返回值且接收返回值时可通过下滑线作为占位符
func exists(m map[string]string, k string) (v string, ok bool) {
v, ok = m[k]
return v, ok
}
_, ok := exists(m,k)
第二节课:Go项目实战
本节课实现了猜数字、在线词典、SOCKS5代理三个示例项目
1. 猜谜游戏(猜数字)
- 获取当前时间生成随机种子
rand.Seed(time.Now().UnixNano()) // 根据当前时间生成随机种子
- go的从标准输入流读取信息并转化为整形
reader := bufio.NewReader(os.Stdin) // 获取标准流Reader
input, err := reader.ReadString('\n') // 读字符串
input = strings.Trim(input, "\r\n") // 去掉字符串冗余部分
guess, err := strconv.Atoi(input) // 字符串转整形
2. 在线词典
获取在线翻译网站的请求信息
使用浏览器抓包并获取请求信息,通过在线工具转换为Go代码
Convert curl to Go (curlconverter.com)
相应信息结构体生成
使用在线工具根据请求响应的json信息生成Go中的结构体,便于对相应信息进行解析
JSON转Golang Struct - 在线工具 - OKTools
3. SOCKS5代理
通过本示例,对SOCK5协议有了基本的了解,学习了如何用Go创建监听端口,读取网络包数据和数据的转发
运行逻辑
- 监听本地端口
- 认证SOCKS5协议
- 验证数据包类型,根据类型输出域名与端口等连接信息
- 数据的双向转发