初探 Go(下)| 青训营笔记

60 阅读2分钟

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

本文重点内容

  • Go实现在线词典
  • Go实现SOCKS5代理

实践内容详解

Go实现在线词典

巧用代码生成

Go模拟Curl

Edge 浏览器的开发人员选项中复制 Curl 代码

image.png

curl自动生成工具

利用此工具生成Go代码

Convert curl commands to code (curlconverter.com)

这个网址不仅支持Go的生成,还支持多种其他语言。

image.png

请求代码结构

程序整体分为:创建请求、设置请求头、发起请求、读取响应四个部分。

image.png

这里,主要涉及到net/http的使用。

Go语言内置的net/http包提供了HTTP客户端和服务端的实现。众所周知,超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议。在此包中的Get、Head、Post和PostForm函数发出HTTP/HTTPS请求。程序在使用完response后必须关闭回复的主体,可以用到defer

进一步优化代码的过程中,涉及到对返回的Json解析。老师讲到出于性能考虑,优先考虑解构Json到结构体。但Json返回的结构往往比较复杂,可以利用下面的工具,把一个Json转化为这类Json通用的结构体。

JSON转Golang Struct - 在线工具 - OKTools

这个工具还提供一些Json转化为其他格式的功能。

image.png

Go实现SOCKS5代理

这个项目使用到 netcat,windows版下载地址:netcat 1.11 for Win32/Win64 (eternallybored.org)

Netcat是一个特色的网络实用程序,可以读取和写入数据 网络连接,使用 TCP/IP 协议。 它被设计为一个可靠的“后端”工具,可以直接使用或由其他程序和脚本轻松驱动。同时,它是一个功能丰富的网络调试和探索工具,因为它可以创建 几乎您需要的任何类型的连接,并且有几个有趣的 内置功能。

建立TCP连接的流程

image.png

这里主要涉及到 net。 一个TCP客户端进行TCP通信的流程如下:

  • 建立与服务端的链接
  • 进行数据收发
  • 关闭链接

SOCKS5 代理原理

img

  1. 协议版本号,认证信息(跳过)等
  2. 发送请求类型,连接具体信息
  3. 返回响应

实现完整SOCKS5 代理服务器

image.png

本文小结

  • Go实现在线词典
  • Go实现SOCKS5代理

参考资料与引用

学习资源

工具资源