Go语言入门-课后作业 | 青训营笔记

72 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第4天。这次主要是对于课后作业的完成过程做个简单的回顾。

基础语法课后作业

1.修改第一个例子猜谜游戏里面的最终代码,使用fmt.Scanf来简化代码实现

Scanf在官方文档中的定义是

func Scanf(from string,a ...interface{}) (n int, err error)

Scanf从标准输入扫描文本,根据format参数指定的格式将成功读取的空白分隔的值保存进成功快递给本函数的参数,返回成功扫描的条目个数和遇到的任何错误。

在这道题中,直接这样即可

fmt.Scanf("%s", &input)

2.修改第二个例子命令行词典里面的最终代码,增加另一种翻译引擎的支持

这个我们在课程的实战中已经跟着做了一个彩云翻译的在线词典,课后作业要求是再加一个翻译引擎。我有两个理解,一个就是我输入了以后,直接先后显示两个翻译引擎的结果。还有一个是我通过选择,输入序号来查看1或者2翻译引擎的结果。我选择了通过后者来做。

课程的代码已经做完了一个翻译引擎,我们只需要依葫芦画瓢就可以完成第二个翻译引擎的使用,一开始我以为很简单,想用百度翻译,但是我发现做起来和课上的不一样,然后百度了一下,要去百度翻译api接入文档。比课上的彩云翻译要复杂一点。然后我就申请了百度翻译的开发者。获取了id和密钥,这样就能继续下一步了。

func constructbaidurequest(word string) BaiduRequest {
   request := BaiduRequest{q: word, from: "en", to: "zh", salt: "1435660288"}
   request.appid = "id" // appid here
   pass := "password"      // password here
   data := []byte(request.appid + request.q + request.salt + pass)
   //fmt.Printf("%x", md5.Sum(data))
   request.sign = fmt.Sprintf("%x", md5.Sum(data))
   return request
   
func queryfrombaiduapi(word string) {
   client := &http.Client{}
   request := constructbaidurequest(word)
   //fmt.Println(request)
   url := "http://api.fanyi.baidu.com/api/trans/vip/translate?q=" + word + "&from=" + request.from + "&to=" + request.to +
      "&appid=" + request.appid + "&salt=" + request.salt + "&sign=" + request.sign
   req, err := http.NewRequest("POST", url, nil)
   if err != nil {
      log.Fatal(err)
   }
   req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
   resp, err := client.Do(req)
   if err != nil {
      log.Fatal(err)
   }
   defer resp.Body.Close()
   bodyText, err := io.ReadAll(resp.Body)
   if resp.StatusCode != 200 {
      log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText))
   }
   var baiduResponse BaiduResponse
   err = json.Unmarshal(bodyText, &baiduResponse)
   if err != nil {
      log.Fatal(err)
   }
   fmt.Println(word + " ' meaning:")
   for _, item := range baiduResponse.TransResult {
      fmt.Println(item.Dst)
   }
}

最后加个选择即可。

switch choice {
case 1:
   queryfromcaiyunai(word)
case 2:
   queryfrombaiduapi(word)

总结

课上看老师做起来很轻松。真到自己做,感觉每一步都是困难,还是要做亲手操作,增强能力。

引用

该文章部分内容来自于以下课程或网页:

  • 字节内部课:Go语言入门-基础语法