go基础语法及实战| 青训营笔记

92 阅读3分钟

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

go安装

最新版本下载地址官方下载 golang.org,当前是 1.13.6。如无法访问,可以在 studygolang.com/dl 下载

使用 Linux,可以用如下方式快速安装

$ wget https://studygolang.com/dl/golang/go1.13.6.linux-amd64.tar.gz
$ tar -zxvf go1.13.6.linux-amd64.tar.gz
$ sudo mv go /usr/local/

$ go version
go version go1.13.6 linux/amd64

Hello go

新建一个文件 main.go,写入

package main

import "fmt"

func main() {
	fmt.Println("Hello World!")
}

1.猜字谜游戏

(1)随机数生成 go使用"math/rand"包创建随机数,与其他语言一样,在没有指定随机数种子时,创建的随机数为伪随机数,要真正得到随机数要加入"time"包。

import(
     "fmt"
     "math/rand"
     "time"
 )
 
 func main(){
    maxNum : =100
    rand.Seed(time.Now().UnixNamo())
    secretNumber := rand.Intn(maxNum)
    fmt.Println("   ",secretNumber)
 }

(2)读取用户输入 在读取时采用了bufo.NewReader(os.stdin)读取一行输入,将数据转化为流的形式操作,但其实使用Scanf更为方便,引入bufo是sock55中使用了。Readstring('\n')读取流的一行,在每次读取时会在最后出现一次换行符,使用TrimSuffix(imput,"\n")将换行符去掉。再使用strconv.Atoi(imput)将读取的流转换成数字。 (3)逻辑判断 比较猜测数与被猜测数大小,并给出相应返回值。 (4)循环 在读取流前加入for循环,在没有完成猜测前的每次判断都以continue结尾。

2.在线词典(向http发送请求,解析json...)

(1)抓包
eg:https:fanyi.caiyunapp.com/

image.png 对请求处理:将json复制并对curl做处理(使用curlconverter.com/#go 转码) (2)请求处理 image.png

转码后: 主函数分别为创建请求,设置请求,发起请求,读取响应。为了避免参数占用内存过大,创建请求时采用流(占用内存小)。 image.png

序列化jison 构造结构体字段名字与json的字段一一对应。

(3)respomse结构化 使用oktools.net/json2go 将preview代码粘贴即可。点击转换嵌套。 定义dictResponse变量DictResponse,使用json.U你Marshal()将bodyText反序列化到变量中. 打印时用%#v打印disResponse.打印时筛选要用到的数据。

3.socks5

原理: socks5 协议的工作原理。正常浏览器访问一个网站,如果不经过代理服务器的话,就是先和对方的网站建立 TCP 连接,然后三次握手,握手完之后发起 HTTP 请求,然后服务返回 HTTP 响应。如果设置代理服务器之后,流程会变得复杂一些。 首先是浏览器和 socks5 代理建立 TCP 连接,代理再和真正的服务器建立 TCP 连接。这里可以分成四个阶段,握手阶段、认证阶段、请求阶段、 relay 阶段。

在main()中使用net.listen("tcp","127.0.0.1.1000")增添一个端口,接着用一个是循环server.Accept()接受请求。成功后返回一个链接client,再使用go process(client)处理链接(类似子线程) process()函数实现,首先用defer conn.Close()关掉链接,链接生命周期与函数生命周期一致。基于此链接创建只读的一个流reader :=bufo.NewReader(conn),在一个死循环中使用reader.ReadByte()。 auth(认证阶段) 协议版本号等信息逐步验证, 请求阶段 主要为connect()函数实现,包含6个字段。 relay阶段 net.dial()建立tcp协议

[ ](Go 语言简明教程 | 快速入门 | 极客兔兔 (geektutu.com))