GO语言工程实践课后作业:实现思路、代码以及路径记录 | 青训营

88 阅读3分钟

GO语言工程实践

一、猜谜游戏

在这个部分,我们将介绍如何实现一个简单的猜谜游戏。

  1. 设置随机种子并生成随机数

    • 首先,我们需要设置一个随机种子,以便生成随机数。这可以通过 rand.Seed(time.Now().UnixNano()) 实现,确保每次的随机数都是不同的。
  2. 创建读取器并读取输入

    • 我们使用 bufio.NewReader(os.Stdin) 来创建一个新的读取器,并将其与标准输入流 os.Stdin 相关联。这允许我们以更高级的方式从标准输入中获取数据。
    • 使用一个 for 循环,通过 reader.ReadString('\n') 读取输入的数据。
  3. 处理输入并比较随机数

    • 对于读取的输入数据,需要使用 strings.Trim(input, "\r\n") 函数去除换行符,然后使用 strconv.Atoi(input) 将其转换为数字类型。
    • 通过循环,将读取的输入数据与生成的随机数进行比较。根据比较结果输出相应的提示信息,要求重新输入,直到猜中为止。

二、命令行词典

这部分介绍如何通过调用第三方API实现命令行词典功能。

  1. 使用HTTP请求与第三方API通信

    • 我们将学习如何使用Go语言发送HTTP请求,与第三方API进行通信。
  2. 解析API返回的JSON数据

    • 了解如何解析API返回的JSON数据,提取出需要的中文意思和音标信息。
  3. 提高开发效率

    • 探讨一些提高开发效率的技巧,以便在开发过程中更高效地操作。

通过这个项目,我们将掌握使用Go语言实现命令行工具的方法,学会处理HTTP请求和解析JSON数据的技能,并在实际开发中提高开发效率,为未来处理类似任务打下坚实基础。

我们所采用的API为彩云科技的在线翻译。

实现步骤

  1. 抓包获取请求

    • 通过抓包工具观察翻译过程中发送的HTTP请求,获取请求的URL和参数。
  2. 生成HTTP请求代码

    • 将获取到的请求信息转换为Go语言代码,可以使用网站 curlconverter.com/go# 自动生成代码。
  3. 解析API返回的JSON数据

三、SOCKS5代理

这一部分讨论SOCKS5代理的原理和工作方式。

SOCKS5介绍

  • SOCKS5是一种网络协议,用于代理服务器和目标服务器之间的数据传输。
  • 主要特点包括代理功能、支持TCP和UDP、身份验证、IPv6支持、防火墙穿越和匿名性。

SOCKS5工作原理

  1. 客户端发送连接请求

    • 客户端向SOCKS5代理服务器发送连接请求,包含目标服务器的地址、端口号和身份验证信息。
  2. 代理服务器进行身份验证

    • 如果需要,代理服务器验证客户端提供的用户名和密码。
  3. 代理服务器与目标服务器建立连接

    • 代理服务器代表客户端与目标服务器建立连接。
  4. 数据传输

    • 代理服务器成为客户端与目标服务器之间的桥梁,转发数据。
  5. 连接关闭

    • 当客户端或目标服务器关闭连接时,代理服务器终止连接,完成数据传输过程。

通过这种方式,SOCKS5实现了代理功能,支持TCP和UDP,提供身份验证和匿名性,是一个功能强大且灵活的协议。

6

课后作业

为猜谜游戏的最终代码进行修改,使用 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
        }
    }
}