Go语言课堂笔记 | 青训营

57 阅读5分钟

Go语言可以说是结合了C语言和python的部分优势,具有一些特点:高性能、高并发,简单易懂的语法,丰富的标准库,强大的工具链,静态编译快速编译,跨平台支持,垃圾回收。

语法方面拥有C语言和python基础的我并不难掌握:

这里附上一段代码看读者是否了解:

package main

 

import "fmt"

 

func main() {

    // 数组

    var arr [5]int

    arr[0] = 1

    arr[1] = 2

    fmt.Println(arr) // [1 2 0 0 0]

 

    // 切片

    slice := make([]int, 0)

    slice = append(slice, 1)

    slice = append(slice, 2)

    fmt.Println(slice) // [1 2]

}

 

实践课上涉及了三个实际案例:

一、构建一个简单的猜数字游戏的步骤和实现过程。

1.生成随机数:使用Go语言的rand包和time包,通过设置随机数种子,生成一个随机数,并打印到屏幕上。

2.用户输入输出:使用Go语言的bufio包将标准输入(os.Stdin)转换成可读取的缓冲区,并从中读取用户输入的数字。将读取的字符串转换为整数,并处理转换错误。

3.比较数字:将用户输入的数字与随机生成的数字进行比较,提示用户是猜的数字高于还是低于秘密的随机数。

4.循环游戏:为了让游戏可以持续进行,将整个猜数字过程放入一个循环中。如果猜对数字,则提示用户胜利并退出游戏,否则继续循环猜数。

二、实现一个命令行版本的词典:这个词典可以在命令行中输入一个单词,然后通过调用第三方API查询该单词的音标和解释,并输出到命令行中。

实现步骤概括如下:

1.     打开在线翻译网页,右键浏览器检查,查看POST请求的参数,找到需要发送的API请求。

2.     使用代码生成工具将浏览器中的请求字符串转换为Go语言中的代码。

3.     发送HTTP请求到API并获取返回的JSON响应。

4.     使用代码生成工具将返回的JSON响应转换为Go语言中的结构体。

5.     解析返回的JSON响应,提取出音标和解释信息,并输出到命令行中。

6.     构建命令行参数处理逻辑,接收用户输入的单词,并调用相应的函数查询并输出结果。

值得注意的是这个例子讲解了如何发送HTTP请求并解析JSON数据,以及如何利用代码生成工具简化代码编写过程。该例子是一个简单的命令行词典,为接下来更复杂的项目打下了基础。

三、根据上述讲解的内容,梳理出实现一个简化版的代理服务器的步骤如下:

1.     创建TCP Server:首先,创建一个TCP服务器,监听指定的端口,用于接收来自浏览器的连接请求。

2.     连接接受处理:在主循环中,接受来自浏览器的连接请求,并返回一个连接对象,表示与浏览器的通信通道。

3.     协议版本和认证阶段:从浏览器发送的请求报文中,解析协议版本和认证方式。验证协议版本是否正确。如果需要认证,按照协议要求,进行认证流程。

4.     请求阶段:从浏览器发送的请求报文中,解析出请求类型、目标地址类型、目标地址和端口号。根据目标地址类型和目标地址创建TCP连接。返回代理服务器对连接的响应报文,告知浏览器建立连接成功或失败。

5.     双向数据转发:一旦与下游服务器建立了TCP连接,启动两个协程或线程进行双向数据转发。一个协程从浏览器读取数据,然后将其写入与下游服务器的连接。另一个协程从下游服务器读取数据,然后将其写入与浏览器的连接。

6.     错误处理:在数据转发的过程中,任何一方出现错误(如连接关闭)时,终止整个连接,关闭所有相关的连接。

7.     完善协议支持:考虑完善协议支持,支持更多的认证方式和目标地址类型。

8.     调试和测试:运行代理服务器,并进行测试,验证是否可以正确地与浏览器和下游服务器进行双向数据转发。

9.     配置浏览器使用代理服务器:在浏览器中配置代理服务器的地址和端口,以便使用代理服务器进行访问。

上述是一个简化版的代理服务器实现步骤,实际的代理服务器可能涉及更多的细节和协议支持。同时,代理服务器的实现还需要考虑安全性和性能等方面的问题。

总结:学习Go语言是一次非常愉快和有意义的经历。它不仅让我掌握了一门新的编程语言,还为我提供了解决实际问题的强有力工具。我期待着在未来能够继续深入学习和应用Go语言,将其应用于更多的项目和领域中。