猜谜游戏介绍:
用golang构建一个猜字游戏,程序随机生成一个0-100的随机整数。提示玩家进行猜测,玩家随机输入一个数字,程序会告诉玩家这个数字是高于还是低于这个数字,如果猜错了,告诉玩家需要继续进行输入,如果输入正确,则告诉玩家正确,并退出程序。
控制台输入:
bufio作为一个缓存IO,自身有Reader方法进行包装一个io.Reader对象,提供了缓存功能,同时实现了io.Reader接口
生成随机数
func main() {
maxNUM := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNUM)
fmt.Println("The secret number is ", secretNumber)
需要导入 :time,math/rand,fmt三个包,time用于生成随机数种子
bufio包
创建Reader对象
reader := bufio.NewReader(os.Stdin)
ReadString
用于读取一行输入
strconv.Atoi
strconv中的Atoi函数用于将字符串类型转换成int类型
读取用户输入:
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
maxNUM := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNUM)
fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
continue
}
input = strings.TrimSuffix(input, "\r\n")
guess, err := strconv.Atoi(input)
if nil != err {
fmt.Println("Invaild input. Please enter an integer value")
continue
}
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct,your Legend")
break
}
}
}
Socks5代理
概述:
Socks5协议是一款广泛使用的代理协议,它在使用TCP/IP协议通讯的客户端和服务器之间扮演一个中介角色,使得内部网中的客户端变得能够访问Internet网中的服务器,或者使C/S(Client和Server)之间的通讯更加安全。SOCKS5 代理服务器通过将客户端发来的请求转发给真正的目标服务器, 模拟了一个客户端请求操作。在这里,客户端和SOCKS5代理服务器之间也是通过TCP/IP协议进行通讯,客户端将原本要发送给真正服务器的请求先发送给SOCKS5服务器,然后SOCKS5服务器再将请求转发给真正的服务器。
优点
(1)绕过互联网快
(2)没有程序,协议或流量限制
(3)更快,更可靠的连接
(4)错误减少,整体性能提升
(5)在P2P平台上表现更好
交互流程
当 TCP 客户端想要建立必须透过防火墙(取决于具体的情况)的连接时,客户端必须与合适的 SOCKS 服务建立连接。SOCKS 服务默认监听 1080 端口,如果连接成功,客户端需要与服务端协商认证方式并完成认证,之后便可以发送中继请求。SOCKS 服务端会执行请求,要么建立起合适的连接,要么拒绝请求。