案例一:猜谜游戏
内容:程序设定一个数字,用户每输入一个数字,程序便会告诉用户所输入的数字是大于还是小于程序设定的数字,直到用户输入数字与程序所给定的数字相同,游戏结束。
代码展示
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等情况