Fmt:資料處理的好幫手

更新 發佈閱讀 12 分鐘


raw-image

👨‍💻簡介

要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。

主要功能

fmt 套件的主要功能是處理格式化的輸出和輸入,包括資料格式處理、字串解析和數值轉換等功能。通常用來記錄訊息、檔案處理等等。fmt 套件中的函數可以主要分為兩大類:Print 和 Scan

導入Package

import "fmt"

Print 函數系列

  • fmt.Print:將資料印到終端機。
  • fmt.Println:將資料印到終端機,並換行。
  • fmt.Printf:根據格式化參數將資料印到終端機。
  • fmt.Sprintf:格式化成字串,通常用在需要以字串形式處理格式化時會用到
  • fmt.Fprintf:格式化到文件,通常用來寫檔會用到

PrintPrintf相比,差在不能印格式化輸出
PrintPrintln相比,差在ln多了一個換行

package main

import (
"fmt"
"os"
)
func main() {
name := "Alan"
age := 30
fmt.Print("Name: ", name, " Age: ", age) // 沒有換行
fmt.Println("Name:", name, "Age:", age) // 有換行
fmt.Printf("Name: %s Age: %d\n", name, age) // 格式化印出

formatted := fmt.Sprintf("Name: %s, Age: %d", name, age)
fmt.Println(formatted) // 輸出格式化後的字串

file, _ := os.Create("output.txt")
defer file.Close()
fmt.Fprintf(file, "Name: %s, Age: %d", name, age) // 將格式化後的內容寫入檔案
}

Scan 函數系列

  • fmt.Scan:讀取一個或多個空格分隔的值。
  • fmt.Scanf:格式化讀取。
  • fmt.Scanln:讀取一行內容。
  • fmt.Fscanf:從文件中格式化讀取
package main

import (
"fmt"
"os"
)
func main() {
// 使用 fmt.Scan 讀取一個或多個空格分隔的值
var name string
var age int
fmt.Print("Enter your name and age (space-separated): ")
fmt.Scan(&name, &age)
fmt.Printf("Name: %s Age: %d\n", name, age)

// 使用 fmt.Scanf 進行格式化讀取
var height float64
fmt.Print("Enter your height in meters: ")
fmt.Scanf("%f", &height)
fmt.Printf("Height: %.2f meters\n", height)

// 使用 fmt.Scanln 讀取一行內容
var city string
var country string
fmt.Print("Enter your city and country: ")
fmt.Scanln(&city, &country)
fmt.Printf("City: %s Country: %s\n", city, country)

// 使用 fmt.Fscanf 從文件中格式化讀取
file, _ := os.Open("input.txt")
defer file.Close()
var code int
var message string
fmt.Fscanf(file, "%d %s", &code, &message)
fmt.Printf("Code: %d Message: %s\n", code, message)
}

格式化控制

常見的格式化參數

在Go的fmtPackage中,常見的格式化參數用來指定印出的格式。這邊列舉一些常見的格式化參數:

  • %s:string (字串)
  • %c:char (字元)
  • %d:digit (10進位的數字)
  • %f:float (浮點數)
  • %t:bool (布林值)
  • %v: value (值)
package main

import "fmt"

func main() {
name := "Alan"
age := 30
firstChar := 'A'
height := 5.8
isStudent := true

fmt.Printf("Name: %s\n", name) // Name: Alan
fmt.Printf("Age: %d\n", age) // Age: 30
fmt.Printf("First Char: %c\n", firstChar) // First Char: A
fmt.Printf("Height: %.2f\n", height) // Height: 5.8
fmt.Printf("Is Student: %t\n", isStudent) // Is Student: true
}

%v還能夠顯示更詳細的資訊

  • %+v: value (以詳細格式輸出,印出 struct 時,會多欄位名稱)
  • %#v: value (以Go語言語法輸出,印出 struct 時,會多 struct 名稱與欄位名稱)
type Person struct {
FirstName string
LastName string
Age int
}

func main() {
person := Person{
FirstName: "Alan",
LastName: "Wang",
Age: 30,
}
fmt.Printf("%+v\n", person) // {FirstName:John LastName:Doe Age:30}
fmt.Printf("%#v\n", person) // main.Person{FirstName:"John", LastName:"Doe", Age:30}
}

寬度和精度

在格式化字符串中,我們可以使用寬度(Width)和精度(Precision)來調整印出的長度和小數點位數。例如,%8.2f表示印出浮點數佔8個字符的寬度,並保留2位小數。

package main

import "fmt"

func main() {
num := 123.456789
fmt.Printf("Default: %f\n", num)
fmt.Printf("Width 16: %16f\n", num)
fmt.Printf("Width 8, Precision 2: %8.2f\n", num)
}

格式化選項

格式化選項可以讓我們設定對齊方式、填充字符等。例如,%-8s代表向左對齊,並在不足8個字符時使用空格進行填充。

package main

import "fmt"

func main() {
name := "Alan"
fmt.Printf("Name: %-8s|\n", name)
fmt.Printf("Name: %8s|\n", name)
fmt.Printf("Name: %.8s|\n", name)
}

常見用法

字串格式化

package main

import "fmt"

func main() {
name := "Alan"
greeting := fmt.Sprintf("Hello, %s!", name)
fmt.Println(greeting)
}

數值格式化

package main

import "fmt"

func main() {
num := 42
fmt.Printf("Decimal: %d\n", num)
fmt.Printf("Hexadecimal: %x\n", num)
fmt.Printf("Binary: %b\n", num)
}

時間格式化

package main

import (
"fmt"
"time"
)

func main() {
now := time.Now()
fmt.Printf("Current time: %s\n", now.Format("2006-01-02 15:04:05"))
}

JSON 讀取和印出

package main

import (
"encoding/json"
"fmt"
)

type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}

func main() {

// 將Struct轉換為JSON
person := Person{Name: "Alan", Age: 30}
jsonBytes, _ := json.Marshal(person)
fmt.Println(string(jsonBytes))

// 從JSON解析Struct
jsonStr := `{"name":"Bob","age":25}`
var anotherPerson Person
json.Unmarshal([]byte(jsonStr), &anotherPerson)

fmt.Printf("Name: %s Age: %d\n", anotherPerson.Name, anotherPerson.Age)
}

📚Reference

留言
avatar-img
Alan的開發者天地
19會員
83內容數
golang
Alan的開發者天地的其他內容
2023/10/04
👨‍💻 簡介 最近想要透過小實作來撰寫筆記,達到做中學的效果,因此就來實作個小爬蟲順便結合前面學到的package做一個小複習。
Thumbnail
2023/10/04
👨‍💻 簡介 最近想要透過小實作來撰寫筆記,達到做中學的效果,因此就來實作個小爬蟲順便結合前面學到的package做一個小複習。
Thumbnail
2023/09/28
👨‍💻簡介 今天來介紹一個自己開發後端蠻常用的一個 package,promptui,拿來做menu真的很方便,promptui有兩個主要的輸入模式: Prompt:跳出單行使用者輸入。 Select:提供一個選項列表供使用者選擇。
Thumbnail
2023/09/28
👨‍💻簡介 今天來介紹一個自己開發後端蠻常用的一個 package,promptui,拿來做menu真的很方便,promptui有兩個主要的輸入模式: Prompt:跳出單行使用者輸入。 Select:提供一個選項列表供使用者選擇。
Thumbnail
2023/09/26
👨‍💻 簡介 在處理string時,正則表達式是一個非常有用的工具。Go語言的regexp package 可以使用正則表達式,用來執行如檢查string是否匹配某個模式、提取匹配的subString等操作。
Thumbnail
2023/09/26
👨‍💻 簡介 在處理string時,正則表達式是一個非常有用的工具。Go語言的regexp package 可以使用正則表達式,用來執行如檢查string是否匹配某個模式、提取匹配的subString等操作。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
Thumbnail
👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。
Thumbnail
👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。
Thumbnail
👨‍💻 簡介 今天的encoding/json package是我日常在開發web時很常用到的package之一,主要是用來將Go struct和 JSON 之間進行轉換。主要功能為資料序列化(marshalling)和反序列化(unmarshalling)。
Thumbnail
👨‍💻 簡介 今天的encoding/json package是我日常在開發web時很常用到的package之一,主要是用來將Go struct和 JSON 之間進行轉換。主要功能為資料序列化(marshalling)和反序列化(unmarshalling)。
Thumbnail
👨‍💻簡介 要處理日期和時間,就必須知道這個Package -> time,Go提供了內建的timePackage。 今天主要介紹time的功能,包括時間操作、格式化等等,以及常見用法。
Thumbnail
👨‍💻簡介 要處理日期和時間,就必須知道這個Package -> time,Go提供了內建的timePackage。 今天主要介紹time的功能,包括時間操作、格式化等等,以及常見用法。
Thumbnail
👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。
Thumbnail
👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。
Thumbnail
👨‍💻簡介 套件(Package)在Golang中扮演著組織和管理程式碼的重要角色。 package就像工具箱一樣,裡面裝滿各種不同的工具,每個工具都有特定的功能。這些工具能夠幫助你完成不同的任務,從修理家具到蓋小屋,樣樣都行。
Thumbnail
👨‍💻簡介 套件(Package)在Golang中扮演著組織和管理程式碼的重要角色。 package就像工具箱一樣,裡面裝滿各種不同的工具,每個工具都有特定的功能。這些工具能夠幫助你完成不同的任務,從修理家具到蓋小屋,樣樣都行。
Thumbnail
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
Thumbnail
👨‍💻簡介 在 Go 語言中,函數(Function)是一個強大且重要的概念,就像食譜一樣,告訴你應該如何處理食材,最後得到一道美味的料理。經過哪些程序讓程式更有組織性和可讀性。函數可幫助你將程式碼區塊組織成可重複使用的元件,進而執行特定的任務。
Thumbnail
👨‍💻簡介 在這篇文章裡,會簡單介紹幾個關鍵的基本概念和語法結構,加快上手這門程式語言。
Thumbnail
👨‍💻簡介 在這篇文章裡,會簡單介紹幾個關鍵的基本概念和語法結構,加快上手這門程式語言。
Thumbnail
常常會遇到好不容易寫好程式,但是輸出的時候沒辦法按照自己想要的格式,或是間隔來輸出,這時需要用到的就是格式化輸出,格式化輸出就是調整排版的一個形式。
Thumbnail
常常會遇到好不容易寫好程式,但是輸出的時候沒辦法按照自己想要的格式,或是間隔來輸出,這時需要用到的就是格式化輸出,格式化輸出就是調整排版的一個形式。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News