Go语言实战案例 | 青训营

286 阅读3分钟

第一个项目:猜数字

随机数生成:使用math/rand包和time包来生成随机数。通过设定随机数种子,可以在每次运行程序时生成不同的随机数。1.20版本的Go中,由于已经弃用了rand.Seed函数,因此已经不需要再使用时间戳来初始化随机数种子。

maxNum := 100

rand.Seed(time.Now().UnixNano())

secretNumber := rand.Intn(maxNum)

 

获取输入:使用fmt.Scanf函数可以简化代码,有以下优势

简单易用:fmt.Scanf函数可以方便地读取用户的输入,并将输入的值赋给指定的变量。相比手动解析用户输入的字符串,使用fmt.Scanf更加简单、直观。

 

类型安全:fmt.Scanf函数根据指定的格式字符串来解析用户输入的值,并将其转换为相应的变量类型。这样可以确保输入的值与变量类型匹配,避免类型错误。

 

自动处理空格和换行:fmt.Scanf函数会自动忽略输入中的空格和换行符,只读取有效的输入内容。这样可以减少代码编写和处理输入时的繁琐步骤。

 

错误处理:fmt.Scanf函数会返回读取的参数个数和可能的错误信息,可以通过检查返回值来判断用户输入是否符合要求,并进行相应的错误处理。

 

    var guess int

    fmt.Print("Please enter your guess: ")

    _, err := fmt.Scanf("%d", &guess)

    if err != nil {

        fmt.Println("Invalid input. Please enter an integer value")

        return

    }

 

 

条件语句和循环:通过使用条件语句(如if语句)和循环(如for循环),可以根据用户的输入和秘密数字进行逻辑判断和循环操作,直到用户猜中秘密数字为止。

附完整代码:  

` import ( "fmt" "math/rand" "time" )

func main() { maxNum := 100 rand.Seed(time.Now().UnixNano()) secretNumber := rand.Intn(maxNum) fmt.Println("The secret number is", secretNumber)`

var guess int
fmt.Print("Please enter your guess: ")
_, err := fmt.Scanf("%d", &guess)
if err != nil {
	fmt.Println("Invalid input. Please enter an integer value")
	return
}

fmt.Println("Your guess is", guess)

for guess != secretNumber {
	if guess > secretNumber {
		fmt.Println("Your guess is bigger than the secret number. Please try again")
	} else {
		fmt.Println("Your guess is smaller than the secret number. Please try again")
	}

	fmt.Print("Please enter your guess: ")
	_, err = fmt.Scanf("%d", &guess)
	if err != nil {
		fmt.Println("Invalid input. Please enter an integer value")
		return
	}

	fmt.Println("Your guess is", guess)
}

fmt.Println("Correct, you legend!")

}

 

这个小游戏结合了随机数生成、用户输入和输出、条件语句和循环等编程知识点,具有简单易懂、用户友好、可扩展和学习价值等优点。上手简单,门槛低。通过编写这个小游戏,我们可以加深对这些编程概念的理解和应用,提高编程能力和解决问题的能力。

 

第二个项目:在线词典

1.抓包

本次选用了彩云小译作为词典工具。

找到包含词典结果的响应,记录相关的请求URL、请求方法、请求头、请求体和响应体。

2.代码

使用 curlconverter 等工具将抓取的请求转换为 Go 语言的请求代码。可以将生成的代码粘贴到你的程序中,并根据需要进行适当的修改和调整。步骤:

1. 找到dict项后,右键选择“复制-复制为cURL(bash)”

2. 打开工具,选择Go语言,将代码粘贴到输入框中

3. 复制输出结果

3.生成request和解析response

使用结构体来构建请求体数据。根据抓包结果中的请求体内容,创建一个相应的 Go 结构体,并将其转换为 JSON 格式。使用 JSON 转 Go 结构体工具,将抓包结果中的响应体的预览 JSON 转换为 Go 结构体。根据你的需求,选择需要解析的字段和数据结构。复制 1 中抓取到的dict项的预览json到工具中,根据需要选择相应的转换,再粘贴到总代码中即可。