三个实践小项目感受|青训营

60 阅读2分钟

简化错误处理,以提高可读性。觉得Go中的错误处理过于繁琐,而且全都使用了if语句,导致代码显得复杂。最后,认为对于这些库的使用,更多需要依赖代码引用和文档,因为课程主要关注了流程。

猜数字游戏:通过随机生成和用户输入进行简单操作。使用了bufio库。

基础库使用:

  1. strconv:主要用于字符和其他类型之间的转换。
  2. strings:用于字符处理,例如删除末尾字符。

简单字典:涉及网络库和JSON转换。在Go中,需要提前准备一个接收JSON的结构体。使用了两个工具:curlconverter生成Go请求,oktools生成结构体。

网络库net/http:使用Go的标准库,初始化请求客户端,创建和发送请求,接收并处理响应。

os库:用于获取环境参数,例如获取命令行参数。

SOCKS5代理:解析net库中接收的信息,连接到目标地址,使用context库管理进程。后台开启一个服务器交互进程,进行请求鉴权(auth函数)和连接通信(connect函数)。

鉴权阶段:

  1. 判断协议支持和认证方式。
  2. 解析接收到的数据,包括版本、方法数量和方法列表。

通讯阶段:

  1. 判断请求服务是否可接受,解析目标地址类型。
  2. 和鉴权阶段不同,这里还涉及目标地址和端口号。

鉴权和通讯阶段都有具体的数据处理和解析操作。

使用net库开启服务器,监听指定端口,接受客户端连接。

context库用于管理多个goroutine,创建父节点和子节点,进行进程控制。

最后,提到ctx.Done()用于判断ctx是否已关闭。