golang格式化輸出函數(shù)printf、sprintf、fprintf解讀
筆記
因為在學習C語言的時候,sprintf、fprintf這些就不是很清楚,在后面的go語言學習,遇到了還是有些吃力,所以重新了解了一下
從定義、參數(shù)、返回值來比較三者的相似和不同,以此更好了解這三者分別適用的場景
printf
定義
printf 在 fmt 中是這樣定義的
// Printf formats according to a format specifier and writes to standard output. // It returns the number of bytes written and any write error encountered. func Printf(format string, a ...any) (n int, err error) { return Fprintf(os.Stdout, format, a...) }
- Printf 根據(jù)格式說明符設置格式并寫入標準輸出。
- 它返回寫入的字節(jié)數(shù)n和遇到的任何寫入錯誤err(下面提到字節(jié)數(shù)和錯誤用n和err代替)。
- 它的作用是將格式化的字符串輸出到標準輸出(一般是控制臺)
參數(shù)
它有兩個參數(shù),格式化字符串、需要格式化的變量
func main() { name := "haha" age := 18 fmt.Printf("%s今年%d歲了\n", name, age) //haha今年18歲了 }
在這段代碼中," "中的內容就是格式化的字符串,name和age就是需要格式化的變量。最后輸出 haha今年18歲了
返回值
字節(jié)數(shù) :
- 漢字占三個字節(jié),字母占1個字節(jié),換行符也要占一個字節(jié)
- 為了測試占用的字節(jié)數(shù),我打印了下面幾句
fmt.Println("----------------------------------") a, o := fmt.Printf("哈") fmt.Println() //打印空行 好觀察 fmt.Println(a, o) a1, o1 := fmt.Printf("哈\n") fmt.Println(a1, o1) a11, o11 := fmt.Printf("哈\n\n") fmt.Println(a11, o11) a2, o2 := fmt.Printf("abc") fmt.Println() fmt.Println(a2, o2) a3, o3 := fmt.Printf("%s", "abc") fmt.Println() fmt.Println(a3, o3)
結果是
但是向標準輸出(os.Stdout)打印時是可以省略返回值的,這是因為
默認情況下,Printf 輸出到終端屏幕時極少失敗,通常可以忽略返回值
所以我們一般不理會返回值
錯誤:
- 如果寫入成功,錯誤值為nil;
- 如果寫入失敗,錯誤值是寫入過程中的錯誤。
sprintf
定義
// Sprintf formats according to a format specifier and returns the resulting string. func Sprintf(format string, a ...any) string { p := newPrinter() p.doPrintf(format, a) s := string(p.buf) p.free() return s }
Sprintf 根據(jù)格式說明符設置格式并返回結果字符串。
它的作用是將格式化的字符串輸出到字符串中;
參數(shù)
與 printf 類似,sprintf 也有兩個參數(shù):格式化字符串、需要格式化的變量
使用時的寫法也和 printf 一樣
返回值
sprintf 的返回值是 string 類型的,需要用一個string類型的變量來保存格式化后的字符串
name := "aabb" age := 18 s := fmt.Sprintf("%s今年%d歲了", name, age) fmt.Println(s) //aabb今年18歲了
s接收 sprintf 的返回值
最后打印出 aabb今年18歲了
fprintf
定義
// Fprintf formats according to a format specifier and writes to w. // It returns the number of bytes written and any write error encountered. func Fprintf(w io.Writer, format string, a ...any) (n int, err error) { p := newPrinter() p.doPrintf(format, a) n, err = w.Write(p.buf) p.free() return }
- Fprintf 根據(jù)格式說明符進行格式化并寫入 w。
- 它返回寫入的字節(jié)數(shù)和遇到的任何寫入錯誤。
它的作用是將格式化后的字符串輸出到指定的io.Writer接口實現(xiàn)對象中(常見的是將內容寫入文件)
在go語言中,io.Writer是go語言標準庫io包中定義的內置接口,定義如下
type Writer interface { Write(p []byte) (n int, err error) }
參數(shù)
fprintf 有三個參數(shù)
w是實現(xiàn)io.Writer接口的對象,是指定數(shù)據(jù)寫入的目標位置。拿文件來舉例,也就是接收數(shù)據(jù)的文件
另外兩個是 格式化字符串、需要格式化的變量,和 printf、sprintf一樣
返回值
兩個返回值,寫入的字節(jié)數(shù)和遇到的任何寫入錯誤和 printf 一樣
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Go語言如何實現(xiàn)將[][]byte轉為io.Reader
本文主要介紹了如何在Go語言中實現(xiàn)將[][]byte轉換為io.Reader,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2025-02-02