Go語言fmt模塊的完整方法詳解及示例代碼
前言
以下是 Go 語言 fmt 模塊的完整方法詳解及示例,涵蓋所有核心功能:
一、輸出函數
將數據寫入標準輸出、文件或字符串。
1. Print / Println / Printf
功能
Print: 寫入標準輸出,不換行。Println: 寫入標準輸出并換行。Printf: 格式化寫入標準輸出。
示例
fmt.Print("Hello, ") // 輸出:Hello,
fmt.Println("World!") // 輸出:World!(換行)
fmt.Printf("%s %d\n", "Year:", 2023) // 輸出:Year: 2023(換行)
2. Fprint / Fprintln / Fprintf
功能
將內容寫入指定的 io.Writer(如文件、網絡連接)。
示例
file, _ := os.Create("output.txt")
fmt.Fprint(file, "Hello ") // 寫入文件內容:Hello
fmt.Fprintln(file, "World!") // 寫入文件內容:World!(換行)
fmt.Fprintf(file, "Value: %d", 100) // 寫入文件內容:Value: 100
3. Sprint / Sprintln / Sprintf
功能
將內容格式化為字符串并返回。
示例
s1 := fmt.Sprint("Hello", 123) // s1 = "Hello123"
s2 := fmt.Sprintln("World!") // s2 = "World!\n"
s3 := fmt.Sprintf("Value: %d", 100) // s3 = "Value: 100"
二、輸入函數
從標準輸入、文件或字符串讀取數據。
1. Scan / Scanln / Scanf
功能
Scan: 從標準輸入讀取,以空格分隔。Scanln: 讀取到換行符停止。Scanf: 按格式字符串讀取。
示例
var a int
var b string
// 輸入:10 ABC
fmt.Scan(&a, &b) // a=10, b="ABC"
// 輸入:20 XYZ\n
fmt.Scanln(&a, &b) // a=20, b="XYZ"
// 輸入:Number: 30
fmt.Scanf("Number: %d", &a) // a=30
2. Fscan / Fscanln / Fscanf
功能
從指定的 io.Reader(如文件)讀取數據。
示例
file, _ := os.Open("data.txt")
var x int
var y string
// 文件內容:100 Golang
fmt.Fscan(file, &x, &y) // x=100, y="Golang"
// 文件內容:200 Rust\n
fmt.Fscanln(file, &x, &y) // x=200, y="Rust"
// 文件內容:Value: 300
fmt.Fscanf(file, "Value: %d", &x) // x=300
3. Sscan / Sscanln / Sscanf
功能
從字符串解析數據。
示例
str := "404 Not Found"
var code int
var msg string
fmt.Sscan(str, &code, &msg) // code=404, msg="Not"
fmt.Sscanln("500 Error\n", &code, &msg) // code=500, msg="Error"
fmt.Sscanf("Status: 200 OK", "Status: %d %s", &code, &msg) // code=200, msg="OK"
三、格式化動詞
常用格式化占位符(部分):
| 動詞 | 說明 | 示例 |
|---|---|---|
%v | 默認格式 | %v → {Alice 30} |
%d | 十進制整數 | %d → 25 |
%f | 浮點數 | %f → 3.141593 |
%s | 字符串 | %s → “hello” |
%t | 布爾值 | %t → true |
%p | 指針地址 | %p → 0xc0000a |
%T | 類型 | %T → int |
四、其他功能
1. Errorf
功能
生成格式化錯誤。
示例
err := fmt.Errorf("無效的用戶ID: %d", -1)
// err.Error() = "無效的用戶ID: -1"
2. Formatter 和 Stringer 接口
功能
自定義類型的格式化行為。
示例
type User struct {
Name string
Age int
}
// 實現 Stringer 接口
func (u User) String() string {
return fmt.Sprintf("%s (%d歲)", u.Name, u.Age)
}
// 實現 Formatter 接口
func (u User) Format(f fmt.State, verb rune) {
if verb == 'v' {
fmt.Fprintf(f, "User{Name:%s, Age:%d}", u.Name, u.Age)
}
}
u := User{"Bob", 30}
fmt.Println(u) // 輸出:Bob (30歲)
fmt.Printf("%v", u) // 輸出:User{Name:Bob, Age:30}
五、注意事項
- 錯誤處理:
Scan系列函數返回成功解析的項數和錯誤。n, err := fmt.Scan(&a, &b) if err != nil { log.Fatal("輸入錯誤:", err) } - 性能:頻繁字符串拼接時,優(yōu)先使用
strings.Builder而非Sprintf。
六、完整函數列表
| 函數簽名 | 功能說明 |
|---|---|
Print(a ...any) (n int, err error) | 標準輸出 |
Println(a ...any) (n int, err error) | 標準輸出并換行 |
Printf(format string, a ...any) (n int, err error) | 格式化輸出 |
Fprint(w io.Writer, a ...any) (n int, err error) | 寫入 io.Writer |
Sprint(a ...any) string | 返回格式化字符串 |
Errorf(format string, a ...any) error | 生成格式化錯誤 |
通過掌握 fmt 包的方法,可以高效處理輸入輸出、字符串格式化及錯誤生成。
到此這篇關于Go語言fmt模塊的文章就介紹到這了,更多相關Go語言fmt模塊詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
go語言執(zhí)行等待直到后臺goroutine執(zhí)行完成實例分析
這篇文章主要介紹了go語言執(zhí)行等待直到后臺goroutine執(zhí)行完成的方法,實例分析了Go語言中WaitGroup的使用技巧,需要的朋友可以參考下2015-03-03
Linux系統(tǒng)下Go語言開發(fā)環(huán)境搭建
這篇文章主要介紹了Linux系統(tǒng)下Go開發(fā)環(huán)境搭建,需要的朋友可以參考下2022-04-04
Go?對多個網絡命令空間中的端口進行監(jiān)聽的解決方案
這篇文章主要介紹了Go?如何對多個網絡命令空間中的端口進行監(jiān)聽,本文給大家介紹的非常詳細,需要的朋友可以參考下2024-07-07

