Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go语言fmt包

Go语言fmt包的具体使用

作者:Go Dgg

Go语言的fmt包提供了丰富多样的输入输出功能,无论是格式化输出、文件写入,还是从各种输入源读取数据,都能轻松应对,具有一定的参考价值,感兴趣的可以了解一下

在Go语言中,fmt包是一个非常常用的包,它提供了丰富的格式化输入输出功能,使得数据的输入输出变得更加灵活和便捷。本文将详细介绍fmt包的常用函数及其用法,帮助你更好地理解和使用这个强大的工具。

一、向外输出

Print系列函数

fmt包提供了PrintPrintfPrintln三个函数,用于向标准输出(通常是控制台)打印内容。

函数签名如下:

func Print(a ...interface{})(n int, err error)
func Printf(format string, a ...interface{})(n int, err error)
func Println(a ...interface{})(n int, err error)

参数说明

返回值

适用场景

示例代码

package main

import "fmt"

func main() {
    fmt.Print("Hello, World!")  // 输出:Hello, World!
    fmt.Printf("Name: %s, Age: %d", "Alice", 25)  // 输出:Name: Alice, Age: 25
    fmt.Println("Hello, World!")  // 输出:Hello, World!(带换行)
}

Fprint系列函数

Fprint系列函数会将内容输出到一个io.Writer接口类型的变量w中,通常用于往文件中写入内容。

func Fprint(w io.Writer, a ...interface{})(n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{})(n int, err error)
func Fprintln(w io.Writer, a ...interface{})(n int, err error)

参数说明

返回值

适用场景

示例代码

package main

import (
	"fmt"
	"os"
)

func main() {
	// 将输出写入到标准输出
	n, err := fmt.Fprint(os.Stdout, "Hello, World!")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("\nWritten", n, "bytes")

	// 将输出写入到文件
	file, err := os.Create("output.txt")
	if err != nil {
		fmt.Println("Error creating file:", err)
		return
	}
	defer file.Close()

	n, err = fmt.Fprint(file, "This is written to a file.")
	if err != nil {
		fmt.Println("Error writing to file:", err)
		return
	}
	fmt.Println("Written", n, "bytes to file")
}

Sprint系列函数

Sprint系列函数会把传入的数据生成并返回一个字符串,用于将一组值格式化为字符串。与Printf类似,但它不输出到任何地方,而是将结果作为字符串返回。

func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string

参数说明

返回值

适用场景

示例代码

package main

import "fmt"

func main() {
	// 示例1
	str1 := fmt.Sprint("Hello, ", "World!")
	fmt.Println(str1) // 输出:Hello, World!

	// 示例2
	name := "Alice"
	age := 25
	str2 := fmt.Sprintf("Name: %s, Age: %d", name, age)
	fmt.Println(str2)
	// 输出:Name: Alice, Age: 25

	// 示例3
	name := "Alice"
	age := 25
	str3 := fmt.Sprintln("Name: ", name, " Age: ", age)
	fmt.Print(str3)
	// 输出:Name: Alice Age: 25\n

	// 示例4:格式化多个数据项
	data := []int{1, 2, 3, 4, 5}
	str4 := fmt.Sprint("Data: ", data)
	fmt.Println(str4) // 输出:Data: [1 2 3 4 5]
}

Errorf函数

Errorf是Go语言中fmt包的一个函数,用于生成一个格式化的错误消息并将其作为error类型返回。

func Errorf(format string, a ...any) error

参数说明

返回值

适用场景

示例代码

package main

import "fmt"

func main() {
	// 示例1:简单的错误消息
	err1 := fmt.Errorf("an error occurred")
	fmt.Println(err1) // 输出:an error occurred

	// 示例2:包含变量的错误消息
	filename := "data.txt"
	err2 := fmt.Errorf("failed to open file: %s", filename)
	fmt.Println(err2) // 输出:failed to open file: data.txt

	// 示例3:包含多个变量的错误消息
	age := 25
	err3 := fmt.Errorf("invalid age %d for user %s", age, "Alice")
	fmt.Println(err3) // 输出:invalid age 25 for user Alice

	// 示例4:嵌套错误
	err4 := fmt.Errorf("wrapper error: %w", err2)
	fmt.Println(err4) // 输出:wrapper error: failed to open file: data.txt
}

二、获取输入

fmt.Scan系列函数

fmt.Scanfmt.Scanffmt.Scanln函数用于从标准输入(通常是键盘)读取数据,并根据格式字符串将输入值转换为变量。

函数签名如下:

func Scan(a ...any) (n int, err error)
func Scanf(format string, a ...any) (n int, err error)
func Scanln(a ...any) (n int, err error)

参数说明

返回值

适用场景

示例代码

package main

import "fmt"

func main() {
	// fmt.Scan示例
	var num int
	fmt.Print("Enter an integer: ")
	_, err := fmt.Scan(&num)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("You entered:", num)

	// fmt.Scanf示例
	var name string
	var age int
	var height float64
	fmt.Print("Enter name, age, and height: ")
	_, err = fmt.Scanf("%s %d %f", &name, &age, &height)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height)

	// fmt.Scanln示例
	var sentence string
	fmt.Print("Enter a sentence: ")
	_, err = fmt.Scanln(&sentence)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("You entered:", sentence)
}

Fscan系列函数

FscanFscanlnFscanf函数用于从一个io.Reader中读取数据,并根据格式字符串将输入值转换为变量。

func Fscan(r io.Reader, a ...interface{}) (n int, err error)
func Fscanln(r io.Reader, a ...interface{}) (n int, err error)
func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)

参数说明

返回值

适用场景

示例代码

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	// 示例1:从标准输入读取
	reader := bufio.NewReader(os.Stdin)
	var num1, num2 int
	fmt.Print("Enter two integers: ")
	_, err := fmt.Fscan(reader, &num1, &num2)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("You entered: %d and %d\n", num1, num2)

	// 示例2:从字符串读取
	data := "Alice 25 1.75\nBob 30 1.80"
	strReader := strings.NewReader(data)
	var name string
	var age int
	var height float64

	// 读取第一行
	_, err = fmt.Fscan(strReader, &name, &age, &height)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height)

	// 读取第二行
	_, err = fmt.Fscan(strReader, &name, &age, &height)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height)

	// 示例3:从文件读取
	file, err := os.Open("input.txt")
	if err != nil {
		fmt.Println("Error opening file:", err)
		return
	}
	defer file.Close()

	var filename string
	var size int
	var isReadable bool

	_, err = fmt.Fscan(file, &filename, &size, &isReadable)
	if err != nil {
		fmt.Println("Error reading file:", err)
		return
	}
	fmt.Printf("Filename: %s, Size: %d, IsReadable: %t\n", filename, size, isReadable)
}

Sscan系列函数

SscanSscanlnSscanf函数用于从一个字符串中读取数据,并根据格式字符串将输入值转换为变量。

func Sscan(str string, a ...interface{}) (n int, err error)
func Sscanln(str string, a ...interface{}) (n int, err error)
func Sscanf(str string, format string, a ...interface{}) (n int, err error)

参数说明

返回值

适用场景

示例代码

package main

import "fmt"

func main() {
	// 示例1:从字符串读取一个整数
	str1 := "42"
	var num int
	_, err := fmt.Sscan(str1, &num)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("You entered:", num)

	// 示例2:从字符串读取多个值
	str2 := "Alice 25 1.75"
	var name string
	var age int
	var height float64
	_, err = fmt.Sscan(str2, &name, &age, &height)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height)

	// 示例3:从字符串读取布尔值
	str3 := "true"
	var isStudent bool
	_, err = fmt.Sscan(str3, &isStudent)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("Is Student:", isStudent)

	// 示例4:从字符串读取带有空格的字符串
	str4 := `"Hello World"`
	var sentence string
	_, err = fmt.Sscan(str4, &sentence)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("You entered:", sentence)
}

三、总结

Go语言的fmt包提供了丰富多样的输入输出功能,无论是格式化输出、文件写入,还是从各种输入源读取数据,都能轻松应对。熟练掌握fmt包的使用,能够让你在Go语言的开发中更加得心应手,提高开发效率和代码的可读性。希望本文对你理解和使用fmt包有所帮助!

到此这篇关于Go语言fmt包的具体使用的文章就介绍到这了,更多相关Go语言fmt包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文