这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
主要介绍GO的背景、安装环境、基础语法和标准库
背景
- 性能好
- 学习周期短
- 跨平台
语言基础
1.1和1.2两次课都是基于讲师的案例展开,1.1是基础语法,1.2是实战
环境
- Go Dowland
- GoLand (Tip: suggested using JB Toolbox ) or Visual Studio Code
- 个人建议了解清楚
GOROOT和GOPATH,选择自己习惯的包管理方案,避免后期发生紊乱
基础语法
List some differences
- type:
stringintfloatbool var name type = xxxorname := xxx- 常量
const,自动判别类型 If和C++类似,if后判定语句没括号(若果有会被删除),执行语句必须换行- 循环只有
for,同样也是省略括号 switch更加强大,省略了C中每个case必需的break,能实现更清晰的选择arrayslicemap基本差不多- 变量类型是后置的
标准库
fmtstringsencoding/jsontimestrconvos- etc.
三个实战的案例,基本语法的组合应用
一步一步流程,也没啥可以记录的,不熟悉的话跟着走一遍
Guessing
rand随机数,seed种子
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
- 读取输入,字符串处理,
if判定,输出结果
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
input = strings.Trim(input, "\r\n")
guess, err := strconv.Atoi(input)
- 套一层无条件
for循环,猜对break结束
Dict
这个案例主要讲的就是关于POST、GET还有一些HTTP相关知识点,并且调用已有的词典API对单词进行翻译并且返回,较为复杂的地方在json的处理和结构体,可以利用一些现有的工具对json进行转义,变成简单的go语言。
初始化每个结构体成员,再调用 JSON.marshaler 来得到这个序列化之后的字符串,把 strings.newReader 改成 bytes 点 new ready 然后来构造request上的 body 。然后就能成功地进入一个变量来发送 HTTP 请求。
Proxy
socks5 协议虽然是代理协议,但它并不能用来翻墙,它的协议都是明文传输。
这个协议历史比较久远,诞生于互联网早期。部分企业有很严格的防火墙策略,但是带来的副作用就是访问某些资源会很麻烦。socks5 相当于在防火墙开了个口子,让授权的用户可以通过单个端口去访问内部的所有资源。实际上很多翻墙软件,最终暴露的也是一个 socks5 协议的端口。有一些爬虫用的代理 IP 池的很多代理的协议就是 socks5。