Go 语言上手(一) | 青训营笔记

188 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

安装 Go 语言

  1. 访问 go.dev/ ,点击 Download ,下载对应平台安装包,安装即可
  2. 下载完成之后在cmd输入go version,出现对于的版本号即可
  3. IDEA安装go插件 在maketplace输入Go 下载完成后重启IDEA
  4. GO配置 这个步骤一定要!!!!
  1. 在 golang 安装路径下寻找: 'go1.17.2\src\runtime\internal\sys\zversion.go' 文件
  1. 打开 ‘zversion.go’ 文件,在其中追加如下行(你的版本号)并保存
const TheVersion = `go1.17.2`
  1. 配置sdk---在GOOTROOT配置即可

Go 实战---在线翻译

在听完课程之后,原本想用有道翻译或者谷歌翻译,但是发现不能直接以post直接请求

所以改为方法改为get请求 翻译api是有道词典

1.获取url

网址文本翻译_机器翻译_在线翻译-有道智云AI开放平台 (youdao.com)

2.copyurl

如下图一样复制 Snipaste_2022-05-10_11-33-19.png

3.转换url

网址Convert curl commands to code (curlconverter.com)

Snipaste_2022-05-10_11-36-20.png 该网站可以根据请求 来转换为go语言的请求文件 我们只需要简单修改一下数据和路径,请求方式 会发现是一个go文件 新建main.go 复制粘贴即可

4.转换json数据

将response的数据复制

Snipaste_2022-05-10_11-38-35.png

网址JSON转Golang Struct - 在线工具 - OKTools 转换

Snipaste_2022-05-10_11-39-29.png

这个网址可以根据侯后端返回的JSON数据,转换为go语言的结构体的样式
来反序列化咱们的数据 来进行输出
复制到工程中

5.修改url

url :="https://aidemo.youdao.com/trans?from=Auto&to=Auto&q="

6.修改请求

//修改请求
req, err := http.NewRequest("GET", url+word, nil)

7.反序列化数据

咱们的请求已经可以成功发过去了 响应的数据还需做进一步解析 这就需要刚刚转换的结构体

var dictResponse DictResponse
err = json.Unmarshal(bodyText, &dictResponse)

if err != nil {
   log.Fatal(err)
}

最后遍历即可 完整代码如下

package main

import (
   "encoding/json"
   "fmt"
   "io/ioutil"
   "log"
   "net/http"

)
type DictResponse struct {
   ReturnPhrase []string `json:"returnPhrase"`
   Query string `json:"query"`
   ErrorCode string `json:"errorCode"`
   L string `json:"l"`
   TSpeakURL string `json:"tSpeakUrl"`
   Web []struct {
      Value []string `json:"value"`
      Key string `json:"key"`
   } `json:"web"`
   RequestID string `json:"requestId"`
   Translation []string `json:"translation"`
   Dict struct {
      URL string `json:"url"`
   } `json:"dict"`
   Webdict struct {
      URL string `json:"url"`
   } `json:"webdict"`
   Basic struct {
      ExamType []string `json:"exam_type"`
      UsPhonetic string `json:"us-phonetic"`
      Phonetic string `json:"phonetic"`
      UkPhonetic string `json:"uk-phonetic"`
      Wfs []struct {
         Wf struct {
            Name string `json:"name"`
            Value string `json:"value"`
         } `json:"wf"`
      } `json:"wfs"`
      UkSpeech string `json:"uk-speech"`
      Explains []string `json:"explains"`
      UsSpeech string `json:"us-speech"`
   } `json:"basic"`
   IsWord bool `json:"isWord"`
   SpeakURL string `json:"speakUrl"`
}

func main() {
   var s string
   fmt.Scan(&s)
   query(s)

}
func query(word string) {

   client := &http.Client{}

   url :="https://aidemo.youdao.com/trans?from=Auto&to=Auto&q="

   //创建请求
   req, err := http.NewRequest("GET", url+word, nil)

   if err != nil {
      log.Fatal(err)
   }
   req.Header.Set("authority", "aidemo.youdao.com")
   req.Header.Set("accept", "application/json, text/javascript, */*; q=0.01")
   req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36")
   req.Header.Set("content-type", "application/x-www-form-urlencoded; charset=UTF-8")
   req.Header.Set("origin", "https://ai.youdao.com")
   req.Header.Set("sec-fetch-site", "same-site")
   req.Header.Set("sec-fetch-mode", "cors")
   req.Header.Set("sec-fetch-dest", "empty")
   req.Header.Set("referer", "https://ai.youdao.com/")
   req.Header.Set("accept-language", "zh-CN,zh;q=0.9")
   resp, err := client.Do(req)
   if err != nil {
      log.Fatal(err)
   }
   defer resp.Body.Close()
   bodyText, err := ioutil.ReadAll(resp.Body)
   if err != nil {
      log.Fatal(err)
   }


   var dictResponse DictResponse
   err = json.Unmarshal(bodyText, &dictResponse)

   if err != nil {
      log.Fatal(err)
   }

   fmt.Println(word)
   for _,item :=range dictResponse.Basic.Explains{
      fmt.Println(item)
   }
}

8.最终效果

Snipaste_2022-05-10_14-39-16.png