GO语言基础 | 青训营笔记

458 阅读4分钟

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

一、本堂课重点内容:

本节课主要讲解了go语言的基础语法和入门实战,三个实战项目分别为:猜数字游戏、在线词典和实现一个简单的socks5代理。

二、详细知识点介绍:

golang的安装

首先是对开发环境的配置: 在终端输入

brew install go@1.16

这是我本次安装的golang路径

我的是/opt/homebrew/Cellar/go@1.16/1.16.15

我还安装过第二个版本/opt/homebrew/Cellar/go@1.17/1.17.13

golang的环境配置

vim  ~/.zshrc

在~/.zshrc文件中,追加上红圈中的内容即可。注:GOPATH路径需要替换成自己的golang路径。

验证

在终端中输入go version进行验证

出现下图所示结果则表示配置成功

安装goland并进行配置

官网下载地址: www.jetbrains.com/products/

配置GOROOT: image.png

配置GOPATH: image.png

配置GOPROXY: image.png

基础语法

  • go中的 := 可以实现变量类型的自动推导,在定义变量的时候使用

  • 导入包:使用 import 关键字导入需要使用的包。

  • 函数定义:使用 func 关键字定义函数。函数return的可以是一个函数。

  • 变量声明:使用 var 关键字声明变量。

  • 控制结构:Go 语言支持 if、for、switch 等控制结构。

  • 注意点:

    1. go中没有while,可以直接通过for{}实现死循环。
    2. switch具有新的用法如下图所示:在该情况下switch的case可以是一个条件判断语句

image.png

Go语言标准库

  • fmt:提供了格式化输入输出的函数。
  • os:提供了与操作系统交互的函数。
  • net:提供了网络编程的函数。
  • strings:提供了字符串操作的函数。

三、实践练习例子:

猜谜游戏

首先要生成需要猜测的伪随机数 注意:

  1. 生成伪随机数的时候需要指定随机数种子,若不指定随机数种子则会导致每次生成的随机数都是一样的这里我们采用时间戳作为随机数种子,时间戳是格林威治时间起始至今的总秒数
  2. go语言中只有同为string类型才可以用 + 进行拼接,str + int无法拼接直接报错

在线字典

以在该项目中我们定义一个Request负载的结构体为例: json:"trans_type"表示在采用json相关的函数去处理结构体的时候会自动的将TransType字段转成trans_type

image.png

手写一个SOCKS5代理

Socks5代理原理

image.png

首先是浏览器和socks5代理建立TCP连接,代理再和真正的服务器建立TCP连接。这里可以分成四个阶段,握手阶段、认证阶段、请求阶段、relay阶段。

第一个握手阶段,浏览器会向socks5代理发送请求,包的内容包括一个协议的版本号,还有支持的认证的种类,socks5服务器会选中一个认证方式,返回给浏览器。如果返回的是00的话就代表不需要认证,本项目实现的就是一个不需要认证的socks5代理。

第三个阶段是请求阶段,认证通过之后浏览器会socks5服务器发起请求。主要信息包括版本号,请求的类型,一般主要是conecton请求,就代表代理服务器要和某个域名或者某个IP地址某个端口建立TCP连接。代理服务器收到响应之后,会真正和后端服务器建立连接,然后返回一个响应。

第四个阶段是relay阶段。此时浏览器会发送正常发送请求,然后代理服务器接收到请求之后,会直接把请求转换到真正的服务器上。然后如果真正的服务器以后返回响应的话,那么也会把请求转发给浏览器。

四、课后个人总结:

今天首先安装了golang的环境和开发工具,并学习了基础语法。 通过三个小项目对基础语法进行了进一步的熟悉。

五、引用参考: