2022.5.7 第一次课 Go语言上手 自用笔记 | 青训营笔记

117 阅读4分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第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上都要手动下载并加到环境变量里)(很多注释笔记直接写在代码上了)