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

Go語言fmt庫詳解與應(yīng)用實例(格式化輸入輸出功能)

 更新時間:2023年10月26日 09:02:07   作者:小雨淋林  
fmt庫是Go語言中一個強大而靈活的庫,提供了豐富的格式化輸入輸出功能,通過本文的介紹和實例演示,相信你對fmt庫的使用有了更深的理解,感興趣的朋友一起看看吧

Go語言fmt庫詳解與應(yīng)用實例

在Go語言中,fmt庫是一個非常重要的標準庫,它提供了格式化輸入和輸出的功能。在本篇博客中,我們將深入探討fmt庫的各種功能,并通過實例演示如何使用這些功能。

1. 格式化輸出

fmt庫最基本的功能之一就是格式化輸出。通過Print、PrintfPrintln函數(shù),我們可以將數(shù)據(jù)以特定格式打印到標準輸出。

package main
import "fmt"
func main() {
    name := "Alice"
    age := 30
    // Print輸出
    fmt.Print("Name: ", name)
    fmt.Print(", Age: ", age)
    // Printf輸出
    fmt.Printf("\nName: %s, Age: %d\n", name, age)
    // Println輸出
    fmt.Println("Name:", name, ", Age:", age)
}

上述代碼演示了PrintPrintfPrintln的用法。Print用于簡單輸出,Printf用于格式化輸出,而Println在輸出后會添加換行符。

2. 格式化輸入

fmt庫還提供了用于格式化輸入的函數(shù),其中最常用的是ScanScanf。

package main
import "fmt"
func main() {
    var name string
    var age int
    // 輸入字符串和整數(shù)
    fmt.Print("Enter your name: ")
    fmt.Scan(&name)
    fmt.Print("Enter your age: ")
    fmt.Scan(&age)
    fmt.Printf("Name: %s, Age: %d\n", name, age)
}

這段代碼演示了如何使用ScanScanf從標準輸入讀取用戶輸入。用戶被提示輸入名字和年齡,然后程序?qū)⑦@些值存儲在相應(yīng)的變量中并進行輸出。

3. 字符串格式化

fmt庫支持通過Sprintf函數(shù)將格式化的文本保存到字符串中,而不是直接輸出。

package main
import "fmt"
func main() {
    name := "Bob"
    age := 25
    formattedString := fmt.Sprintf("Name: %s, Age: %d", name, age)
    fmt.Println(formattedString)
}

上述代碼中,Sprintf函數(shù)將格式化后的字符串保存到formattedString變量中,然后通過Println函數(shù)輸出。

4. 格式化控制符

Printf和相關(guān)函數(shù)中,我們使用格式化控制符指定輸出的格式。例如,%s用于字符串,%d用于整數(shù),%f用于浮點數(shù)等。

package main
import "fmt"
func main() {
    name := "Charlie"
    age := 28
    height := 175.5
    fmt.Printf("Name: %s, Age: %d, Height: %.2f\n", name, age, height)
}

上述代碼中,%.2f表示浮點數(shù)保留兩位小數(shù)。格式化控制符的靈活使用使得我們可以根據(jù)需要調(diào)整輸出的樣式。

結(jié)語

fmt庫是Go語言中一個強大而靈活的庫,提供了豐富的格式化輸入輸出功能。通過本文的介紹和實例演示,相信你對fmt庫的使用有了更深的理解。在實際開發(fā)中,合理運用這些功能可以使代碼更具可讀性和可維護性。希望本文對你在Go語言編程中的工作有所幫助。

擴展:

Go 常用標準庫之 fmt 介紹與基本使用

一、介紹

fmt 是 Go 語言中的一個常用標準庫,它用于格式化輸入和輸出數(shù)據(jù)。fmt 包提供了一系列函數(shù),可以幫助你將數(shù)據(jù)以特定的格式打印到標準輸出(通常是終端)或?qū)?shù)據(jù)格式化為字符串以供后續(xù)處理。這個庫的名稱 "fmt" 來自于 "format",因為它主要用于格式化數(shù)據(jù)。

fmt 包的主要功能包括:

  • 格式化輸出:fmt 包提供了函數(shù)如 PrintPrintfPrintlnFprintFprintf, 和 Fprintln 用于將數(shù)據(jù)輸出到標準輸出或指定的 io.Writer。你可以使用這些函數(shù)將數(shù)據(jù)以不同的格式打印到屏幕上或文件中。
  • 格式化輸入:fmt 包也支持從輸入源(通常是標準輸入)讀取數(shù)據(jù),并根據(jù)格式規(guī)范解析數(shù)據(jù)。這是通過 ScanScanf, 和 Scanln 函數(shù)實現(xiàn)的。這對于從用戶獲取輸入數(shù)據(jù)非常有用。
  • 字符串格式化:你可以使用 Sprintf 函數(shù)將數(shù)據(jù)格式化為字符串而不是直接輸出到標準輸出,這對于構(gòu)建日志消息或其他需要格式化的字符串很有用。
  • 錯誤格式化:fmt 包也提供了 Errorf 函數(shù),用于將格式化的錯誤消息作為 error 類型返回,方便錯誤處理。
  • 格式化占位符:在格式化字符串中,你可以使用占位符來指定如何格式化數(shù)據(jù)。常見的占位符包括 %d(整數(shù)),%f(浮點數(shù)),%s(字符串)等。

二、向外輸出

標準庫 fmt 提供了多種用于輸出的函數(shù),每個函數(shù)都有不同的用途和輸出方式。以下是一些常用的輸出相關(guān)函數(shù):

2.1 Print 系列

  • Print:用于將文本輸出到標準輸出。它接受任意數(shù)量的參數(shù),并將它們串聯(lián)成一個字符串輸出,不會添加換行符。
  • Printf:用于格式化輸出到標準輸出。它接受一個格式化字符串和一系列參數(shù),根據(jù)格式化字符串的占位符將參數(shù)格式化并輸出。
  • Println:類似于 Print,但會在輸出后自動添加一個換行符
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)

舉個簡單的例子:

func main() {
	fmt.Print("Hello, ", "world")
	name := "Alice"
	age := 30
	fmt.Printf("Hello, %s. You are %d years old.\n", name, age)
	fmt.Println("Hello, world")
}

2.2 Fprint 系列

Fprint 系列函數(shù)用于將文本輸出到指定的 io.Writer 接口,而不僅僅是標準輸出。你可以將文本輸出到文件、網(wǎng)絡(luò)連接等。這些函數(shù)的參數(shù)列表包括一個 io.Writer 參數(shù),以及任意數(shù)量的參數(shù)。

  • Fprint:將文本輸出到指定的 io.Writer
  • Fprintf:將格式化文本輸出到指定的 io.Writer。
  • Fprintln:將帶有換行符的文本輸出到指定的 io.Writer
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)

舉個例子:

func main() {
	// 向標準輸出寫入內(nèi)容
	fmt.Fprintln(os.Stdout, "向標準輸出寫入內(nèi)容")
	fileObj, err := os.OpenFile("./output.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		fmt.Println("打開文件出錯,err:", err)
		return
	}
	name := "jarvis"
	// 向打開的文件句柄中寫入內(nèi)容
	fmt.Fprintf(fileObj, "往文件中寫如信息:%s", name)
}

這個示例創(chuàng)建了一個名為 "output.txt" 的文件,并將數(shù)據(jù)寫入文件中。

2.3 Sprint 系列

Sprint 系列函數(shù)用于將文本輸出到字符串中,而不是標準輸出或文件。它們將文本格式化為字符串并返回結(jié)果。

  • Sprint:將文本輸出到字符串。
  • Sprintf:將格式化文本輸出到字符串。
  • Sprintln:將帶有換行符的文本輸出到字符串。
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string

簡單的示例代碼如下:

func main() {
	s1 := fmt.Sprint("jarvis")
	name := "jarvis"
	age := 18
	s2 := fmt.Sprintf("name:%s,age:%d", name, age)
	s3 := fmt.Sprintln("jarvis")
	fmt.Println(s1, s2, s3)
}

2.4 Errorf 系列

Errorf 系列函數(shù)用于創(chuàng)建格式化的錯誤消息并返回一個 error 類型的值。這允許你將格式化的錯誤消息返回給調(diào)用者,以便更好地進行錯誤處理。這些函數(shù)的用法類似于 Sprintf,但它們返回一個 error 值而不是字符串。

  • Errorf:根據(jù)format參數(shù)生成格式化字符串并返回一個包含該字符串的錯誤。
func Errorf(format string, a ...interface{}) error

通常使用這種方式來自定義錯誤類型,例如:

err := fmt.Errorf("這是一個錯誤")

三、格式化占位符

*printf系列函數(shù)都支持format格式化參數(shù),在這里我們按照占位符將被替換的變量類型劃分,方便查詢和記憶。

3.1 通用占位符

通用占位符用于格式化不同類型的數(shù)據(jù):

占位符說明
%v值的默認格式表示
%+v類似%v,但輸出結(jié)構(gòu)體時會添加字段名
%#v值的Go語法表示
%T打印值的類型
%%百分號

代碼示例:

func main() {
	fmt.Printf("%v\n", 100)
	fmt.Printf("%v\n", false)
	o := struct{ name string }{"jarvis"}
	fmt.Printf("%v\n", o)
	fmt.Printf("%#v\n", o)
	fmt.Printf("%T\n", o)
	fmt.Printf("100%%\n")
}

3.2 布爾型

占位符說明
%ttrue或false

3.3 整型

占位符說明
%b表示為二進制
%c該值對應(yīng)的unicode碼值
%d表示為十進制
%o表示為八進制
%x表示為十六進制,使用a-f
%X表示為十六進制,使用A-F
%U表示為Unicode格式:U+1234,等價于"U+%04X"
%q該值對應(yīng)的單引號括起來的go語法字符字面值,必要時會采用安全的轉(zhuǎn)義表示

示例代碼如下:

n := 65
fmt.Printf("%b\n", n)
fmt.Printf("%c\n", n)
fmt.Printf("%d\n", n)
fmt.Printf("%o\n", n)
fmt.Printf("%x\n", n)
fmt.Printf("%X\n", n)

3.4 浮點數(shù)與復(fù)數(shù)

占位符說明
%b無小數(shù)部分、二進制指數(shù)的科學計數(shù)法,如-123456p-78
%e科學計數(shù)法,如-1234.456e+78
%E科學計數(shù)法,如-1234.456E+78
%f有小數(shù)部分但無指數(shù)部分,如123.456
%F等價于%f
%g根據(jù)實際情況采用%e或%f格式(以獲得更簡潔、準確的輸出)
%G根據(jù)實際情況采用%E或%F格式(以獲得更簡潔、準確的輸出)

示例代碼如下:

f := 12.34
fmt.Printf("%b\n", f)
fmt.Printf("%e\n", f)
fmt.Printf("%E\n", f)
fmt.Printf("%f\n", f)
fmt.Printf("%g\n", f)
fmt.Printf("%G\n", f)

3.5 字符串和[]byte

占位符說明
%s直接輸出字符串或者[]byte
%q該值對應(yīng)的雙引號括起來的go語法字符串字面值,必要時會采用安全的轉(zhuǎn)義表示
%x每個字節(jié)用兩字符十六進制數(shù)表示(使用a-f
%X每個字節(jié)用兩字符十六進制數(shù)表示(使用A-F)

示例代碼如下:

    s := "jarvis"
    fmt.Printf("%s\n", s)
    fmt.Printf("%q\n", s)
    fmt.Printf("%x\n", s)
    fmt.Printf("%X\n", s)

3.6 指針

占位符說明
%p表示為十六進制,并加上前導的0x

示例代碼如下:

a := 18
fmt.Printf("%p\n", &a)
fmt.Printf("%#p\n", &a)

3.7 寬度標識符

寬度通過一個緊跟在百分號后面的十進制數(shù)指定,如果未指定寬度,則表示值時除必需之外不作填充。精度通過(可選的)寬度后跟點號后跟的十進制數(shù)指定。如果未指定精度,會使用默認精度;如果點號后沒有跟數(shù)字,表示精度為0。舉例如下

占位符說明
%f默認寬度,默認精度
%9f寬度9,默認精度
%.2f默認寬度,精度2
%9.2f寬度9,精度2
%9.f寬度9,精度0

示例代碼如下:

n := 88.88
fmt.Printf("%f\n", n)
fmt.Printf("%9f\n", n)
fmt.Printf("%.2f\n", n)
fmt.Printf("%9.2f\n", n)
fmt.Printf("%9.f\n", n)

3.8 其他flag

占位符說明
‘+’總是輸出數(shù)值的正負號;對%q(%+q)會生成全部是ASCII字符的輸出(通過轉(zhuǎn)義);
’ '對數(shù)值,正數(shù)前加空格而負數(shù)前加負號;對字符串采用%x或%X時(% x或% X)會給各打印的字節(jié)之間加空格
‘-’在輸出右邊填充空白而不是默認的左邊(即從默認的右對齊切換為左對齊);
‘#’八進制數(shù)前加0(%#o),十六進制數(shù)前加0x(%#x)或0X(%#X),指針去掉前面的0x(%#p)對%q(%#q),對%U(%#U)會輸出空格和單引號括起來的go字面值;
‘0’使用0而不是空格填充,對于數(shù)值類型會把填充的0放在正負號后面;

舉個例子:

s := "jarvis"
fmt.Printf("%s\n", s)
fmt.Printf("%5s\n", s)
fmt.Printf("%-5s\n", s)
fmt.Printf("%5.7s\n", s)
fmt.Printf("%-5.7s\n", s)
fmt.Printf("%5.2s\n", s)
fmt.Printf("%05s\n", s)

四、獲取輸入

Go 語言的 fmt 包提供了 fmt.Scan、fmt.Scanf 和 fmt.Scanln 這三個函數(shù),用于從標準輸入獲取用戶的輸入。這些函數(shù)允許你與用戶交互,從標準輸入流中讀取不同類型的數(shù)據(jù)并將其存儲在相應(yīng)的變量中。

4.1 fmt.Scan 函數(shù)

Scan 函數(shù)用于從標準輸入中獲取用戶的輸入,并將輸入的數(shù)據(jù)存儲在變量中。它根據(jù)空格分隔輸入,適合獲取多個輸入值。

函數(shù)定義如下:

func Scan(a ...interface{}) (n int, err error)
  • Scan從標準輸入掃描文本,讀取由空白符分隔的值保存到傳遞給本函數(shù)的參數(shù)中,換行符視為空白符。
  • 本函數(shù)返回成功掃描的數(shù)據(jù)個數(shù)和遇到的任何錯誤。如果讀取的數(shù)據(jù)個數(shù)比提供的參數(shù)少,會返回一個錯誤報告原因。

具體代碼示例如下:

package main
import "fmt"
func main() {
    var name string
    var age int
    fmt.Print("Enter your name: ")
    fmt.Scan(&name)
    fmt.Print("Enter your age: ")
    fmt.Scan(&age)
    fmt.Printf("Name: %s, Age: %d\n", name, age)
}

在這個示例中,fmt.Scanf 使用格式字符串 %s %d 來解析輸入的姓名和年齡。

4.2 fmt.Scanln 函數(shù)

Scanln 函數(shù)用于從標準輸入中獲取用戶的輸入,并將輸入的數(shù)據(jù)存儲在變量中,每行一個變量。它通常用于獲取多個輸入值,每個值在單獨的行中輸入。

函數(shù)定義如下:

func Scanln(a ...interface{}) (n int, err error)
  • Scanln類似Scan,它在遇到換行時才停止掃描。最后一個數(shù)據(jù)后面必須有換行或者到達結(jié)束位置。
  • 本函數(shù)返回成功掃描的數(shù)據(jù)個數(shù)和遇到的任何錯誤。

代碼示例:

package main
import "fmt"
func main() {
    var name string
    var age int
    fmt.Print("Enter your name: ")
    fmt.Scanln(&name)
    fmt.Print("Enter your age: ")
    fmt.Scanln(&age)
    fmt.Printf("Name: %s, Age: %d\n", name, age)
}

在上面的示例中,fmt.Scanln 用于獲取用戶輸入的姓名和年齡,并將它們存儲在相應(yīng)的變量中。輸入的每一行都對應(yīng)一個變量。

4.3 fmt.Scanf 函數(shù)

Scanf 函數(shù)用于根據(jù)格式規(guī)范解析輸入,并將數(shù)據(jù)存儲在變量中。它允許你指定輸入的格式,并可以處理不同類型的數(shù)據(jù)。

函數(shù)簽名如下:

func Scanf(format string, a ...interface{}) (n int, err error)
  • Scanf從標準輸入掃描文本,根據(jù)format參數(shù)指定的格式去讀取由空白符分隔的值保存到傳遞給本函數(shù)的參數(shù)中。
  • 本函數(shù)返回成功掃描的數(shù)據(jù)個數(shù)和遇到的任何錯誤。

代碼示例如下:

package main
import "fmt"
func main() {
    var name string
    var age int
    fmt.Print("Enter your name and age: ")
    fmt.Scanf("%s %d", &name, &age)
    fmt.Printf("Name: %s, Age: %d\n", name, age)
}

在這個示例中,fmt.Scanf 使用格式字符串 %s %d 來解析輸入的姓名和年齡。

4.4 使用 bufio 包獲取輸入

bufio 包提供了一種更靈活的方式來處理輸入,特別是在需要完整讀取一行或多行輸入的情況下。你可以使用 bufio.NewReader 創(chuàng)建一個輸入緩沖區(qū),然后使用 ReadString 函數(shù)來讀取輸入,直到指定的分隔符(例如換行符 \n)。這允許你獲取包含空格在內(nèi)的完整輸入內(nèi)容。

func bufioDemo() {
    reader := bufio.NewReader(os.Stdin) // 從標準輸入生成讀對象
    fmt.Print("請輸入內(nèi)容:")
    text, _ := reader.ReadString('\n') // 讀取直到換行符
    text = strings.TrimSpace(text)
    fmt.Printf("%#v\n", text)
}

4.5 使用 Fscan 系列函數(shù)

Fscan 系列函數(shù)允許你從 io.Reader 接口中讀取數(shù)據(jù),而不僅僅是標準輸入。這些函數(shù)與 fmt.Scan、fmt.Scanf 和 fmt.Scanln 類似,但允許你從任何實現(xiàn) io.Reader 接口的地方讀取數(shù)據(jù)。

  • Fscan:從 io.Reader 中讀取數(shù)據(jù)。
  • Fscanln:從 io.Reader 中讀取一行數(shù)據(jù)。
  • Fscanf:根據(jù)指定的格式從 io.Reader 中讀取數(shù)據(jù)。
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 (
    "fmt"
    "strings"
)
func main() {
    input := "42 John"
    reader := strings.NewReader(input) // 從字符串生成讀對象
    var age int
    var name string
    n, err := fmt.Fscanf(reader, "%d %s", &age, &name)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Printf("Read %d values: Age: %d, Name: %s\n", n, age, name)
}

4.6 使用 Sscan 系列函數(shù)

Sscan 系列函數(shù)允許你從字符串中讀取數(shù)據(jù),而不僅僅是從標準輸入。這些函數(shù)與 fmt.Scan、fmt.Scanf 和 fmt.Scanln 類似,但允許你從字符串中讀取數(shù)據(jù)。

  • Sscan:從字符串中讀取數(shù)據(jù)。
  • Sscanln:從字符串中讀取一行數(shù)據(jù)。
  • Sscanf:根據(jù)指定的格式從字符串中讀取數(shù)據(jù)。
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() {
    input := "Alice 30"
    var name string
    var age int
    n, err := fmt.Sscanf(input, "%s %d", &name, &age)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Printf("Read %d values: Name: %s, Age: %d\n", n, name, age)
}

到此這篇關(guān)于Go語言fmt庫詳解與應(yīng)用實例(格式化輸入輸出功能)的文章就介紹到這了,更多相關(guān)Go  fmt 庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號

    Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號

    這篇文章主要介紹了Go?函數(shù)中獲取調(diào)用者的函數(shù)名和文件名及行號,文章圍主題詳細內(nèi)容展開相關(guān)介紹,感興趣的小伙伴可以參考一下
    2022-05-05
  • Golang中實現(xiàn)類似類與繼承的方法(示例代碼)

    Golang中實現(xiàn)類似類與繼承的方法(示例代碼)

    這篇文章主要介紹了Golang中實現(xiàn)類似類與繼承的方法,Go語言中通過方法接受者的類型來決定方法的歸屬和繼承關(guān)系,本文通過示例代碼講解的非常詳細,需要的朋友可以參考下
    2024-04-04
  • Go語言循環(huán)遍歷含有中文的字符串的方法小結(jié)

    Go語言循環(huán)遍歷含有中文的字符串的方法小結(jié)

    這篇文章主要介紹了Go語言循環(huán)遍歷含有中文的字符串的幾種方法,文章通過代碼示例講解的非常詳細,具有一定的參考價值,感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • go語言的變量定義示例詳解

    go語言的變量定義示例詳解

    這篇文章主要為大家介紹了go語言的變量定義示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Go語言導出內(nèi)容到Excel的方法

    Go語言導出內(nèi)容到Excel的方法

    這篇文章主要介紹了Go語言導出內(nèi)容到Excel的方法,涉及Go語言操作excel的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go高效率開發(fā)Web參數(shù)校驗三種方式實例

    Go高效率開發(fā)Web參數(shù)校驗三種方式實例

    這篇文章主要介紹了Go高效率開發(fā)Web參數(shù)校驗三種方式實例,需要的朋友可以參考下
    2022-11-11
  • Golang程序中使用Prometheus的client_golang庫

    Golang程序中使用Prometheus的client_golang庫

    這篇文章主要介紹了Golang程序中使用Prometheus的client_golang庫,Prometheus 是一個開源的監(jiān)控和警報工具包,用于收集和處理應(yīng)用程序和系統(tǒng)的指標數(shù)據(jù)。Prometheus 提供了多種客戶端庫,可以輕松地集成到各種編程語言中
    2023-04-04
  • go?doudou應(yīng)用中使用注解示例詳解

    go?doudou應(yīng)用中使用注解示例詳解

    這篇文章主要為大家介紹了go?doudou應(yīng)用中使用注解示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Go語言中調(diào)用外部命令的方法總結(jié)

    Go語言中調(diào)用外部命令的方法總結(jié)

    在工作中,我們時不時地會需要在Go中調(diào)用外部命令。本文為大家總結(jié)了Go語言中調(diào)用外部命令的幾種姿勢,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-11-11
  • go切片的copy和view的使用方法

    go切片的copy和view的使用方法

    這篇文章主要介紹了go切片的copy和view的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11

最新評論