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

Go常用標(biāo)準(zhǔn)庫之fmt的簡介與使用詳解

 更新時間:2023年10月26日 07:33:05   作者:賈維斯Echo  
fmt 是 Go 語言中的一個常用標(biāo)準(zhǔn)庫,它用于格式化輸入和輸出數(shù)據(jù),這篇文章主要為大家介紹了fmt的基本使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、介紹

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

fmt 包的主要功能包括:

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

二、向外輸出

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

2.1 Print 系列

  • Print:用于將文本輸出到標(biāo)準(zhǔn)輸出。它接受任意數(shù)量的參數(shù),并將它們串聯(lián)成一個字符串輸出,不會添加換行符。
  • Printf:用于格式化輸出到標(biāo)準(zhǔn)輸出。它接受一個格式化字符串和一系列參數(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 接口,而不僅僅是標(biāo)準(zhǔn)輸出。你可以將文本輸出到文件、網(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() {
	// 向標(biāo)準(zhǔn)輸出寫入內(nèi)容
	fmt.Fprintln(os.Stdout, "向標(biāo)準(zhǔn)輸出寫入內(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ù)用于將文本輸出到字符串中,而不是標(biāo)準(zhǔn)輸出或文件。它們將文本格式化為字符串并返回結(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)用者,以便更好地進(jìn)行錯誤處理。這些函數(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值的默認(rèn)格式表示
%+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表示為二進(jìn)制
%c該值對應(yīng)的unicode碼值
%d表示為十進(jìn)制
%o表示為八進(jìn)制
%x表示為十六進(jìn)制,使用a-f
%X表示為十六進(jìn)制,使用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ù)部分、二進(jìn)制指數(shù)的科學(xué)計數(shù)法,如-123456p-78
%e科學(xué)計數(shù)法,如-1234.456e+78
%E科學(xué)計數(shù)法,如-1234.456E+78
%f有小數(shù)部分但無指數(shù)部分,如123.456
%F等價于%f
%g根據(jù)實際情況采用%e或%f格式(以獲得更簡潔、準(zhǔn)確的輸出)
%G根據(jù)實際情況采用%E或%F格式(以獲得更簡潔、準(zhǔn)確的輸出)

示例代碼如下:

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é)用兩字符十六進(jìn)制數(shù)表示(使用a-f
%X每個字節(jié)用兩字符十六進(jìn)制數(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表示為十六進(jìn)制,并加上前導(dǎo)的0x

示例代碼如下:

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

3.7 寬度標(biāo)識符

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

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

舉個例子:

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ù),用于從標(biāo)準(zhǔn)輸入獲取用戶的輸入。這些函數(shù)允許你與用戶交互,從標(biāo)準(zhǔn)輸入流中讀取不同類型的數(shù)據(jù)并將其存儲在相應(yīng)的變量中。

4.1 fmt.Scan 函數(shù)

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

函數(shù)定義如下:

func Scan(a ...interface{}) (n int, err error)
  • Scan從標(biāo)準(zhǔn)輸入掃描文本,讀取由空白符分隔的值保存到傳遞給本函數(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ù)用于從標(biāo)準(zhǔn)輸入中獲取用戶的輸入,并將輸入的數(shù)據(jù)存儲在變量中,每行一個變量。它通常用于獲取多個輸入值,每個值在單獨的行中輸入。

函數(shù)定義如下:

func Scanln(a ...interface{}) (n int, err error)
  • Scanln類似Scan,它在遇到換行時才停止掃描。最后一個數(shù)據(jù)后面必須有換行或者到達(dá)結(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從標(biāo)準(zhǔn)輸入掃描文本,根據(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) // 從標(biāo)準(zhǔn)輸入生成讀對象
    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ù),而不僅僅是標(biāo)準(zhǔn)輸入。這些函數(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ù),而不僅僅是從標(biāo)準(zhǔn)輸入。這些函數(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)
}

以上就是Go常用標(biāo)準(zhǔn)庫之fmt的簡介與使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Go fmt的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang微服務(wù)框架Kratos實現(xiàn)分布式任務(wù)隊列Asynq的方法詳解

    Golang微服務(wù)框架Kratos實現(xiàn)分布式任務(wù)隊列Asynq的方法詳解

    任務(wù)隊列(Task Queue) 一般用于跨線程或跨計算機(jī)分配工作的一種機(jī)制,在Golang語言里面,我們有像Asynq和Machinery這樣的類似于Celery的分布式任務(wù)隊列,本文就給大家詳細(xì)介紹一下Golang微服務(wù)框架Kratos實現(xiàn)分布式任務(wù)隊列Asynq的方法,需要的朋友可以參考下
    2023-09-09
  • 詳解Golang中g(shù)cache模塊的基本使用

    詳解Golang中g(shù)cache模塊的基本使用

    這篇文章主要通過結(jié)合商業(yè)項目的使用場景,為大家介紹了gcache的基本使用、緩存控制以及淘汰策略。使用gcache做緩存處理,簡單方便易上手
    2022-11-11
  • go如何使用gin結(jié)合jwt做登錄功能簡單示例

    go如何使用gin結(jié)合jwt做登錄功能簡單示例

    jwt全稱Json web token,是一種認(rèn)證和信息交流的工具,這篇文章主要給大家介紹了關(guān)于go如何使用gin結(jié)合jwt做登錄功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 淺談Golang的方法傳遞值應(yīng)該注意的地方

    淺談Golang的方法傳遞值應(yīng)該注意的地方

    這篇文章主要介紹了淺談Golang的方法傳遞值應(yīng)該注意的地方,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 一文帶你掌握Golang中panic與recover的使用方法

    一文帶你掌握Golang中panic與recover的使用方法

    這篇文章主要介紹了Golang中panic與recover的作用和使用方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,需要的小伙伴可以參考一下
    2023-04-04
  • GoLang 中的隨機(jī)數(shù)的示例代碼

    GoLang 中的隨機(jī)數(shù)的示例代碼

    本篇文章主要介紹了GoLang 中的隨機(jī)數(shù)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Golang中類型轉(zhuǎn)換利器cast庫的用法詳解

    Golang中類型轉(zhuǎn)換利器cast庫的用法詳解

    cast庫是一個簡潔而強(qiáng)大的第三方庫,它的主要功能是實現(xiàn)類型之間的安全轉(zhuǎn)換,而在Golang開發(fā)中,類型轉(zhuǎn)換是一個常見且不可避免的過程,下面我們就來看看cast庫在Golang中的具體應(yīng)用吧
    2024-11-11
  • Go微服務(wù)項目配置文件的定義和讀取示例詳解

    Go微服務(wù)項目配置文件的定義和讀取示例詳解

    這篇文章主要為大家介紹了Go微服務(wù)項目配置文件的定義和讀取示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • go redis實現(xiàn)滑動窗口限流的方式(redis版)

    go redis實現(xiàn)滑動窗口限流的方式(redis版)

    這篇文章主要介紹了go redis實現(xiàn)滑動窗口限流的方式(redis版),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 通過與Java功能上的對比來學(xué)習(xí)Go語言

    通過與Java功能上的對比來學(xué)習(xí)Go語言

    這篇文章主要介紹了通過與Java功能上的對比來學(xué)習(xí)Go語言的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評論