走进GO | 青训营笔记

47 阅读2分钟

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

主要介绍GO的背景、安装环境、基础语法和标准库


背景

  • 性能好
  • 学习周期短
  • 跨平台

语言基础

1.11.2两次课都是基于讲师的案例展开,1.1是基础语法,1.2是实战

环境

基础语法

List some differences

  • type: string int float bool
  • var name type = xxx or name := xxx
  • 常量const,自动判别类型
  • IfC++类似,if后判定语句没括号(若果有会被删除),执行语句必须换行
  • 循环只有for,同样也是省略括号
  • switch更加强大,省略了C中每个case必需的break,能实现更清晰的选择
  • array slice map基本差不多
  • 变量类型是后置的

标准库

  • fmt
  • strings
  • encoding/json
  • time
  • strconv
  • os
  • 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

这个案例主要讲的就是关于POSTGET还有一些HTTP相关知识点,并且调用已有的词典API对单词进行翻译并且返回,较为复杂的地方在json的处理和结构体,可以利用一些现有的工具对json进行转义,变成简单的go语言。

初始化每个结构体成员,再调用 JSON.marshaler 来得到这个序列化之后的字符串,把 strings.newReader 改成 bytesnew ready 然后来构造request上的 body 。然后就能成功地进入一个变量来发送 HTTP 请求。

Proxy

socks5 协议虽然是代理协议,但它并不能用来翻墙,它的协议都是明文传输。

这个协议历史比较久远,诞生于互联网早期。部分企业有很严格的防火墙策略,但是带来的副作用就是访问某些资源会很麻烦。socks5 相当于在防火墙开了个口子,让授权的用户可以通过单个端口去访问内部的所有资源。实际上很多翻墙软件,最终暴露的也是一个 socks5 协议的端口。有一些爬虫用的代理 IP 池的很多代理的协议就是 socks5。