Go语言入门--基础语言 | 青训营笔记

95 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记.

第一次接触go语言,不得不说,对于用惯了java的我来说,还是有很大冲击的...

什么是go语言

  • 高性能、高并发
  • 语法简单、学习曲线平滑 (这点深有体会,变量的命名,可以返回多值,循环的多种for等等,每行结尾一般来说可以不加;很智能)
  • 丰富的标准库
  • 完善的工具链
  • 静态链接
  • 快速编译
  • 跨平台
  • 垃圾回收

安装golang

我是用的vscode,值得注意的是,你在vscode上运行代码,要下载一些插件,而且运行代码也要,你可以在终端直接go run,也可以用了launch.json,可以在configuration里加一些配置

go的语法很严格,import的包如果没用到也会报错

语法详细可以参考Go语言圣经

实战

猜谜游戏,这个没什么好说的,注意的是生成随机数的函数,要用时间戳来初始化随机数种子

go语言的输入

一种比较复杂的输入
reader := bufio.NewReader(os.Stdin)
input,err := reader.ReadString('\n')
input = strings.TrimSuffix(input,"\n")//windows上要加个\r
guess,err := strconv.Atoi(input)

作业题

    //简单的输入
    var guess int
    _, err := fmt.Scanf("%d\n", &guess)

在线词典 首先要抓包,复制curl,然后去这个网站convert一键生成代码,不得不说真的方便,生成json后去这个网站oktools直接转换为结构体,回到代码那改好,再把代码完善一下,把查询逻辑抽出来,就可以了。

作业题23

再增加另一种翻译网站的支持,我选了有道词典,需要注意的是,有道的请求载荷不是json,是表单,所以不能想彩云直接构造请求体再序列化后发送,直接用strings的NewReader方法。 至于并发执行,我使用的是WaitGroup的方法。

    var wg sync.WaitGroup
    wg.Add(2)//计数器加2
    go func() {
            queryWithCaiyun(word)
            wg.Done()//计数器-1
    }()
    go func() {
            query(word)
            wg.Done()
    }()

    wg.Wait()//计数器不为0时阻塞

最后一个小demo是socks5代理 首先,我们要了解什么是代理,通俗的话讲就是网络信息的中转站,有了它,我们可以解决网络延时,提高运行速度,还可以做防火墙,隐藏ip等等。 而socks5代理只是代理IP协议中的一个,也是最重要和最流行的一种协议。只有socks5协议的代理IP才可以实现真正的匿名代理,没有它所有的高匿代理IP都将会失效

image.png

socks5工作原理

有四个阶段,握手,认证,请求,relay阶段。 第一个是握手阶段,浏览器会向socks5代理发送请求,包的内容包括协议的版本号, 还有支持的认证的种类,socks5 服务器会选中一个认证方式,返回给浏览器。如果返回的是00的话就代表不需要认证,返回其他类型的话会开始认证流程。 第三个阶段是请求阶段,认证通过之后浏览器会socks5服务器发起请求。主要信息包括版本号,请求的类型,一般主要是connection请求,就代表代理服务器要和某个域名或者某个IP地址某个端口建立TCP连接。代理服务器收到响应之后,会真正和后端服务器建立连接,然后返回一个响应。 第四个阶段是relay 阶段。此时浏览器会发送正常发送请求,然后代理服务器接收到请求之后,会直接把请求转换到真正的服务器上。然后如果真正的服务器以后返回响应的话,那么也会把请求转发到浏览器这边。然后实际上代理服务器并不关心流量的细节,可以是HTTP流量,也可以是其它TCP流量。这个就是socks5协议的工作原理。