欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言fmt包的具體使用

 更新時(shí)間:2025年07月15日 09:08:35   作者:Go Dgg  
Go語(yǔ)言的fmt包提供了豐富多樣的輸入輸出功能,無(wú)論是格式化輸出、文件寫(xiě)入,還是從各種輸入源讀取數(shù)據(jù),都能輕松應(yīng)對(duì),具有一定的參考價(jià)值,感興趣的可以了解一下

在Go語(yǔ)言中,fmt包是一個(gè)非常常用的包,它提供了豐富的格式化輸入輸出功能,使得數(shù)據(jù)的輸入輸出變得更加靈活和便捷。本文將詳細(xì)介紹fmt包的常用函數(shù)及其用法,幫助你更好地理解和使用這個(gè)強(qiáng)大的工具。

一、向外輸出

Print系列函數(shù)

fmt包提供了Print、PrintfPrintln三個(gè)函數(shù),用于向標(biāo)準(zhǔn)輸出(通常是控制臺(tái))打印內(nèi)容。

  • Print函數(shù)直接輸出內(nèi)容,不添加任何修飾。
  • Printf函數(shù)支持格式化輸出字符串,可以根據(jù)指定的格式化字符串來(lái)格式化輸出。
  • Println函數(shù)在輸出內(nèi)容的結(jié)尾添加一個(gè)換行符(\n),并且會(huì)在各個(gè)元素之間添加空格。

函數(shù)簽名如下:

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)

參數(shù)說(shuō)明

  • aPrintPrintln函數(shù)接受一個(gè)或多個(gè)interface{}類(lèi)型的值作為參數(shù),這些值將被格式化為字符串并輸出。
  • formatPrintf函數(shù)的格式化字符串,其中可以包含占位符(如%d、%s等)來(lái)指定如何格式化參數(shù)。

返回值

  • n:表示成功寫(xiě)入的字節(jié)數(shù)。
  • err:如果發(fā)生錯(cuò)誤,則返回錯(cuò)誤信息,否則為nil。

適用場(chǎng)景

  • 當(dāng)需要快速輸出調(diào)試信息或簡(jiǎn)單的內(nèi)容時(shí),可以使用PrintPrintln函數(shù)。
  • 當(dāng)需要對(duì)輸出的內(nèi)容進(jìn)行格式化控制時(shí),Printf函數(shù)是一個(gè)很好的選擇。

示例代碼

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系列函數(shù)

Fprint系列函數(shù)會(huì)將內(nèi)容輸出到一個(gè)io.Writer接口類(lèi)型的變量w中,通常用于往文件中寫(xiě)入內(nèi)容。

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)

參數(shù)說(shuō)明

  • w:一個(gè)實(shí)現(xiàn)了io.Writer接口的對(duì)象,表示輸出流。常見(jiàn)的io.Writer包括os.Stdout(標(biāo)準(zhǔn)輸出)、os.Stderr(標(biāo)準(zhǔn)錯(cuò)誤)以及文件對(duì)象等。
  • a:要格式化并寫(xiě)入的值列表。
  • format:格式化字符串,其中可以包含占位符來(lái)指定如何格式化參數(shù)。

返回值

  • n:寫(xiě)入的字節(jié)數(shù)。
  • err:如果發(fā)生錯(cuò)誤,則返回錯(cuò)誤信息,否則為nil。

適用場(chǎng)景

  • 當(dāng)需要將內(nèi)容寫(xiě)入到文件或其他輸出流時(shí),Fprint系列函數(shù)非常有用。

示例代碼

package main

import (
	"fmt"
	"os"
)

func main() {
	// 將輸出寫(xiě)入到標(biāo)準(zhǔn)輸出
	n, err := fmt.Fprint(os.Stdout, "Hello, World!")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("\nWritten", n, "bytes")

	// 將輸出寫(xiě)入到文件
	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系列函數(shù)

Sprint系列函數(shù)會(huì)把傳入的數(shù)據(jù)生成并返回一個(gè)字符串,用于將一組值格式化為字符串。與Printf類(lèi)似,但它不輸出到任何地方,而是將結(jié)果作為字符串返回。

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

參數(shù)說(shuō)明

  • a:要格式化并轉(zhuǎn)換為字符串的值列表。
  • format:格式化字符串,其中可以包含占位符來(lái)指定如何格式化參數(shù)。

返回值

  • 返回一個(gè)字符串,表示格式化后的結(jié)果。

適用場(chǎng)景

  • 當(dāng)需要將多個(gè)值組合成一個(gè)字符串進(jìn)行后續(xù)處理時(shí),Sprint系列函數(shù)非常方便。

示例代碼

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:格式化多個(gè)數(shù)據(jù)項(xiàng)
	data := []int{1, 2, 3, 4, 5}
	str4 := fmt.Sprint("Data: ", data)
	fmt.Println(str4) // 輸出:Data: [1 2 3 4 5]
}

Errorf函數(shù)

Errorf是Go語(yǔ)言中fmt包的一個(gè)函數(shù),用于生成一個(gè)格式化的錯(cuò)誤消息并將其作為error類(lèi)型返回。

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

參數(shù)說(shuō)明

  • format:格式化字符串,其中可以包含占位符來(lái)指定如何格式化參數(shù)。
  • a:要格式化的值列表,這些值將根據(jù)格式化字符串中的占位符進(jìn)行格式化。

返回值

  • 返回一個(gè)error類(lèi)型的值,表示格式化后的錯(cuò)誤消息。

適用場(chǎng)景

  • 在需要返回錯(cuò)誤信息的場(chǎng)景中,Errorf函數(shù)可以幫助我們快速生成格式化的錯(cuò)誤消息。

示例代碼

package main

import "fmt"

func main() {
	// 示例1:簡(jiǎn)單的錯(cuò)誤消息
	err1 := fmt.Errorf("an error occurred")
	fmt.Println(err1) // 輸出:an error occurred

	// 示例2:包含變量的錯(cuò)誤消息
	filename := "data.txt"
	err2 := fmt.Errorf("failed to open file: %s", filename)
	fmt.Println(err2) // 輸出:failed to open file: data.txt

	// 示例3:包含多個(gè)變量的錯(cuò)誤消息
	age := 25
	err3 := fmt.Errorf("invalid age %d for user %s", age, "Alice")
	fmt.Println(err3) // 輸出:invalid age 25 for user Alice

	// 示例4:嵌套錯(cuò)誤
	err4 := fmt.Errorf("wrapper error: %w", err2)
	fmt.Println(err4) // 輸出:wrapper error: failed to open file: data.txt
}

二、獲取輸入

fmt.Scan系列函數(shù)

fmt.Scan、fmt.Scanffmt.Scanln函數(shù)用于從標(biāo)準(zhǔn)輸入(通常是鍵盤(pán))讀取數(shù)據(jù),并根據(jù)格式字符串將輸入值轉(zhuǎn)換為變量。

  • fmt.Scan:從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),根據(jù)變量的類(lèi)型自動(dòng)匹配輸入的格式。
  • fmt.Scanf:從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),并根據(jù)格式字符串將輸入值轉(zhuǎn)換為變量,允許更精確的格式控制。
  • fmt.Scanln:從標(biāo)準(zhǔn)輸入讀取一行數(shù)據(jù),并根據(jù)格式字符串將輸入值轉(zhuǎn)換為變量,在讀取輸入后會(huì)消費(fèi)掉換行符。

函數(shù)簽名如下:

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)

參數(shù)說(shuō)明

  • format:格式化字符串,其中可以包含占位符來(lái)指定如何解析輸入值。
  • a:一個(gè)或多個(gè)指針類(lèi)型的參數(shù),表示要存儲(chǔ)輸入值的變量。

返回值

  • n:成功讀取的值的數(shù)量。
  • err:如果發(fā)生錯(cuò)誤,則返回錯(cuò)誤信息,否則為nil。

適用場(chǎng)景

  • 當(dāng)需要從控制臺(tái)讀取用戶輸入時(shí),fmt.Scan系列函數(shù)非常有用。

示例代碼

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系列函數(shù)

Fscan、FscanlnFscanf函數(shù)用于從一個(gè)io.Reader中讀取數(shù)據(jù),并根據(jù)格式字符串將輸入值轉(zhuǎn)換為變量。

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)

參數(shù)說(shuō)明

  • r:一個(gè)實(shí)現(xiàn)了io.Reader接口的對(duì)象,表示要讀取數(shù)據(jù)的輸入流。
  • a:一個(gè)或多個(gè)指針類(lèi)型的參數(shù),表示要存儲(chǔ)輸入值的變量。
  • format:格式化字符串,其中可以包含占位符來(lái)指定如何解析輸入值。

返回值

  • n:成功讀取的值的數(shù)量。
  • err:如果發(fā)生錯(cuò)誤,則返回錯(cuò)誤信息,否則為nil。

適用場(chǎng)景

  • 當(dāng)需要從文件、網(wǎng)絡(luò)流等io.Reader中讀取數(shù)據(jù)時(shí),Fscan系列函數(shù)非常有用。

示例代碼

package main

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

func main() {
	// 示例1:從標(biāo)準(zhǔn)輸入讀取
	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系列函數(shù)

Sscan、SscanlnSscanf函數(shù)用于從一個(gè)字符串中讀取數(shù)據(jù),并根據(jù)格式字符串將輸入值轉(zhuǎn)換為變量。

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)

參數(shù)說(shuō)明

  • str:要解析的字符串。
  • a:一個(gè)或多個(gè)指針類(lèi)型的參數(shù),表示要存儲(chǔ)輸入值的變量。
  • format:格式化字符串,其中可以包含占位符來(lái)指定如何解析輸入值。

返回值

  • n:成功讀取的值的數(shù)量。
  • err:如果發(fā)生錯(cuò)誤,則返回錯(cuò)誤信息,否則為nil

適用場(chǎng)景

  • 當(dāng)需要從字符串中提取數(shù)據(jù)時(shí),Sscan系列函數(shù)非常方便。

示例代碼

package main

import "fmt"

func main() {
	// 示例1:從字符串讀取一個(gè)整數(shù)
	str1 := "42"
	var num int
	_, err := fmt.Sscan(str1, &num)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("You entered:", num)

	// 示例2:從字符串讀取多個(gè)值
	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)
}

三、總結(jié)

Go語(yǔ)言的fmt包提供了豐富多樣的輸入輸出功能,無(wú)論是格式化輸出、文件寫(xiě)入,還是從各種輸入源讀取數(shù)據(jù),都能輕松應(yīng)對(duì)。熟練掌握fmt包的使用,能夠讓你在Go語(yǔ)言的開(kāi)發(fā)中更加得心應(yīng)手,提高開(kāi)發(fā)效率和代碼的可讀性。希望本文對(duì)你理解和使用fmt包有所幫助!

到此這篇關(guān)于Go語(yǔ)言fmt包的具體使用的文章就介紹到這了,更多相關(guān)Go語(yǔ)言fmt包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go判斷文件夾是否存在并創(chuàng)建的實(shí)例

    go判斷文件夾是否存在并創(chuàng)建的實(shí)例

    這篇文章主要介紹了go判斷文件夾是否存在,并創(chuàng)建的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • golang操作mongodb的方法

    golang操作mongodb的方法

    這篇文章主要介紹了golang操作mongodb的方法,涉及Go語(yǔ)言操作mongodb的連接、讀取及顯示的方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go FX框架用法小結(jié)

    Go FX框架用法小結(jié)

    Go FX是一個(gè)功能強(qiáng)大的框架,通過(guò)依賴(lài)注入和生命周期管理來(lái)簡(jiǎn)化應(yīng)用的構(gòu)建與維護(hù),本文就來(lái)介紹一下Go FX框架用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • 詳解go-micro微服務(wù)consul配置及注冊(cè)中心

    詳解go-micro微服務(wù)consul配置及注冊(cè)中心

    這篇文章主要為大家介紹了go-micro微服務(wù)consul配置及注冊(cè)中心示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Golang如何用gorm實(shí)現(xiàn)分頁(yè)的功能

    Golang如何用gorm實(shí)現(xiàn)分頁(yè)的功能

    這篇文章主要介紹了Golang如何用gorm實(shí)現(xiàn)分頁(yè)的功能方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • golang中json操作的完全指南

    golang中json操作的完全指南

    golang標(biāo)準(zhǔn)庫(kù)有一個(gè)名叫encoding/json的包,包含了JSON的序列化(Marshal)和反序列化(Unmarshal)的能力,下面這篇文章主要給大家介紹了關(guān)于golang中json操作的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • go語(yǔ)言 swagger 查詢(xún) json 字段注釋的示例代碼

    go語(yǔ)言 swagger 查詢(xún) json 字段注釋的示例代碼

    在Go語(yǔ)言中,使用Swagger通過(guò)swag工具和gin-gonic框架生成API文檔,涉及引入依賴(lài)、定義模型、添加注釋等步驟,示例中展示了如何為接受查詢(xún)參數(shù)的API端點(diǎn)添加注釋,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • go install/build生成的文件命名和路徑操作

    go install/build生成的文件命名和路徑操作

    這篇文章主要介紹了go install/build生成的文件命名和路徑操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 一文帶你玩轉(zhuǎn)Golang Prometheus Eexporter開(kāi)發(fā)

    一文帶你玩轉(zhuǎn)Golang Prometheus Eexporter開(kāi)發(fā)

    本文分兩大塊,一是搞清楚prometheus四種類(lèi)型的指標(biāo)Counter,Gauge,Histogram,Summary用golang語(yǔ)言如何構(gòu)造這4種類(lèi)型對(duì)應(yīng)的指標(biāo),二是搞清楚修改指標(biāo)值的場(chǎng)景和方式,感興趣的可以了解一下
    2023-02-02
  • Go?gRPC進(jìn)階教程服務(wù)超時(shí)設(shè)置

    Go?gRPC進(jìn)階教程服務(wù)超時(shí)設(shè)置

    這篇文章主要為大家介紹了Go?gRPC進(jìn)階,gRPC請(qǐng)求的超時(shí)時(shí)間設(shè)置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論