Golang I/O 函数:fmt 完整指南

包 fmt 使用类似于 C 的 printf 和 scanf 的功能实现格式化 I/O。 如果我们想在控制台打印字符串,那么我们需要在 Golang 中使用 fmt 包。 “动词”格式源自 C 语言,但更直接。 在开始我们的格式化 I/O 函数示例之前,让我们从 Go 中的模板开始。

什么是模板?

fmt 包中的主要概念是它格式化模板。

这是一个字符串,其中包含您要打印的文本以及一些占位符(也称为动词),它们告诉 fmt 包在哪里插入变量。

Go中的字符串插值

字符串文字可以有占位符。

这些占位符也称为动词。

这些占位符可以使用 fmt 包提供的字符串格式化函数替换为实际变量。

Golang 中的一些动词或占位符可能以 %x 格式出现,其中格式化动词必须以 %(百分比)开头,而 x 是格式化运算符。

让我们更多地谈谈动词。

Golang 中的动词

  1. %v 是一个通用的占位符。 它会自动将变量转换为带有一些默认选项的字符串。 这在打印诸如字符串或数字之类的原语时通常很有用,并且您不需要任何其他特定选项。
  2. %#v 以 Golang 语法打印您的变量。 这意味着您可以复制输出并将其粘贴到您的代码中,并且它在语法上是正确的。 它在使用结构和切片等数据结构时很有用,因为它会打印出类型和字段名称。
  3. %T 打印变量的类型。 如果您的数据作为 interface{} 传递,并且您想查看它的具体类型,则此占位符对于调试很有用。
  4. %d 以 10 为基数打印整数。 您可以对 %v 执行相同的操作,但这种方式更加明确。
  5. %x 和 %X 以 16 进制打印整数。 不过,一个有用的技巧是您可以传入一个字节切片,它将每个字节打印为两位十六进制数。
  6. %f 打印不带指数的浮点数。 你可以对 %v 做同样的事情,但是当我们添加宽度和精度标志时,这会变得更加有用。
  7. %q 打印带引号的字符串。 当您的数据可能包含不可见字符(例如零宽度空格)时,它很有用,因为带引号的字符串会将它们打印为转义序列。
  8. %p 打印变量的指针地址。 这在您调试代码时很有用,并且您想检查不同的指针变量是否引用相同的数据。

用 Golang 打印

在 Golang 中将某些内容打印到标准输出非常容易。

格式化最常见的用途是通过 STDOUT 打印到终端窗口。 它可以通过打印功能来完成:

您需要导入 fmt 包(代表格式,但 Go 开发人员喜欢将其称为 fumpt)并调用诸如 Print 之类的函数以将内容写入终端或命令提示符之类的标准输出并从用户那里获取输入,您可以使用Go 中的 Scanf() 函数。

格式化的 I/O 函数

请参阅以下代码示例。

// hello.go

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Today is Mandalorian's fifth episode")
}

输出

➜ go run hello.go
Today is Mandalorian's fifth episode

在上面的代码中,我们使用了 Println() 函数。

Println() 函数使用其操作数的默认格式格式化并写入标准输出。

操作数之间总是添加空格,并附加新行。

它返回写入的字节数,以及遇到的任何写入错误。

fmt 包的打印部分很大。

我们有几个不同的函数,比如 Print 和 Printf 可以实现这一点。

让我们首先关注 Print 和 Printf。

好的,现在让我们一一看看 Print 和 Printf 函数。

fmt.Print(args…) (n int, e 错误)

使用其操作数的默认格式打印格式并写入标准输出。

当两个都不是字符串时,在操作数之间添加空格。

它返回写入的字节数,以及遇到的任何写入错误。

请参阅以下代码示例。

// hello.go

package main

import (
	"fmt"
)

func main() {
	fmt.Print("Today is Mandalorian's fifth episode")
}

输出

➜ go run hello.go
Today is Mandalorian's fifth episode

Print 函数返回写入的字节数,以及写入时发生的任何错误,但我们通常忽略这些返回值。

fmt.Println(args…) (n int, e 错误)

Println() 函数格式化其操作数的默认格式并写入标准输出。

操作数之间总是添加空格,并附加新行。 它返回写入的字节数,以及遇到的任何写入错误。

请参阅以下代码。

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Today is Mandalorian's fifth episode")
}

输出

➜  hello go run hello.go
Today is Mandalorian's fifth episode
➜  hello

Golang Println() 也是可变参数函数,这意味着它也可以接受多个参数。

它总是将这些参数与它们之间的空格连接起来,并使用尾随的换行符写入标准输出。

fmt.Printf(args…) (n int, e 错误)

Printf() 函数根据格式说明符格式化并写入标准输出。

它返回写入的字节数,以及遇到的任何写入错误。

Golang Printf() 函数也是一个可变参数函数,这意味着它也可以接受多个参数。

请参阅以下代码。

// hello.go

package main

import (
	"fmt"
)

func main() {
	fmt.Printf("Today is Mandalorian's fifth episode")
}

输出

➜ go run hello.go
Today is Mandalorian's fifth episode

Go fmt.Printf() 除了第一个参数是带有一些占位符的字符串文字。

后面的参数将在占位符中顺序替换。

除初始字符串外的参数数量应等于我们使用的占位符数量。

Printf 不以尾随换行符结尾(并且没有 Prinfln 函数)并且具有与 Print 函数相同的返回值。

fmt.Scan(n int, e 错误)

Scan() 函数扫描从标准输入读取的文本,将连续的空格分隔值存储到连续的参数中。

换行符算作空格。 它返回成功扫描输入的许多元素。

如果这少于参数的数量,则 err 将报告它发生的原因。

请参阅以下代码。

// hello.go

package main

import (
	"fmt"
	"os"
)

func main() {
	var name string
	var rollno int
	if _, err := fmt.Scan(&name, &rollno); err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
	fmt.Printf("Your name is: %s\n", name)
	fmt.Printf("Your roll no is: %d\n", rollno)
}

输出

➜ go run hello.go
krunal
10
Your name is: krunal
Your roll no is: 10

fmt.Scanf(n int, e 错误)

Scanf 扫描从标准输入读取的文本,将连续的空格分隔值存储到由格式确定的连续参数中。

它返回成功扫描的元素数。

输入中的换行符必须与格式中的换行符匹配。

有一个例外:动词 %c 总是扫描输入中的下一个符文,即使它是空格(或制表符等)或换行符。 请记住这种情况。

请参阅以下代码。

// hello.go

package main

import (
	"fmt"
)

func main() {
	var name string
	var rollno int

	fmt.Printf("Enter your name: ")
	fmt.Scanf("%s", &name)

	fmt.Printf("Enter your rollno: ")
	fmt.Scanf("%d", &rollno)

	fmt.Printf("Your name is: %s\n", name)
	fmt.Printf("Your roll no is: %d\n", rollno)
}

输出

go run hello.go
Enter your name: krunal
Enter your rollno: 10
Your name is: krunal
Your roll no is: 10

因此,Golang Scanf() 函数已成功扫描 name 和 rollno 输入值,将其存储在变量中,并返回这些值。

fmt.Scanln(n int, e 错误)

Scanln 与 Scan 类似,但在换行处停止扫描,并且在最后一项之后,必须有换行或 EOF。

结论

Golang 中有很多 Formatted I/O 函数。 可以参考 Go 文档:Go fmt 包。

在本文中,我们了解了如何在控制台中打印字符串、打印动词、如何从 C 语言等用户那里获取输入。

Golang 中的格式化 I/O 函数 fmt 包示例结束。

Golang I/O Functions: The Complete指南 on fmt 的帖子首先出现在 AppDividend 上。

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Krunal所有,未经许可,不得转载
你可能还喜欢