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會員
83Content count
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
本專欄將提供給您最新的市場資訊、產業研究、交易心法、優質公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
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
本專欄將提供給您最新的市場資訊、產業研究、交易心法、優質公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
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」, 它是一個快速、強大、靈活且易於使用的開源數據分析和操作工具, 就讓我們好好的來認識一番吧! 乍聽