这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
-
1.1 什么是Go语言?(8个优点)
-
1.2哪些公司在使用Go语言?(总之就是很多大公司)
-
1.3字节为什么用Go语言?
-
2.1开发环境-安装Golang 开发环境-配置集成开发环境(vscode或Goland) 开发环境-在线试用
-
2.2基础语法-helloworld
package ... //程序的入口文件
import( //导入包
"fmt" //fmt包用来输入输出、格式化字符串
"......"
)
func main(){ //main函数
fmt.Println("hello world")
...............
}
-
运行程序:
-
法一:go run xxx (xxx是要运行的.go文件)
-
法二:go build XXX (.go文件) ./main
-
查看包的文档:鼠标悬浮在包上能看到详细介绍以及详细文档的链接
2.2基础语法-变量
- 变量声明:
- 法一:var name = value (变量类型可写可不写) 若要写类型:var name type = value
- 法二:name := value 若要写类型:name := type(value) 常量声明: var改成const即可,常量没有确定的类型,会根据使用的上下文自动确定类型
2.3基础语法-if else
- if...else...
- if...else if...else
2.4基础语法-循环
- 只有for循环
- continue继续循环,break跳出循环
2.5基础语法-switch 分支结构
switch 变量{ //这里也可以不写变量,直接在每个case里写条件判断语句 case value1: .... case value2: .... .... default: .... }
- 不会走完每个case,走到符合条件的,就跳出来了
2.6基础语法-数组
- 数组长度固定,所以用切片更多
2.7基础语法-切片slice
- 可变长度数组
- make创建切片,append增加元素,copy拷贝切片,还有像Python一样的切片操作,len长度
2.8基础语法-map
- 就是哈希/字典,key-value,键值对
- make创建,len长度,delete删除,ok判断有没有指定的key存在
- map完全无序
2.9基础语法-range
- 可以用来快速遍历slice和map
2.10基础语法-函数
- 变量类型后置
- 如:func add(a int, b int) int{}
2.11基础语法-指针
- 主要用途:对常用参数进行修改
2.12基础语法-结构体
- 结构体是带类型的字段的集合(就是一个自创的类)
- 初始化时可以传入每个字段的初始值 2.13基础语法-结构体方法
- 可以自己为结构体定义一些方法
2.14基础语法-错误处理
- 可以在函数的返回值类型里加个error
2.15基础语法-字符串操作
- 有很多函数,用到的时候再查吧 2.16字符串格式化
- println、printf
- %v就可以代替C里的各种%d、%s之类的东西
2.17基础语法-JSON处理
- 结构体里的每个字段名开头字母大写,就可以用json.Marshal来序列化,Unmarshal可以反序列化
2.18基础语法-时间处理
- "time"包 具体的常用函数可以看看example里的例子,其他函数用到再查
2.19基础语法-数字解析
- "strconv"包 3个参数:字符串-进制-返回多少位精度的数字;Atoi快速转换
2.20基础语法-进程信息
- "os" "os/exec"包
3.1猜谜游戏
- (1)使用rand前要先设随机数种子,不然每次rand出来都是同一个数
- (2)windows环境下,去掉读取的字符串的换行符,要写成input = strings.TrimSuffix(input, "\r\n")
- (3)用scanf可以更简洁的输入
- (4)使用循环让用户可以一直猜,知道猜对为止
3.2命令行词典/在线词典
- (1)调用第三方的API去查询单词的意思,并打印出来
- (2)如何用go语言发送http请求、解析json、如何使用代码生成来提高开发效率
- (3)抓包,找到network里的post请求的dict
- (4)代码生成,右键刚才找到的dict,copy-copy as cURL,然后复制到curlconverter.com/#go 里面,选择go语言,就会生成代码,有错的部分删掉即可
- (5)代码解读,可以结合PPT看,源码上也写了点注释
- (6)生成Request body,用json序列化的相关知识来改变查询的单词,构造一个跟Request一一对应的结构体,然后序列化变成一个buf数组,再把buf数组转成字符串赋给data
- (7)解析response body,反序列化,构造一个跟response一一对应的结构体,然后把json字符串反序列化到结构体里(用oktools.net/json2go 来把json转成golang的结构体,在网页上的preview里复制结构体过去,然后点转换-嵌套)
- (8)打印结果,选择需要的信息进行打印,顺便在前面判断一下有没有出错,如果出错了,返回出错信息方便找到问题所在
- (9)完善代码,把固定的"good"换成变量"Word",修改main函数
3.3 SOCKS5代理
- (1)原理-使用socks5代理有四个阶段:协商/握手阶段-认证阶段-请求阶段-relay阶段
- (2)先通过TCP echo server来简单入门(nc是什么命令??)(好吧,发现nc和curl在Windows上都要手动下载并加到环境变量里)(很多注释笔记直接写在代码上了)