GO语言工程实践课后作业
引言
在字节后端基础班的课程中完成了猜谜游戏和在线翻译词典的项目开发。这篇文章记录了小编对网上搜索的资料以及小编自己的学习心得的一个综合。有错误之处请各位掘友指正鸭。
一、猜谜游戏
对于猜谜游戏,小编是在源码的基础上进行了一些更改,源码使用的是bufio的读取方式,小编在源码的guess函数基础上使用了Scanf做了一个简化输入的操作,让代码看起来更加简洁:
fmt.Println("请猜一个1到100之间的整数:")
var guess int
for {
_, err := fmt.Scanf("%d\n", &guess)
if err != nil {
fmt.Println("无效的输入,请重新输入整数:")
continue
}
但是经过课程学习以及网上资料从查询,各位掘友还需要注意以下几点要求哦~
- 在修改代码的时候要注意 Go 语言的间接性,所以在修改之后需要删除之前
import引入的部分库,存在任何导入未使用的包或者变量都会编译报错(小编经常遇到这样的问题🤭各位掘友一定要注意!) - 小编在使用vscode终端输入时,发现会额外输出一行"Invalid input. Please enter an integer value"。小编经过测试后认为,这是由于在每次判定结束后,vs的终端输入会自动输入一次换行符,导致下一次Scanf的输入变为无效,从而多输出了一行。
二、在线词典
课程视频中展示的是彩云翻译Api连接,小编依葫芦画瓢,制作了一个使用百度翻译Api的在线词典,代码与源码有一定程度上的重复,故只呈现一部分:
type request struct {
query string
from string
to string
appid string
salt string
sign string
}
type response struct {
From string `json:"from"`
To string `json:"to"`
TranslateResult []struct {
Src string `json:"src"`
Dst string `json:"dst"`
} `json:"trans_result"`
}
func query(query string) (response, error) {
request := request{
query: query,
from: "auto",
to: "zh",
appid: appid,
salt: salt,
sign: getSign(query),
}
var response DictResponse
err = json.Unmarshal(bodytext, &response)
if err != nil {
log.Fatal(err)
return DictResponse{}, errors.New("bad response")
}
return response, nil
}
根据小编自己搜索以及查阅的资料,这段代码中调用的百度翻译Api的传参方式是Get方法。运用这一方法将参数以param的形式传入,然后返回一个json作为结果,从而达到数据的传输。
其中有一个让小编较为关注的点就是:sign。这个参数比较特别,用以校验目的。具体的实现过程就是:配合百度提供的appid secret,然后再搭配相应的字符串和随机生成的字符串,通过字符串拼接的方式计算出MD5码作为sign传入,以达到服务校验的目的。(这种校验方法在系统平台开发中同样也是十分常见的哦~)
以上就是小编对于这段时间学习成果的一个总结啦,感谢各位掘友的阅读🥰