课程实践记录 | 青训营

91 阅读4分钟

数字猜谜

函数解析

rand.Seed(time.Now().UnixNano()):将当前的时间作为随机数生成器的种子,以确保每次运行程序时生成的随机数都不同。

rand.Seed()函数用于设置随机数生成器的种子。种子决定了随机数的起始点,不同的种子会产生不同的随机数序列。

time.Now().UnixNano()是一个Go语言时间包(time package)的函数调用,返回当前时间的纳秒级表示。 具体解释如下:

  • time.Now():返回当前时间,以time.Time类型表示。
  • UnixNano():返回时间的纳秒级表示。它返回一个int64类型的整数,表示从UTC时间的1970年1月1日午夜(格林威治标准时间)到当前时间经过的纳秒数。

rand.Intn(n):生成一个取值范围为0到n-1的随机整数。它返回一个int类型的整数。

reader := bufio.NewReader(os.Stdin):创建一个新的bufio.Reader来读取用户的输入。

input, err := reader.ReadString('\n'):读取用户输入的字符串。从输入流中读取一行文本,直到遇到换行符为止。当读取成功时,将读取到的文本存储在 input 中。如果遇到错误,将相应的错误信息存储在 err 中。

input = strings.Trim(input, "\r\n"):移除字符串中的换行符和回车符。

guess, err := strconv.Atoi(input):将用户输入的字符串转换为整数。

思考

当看到要输入一个整数时,我想到的是下面这个样子,所以一开始看这个程序写的时候有点蒙

var num int
    _, err := fmt.Scanln(&num)

golang的几种输入及其区别

  • fmt.Scanln 和 fmt.Scanf:

    • fmt.Scanln 函数可以从标准输入中一次性读取多个以空格分隔的值,并将它们按顺序存储到变量中。
    • fmt.Scanf 函数可以根据指定的格式字符串,从标准输入中读取并解析输入值并存储到变量中。
  • bufio.NewReader 和 bufio.Scanner:

    • bufio.NewReader 函数用于从标准输入中读取文本行或字节流。可以使用 ReadString 来读取一行字符串,或者使用 ReadBytes 或 ReadSlice 来读取字节流。
    • bufio.Scanner 类型的对象可以通过创建一个新的 Scanner,并使用 Scan 方法来逐行读取标准输入。
  • os.Stdin 和 ioutil.ReadAll:

    • os.Stdin 是一个文件对象,可以将其用于从标准输入中读取字节流。
    • ioutil.ReadAll 函数可以从输入流中一次性读取所有字节,并将其存储到一个字节切片中。

这些方法之间的区别在于:

  • fmt.Scanln 和 fmt.Scanf 需要预先知道输入值的具体数量和类型,并且只能读取以空格分隔的值。
  • bufio.NewReader 提供了更灵活的方式来读取多行文本或字节流。
  • os.Stdin 和 ioutil.ReadAll 提供了对输入流的更底层的访问,可以读取整个输入,不受限于行或特定格式。

选择适当的方法取决于你的具体需求。如果你只需要读取特定数量和类型的值,使用fmt.Scanln 或 fmt.Scanf 可能更简单。如果你需要处理多行文本或更灵活的输入处理,你可以选择bufio.NewReader 或其他方法。如果你需要对整个输入流进行操作或读取未知格式的输入,可以使用 os.Stdin 和 ioutil.ReadAll

在线词典

概念学习

curl是一个命令行工具,用于通过 HTTP、HTTPS 或 FTP 协议进行数据传输。它可以在终端中向服务器发送请求,接收并显示服务器返回的响应。

浏览器开发者工具(通常称作devtools)是一种网页开发者测试和调试代码的工具,一般内置于网页浏览器或者作为浏览器的附加组件使用。不同于网站创建器或者集成开发环境,Web 开发工具不直接参与网站的创建,而用于测试网站或网页应用的用户界面。Web 开发工具便于开发人员调试各种浏览器网页处理技术,例如HTML、CSS、DOM、JavaScript,显示每个资源页面的请求以及载入所花费的时间等。

函数解析

io.Reader 是 Go 语言标准库中的一个接口类型,它定义了一个基本的读取操作。任何实现了 Read(p []byte) (n int, err error) 方法的类型,都可以被视为 io.Reader 的实例。

json.Marshal 是 Go 语言标准库中的一个函数,用于将数据结构转换为 JSON 格式的字节数组。它接受一个参数,可以是任何可序列化的 Go 数据类型(比如结构体、映射、切片、基本类型等),并返回一个表示 JSON 数据的字节数组和一个可能的错误。

bufio.Reader 是 Go 语言标准库中的一个类型,用于提供带缓冲的读取功能。它封装了一个 io.Reader 接口,并在其基础上提供了一些额外的方法,以提供更高效和方便的读取操作。

socks5代理

函数解析

fmt.Sprintf 是 Go 语言中的一个函数,它用于格式化字符串并返回一个格式化后的新字符串。 通过使用 fmt.Sprintf("%d.%d.%d.%d", buf[0], buf[1], buf[2], buf[3]),这四个字节将被插入到格式化字符串中的对应位置,最终生成一个标准的 IPv4 地址字符串。