title: go实战
date: 2023-5-13
猜谜游戏
1、生成随机数
func main() {
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
}
当使用100来作为随机数种子时,随机数将固定不变,所以可以使用时间戳来初始化随机数种子
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
println("The secret number is ", secretNumber)
}
2、读取用户输入
func main(){
// 读取一行
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
return
}
// 将换行符去除
input = strings.Trim(input, "\r\n")
// 将字符串转换为数字
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
return
}
fmt.Println("You guess is", guess)
}
3、实现游戏循环
使用for循环在数字不匹配或出错时,继续循环;在数字匹配时,退出循环;
在线词典
1、抓包
当点击翻译时,会发送一个POST请求
2、构建请求
3、构造结构体,解析Json
在发送请求后,会得到一段Json格式的内容,因此,需要构造一个结构体来对这段内容进行解析
解析出来的大部分是不需要的,可以通过筛选需要的字段,来进行显示
fmt.Println(word, "UK:", dictResponse.Dictionary.Prons.En, "US:", dictResponse.Dictionary.Prons.EnUs)
for _, item := range dictResponse.Dictionary.Explanations {
fmt.Println(item)
}
Socks5代理
SOCKS5是代理协议,在使用TCP/IP协议通信的前端机器和服务器之间发挥中介作用,内部网络的前端机器可以访问互联网的服务器,使通信更加安全
SOCKS是运行在OSI七层协议中的第五层会话层
绕过互联网块 由于代理服务器充当设备和互联网之间的中继,因此它们可以轻松绕过互联网块
更快,更可靠的连接
错误减少,整体性能提升
在P2P平台上表现更好
Socks5代理的原理:
- 协商阶段:用户浏览器向Socks5服务器发送报文(协议版本号,支持认证的种类),代理服务器选择一个支持的认证方式返回给浏览器
- 认证阶段
- 请求阶段:发送请求,之后代理服务器与后端服务器建立TCP连接
- relay阶段:浏览器正常发送请求,代理服务器将简单地把relay数据发送到服务器上
Version1
实现一个TCP echo server,发送啥,就回复啥。在 main 函数里面,使用 net.Listen 监听端口,监听端口之后返回一个 server。在循环里面使用 server.Accept 接受一个请求。
func main() {
server, err := net.Listen("tcp", "127.0.0.1:1080")
if err != nil {
panic(err)
}
for {
client, err := server.Accept()
if err != nil {
log.Printf("Accept failed %v1", err)
continue
}
go process(client)
}
}
待补充