GO语言工程实践
一、猜谜游戏
在这个部分,我们将介绍如何实现一个简单的猜谜游戏。
-
设置随机种子并生成随机数
- 首先,我们需要设置一个随机种子,以便生成随机数。这可以通过
rand.Seed(time.Now().UnixNano())实现,确保每次的随机数都是不同的。
- 首先,我们需要设置一个随机种子,以便生成随机数。这可以通过
-
创建读取器并读取输入
- 我们使用
bufio.NewReader(os.Stdin)来创建一个新的读取器,并将其与标准输入流os.Stdin相关联。这允许我们以更高级的方式从标准输入中获取数据。 - 使用一个
for循环,通过reader.ReadString('\n')读取输入的数据。
- 我们使用
-
处理输入并比较随机数
- 对于读取的输入数据,需要使用
strings.Trim(input, "\r\n")函数去除换行符,然后使用strconv.Atoi(input)将其转换为数字类型。 - 通过循环,将读取的输入数据与生成的随机数进行比较。根据比较结果输出相应的提示信息,要求重新输入,直到猜中为止。
- 对于读取的输入数据,需要使用
二、命令行词典
这部分介绍如何通过调用第三方API实现命令行词典功能。
-
使用HTTP请求与第三方API通信
- 我们将学习如何使用Go语言发送HTTP请求,与第三方API进行通信。
-
解析API返回的JSON数据
- 了解如何解析API返回的JSON数据,提取出需要的中文意思和音标信息。
-
提高开发效率
- 探讨一些提高开发效率的技巧,以便在开发过程中更高效地操作。
通过这个项目,我们将掌握使用Go语言实现命令行工具的方法,学会处理HTTP请求和解析JSON数据的技能,并在实际开发中提高开发效率,为未来处理类似任务打下坚实基础。
我们所采用的API为彩云科技的在线翻译。
实现步骤
-
抓包获取请求
- 通过抓包工具观察翻译过程中发送的HTTP请求,获取请求的URL和参数。
-
生成HTTP请求代码
- 将获取到的请求信息转换为Go语言代码,可以使用网站 curlconverter.com/go# 自动生成代码。
-
解析API返回的JSON数据
- 使用 oktools.net/json2go/ 将API返回的JSON数据转换为Go语言结构化表示。
三、SOCKS5代理
这一部分讨论SOCKS5代理的原理和工作方式。
SOCKS5介绍
- SOCKS5是一种网络协议,用于代理服务器和目标服务器之间的数据传输。
- 主要特点包括代理功能、支持TCP和UDP、身份验证、IPv6支持、防火墙穿越和匿名性。
SOCKS5工作原理
-
客户端发送连接请求
- 客户端向SOCKS5代理服务器发送连接请求,包含目标服务器的地址、端口号和身份验证信息。
-
代理服务器进行身份验证
- 如果需要,代理服务器验证客户端提供的用户名和密码。
-
代理服务器与目标服务器建立连接
- 代理服务器代表客户端与目标服务器建立连接。
-
数据传输
- 代理服务器成为客户端与目标服务器之间的桥梁,转发数据。
-
连接关闭
- 当客户端或目标服务器关闭连接时,代理服务器终止连接,完成数据传输过程。
通过这种方式,SOCKS5实现了代理功能,支持TCP和UDP,提供身份验证和匿名性,是一个功能强大且灵活的协议。
课后作业
为猜谜游戏的最终代码进行修改,使用 fmt.Scanf 来简化代码实现。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("Please input your guess")
var guess int
for {
fmt.Scanf("%d", &guess)
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger 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, you Legend!")
break
}
}
}