这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记。
Go语言前置
有高性能、高并发、丰富的标准库、垃圾挥手、跨平台等优势
Go语言基础
- switch、if-else、循环等基础语法与其他语言相似不赘述
- slice 真实业务代码中更多地使用切片(而非固定长度的数组)
//初始化方式
var identifier []type
slice1 := make([]type, len)
- map Go中的字典,golang中的map是完全无序的,遍历的时候是随机顺序输出。
- golang支持返回多个值 在实际业务代码中几乎所有函数都返回两个值,真正的返回结果以及错误信息。
- Json操作 JSON.marshaler去序列化,变成json的字符串 序列化后的字符串也能用JSON.unmarshaler反序列化到一个空的变量里。
- 获取时间戳的时候 可以用time.now.unix()
实战
猜谜游戏
- 使用不同的随机数种子 生成不用的数
- ReadString 去掉换行符再转换为数字,如果转换失败,我们同样打印错误并退出
- bufio.NewReader来读取
在线词典
- 代码生成 curlconverter.com/#god 将curl命令转换为go代码 转换post请求
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}//创建http client 可以指定参数
var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)
//创建请求 http方法、URL、body
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Connection", "keep-alive")
req.Header.Set("DNT", "1")
req.Header.Set("os-version", "")
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) 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("device-id", "")
req.Header.Set("os-type", "web")
req.Header.Set("X-Authorization", "token:qgemv4jr1y38jyq6vhvi")
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")
req.Header.Set("Cookie", "_ym_uid=16456948721020430059; _ym_d=1645694872")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()//body是个流 为避免资源泄漏 增加defer来关闭这个流 在函数运行结束以后去运行
bodyText, err := ioutil.ReadAll(resp.Body)//读取流
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
- 生成 request body
- 解析 response body 将json生成golang结构体 可借助oktools
补充:如何读取用户的键盘(控制台)输入呢?
从键盘和标准输入 os.Stdin 读取输入,最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。
也可以使用
bufio 包提供的缓冲读取(buffered reader)来读取数据,正如以下例子所示: