1、猜谜游戏
首先,我们定义一个随机数,作为要猜的数
通过调用rand库中的函数来实现
需要注意的是,教程中Go版本为1.14,在生成随机数时多次生成会产生一样的结果,因而需要设定时间戳种子。而在高版本,例如1.20版本,则不需要设定,直接就是随机的
接下来,读取用户输入
通过标准输入流读取用户输入的字符串,然后去掉换行符,并将其转为数字
这里需要注意,不同操作系统的换行符是不同的,mac是\r,windows是\r\n,linux是\n,需要根据自己的操作系统更改换行符后缀
当然这里可以通过更简洁的fmt.Scanln来获取输入,不过据说后面还要用到输入流,就采用这种比较曲折的方式了
然后我们就可以对结果进行判断,同时为了能让游戏一直进行,从输入开始置为循环,直到输入正确结果,此外还应将出现错误时的return终止语句改位continue
在线词典
首先,我们需要先进入到一个翻译网址
右键点击检查或者直接按键盘F12,打开开发者工具
点击network,并找到以Post方式请求的url
右键拷贝其url路径
接下来打开另一个代码生成网址
将刚才复制的url路径拷贝过来
然后将下方生成的代码直接copy到编辑器中
但此时我们发送的数据是写死的,我们需要自己创建并发送Json数据
因而我们接下来要像之前一样创建一个结构体
因为json.Marshal返回的不是一个真正的字符串而是一个byte数组,因而在转为data时选用bytes.NewReader而不是strings.NewReader
接下来我们需要解析Response
首先打开一个网站
将之前返回的Response结果拷贝进去,点击转换-嵌套便可生成对应结构体
下面我们便可将原来获取的bodyText发序列化成结构体
然而此时里面许多字段,我们是不需要的,因此我们只用提取并输出我们需要的部分
随后,我们将前面的输入进行改造,将发送http请求抽取作为一个函数,传入word
测试结果
成功
Socket5代理
下图代理的原理
在实现代理之前,我们先尝试一个请求的连接
这里应用到Go语言的并发特性,通过go关键字可以很方便地开启一个子线程
在线程里使用defer关键字进行延迟断开连接操作,可以使得在该子线程执行的最后成功断开当前连接,避免线程资源的消耗
其中有一点,我们可以看到字节流的读取是ReadByte,看起来是一个字节一个字节的读,非常低效,但实际上底层会将字节进行一个合并,当读第一个字节,会提前将接下来一个kb的字节都读取,再读后续时会瞬间返回
接下来通过nc命令测试是否连通
nc (netcat)下载地址
eternallybored.org/misc/netcat…