猜谜游戏
生成随机数
在老师的演示中,我们会发现不设置时间戳程序每次生成的随机数是相同的。但在新版本Go中,go语言解决了需要设置时间戳的问题,意味着我们不再需要设置时间戳,依然可以生成随机数。
值得注意的是,rand.Intn生成的随机数范围是0~n,左闭右开,意味着并不会取到n这个值。
用户从终端输入
对此,我们使用fmt.Scanf来实现用户从终端输入所猜数字。
图中的第13行,“%d”表示的是一个十进制的整数。并且,里面的变量需要在变量名前加一个“&”符号,代表的取其的地址。最后,我们再将猜测的值和答案比较,使用If或Switch语句就可以实现程序的要求。
命令行在线词典
抓包和代码生成
在老师的视频中展示的是彩云翻译,而在本文,我实现的是百度翻译。我使用的是搜狗浏览器。打开页面,按F12审查元素,可以找到“sug”为我们所想找的目标。我们右击它,选择Copy as cURL(bash),并进入这个网址:curlconverter.com/go/ ,将其转换成代码。
将转换后的代码复制到编辑器后并运行,得到的是一大段json则证明上面步骤没有出错。
代码修改
与课上的操作不同,我们观察可以发现,生成的代码内部仅有kw=hello,通过分析可知,kw=之后的单词,则是我们需要翻译的单词。因此,我们不用再构建一个结构体,可直接做以下修改:
这里面的
word则是我们最后修改这部分代码为函数的形参。
解析Response body
将审查元素界面内,将“sug”文件的Response内的json转为结构体。实现网址:oktools.net/json2go
将生成好的结构体复制进编译器,并将结构体名修改为
DictResponse
完善代码
后面的操作,和老师的修改方式基本一致。将最初的func main(){}修改为func query(word string) {}
再在最后加入上主函数,既可以实现基于百度翻译的在线词典。
实现在线词典并发
将百度和彩云的结构体和函数复制到同一个文件下。(记得修改结构体和函数的名字,别重复了)
再引用sync这个包,使用sync.WaitGroup建立一个全局变量。用于等待一组线程的结束。再在两者的函数体内,加上wg.Done()。
在主函数中,在调用两个函数之前运用wg.Add(2)。记得最后加上wg.Wait(),等待所有线程完成。至此,就完成了目的。