基础语法
- 变量与常量
- 包括布尔、整数、浮点、字符串
- 变量声明的两种方法
- 常量没有确定类型,会根据上下文自动推导
- if-else
- 类似cpp,condition语句无括号
- for循环
- 唯一的循环
- switch
- 不需要加break
- 可以使用多种匹配
- 取代if-else
- 数组与切片
- 切片的长度可变,使用make创建,类似python的list,能执行append和切片操作
- map
- 通过make创建
- 完全无序
- 获取不存在的key,返回0,所以需要用v, ok = map[k],通过ok判断是否含有键值对
- 函数
- 支持返回多值
- 指针
- 结构体
- 类成员函数的实现
- 错误处理
- 字符串
- 多种操作函数
- 格式化输出;%v、%+v、%#v;%.2f
- json
- 时间处理
- 字符串转数字解析:strconv包
- 进程信息:os、os/exec
实战案例
猜数游戏:
- 随机数生成
- for循环
- 读取输入
- 比较输入与随机数,直至猜中
在线词典
- 实际上做了一个request,请求外部链接
- 需要做json的创建与解析
- 不同于python直接操作类似map的对象(dict),需要创建和response中字段对应的结构体,实现解析
SOCKS5代理
原理
代码实现
主要是resquest中各协议字段的读取,和response中协议字段的返回
- auth的实现
- 请求的实现
- relay阶段
- 双向数据的转发:包括reader->dest和dest->conn
- 需要等待copy执行完成才能退出,用到context.WithCancle()函数