Go语言实战案例优化 | 青训营笔记

117 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

第一天主要的内容为Go语言基础以及初学Go的一些简单实战案例,由于笔者之前已经接触过Go语言,因此本篇笔记会偏重于实战部分。对三个案例进行代码分析以及优化。

猜谜游戏

首先阅读参考文献中的猜谜游戏案例,我将对源代码进行讲解。 在随机数生成部分,使用rand.Seed()函数来保证每次生成的随机数都不相同。

rand.Seed(time.Now().UnixNano())

在读取输入数据时采用了bufio.NewReader()来进行读取,读取到的数据格式为字符串格式,由于读取的是原始的字符流,因此使用strings.Trim()进行剪枝,再进一步使用strconv.Atoi()进行数据格式转换。最后使用if进行逻辑判断。

reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
input = strings.Trim(input, "\r\n")
guess, err := strconv.Atoi(input)

可以看到需要对数据进行多次的转换与处理,因此在这里使用fmt标准库中的Scanf()进行优化。只要一行就可以实现上面的四行功能。

var guess int
_,err:=fmt.Scanf("%d",&guess)

在线词典

根据视频内容总结了通过http请求获得翻译结果的过程。首先是使用f12查看网页源代码,查找合适的请求信息,复制curl连接,然后通过cURL请求代码生成网站获得go的httpreqest请求。再对json格式进行解析,提取需要的信息用来返回。

socket5代理

这一段只说明socket5的原理,没有对代码进行详细说明与解释。

常规浏览器的访问流程为先和通信网站建立tcp连接,而后发起http请求,服务器返回http响应。 sockets5代理的则会在中间多添加一个步骤,首先浏览器和sockets5代理建立TCP连接,代理再和服务器建立连接,中途多了一个阶段。同时在建立连接的时候包含四个阶段,握手阶段、认证阶段、请求阶段、rly阶段 首先是浏览器和socks5代理建立TCP连接,代理再和真正的服务器建立TCP连接。这里可以分成四个阶段,握手阶段、认证阶段、请求阶段、relay阶段。如果真正的服务器返回响应后,也会把请求转发到浏览器这边,实际上代理服务器并不关心流量的细节,HTTP流量和其他TCP流都可以。

参考文献:

实战案例

Scanf定义

cURL请求代码生成网站

解析json to go