这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
在线词典的思路和流程
GO 相关语法知识
结构体:
在方法中传入结构体指针作为参数,既可以起到修改作用,还有可以在某些情况下避免大结构体拷贝的开销 也可以为结构体定义方法。
好处是可以通过a.方法名来调用函数 ,对比非结构体方法 修改方式为:将第一个参数加上括号添加到函数名前
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)
}