Go 语言引入 | 青训营笔记

46 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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

字符串处理

2023-01-15-22-37-20-image.png

字符串格式化

2023-01-15-22-37-47-image.png

  • 注意:

    • 与C不同,使用%v即可完成占位
    • 使用+和#获取更加详细的信息

JSON处理

2023-01-15-22-40-08-image.png

  • 保证构造体的公开字段(即Home, Age, Hobby)首字母大写,后面可以使用json的tag让print出来的字段为小写

  • 使用Marshal处理,并达到一个 byte 数组

    • 之后使用强制类型转换得到字符串
  • 同样的,也可以使用反序列化 Unmarshal 将序列化之后的字符串传化为 json

时间处理

2023-01-15-22-47-21-image.png

  • 包括几乎所有常用方法

  • 注意:

    • 时间的格式化使用的不是 YY MM DD之类,而是一个特定的时间“2006-01-02 15:04:05”

      • 据了解:这个特殊的时间是按照美国时间习惯产生的

        January 2ed 15:04:05 2006

        1月2日 下午3点4分5秒 06年

数字转换

2023-01-15-22-50-41-image.png

  • 第一个参数是待转换的字符串,第二个参数是进制,第三个参数是精度

    • 当第二个参数为0时,表示自动处理
  • Atoi是默认十进制转换

进程信息

2023-01-15-22-53-32-image.png

  • Args是获取命令行参数
  • Getenv和Setenv是获取或者写入环境变量

实战案例

猜谜游戏

生成随机数

  1. 导入随机数包 “math/rand”
  2. 使用时间戳初始化随机数种子
  3. 使用 bufio.NewReader(os.Stdin)将文件转换为一个只读的流
  4. 使用 strings.TrimSuffix 去除从流中读入的换行符

在线词典

  1. 在开发者工具中抓包

  2. 复制 curl 并利用工具解析转换成代码

  3. 分析 Preview 和 Response 并定义对于的构造体

    1. 可以手搓
    2. 也可以使用工具自动生成构造体
  4. 对 Request 进行序列化

  5. 对 Response 进行反序列化

Socks5

Socks5本身没有对数据进行加密,理论上不能作为魔法代理 :see_no_evil:,但是...

http的header相关操作就不记了,毕竟一般都是用别人封装好了的

一点想法

  1. Question: go的编译是静态编译,为什么常量在使用时还可以被赋予类型?
  2. 既然Socks5代理可以对数据进行操作,那么我是否可以在Socks5 Server对数据进行加密解密