这是我参与[第五届青训营]伴学笔记创作活动的第1天
基础语法
运行方式:(1)go run xxx.go (2)go build xxx.go,生成exe文件后运行
变量:字符串、整数、布尔、浮点型
创建变量方式:(1)var 变量名 = 变量值 (2)变量名 := 变量值
创建常量:const 常量名 = 常量值
数组:(1)var 数组名 [n]变量类型{赋值} --n代表数组长度 (2)通过索引赋值,数组名[索引] --索引不可超出n
切片:名称 := make([ ]变量类型 , 长度) append追加元素 len长度
map:名称:=make(map[键类型]值类型) 通过键赋值与访问
range:for i,v range nums 如果nums是数组为索引和值,如果nums是map为键和值
函数:
(1)func 函数名(参数1 类型,参数2 类型)(返回值1 类型,返回值2,类型){return 返回值1,2}
(2)func 函数名(参数1 类型,参数2 类型)返回值类型 {return 返回值其他}
指针:可以对参数的值进行修改,在类型前加*,在取值时加&
func add2(n int) {
n += 2
}
func add2ptr(n *int) {
*n += 2
}
func main() {
n := 5
add2(n)
fmt.Println(n) // 5
add2ptr(&n)
fmt.Println(n) // 7
}
结构体:type 名称 struct{变量1 类型 变量2 类型}
(1) var 实例名称 结构体名称;通过 实例名称.变量名=赋值
(2)实例名称:=结构体名称{}
结构体方法:func (名称 结构体)函数名(参数 类型)返回类型{}
错误处理:在函数返回值后加一个error类型的参数,通过判断是否为nil,查看有无错误
字符串格式化:Printf时使用 %v 可接收所有类型
JSON处理:结构体中声明值所有变量的首字母大写,可通过 json:"别名"添加别名
使用json.Marshal(JSON结构体)将JSON序列化,加上string强转
使用json.Unmarshal反序列化
事件处理:time.Now()为当前时间
t.Format("2006-01-02 15:04:05")格式化时间
数字解析:
strconv.ParseFloat( xx ,精度) --转换为浮点
strconv.ParseInt( xx ,进制,精度) --转化为整数
strconv.Atoi( 字符串 ) --将字符串转为整数
案例一 在线词典
1.抓包
使用彩云小译(fanyi.caiyunapp.com/) 作为翻译器,先随意输入一个单词,再从检查F12->网络中,找到发送方式为post的dict,选中dict右键copy as cURL(base),到网址(curlconverter.com/go/) 生成go代码
client := &http.Client{}
var data = strings.NewReader(`{"trans_type":"en2zh","source":"nice"}`)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
&http.Client{}:要控制HTTP客户端头、重定向策略和其他设置,请创建一个客户端
http.NewRequest:参数分别代表请求方式、url、body(请求负载)是一个io.Reader类型
if err != nil {
log.Fatal(err) //Fatal相当于Print()后跟对os的调用,出口
}
...
resp, err := client.Do(req) //Do发送http请求
...
defer resp.Body.Close() //关闭客户端,defer关闭流
bodyText, err := ioutil.ReadAll(resp.Body) //读取数据
2.生成requestBody
构建请求结构体,将JSON序列化后转为bytes,传入http:NewRequest 的data
3.解析responseBody
将相应的JSON输入到网址oktools.net/json2go 生成响应结构体,获取所需结构体的数据
4.打印数据
os.Args为go run 后得参数,将word := os.Args[1]传入到request := DictRequest{TransType: "en2zh", Source: word}中,最后打印