Go 语言的实战案例 | 青训营笔记

122 阅读2分钟

案例一:猜谜游戏

内容:程序设定一个数字,用户每输入一个数字,程序便会告诉用户所输入的数字是大于还是小于程序设定的数字,直到用户输入数字与程序所给定的数字相同,游戏结束。

代码展示


import(
		"fmt"
		"math/rand"
		"time"
)
func main(){
	maxNum:=100
	rand.Seed(time.Now().Unixnano())
	secretNumber:=rand.Intn(maxNum)
	fmt.Println("This secret number is",secretNumber

生成随机数

为了生成随机数,需要用到"math/rand"包
老师给出的案例中,以上代码运行后生成的是同一个数字,但我运行后是随机数字
老师给出的方法是利用时间戳种子,根据时间戳来初始化随机数种子
使用“time”包,加上rand . Seed(time . Now() . Uni xNano( ) )

读取用户输入输出

读取一行输出input, err := reader .ReadString('\n')
老师使用reader :=bufo.NewReader(os . Stdin),这样会有很多操作空间,可以使用Readstring来读取这一行
读取一行后会发现,这一行后面会有换行符,若要去掉换行符,使用 input = strings .TrimSuffx(input, "\n") 再用Atoi将他转换为数值

实现判断逻辑

用else if 语句来进行条件判断

实现游戏循环

使玩家多次游玩 用for循环将自读取行代码开始,出错时不退出进程,使用continue继续

案例二:在线词典

在命令行后查询单词,然后程序调用第三方APR查询这个单词的音标、中文释义,然后打印出来

抓包

打开翻译网页,检查该网页,找到network-dict--POST这个请求,点击payload和preview,获得该网页单词的json,会显示你输入的单词(source)和翻译类型(en2zh=英转中)
而preview会显示网页翻译的结果和各种语法信息

代码生成

右键请求,copy它的cURL,利用代码生成网站https:/ /curlconverter.com/ #go 生成代码

生成request body

构造一个结构体,调用json.mashal 解析response body 利用网站https:/ / oktools.net/json2go 将翻译网页的preview内容和json进行解析

打印结果

去除打印出结构体中我们不需要的字段,注:解释是数组,可以用range去循环打印。 if resp. StatusCode != 200 { log. Fatal("bad StatusCode:", resp. StatusCode, "body", string(bodyText)) 防御式编程,response不一定正确,有参数出现错误、403等情况