猜谜游戏
- 首先通过 go 语言内置的 math/rand 包的 rand.Intn() 来生成随机数字作为谜底
需要注意的是在 go 语言较新的编译器已经不需要再自己设置随机数种子,可以直接使用该方法来生成随机数字了
secretNumber := rand.Intn(100)
- 然后初始化一个 reader 流来进行终端的输入的读取, 这里使用 bufio.NewReader()来创建
reader := bufio.NewReader(os.Stdin)
- 现在通过 for 循环来对用户的输入进行读取判断, 通过输入与随机生成的数字比较获得结果输出
在线词典
这个项目通过对一个翻译网站的 http 协议的 格式进行解析, 然后使用 go 语言 构造对应的 协议格式, 并且将构造好的协议发送向对应服务器, 并且获得响应后解析所获得的数据来对输入的东西进行翻译
- 首先打开 彩云科技 官网, 使用浏览器自带的网络调试工具在该网站进行翻译, 获得对应的 http 协议格式
- 将获得的 http 格式 放到一个 将 curl2go 的网站自动生成对应的 go 语言代码, 将其中的要翻译的字符空出到时候通过终端输入来动态填入.
- 通过解析网络调试的数据, 获得响应的格式, 通过 json2go 将对应的格式的数据直接通过网站转换为 go 语言的 结构体来对数据进行存储
- 通过分析来获得所需要的字段返回给终端输入数据的用户
socks5代理
通过 go 语言实现 socks5 协议, 转发浏览器的消息到 socks5 代理, 通过 socks5 代理将对应的数据转发到对应服务器
socks5协议的过程
- 首先 Client 与 socks5 Server 进行协商 (主要协商版本号, 认证方法数量等信息)
+----+----------+----------+
|VER | NMETHODS | METHODS |
+----+----------+----------+
| 1 | 1 | 1 to 255 |
+----+----------+----------+
VER: 协议版本, socks5 为 0x05
NMETHODS: 支持认证的方法数量
METHODS: 对应的 NMETHODS
- Socks5 Server 通过协商发送回响应
- Client 开始发送请求向 Socks5 Server
- Socks5 Server 接收到后通过解析获得目的ip, 向目的 Host 建立 TCP 连接
- Host 接收后返回响应给 Socks5 Server
- Socks5 Server 将响应状态返回给 Client
- 确认无误后 Client 开始向 Socks5 Server 发送数据
- Socks5 Server 将数据转发给 Host
- Host 接收后将响应结果返回给 Socks5 Server
- Socks5 Server 将结果返回给 Client