在线词典|青训营笔记

112 阅读2分钟

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

在线词典的思路和流程

GO 相关语法知识

结构体:

在方法中传入结构体指针作为参数,既可以起到修改作用,还有可以在某些情况下避免大结构体拷贝的开销 也可以为结构体定义方法。

截屏2022-05-08 10.10.05.png

好处是可以通过a.方法名来调用函数 ,对比非结构体方法 修改方式为:将第一个参数加上括号添加到函数名前

截屏2022-05-08 10.11.46.png

Json 结构体调用

只要是公开字段:即 第一个字母为大写 可以通过json.marshaler 进行json 序列化

1.抓包 network -dict 请求 找(request 请求是post 的) 在golang 里发送请求 右键请求 copy as curl -可以在命令行里测试是否返回的是json 数据 粘贴到 代码生成网址 curlconverter.com 选择编程语言

client := &http.Client{} 
var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)//创建请求 post 返回req 变量 data是一个流 用srting new reader 将其转化为流 来节省内存

在req.Header set 设置请求头 代码解读: //time out 参数 可以指定超时 req,eoo := (data不是字符串 是一个流) 设置请求头 resp, err := client.Do(req) //发起请求

if err != nil {
	log.Fatal(err)//退出进程
}
defer resp.Body.Close()//关闭流来防止泄漏
bodyText, err := ioutil.ReadAll(resp.Body)//读取响应 ioutil 

结构化reqeus 和response 序列化json 解析response body 复制preview 里 的json到 oktoolls.net/json2go\

3 //方便检查问题

if resp.StatusCode != 200 {
	log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText))
           
           

定义查询函数

	client := &http.Client{}
	request := DictRequest{TransType: "en2zh", Source: word}
	buf, err := json.Marshal(request)
	if err != nil {
		log.Fatal(err)
	}
	var data = bytes.NewReader(buf)
	req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
	if err != nil {
		log.Fatal(err)
                

通过主方法来传入query 参数

os.arg () 获取命令行参数

func main() {
	if len(os.Args) != 2 {
		fmt.Fprintf(os.Stderr, `usage: simpleDict WORD
example: simpleDict hello
		`)
		os.Exit(1)
	}
	word := os.Args[1]
	query(word)
}