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

17會員
83內容數
golang
留言0
查看全部
發表第一個留言支持創作者!
Alan的開發者天地 的其他內容
👨‍💻簡介 昨天講到Goroutine的橋梁aka傳話筒 — Channel,那要怎麼知道對方有收到訊息,我的紙條有送到對方手上呢? 今天就是要來介紹幾種Goroutine的確定完成工作的幾種方式。
👨‍💻簡介 昨天講到Goroutine有稍微簡單介紹Channel,Channel是Go語言中極為重要的併發通訊機制,它就像是不同goroutines之間的話筒,允許它們安全地傳遞資料和信息。這個強大的工具使得Go語言在處理併發任務時非常優雅和高效。
👨‍💻簡介 在日常生活中,如果能同時做很多事情,效率肯定大大提升,那麼在Go語言中,該如何做到呢,答案就是今天的主角Goroutine了,在Go語言中,讓併發變得簡單的強大工具,今天就是來給他一個快速介紹。
👨‍💻簡介 當我們在宣告變數時,電腦會為該變數在記憶體中分配一個位置,然後將這個變數值儲存在這個位置上,需要讀取或修改這個變數值時,電腦是透過記憶體位置來存取這個值。 今天來簡單介紹一下go的Pointer,他的特性以及常見用法。
👨‍💻簡介 在軟體開發中,錯誤無所不在。無論是網路請求失敗、檔案不存在,還是數學計算錯誤,處理錯誤是任何開發者的日常工作,系統的穩定度基本取決於對於錯誤處理是否全面,好的錯誤處理也可以產生適當的錯誤訊息,讓 Debug 更加容易。
👨‍💻簡介 當我們在寫程式時,有時候會需要在程式結束時關閉某些資源,而defer這個關鍵字,可以讓你輕鬆的實現,下面來簡單介紹一下defer以及常用的範例。,它為程式設計師提供了一種簡單而強大的工具,用於管理資源和確保程式的正確執行。
👨‍💻簡介 昨天講到Goroutine的橋梁aka傳話筒 — Channel,那要怎麼知道對方有收到訊息,我的紙條有送到對方手上呢? 今天就是要來介紹幾種Goroutine的確定完成工作的幾種方式。
👨‍💻簡介 昨天講到Goroutine有稍微簡單介紹Channel,Channel是Go語言中極為重要的併發通訊機制,它就像是不同goroutines之間的話筒,允許它們安全地傳遞資料和信息。這個強大的工具使得Go語言在處理併發任務時非常優雅和高效。
👨‍💻簡介 在日常生活中,如果能同時做很多事情,效率肯定大大提升,那麼在Go語言中,該如何做到呢,答案就是今天的主角Goroutine了,在Go語言中,讓併發變得簡單的強大工具,今天就是來給他一個快速介紹。
👨‍💻簡介 當我們在宣告變數時,電腦會為該變數在記憶體中分配一個位置,然後將這個變數值儲存在這個位置上,需要讀取或修改這個變數值時,電腦是透過記憶體位置來存取這個值。 今天來簡單介紹一下go的Pointer,他的特性以及常見用法。
👨‍💻簡介 在軟體開發中,錯誤無所不在。無論是網路請求失敗、檔案不存在,還是數學計算錯誤,處理錯誤是任何開發者的日常工作,系統的穩定度基本取決於對於錯誤處理是否全面,好的錯誤處理也可以產生適當的錯誤訊息,讓 Debug 更加容易。
👨‍💻簡介 當我們在寫程式時,有時候會需要在程式結束時關閉某些資源,而defer這個關鍵字,可以讓你輕鬆的實現,下面來簡單介紹一下defer以及常用的範例。,它為程式設計師提供了一種簡單而強大的工具,用於管理資源和確保程式的正確執行。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
FMTA币是一个对初创企业和项目资本融资的新尝试的项目,它将去中心化金融和以太坊区块链进行了结合,很多投资者想知道FMTA是什么币种?下面将为大家详细介绍FMTA币官网、总量和发行时间 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属
Thumbnail
需求情境: 一般的看盤軟體,雖然都能針對一籃子自選股票,列出其即時行情和當天漲幅,但若要看「五日漲幅」呢?那就少見了,但這對我很重要。因為小部位的波段性價差交易是個好策略,這時候若能排序好一整排看下來,可以節省大量點來點去的成本,很有價值,所以就來自己刻。 解決方案: 從大處著眼,UI 最外層
Thumbnail
本文探討了在使用 pandas 處理資料時應注意的幾個關鍵點,以及如何減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。主要包括Pandas 資料處理深入解析,尋找CSV之外的數據儲存方案,以及優化資料處理策略。
Thumbnail
👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。
Thumbnail
這次要來介紹「pytube」這套神器, 當我們需要對影音進行統計分析時就需要使用這把利器來破關, 尤其是AI時代的來臨, 我們會需要大量的資料來進行模型的訓練, 而我們總不可能海量的去撈取這些資料, 會非常沒有效率也浪費空間, 因此我們會先進行偵查的任務, 需要派出偵察隊來蒐集youtube的影音資
Thumbnail
學習資料科學的過程中相信最熱門的目前應該是Python程式語言了,而Python的世界裡再進行資料科學時最常用的有「Pandas」、「SciPy」、「Scikit-learn」...等,而這些的基礎幾乎都與「NumPy」離不開關係,因為「NumPy」就是地基,這些較為高階的套件則是基於地基發展而起。
Thumbnail
過往我們有介紹了「【Google Colab Python系列】 資料處理神器 Pandas 起手式」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度, 需
Thumbnail
上一篇我們有介紹了「【Google Colab Python系列】 資料處理神器 Pandas 起手式」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度
Thumbnail
我們都知道AI的模型訓練環節中, 最基礎也是最重要的一環就是「資料」了, 而「資料」要怎麼處理成訓練的養分也是一門重要的工程, 正好在Python的世界裡具有這麼一套神兵利器, 名為「Pandas」, 它是一個快速、強大、靈活且易於使用的開源數據分析和操作工具, 就讓我們好好的來認識一番吧! 乍聽
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
特徵工程是機器學習中的核心技術,通過將原始數據轉換為有意義的特徵,以提升模型的準確性和穩定性。常見的特徵工程方法包括異常值檢測、特徵轉換、特徵縮放、特徵表示、特徵選擇和特徵提取。本文將深入探討這些方法的適用情況及具體實施流程,以幫助讀者有效利用特徵工程來優化機器學習模型表現。
Thumbnail
FMTA币是一个对初创企业和项目资本融资的新尝试的项目,它将去中心化金融和以太坊区块链进行了结合,很多投资者想知道FMTA是什么币种?下面将为大家详细介绍FMTA币官网、总量和发行时间 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣 🔑 专属
Thumbnail
需求情境: 一般的看盤軟體,雖然都能針對一籃子自選股票,列出其即時行情和當天漲幅,但若要看「五日漲幅」呢?那就少見了,但這對我很重要。因為小部位的波段性價差交易是個好策略,這時候若能排序好一整排看下來,可以節省大量點來點去的成本,很有價值,所以就來自己刻。 解決方案: 從大處著眼,UI 最外層
Thumbnail
本文探討了在使用 pandas 處理資料時應注意的幾個關鍵點,以及如何減少因資料型態問題而產生的錯誤,確保資料的原始意義得以保留。主要包括Pandas 資料處理深入解析,尋找CSV之外的數據儲存方案,以及優化資料處理策略。
Thumbnail
👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。
Thumbnail
這次要來介紹「pytube」這套神器, 當我們需要對影音進行統計分析時就需要使用這把利器來破關, 尤其是AI時代的來臨, 我們會需要大量的資料來進行模型的訓練, 而我們總不可能海量的去撈取這些資料, 會非常沒有效率也浪費空間, 因此我們會先進行偵查的任務, 需要派出偵察隊來蒐集youtube的影音資
Thumbnail
學習資料科學的過程中相信最熱門的目前應該是Python程式語言了,而Python的世界裡再進行資料科學時最常用的有「Pandas」、「SciPy」、「Scikit-learn」...等,而這些的基礎幾乎都與「NumPy」離不開關係,因為「NumPy」就是地基,這些較為高階的套件則是基於地基發展而起。
Thumbnail
過往我們有介紹了「【Google Colab Python系列】 資料處理神器 Pandas 起手式」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度, 需
Thumbnail
上一篇我們有介紹了「【Google Colab Python系列】 資料處理神器 Pandas 起手式」, 相信對於pandas的基本操作具有一定的基礎知識了, 主要著重在基本的操作, 讓我們快速篩選與分析資料, 但真實的世界是有可能具有很多類型的資料集分別儲存, 而不同的資料集又具有一些相似度
Thumbnail
我們都知道AI的模型訓練環節中, 最基礎也是最重要的一環就是「資料」了, 而「資料」要怎麼處理成訓練的養分也是一門重要的工程, 正好在Python的世界裡具有這麼一套神兵利器, 名為「Pandas」, 它是一個快速、強大、靈活且易於使用的開源數據分析和操作工具, 就讓我們好好的來認識一番吧! 乍聽