这是我参与「第五届青训营 」伴学笔记创作活动的第 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/
对请求处理:将json复制并对curl做处理(使用curlconverter.com/#go 转码)
(2)请求处理
转码后:
主函数分别为创建请求,设置请求,发起请求,读取响应。为了避免参数占用内存过大,创建请求时采用流(占用内存小)。
序列化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协议