Go入门与项目实战

94 阅读1分钟

基础语法

  • 变量与常量
    • 包括布尔、整数、浮点、字符串
    • 变量声明的两种方法
    • 常量没有确定类型,会根据上下文自动推导
  • 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代理

原理

image.png

代码实现

主要是resquest中各协议字段的读取,和response中协议字段的返回

  • auth的实现
  • 请求的实现
  • relay阶段
    • 双向数据的转发:包括reader->dest和dest->conn
    • 需要等待copy执行完成才能退出,用到context.WithCancle()函数