这是我参与「第五届青训营」伴学笔记创作活动的第 1 天
准备: 安装和配置Go语言及集成开发环境,参考课前预习资料
基础语法
- 变量var
整型、浮点型、布尔型、字符串
字符串可直接使用"+"拼接,"="比较。
标准库strings有字符串的常用操作:
strings.Contains():判断字符串中是否包含另一字符串
strings.Count():统计字符串中指定字符串出现的次数
strings.Index():返回第一次出现指定字符串的索引
strings.Join():拼接字符串
strings.Replace():替换字符串
strings.Split():分割字符串
格式化:"v":输出任意类型变量;"+v":输出详细信息;"#v":输出更详细信息
- 常量const
- if-else
- for循环
- switch分支结构
case中无需写break
default需写在最后
- 数组
- 切片
make()创建、append()追加,不支持负数索引
- map
make()创建,delete()删除
map中元素完全无序
判断键是否存在: v,ok:=map[k]
- range
for k,v:=range a{
...
}
a为slice时,k为索引,v为对应值;
a为map时,k为键,v为值;
可使用"_"进行忽略
- 函数
- 指针
- 结构体
带类型的字段的集合,推荐使用指针操作,避免大结构体的拷贝开销
- 方法
- 错误处理
if-else处理,返回值增加error
- JSON处理
json.Marshal():序列化
json.UnMarshal():反序列化
- 时间处理
time.Now():获取当前时间
time.Date():构造带时区的时间
- 数字解析
字符串与数字之间的转换,使用标准库strconv:
strconv.ParseInt():解析字符串
strconv.Atoi():十进制字符串转数字
strconv.Itoa():数字转字符串
- 进程信息
使用标准库os获取进程信息
实战项目
猜谜游戏
- 生成随机数,读取用户输入,进行判断。重点在于随机数的生成和输入的读取。
//用时间戳初始化随机数种子,否则每次生成的随机数一样
maxNum := 100 //确定随机数上限
rand.Seed(time.Now().UnixNano())
secretNum:=rand.Intn(maxnum)
//讲解中使用
reader := bufio.NewReader(os.Stdin)
//作业提示使用
fmt.Scanf()
- 需注意Scanf()的"/n"问题,/n是为了读取非空白字符,并不表示匹配此字符。
在线词典
-
确定需要生成的请求
- 浏览器打开检查,找到该请求,Copy→Copy as cURL(bash) ;
- 代码生成:打开网站curlconverter.com/go/ ,粘贴到输入框中,即可得到相应语言的代码请求;
- 复制到本地,运行,可得到相应的json;
-
json转为go struct:oktools.net/json2go
- 将JSON字符串复制粘贴到框中,多行的话需删除换行;
-
作业:使用go协程并行处理,WaitGroup进行阻塞
SOCKS5代理
- 由客户端直接访问变为通过socks代理间接来访问目标地址。明文传输,不能翻墙。
- 分为四个阶段,握手、认证、请求、relay阶段,代码实现也如此划分,主要在于对报文字符串的解析处理,原理参考该文
总结
在线字典项目了解到两个好用网站。首次接触socks5代理,学习有点困难。