Go语言入门实践 | 青训营笔记

76 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 1 天

准备: 安装和配置Go语言及集成开发环境,参考课前预习资料

基础语法

  1. 变量var
整型、浮点型、布尔型、字符串
字符串可直接使用"+"拼接,"="比较。
标准库strings有字符串的常用操作:    
    strings.Contains():判断字符串中是否包含另一字符串
    strings.Count():统计字符串中指定字符串出现的次数
    strings.Index():返回第一次出现指定字符串的索引
    strings.Join():拼接字符串
    strings.Replace():替换字符串
    strings.Split():分割字符串
格式化:"v":输出任意类型变量;"+v":输出详细信息;"#v":输出更详细信息
  1. 常量const
  2. if-else
  3. for循环
  4. switch分支结构
case中无需写break
default需写在最后
  1. 数组
  2. 切片
make()创建、append()追加,不支持负数索引
  1. map
make()创建,delete()删除
map中元素完全无序
判断键是否存在: v,ok:=map[k]
  1. range
for k,v:=range a{
    ...
}
a为slice时,k为索引,v为对应值;
a为map时,k为键,v为值;
可使用"_"进行忽略
  1. 函数
  2. 指针
  3. 结构体
带类型的字段的集合,推荐使用指针操作,避免大结构体的拷贝开销
  1. 方法
  2. 错误处理
if-else处理,返回值增加error
  1. JSON处理
json.Marshal():序列化
json.UnMarshal():反序列化
  1. 时间处理
time.Now():获取当前时间
time.Date():构造带时区的时间 
  1. 数字解析
字符串与数字之间的转换,使用标准库strconv:
strconv.ParseInt():解析字符串
strconv.Atoi():十进制字符串转数字
strconv.Itoa():数字转字符串
  1. 进程信息
使用标准库os获取进程信息

实战项目

猜谜游戏

  • 生成随机数,读取用户输入,进行判断。重点在于随机数的生成和输入的读取。
//用时间戳初始化随机数种子,否则每次生成的随机数一样
maxNum := 100   //确定随机数上限
rand.Seed(time.Now().UnixNano())  
secretNum:=rand.Intn(maxnum)

//讲解中使用
reader := bufio.NewReader(os.Stdin)
//作业提示使用
fmt.Scanf()

image.png

  • 需注意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代理,学习有点困难。