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

Go中標(biāo)準(zhǔn)庫fmt包的使用小結(jié)

 更新時(shí)間:2025年09月26日 09:27:20   作者:Jayden_念舊  
fmt包是Go語言處理輸入輸出的核心庫,提供Print/Scan系列函數(shù)及多樣格式化動(dòng)詞(如%v、%d、%s等),支持字符串格式化、掃描、自定義輸出格式及錯(cuò)誤處理,廣泛用于數(shù)據(jù)格式化與輸出控制,下面就來詳細(xì)的介紹一下

fmt包是Go語言中用于格式化輸入/輸出的核心標(biāo)準(zhǔn)庫,提供了豐富的函數(shù)來處理字符串格式化,打印和掃描。官方文檔參考:pkg.go.dev/fmt

一、核心功能分類

1.輸出函數(shù)(標(biāo)準(zhǔn)輸出)

  • Print 系列:
    • Print(): 輸出內(nèi)容(無格式)
    • Println(): 輸出內(nèi)容并添加換行符
    • Printf(): 格式化輸出(核心函數(shù))
  // 使用 Print 函數(shù),直接輸出內(nèi)容,不會(huì)自動(dòng)換行
  fmt.Print("Hello, ")
  fmt.Print("World!\n")

  // 使用 Println 函數(shù),輸出內(nèi)容后自動(dòng)換行
  fmt.Println("This is a new line.")

  // 使用 Printf 函數(shù),根據(jù)格式化字符串輸出內(nèi)容
  name := "Alice"
  age := 30
  fmt.Printf("My name is %s and I am %d years old.\n", name, age)

2.字符串格式化

  • Sprint 系列:返回格式化后的字符串
    • Sprintf(): 格式化并返回字符串
 // 使用 Sprint 函數(shù),將參數(shù)格式化為字符串并返回
  str := fmt.Sprint("This is a ", "concatenated string.")
  fmt.Println(str)

  // 使用 Sprintln 函數(shù),將參數(shù)格式化為字符串并返回,參數(shù)間用空格分隔,結(jié)尾添加換行符
  strLn := fmt.Sprintln("This", "is", "a", "Sprintln example.")
  fmt.Print(strLn)

  // 使用 Sprintf 函數(shù),根據(jù)格式化字符串將參數(shù)格式化為字符串并返回
  formattedStr := fmt.Sprintf("The sum of %d and %d is %d.", 3, 5, 3+5)
  fmt.Println(formattedStr)

3. 輸出到指定目標(biāo)(io.Writer)

  • Fprint 系列:寫入到文件/網(wǎng)絡(luò)等
    • Fprintf(): 格式化并寫入
// 使用 Fprint 函數(shù),將內(nèi)容輸出到指定的 io.Writer,這里使用標(biāo)準(zhǔn)輸出 os.Stdout
  // 一般用于將內(nèi)容輸出到文件等其他 io.Writer 中
  fmt.Fprint(os.Stdout, "Output using Fprint.\n")

  // 使用 Fprintln 函數(shù),將內(nèi)容輸出到指定的 io.Writer 并換行
  fmt.Fprintln(os.Stdout, "Output using Fprintln.")

  // 使用 Fprintf 函數(shù),根據(jù)格式化字符串將內(nèi)容輸出到指定的 io.Writer
  fmt.Fprintf(os.Stdout, "My name is %s and I am %d years old, using Fprintf.\n", name, age)

4. 輸入掃描(標(biāo)準(zhǔn)輸入/字符串/文件)

  • Scan 系列:
    • Scan(): 讀取空格分隔的值
    • Scanf(): 格式化掃描(按模式解析)
   var name string
    var age int
    fmt.Scanf("%s %d", &name, &age) // 輸入: "Bob 25"
  • Sscan(): 從字符串掃描
 input := "ID:100"
    var id int
    fmt.Sscan(input[4:], &id) // id = 100

二、格式化動(dòng)詞(Verbs)詳情

格式化字符串使用%開頭的動(dòng)詞指定數(shù)據(jù)類型:

1. 通用動(dòng)詞

  • %v:默認(rèn)格式(自動(dòng)推斷類型)
  fmt.Printf("%v %v", "hello", 42) // "hello 42"
  • %+v:打印結(jié)構(gòu)體時(shí)包含字段名
  fmt.Printf("%+v", User{Name: "Tom"}) // "{Name:Tom}"
  • %#v:Go語法表示
  fmt.Printf("%#v", "hi") // `"hi"`
  • %T:輸出類型
  fmt.Printf("%T", 3.14) // "float64"

2. 整數(shù)類型

  • %d:十進(jìn)制
  • %b:二進(jìn)制
  • %x:十六進(jìn)制(小寫)
  • %o:八進(jìn)制
  • %c:Unicode字符
  fmt.Printf("%d → %x → %c", 65, 65, 65) // "65 → 41 → A"

3. 浮點(diǎn)數(shù)

  • %f:小數(shù)形式(默認(rèn)精度6)
  • %e:科學(xué)計(jì)數(shù)法(e小寫)
  • %g:自動(dòng)選擇 %f 或 %e(更緊湊)
  fmt.Printf("%.2f | %e", 3.14159, 1000.0) // "3.14 | 1.000000e+03"

4. 字符串與字節(jié)切片

  • %s:直接輸出字符串/字節(jié)切片
  • %q:帶引號的轉(zhuǎn)義字符串
  fmt.Printf("%q", "Go\t") // "\"Go\\t\""

5. 指針與地址

  • %p:指針地址
  x := 10
  fmt.Printf("%p", &x) // "0xc0000160d8"

三、高級格式控制

在動(dòng)詞前添加修飾符實(shí)現(xiàn)精細(xì)控制:

1.寬度與精度

  • %5d:最小寬度5(右對齊)
  • %-5d:左對齊
  • %05d:補(bǔ)零填充
  • %.3f:浮點(diǎn)數(shù)保留3位小數(shù)
  fmt.Printf("|%6s|%-6d|%06d|", "Hi", 42, 42)
  // 輸出: |    Hi|42    |000042|

2. 自定義格式(實(shí)現(xiàn)接口)

若類型實(shí)現(xiàn)了 StringerFormatter 接口,可自定義輸出:

type User struct{ Name string }
func (u User) String() string { return "[" + u.Name + "]" }

fmt.Print(User{"Alice"}) // 輸出: [Alice]

四、錯(cuò)誤處理

  • 所有函數(shù)返回寫入字節(jié)數(shù)和錯(cuò)誤(如掃描時(shí)類型不匹配):
 n, err := fmt.Printf("%d", "not-a-number")
  if err != nil {
      log.Fatal(err) // 報(bào)錯(cuò): %!d(string=not-a-number)
  }

五、表格總結(jié)

輸出函數(shù)

函數(shù)描述示例
Print()原樣輸出內(nèi)容,不加換行符fmt.Print("Hello")
Println()輸出內(nèi)容并在末尾添加換行符fmt.Println("World")
Printf()格式化輸出fmt.Printf("%d", 42)
Sprint()返回格式化后的字符串s := fmt.Sprint(42)
Fprint()將內(nèi)容寫入到io.Writer接口fmt.Fprint(w, "data")
Errorf()格式化錯(cuò)誤信息fmt.Errorf("error")

輸入函數(shù)

函數(shù)描述示例
Scan()從標(biāo)準(zhǔn)輸入讀取值fmt.Scan(&name)
Scanf()按格式從標(biāo)準(zhǔn)輸入讀取值fmt.Scanf("%s", &name)
Scanln()從標(biāo)準(zhǔn)輸入讀取一行fmt.Scanln(&name)
Sscan()從字符串中掃描值fmt.Sscan(str, &val)
Fscan()從io.Reader讀取值fmt.Fscan(r, &val)

通用占位符

占位符描述示例
%v值的默認(rèn)格式表示fmt.Printf("%v", data)
%+v添加字段名(結(jié)構(gòu)體)fmt.Printf("%+v", user)
%#vGo語法表示fmt.Printf("%#v", arr)
%T值類型的Go表示fmt.Printf("%T", 42)
%%百分號字面量fmt.Printf("%%")

整數(shù)類型

占位符描述示例
%b二進(jìn)制fmt.Printf("%b", 5) → 101
%d十進(jìn)制fmt.Printf("%d", 42)
%o八進(jìn)制fmt.Printf("%o", 8) → 10
%x十六進(jìn)制(小寫)fmt.Printf("%x", 255) → ff
%X十六進(jìn)制(大寫)fmt.Printf("%X", 255) → FF
%cUnicode碼點(diǎn)對應(yīng)字符fmt.Printf("%c", 65) → A
%UUnicode格式fmt.Printf("%U", 'A') → U+0041

浮點(diǎn)數(shù)和復(fù)數(shù)

占位符描述示例
%f浮點(diǎn)數(shù)(默認(rèn)寬度、精度)fmt.Printf("%f", 3.14)
%e科學(xué)計(jì)數(shù)法(e)fmt.Printf("%e", 1000.0) → 1.000000e+03
%E科學(xué)計(jì)數(shù)法(E)fmt.Printf("%E", 1000.0) → 1.000000E+03
%g根據(jù)情況選擇%e或%ffmt.Printf("%g", 10000000.0) → 1e+07
%G根據(jù)情況選擇%E或%ffmt.Printf("%G", 10000000.0) → 1E+07

字符串和字節(jié)切片

占位符描述示例
%s字符串或切片fmt.Printf("%s", "hello")
%q雙引號包裹的字符串fmt.Printf("%q", "hi") → "hi"
%x十六進(jìn)制(小寫)fmt.Printf("%x", "Go") → 476f
%X十六進(jìn)制(大寫)fmt.Printf("%X", "Go") → 476F

到此這篇關(guān)于Go中標(biāo)準(zhǔn)庫fmt包的使用小結(jié)的文章就介紹到這了,更多相關(guān)Go fmt包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go xorm存庫處理null值問題

    go xorm存庫處理null值問題

    這篇文章主要介紹了go xorm存庫處理null值問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • golang中的struct操作

    golang中的struct操作

    結(jié)構(gòu)體是一種聚合的數(shù)據(jù)類型,是由零個(gè)或多個(gè)任意類型的值聚合成的實(shí)體,每個(gè)值稱為結(jié)構(gòu)體的成員。下面介紹下golang中的struct,感興趣的朋友一起看看吧
    2021-11-11
  • go語言中值類型和指針類型的深入理解

    go語言中值類型和指針類型的深入理解

    這篇文章主要給大家介紹了關(guān)于go語言中值類型和指針類型的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • go實(shí)現(xiàn)文件的創(chuàng)建、刪除與讀取示例代碼

    go實(shí)現(xiàn)文件的創(chuàng)建、刪除與讀取示例代碼

    這篇文章主要給大家介紹了關(guān)于go如何實(shí)現(xiàn)文件的創(chuàng)建、刪除與讀取的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2019-02-02
  • go語言區(qū)塊鏈學(xué)習(xí)調(diào)用智能合約

    go語言區(qū)塊鏈學(xué)習(xí)調(diào)用智能合約

    這篇文章主要為大家介紹了go語言區(qū)塊鏈學(xué)習(xí)中如何調(diào)用智能合約的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • Hugo?Config模塊構(gòu)建實(shí)現(xiàn)源碼剖析

    Hugo?Config模塊構(gòu)建實(shí)現(xiàn)源碼剖析

    這篇文章主要為大家介紹了Hugo?Config模塊構(gòu)建實(shí)現(xiàn)源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 深入理解Go語言中defer和panic的執(zhí)行順序

    深入理解Go語言中defer和panic的執(zhí)行順序

    defer?和?panic?的執(zhí)行順序是一個(gè)重要的概念,本文主要介紹了Go語言中defer和panic的執(zhí)行順序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • Go調(diào)用opencv實(shí)現(xiàn)圖片矯正的代碼示例

    Go調(diào)用opencv實(shí)現(xiàn)圖片矯正的代碼示例

    這篇文章主要為大家詳細(xì)介紹了Go調(diào)用opencv實(shí)現(xiàn)圖片矯正的代碼示例,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • Golang并發(fā)編程之調(diào)度器初始化詳解

    Golang并發(fā)編程之調(diào)度器初始化詳解

    這篇文章主要為大家詳細(xì)介紹了Golang并發(fā)編程中關(guān)于調(diào)度器初始化的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-03-03
  • Go實(shí)現(xiàn)生產(chǎn)隨機(jī)密碼的示例代碼

    Go實(shí)現(xiàn)生產(chǎn)隨機(jī)密碼的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Go實(shí)現(xiàn)生產(chǎn)隨機(jī)密碼的,文中的示例代碼簡潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2023-09-09

最新評論