目的:熟悉go基础语法

package mainimport ("bytes""encoding/json""fmt""io/ioutil""log""net/http""os"
)type RequestParam struct {TransType string `json:"trans_type"`Source    string `json:"source"`
}// 将json直接转成结构体
type ResponseNode struct {Rc   int `json:"rc"`Wiki struct {KnownInLaguages int `json:"known_in_laguages"`Description     struct {Source string      `json:"source"`Target interface{} `json:"target"`} `json:"description"`ID   string `json:"id"`Item struct {Source string `json:"source"`Target string `json:"target"`} `json:"item"`ImageURL  string `json:"image_url"`IsSubject string `json:"is_subject"`Sitelink  string `json:"sitelink"`} `json:"wiki"`Dictionary struct {Prons struct {EnUs string `json:"en-us"`En   string `json:"en"`} `json:"prons"`Explanations []string      `json:"explanations"`Synonym      []string      `json:"synonym"`Antonym      []string      `json:"antonym"`WqxExample   [][]string    `json:"wqx_example"`Entry        string        `json:"entry"`Type         string        `json:"type"`Related      []interface{} `json:"related"`Source       string        `json:"source"`} `json:"dictionary"`
}func translate(word string) {// 二、创建请求// 要管理HTTP客户端的头域、重定向策略和其他设置,创建一个Client// http.Client{Timeout: time.Second}可以自由设置请求过期时间client := &http.Client{}// 封装requestDatarequestData := RequestParam{TransType: "en2zh", Source: word}// 三、序列化请求// 将结构体request序列化成JSON格式字符串buf, err := json.Marshal(requestData)if err != nil {// fmt.Println("an error occured while json serialized,err->", err)log.Fatal(err)return}// 将序列化后的字符串转成字节数组data := bytes.NewReader(buf)// var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)// 创建https请求req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)// 判断是否出错if err != nil {log.Fatal(err)}// 设置请求头,注意应该用google的请求头,火狐的请求头有问题req.Header.Set("Connection", "keep-alive")req.Header.Set("sec-ch-ua", `" Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99"`)req.Header.Set("sec-ch-ua-mobile", "?0")req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36")req.Header.Set("app-name", "xy")req.Header.Set("Content-Type", "application/json;charset=UTF-8")req.Header.Set("Accept", "application/json, text/plain, */*")req.Header.Set("os-type", "web")req.Header.Set("X-Authorization", "token:qgemv4jr1y38jyq6vhvi")req.Header.Set("sec-ch-ua-platform", `"Windows"`)req.Header.Set("Origin", "https://fanyi.caiyunapp.com")req.Header.Set("Sec-Fetch-Site", "cross-site")req.Header.Set("Sec-Fetch-Mode", "cors")req.Header.Set("Sec-Fetch-Dest", "empty")req.Header.Set("Referer", "https://fanyi.caiyunapp.com/")req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")// 四、调用cliend.do发送请求,接受响应resp, err := client.Do(req)// 判断是否请求出错if err != nil {log.Fatal(err)}// 防止内存泄漏defer resp.Body.Close()// 五、读取响应体的数据bodyText, err := ioutil.ReadAll(resp.Body)// // 打印响应的body// fmt.Printf("%s\n", bodyText)// 判断是否出错if err != nil {log.Fatal(err)}if resp.StatusCode != 200 {log.Fatal("bad StatusCode:", resp.StatusCode, "body:", string(bodyText))}// 六、解析响应的body// 声明一个响应body节点var responseData ResponseNode// 反序列化bodyTexterr = json.Unmarshal(bodyText, &responseData)if err != nil {log.Fatal("解析response出错,", err)}// fmt.Printf("%#v\n", responseData)// fmt.Printf("%#v\n", responseData.Dictionary)// fmt.Printf("%#v\n", responseData.Dictionary.Explanations)// 打印翻译的音标fmt.Println(word, "UK:", responseData.Dictionary.Prons.En, "US:", responseData.Dictionary.Prons.EnUs)// 打印翻译结果// 循环range,自带println函数ans := responseData.Dictionary.Explanationsn := len(ans) //翻译的答案的个数if n == 0 {fmt.Println("ans is empty,please try again.")return}for _, value := range ans {println(value)}
}func main() {// 一、动态读取用户输入的英文单词字符串// fmt.Print("Please input a word to be translated: ")// reader := bufio.NewReader(os.Stdin)// word, err := reader.ReadString('\r')// if err != nil {//   fmt.Println("an error occured while reading input.", err)//   return// }// word = strings.TrimSuffix(word, "\r")// fmt.Printf("word:%s,len:%d\n", word, len(word))// 改成命令行读取用户输入if len(os.Args) != 2 {fmt.Fprintf(os.Stderr, `usage: simleDict WORD
eg: simleDict hello`)os.Exit(1)}// 将命令行中的单词赋值给wordword := os.Args[1]// 调用函数发送请求进行翻译translate(word)
}

命令:

go run main.go kevin

结果:

kevin UK: [ˈkivin] US: [ˈkεvɪn]
n.凯文(男子名)

单词翻译程序 go实现相关推荐

  1. 传输层中UDP的深入理解以及socket中UDP的使用

    目录 一.学习UDP的预备知识 1.熟悉网络通信中的五元组 (1)源IP地址和目的IP地址 (2)源端口号和目的端口号 (3)协议号 2.什么是客户端和服务端 二.socketAPI中UDP的使用 1 ...

  2. python利用mysql数据库实现一个中英文翻译程序兼单词试卷生成并改阅功能,并可以爬取有道官网进行在线翻译。

    直接上运行截图(代码在后面) 开始界面 使用navicat查看mysql数据库中的数据 单词查询功能测试 本地翻译一个本地数据库中有的单词 本地翻译一个本地数据库中没有的单词 爬取有道官网进行在线翻译 ...

  3. Java英汉翻译程序_java实现简单的英文文本单词翻译器功能示例

    本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.bufferedreader; im ...

  4. Python—实训day3—简单的在线翻译程序

    4 发送POST请求 4.3 用poster获取有道在线翻译 参考有道翻译:http://fanyi.youdao.com/ 通过Fiddler工具可以获取到 请求的URL地址为:http://fan ...

  5. python循环五要素_python常见单词在手,编程入门不愁

    点击蓝字"python教程"关注我们哟! 前言: 人工智能时代,python编程语言站在风口起飞,2018年7月的世界编程语言排行榜跃居于编程语言前三,2018年的IEEE顶级编程 ...

  6. 什么是编译程序(含翻译程序、解释程序和中间代码的定义介绍)

    文章目录 1.几种基本的翻译程序 1.1翻译程序 1.2汇编程序(Assembler) 1.3编译程序(Compiler) 1.4解释程序(Interpreter) 1.5总结 2.编译程序的运行过程 ...

  7. 计算机英语单词(软件类)

    编程 api(application programming interfaces,应用程序接口) ascii(american standard code for information inter ...

  8. 翻译java语言的软件_java实现英文翻译程序

    本文实例为大家分享了java实现英文翻译程序的具体代码,供大家参考,具体内容如下 1.功能简介 将文本文件中的英文转换为对应的中文 词库如下: 源文件: 翻译后的文件: 输入源文件路径,将翻译后的内容 ...

  9. 【编译原理】-- 第一章(翻译程序、编译程序、汇编程序、解释程序、编译过程概述)

    编译系统 高级语言的优点是有代价的,必须有一个"翻译程序",也就是高级语言必须有相应的软件支持系统,"编译程序+相应的支持用户程序"---编译系统. 一般这种编 ...

最新文章

  1. 复杂人机智能系统功能分配方法综述
  2. oracle10g获取Date类型字段无时分秒解决办法!
  3. [语义]情感分析方向近况·0908
  4. android 源码下载编译
  5. 手机端实现点击复制功能
  6. nc 传输文件和目录
  7. 字符串和整形、浮点类型的相互转化
  8. servlet与tomcat的关系
  9. js app缓存自动刷新_如何通过清除缓存来刷新App Store中的内容
  10. [C++] iota语句的语法
  11. html 图片剪裁压缩,HTML5 canvas实现图片拉伸、压缩与裁剪
  12. JQ基础练习---图片划过变暗
  13. 改logback logstash-logback-encoder 框架本身的日志级别
  14. 俩台电脑怎么设置同一局域网_方法 | 把手机上的照片传到电脑上
  15. 蔚来明年推出Gemini 该系列保持高端定位?
  16. 【git】Git Submodule管理项目子模块
  17. Apache Spark 2.2.0 中文文档 - Spark RDD(Resilient Distributed Datasets)
  18. mysql更改密码_Mysql更改密码、连接mysql、mysql常用命令
  19. Java学习路线图(2022最新版)你真的只需要看这一篇
  20. 无人机拉力测试台研制测试过程中的9个关键技术点

热门文章

  1. WEB和JAVA WEB
  2. 吃一堑长一智!java开发实战经典答案百度云
  3. 腾讯入股京东对抗阿里 将改变电商格局
  4. 飞控cpci计算机靶机公司,CPCI专用测试系统的研制
  5. 对话机器人之LaMDA
  6. ONLYOFFICE与O2OA参加西部教育博览会圆满成功
  7. OSGI框架常用控制台命令
  8. OpenCV计划推出三代OAK相机
  9. 浅析vue3PDF插件不显示文字
  10. 恩墨oracle每日工作,DBA日常工作职责 - 我对DBA的七点建议