GO语言的实战案例 | 青训营

57 阅读1分钟

3.1猜谜游戏介绍

image.png

3.1.1生成随机数

package main

import(
    "fmt"
     "math/rand"
)

func main(){
    maxnum:=100
    secretnumber:=rand.Intn(maxnum)
    fmt.println("the secret number is",secretnumber)
}

生成的数字相同 生成随机数需要用到“math/rand”

3.1.2生成随机数V2

加入“time”

rand.Seed(time.now().unixnano()) 用时间戳来初始化随机数种子

这样才会生成不同数字

3.1.3读取用户输入

加入 “bufio”

“os”

“strconv”

“strings”

bufo.NewReeder(os.stdin) 只读

image.png

3.1.4实现判断逻辑

if gues > secretNumber{

fmt.println("you guess is bigger then the secret number . please try again")

}

3.1.5实现游戏循环

image.png

3.2 在线词典介绍

image.png

3.2.1抓包

fanyi.caiyunapp.com/

image.png image.png

3.2.2代码生成

image.png

打开网址curlconverter.com/#go

image.png

defer resp.body.close() defer会在结束后调用close函数(加defer避免资源泄露)

3.2.3生成request body

image.png

3.2.4解析response body

image.png

oktools.net/jeson2go

image.png

image.png

image.png

“%#v”打印结构体

3.2.6完善代码

image.png

3.3SOCKS5代理介绍

image.png

image.png

原理

image.png

分为四个阶段;第一个阶段协商阶段,第二个阶段是认证阶段,第三个阶段是请求阶段,第四个阶段是relay阶段

3.3.1 TCP-echo server

image.png

net.listen粘贴一个端口;server.Accept接受一个请求

bufro.NewReader给连接创建一个只读的带缓冲的NEW

redder.Readbyte每次读一个字节

用com.write([]byte{b})把字节写入

3.3.2auth

image.png

image.png

image.png

单字节可以用reader.roadbyte读单字节

报文是网络中交换与数据传输的数据单元,即站点一次性要发送的数据块(报文不仅包括要传送的数据,也包括必要的附加信息,如目的IP、目的端口、源地址、源端口、数据长度、所用协议、加密等等)

3.3.3请求阶段

image.png

创建一个长度为4的缓冲区:buf:=make([]byte,4)用io.readfull(reader,buf)将它填充就可一次性读取4个字段

3.3.4relay阶段

image.png