一、猜谜游戏
1.1 生成随机数
首先,我们定义一个随机数,作为要猜的数通过调用rand库中的函数来实现
- 使用时间戳来初始化随机数种子
- 运行结果
1.2 读取用户输入
1.3实现游戏逻辑
通过标准输入流读取用户输入的字符串,然后去掉换行符,并将其转为数字,然后我们就可以对结果进行判断,同时为了能让游戏一直进行,从输入开始置为循环,直到输入正确结果,此外还应将出现错误时的return终止语句改位continue
注意:这里需要注意,不同操作系统的换行符是不同的,mac是\r,windows是\r\n,linux是\n,需要根据自己的操作系统更改换行符后缀,这里是Windows系统。
- 运行结果
二、在线词典介绍
用户在命令行里面查询一个单词,通过调用第三方的API查询到单词翻译并打印出来,下面实例中,我们会使用GO语言来发送HTTP请求、解析json过来,以及如何使用代码提高开发效率
2.1抓包
2.1.1 浏览器登入网站
浏览器登入网站-->彩云小译 - 在线翻译 (caiyunapp.com)
2.1.2 捕捉用来查询单词的请求
右键查询->使用翻译->在网络中找到dict请求(其中请求方法为post)
- 请求信息
2.2代码生成
2.2.1 在goLang中发送请求
正常来说,请求命令的发送代码比较复杂,下面会使用别人的代码进行实验。
- 代码生成
进入Convert curl to Go (curlconverter.com)生成GO语言代码
- 生成一大串JSON
此时我们返的数据是JSON格式的,而现在那个输入是固定的,我们是要从一个变量来输入,我们需要用到JSON序列化
2.3生成、解析request body
在GoLang里面,我们需要生成一段JSON,常用方法是构造一个结构体,这个结构体要和我们需要生成的JSON的结构是一一对应的
- 请求序列化
- 解析Response
- 首先打开一个网站 oktools.net/json2go
- 将之前返回的Response结果拷贝进去,点击转换-嵌套便可生成对应结构体
- 下面我们便得到了一个response 结构体,下面再改进代码,先定义一个response结构体的对象,然后再JSON.unmarshal把body反序列化到结构体里,并打印。
- 打印结果
- 此时里面许多字段,我们是不需要的,因此我们只用提取并输出我们需要的部分
- 完善代码
2.4运行结果
三、Socket5代理
- 原理
- 在实现代理之前,先尝试一个请求的连接
在线程里使用defer关键字进行延迟断开连接操作,可以使得在该子线程执行的最后成功断开当前连接,避免线程资源的消耗
- 接下来通过nc命令测试是否连通
netcat下载地址eternallybored.org/misc/netcat…
- 首先启动程序,然后在终端输入
nc 127.0.0.1 1080(1080是程序中配置的端口,可以换成任意占用端口)
返回输入的字符串,代表连通成功
- 下一步我们就要实现协议的认证阶段,首先定义一个auth函数用于键传
其中ver为协议版本,methodSize为支持认证的方法数量
此外将原来process函数中的死循环改为调用auth函数
例1、修改第一个例子,使用fmt.scanf来简化代码