这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
走进 Go 语言基础语法
基本语法
变量
-
Golang 是强类型语言
-
字符串 内置类型 + =
-
隐式 or 现式声明变量
- var_name := value
- var var_name type
-
const 常量在定义时没有类型 在使用时会根据上下文自动确定类型
If-else
语法与其他语言类型 注意if后面没有() ,如果书写了(),编译器会自动去除() if后面必须要有大括号 不能像C语言一样写在同一行
编辑器没有自动保存(),这里少了500多字的笔记 :sob:(emoji好像出不来
循环
- 在Go语言中只有for循环
- 只写一个for表示 死循环
- 循环语句的语法与C类似
错误处理
-
可以知道哪个函数返回了错误,可以使用if-else处理错误
- 不同于Java,在Java中是异常类,出现异常函数抛出,也可以使用try-catch处理错误
-
在函数的返回值类型里面加 error
字符串处理
字符串格式化
-
注意:
- 与C不同,使用%v即可完成占位
- 使用+和#获取更加详细的信息
JSON处理
-
保证构造体的公开字段(即Home, Age, Hobby)首字母大写,后面可以使用json的tag让print出来的字段为小写
-
使用Marshal处理,并达到一个 byte 数组
- 之后使用强制类型转换得到字符串
-
同样的,也可以使用反序列化 Unmarshal 将序列化之后的字符串传化为 json
时间处理
-
包括几乎所有常用方法
-
注意:
-
时间的格式化使用的不是 YY MM DD之类,而是一个特定的时间“2006-01-02 15:04:05”
-
据了解:这个特殊的时间是按照美国时间习惯产生的
January 2ed 15:04:05 2006
1月2日 下午3点4分5秒 06年
-
-
数字转换
-
第一个参数是待转换的字符串,第二个参数是进制,第三个参数是精度
- 当第二个参数为0时,表示自动处理
-
Atoi是默认十进制转换
进程信息
- Args是获取命令行参数
- Getenv和Setenv是获取或者写入环境变量
实战案例
猜谜游戏
生成随机数
- 导入随机数包
“math/rand” - 使用时间戳初始化随机数种子
- 使用
bufio.NewReader(os.Stdin)将文件转换为一个只读的流 - 使用
strings.TrimSuffix去除从流中读入的换行符
在线词典
-
在开发者工具中抓包
-
复制 curl 并利用工具解析转换成代码
-
分析 Preview 和 Response 并定义对于的构造体
- 可以手搓
- 也可以使用工具自动生成构造体
-
对 Request 进行序列化
-
对 Response 进行反序列化
Socks5
Socks5本身没有对数据进行加密,理论上不能作为魔法代理 :see_no_evil:,但是...
http的header相关操作就不记了,毕竟一般都是用别人封装好了的
一点想法
- Question: go的编译是静态编译,为什么常量在使用时还可以被赋予类型?
- 既然Socks5代理可以对数据进行操作,那么我是否可以在Socks5 Server对数据进行加密解密