GO语言实战案例 | 青训营笔记

91 阅读2分钟

猜谜游戏介绍:

用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
        }
    }
}

image.png

Socks5代理

概述:

   Socks5协议是一款广泛使用的代理协议,它在使用TCP/IP协议通讯的客户端和服务器之间扮演一个中介角色,使得内部网中的客户端变得能够访问Internet网中的服务器,或者使C/S(ClientServer)之间的通讯更加安全。SOCKS5 代理服务器通过将客户端发来的请求转发给真正的目标服务器, 模拟了一个客户端请求操作。在这里,客户端和SOCKS5代理服务器之间也是通过TCP/IP协议进行通讯,客户端将原本要发送给真正服务器的请求先发送给SOCKS5服务器,然后SOCKS5服务器再将请求转发给真正的服务器。

image.png

image.png

优点

(1)绕过互联网快

(2)没有程序,协议或流量限制

(3)更快,更可靠的连接

(4)错误减少,整体性能提升

(5)在P2P平台上表现更好

交互流程

当 TCP 客户端想要建立必须透过防火墙(取决于具体的情况)的连接时,客户端必须与合适的 SOCKS 服务建立连接。SOCKS 服务默认监听 1080 端口,如果连接成功,客户端需要与服务端协商认证方式并完成认证,之后便可以发送中继请求。SOCKS 服务端会执行请求,要么建立起合适的连接,要么拒绝请求。