Go基础|青训营笔记

357 阅读3分钟

veer-322270915.jpg

这是我参与[第五届青训营]伴学笔记创作活动的第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}中,最后打印


参考资料:hi-hi.cn/go