Go語言fmt.Printf的使用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Fmt包import "fmt"簡介 ▾Package fmt包含有格式化I/O函數,類似於C語言的printf和scanf。格式字串的規則來源於C但更簡單一些。輸出格式:一般:%v   基本格式的值。當輸出結構體時,擴充標誌(%+v)新增成員的名字。the value in a default format.     when printing structs, the plus flag (%+v) adds field names%#v  值的Go文法表示。%T   值的類型的Go文法表示。%%   百分比符號。布爾型:%t   值的true或false整型:%b   二進位表示%c   數值對應的Unicode編碼字元%d   十進位表示%o   八進位表示%q   單引號%x   十六進位表示,使用a-f%X   十六進位表示,使用A-F%U   Unicode格式: U+1234,等價於"U+%04X"浮點數:%b   無小數部分、兩位指數的科學計數法,和strconv.FormatFloat的'b'轉換格式一致。舉例:-123456p-78%e   科學計數法,舉例:-1234.456e+78%E   科學計數法,舉例:-1234.456E+78%f   有小數部分,但無指數部分,舉例:123.456%g   根據實際情況採用%e或%f格式(以獲得更簡潔的輸出)%G   根據實際情況採用%E或%f格式(以獲得更簡潔的輸出)字串和byte切片類型:%s   直接輸出字串或者[]byte%q   雙引號括起來的字串%x   每個位元組用兩字元十六進位數表示(使用小寫a-f)%X   每個位元組用兩字元十六進位數表示(使用大寫A-F)指標:%p   0x開頭的十六進位數表示木有'u'標誌。如果是無類型整數,自然會列印無類型格式。類似的,沒有必要去區分運算元的大小(int8, int64)。寬度和精度格式化控制是指的Unicode編碼字元的數量(不同於C的printf,它的這兩個因子指的是位元組的數量。)兩者均可以使用'*'號取代(任一個或兩個都),此時它們的值將被緊接著的參數控制,這個運算元必須是整型。對於數字,寬度設定總長度,精度設定小數部分長度。例如,格式%6.2f 輸出123.45。對於字串,寬度是輸出字元數目的最低數量,如果不足會用空格填充。精度是輸出字元數目的最大數量,超過則會截斷。其它符號:+    總是輸出數值的加號或減號;對%q(%+q)將保證純ASCII碼輸出-    用空格在右側填充空缺而不是預設的左側。#    切換格式:在八進位前加0(%#o),十六進位前加0x(%#x)或0X(%#X);廢除指標的0x(%#p);     對%q (%#q)如果可能的話輸出一個無修飾的字串;     對%U(%#U)如果對應數值是可列印字元輸出該字元。' '  對數字(% d)空格會留一個空格在數字前並忽略數位加號或減號;     對切片和字串(% x, % X)會以16進位輸出。0    用前置0代替空格填補空缺。每一個類似Printf的函數,都會有一個同樣的Print函數,此函數不需要format字串,等價於對每一個參數設定為%v。另一個變體Println會在參數之間加上空格並在輸出結束後換行。如果參數是一個介面值,將使用內在的具體實現的值,而不是介面本身,%v參數不會被使用。如下:var i interface{} = 23fmt.Printf("%v\n", i)將輸出23。如果參數實現了Formatter介面,該介面可用來更好的控制格式化。如果格式(標誌對Println等是隱含的%v)是專用於字串的(%s %q %v %x %X),還提供了如下兩個規則:1. 如果一個參數實現了error介面,Error方法會用來將目標轉化為字串,隨後將被按給出的要求格式化。2. 如果參數提供了String方法,這個方法將被用來將目標轉換為字串,然後將按給出的格式標誌格式化。為了避免有可能的遞迴迴圈,例如:type X stringfunc (x X) String() string { return Sprintf("<%s>", x) }會在遞迴迴圈前轉換值:func (x X) String() string { return Sprintf("<%s>", string(x)) }錯誤的格式:如果提供了一個錯誤的格式標誌,例如給一個字串提供了%d標誌,產生的字串將包含對該問題的描述,如下面的例子:錯誤或未知的格式標誌: %!verb(type=value)     Printf("%d", hi):          %!d(string=hi)太多參數: %!(EXTRA type=value)     Printf("hi", "guys"):      hi%!(EXTRA string=guys)缺少參數: %!verb(MISSING)     Printf("hi%d"):            hi %!d(MISSING)使用非整數提供寬度和精度: %!(BADWIDTH) or %!(BADPREC)     Printf("%*s", 4.5, "hi"):  %!(BADWIDTH)hi     Printf("%.*s", 4.5, "hi"): %!(BADPREC)hi所有的錯誤都使用"%!"起始,(緊隨單字元的格式標誌)以括弧包圍的錯誤描述結束。輸入一系列類似的函數讀取格式化的文本,產生值。Scan,Scanf和Scanln從os.Stdin讀取;Fscan,Fscanf和Fscanln 從特定的io.Reader讀取;Sscan,Sscanf和Sscanln 從字串讀取;Scanln,Fscanln和Sscanln在換行時結束讀取,並要求資料連續出現;Scanf,Fscanf和Sscanf會讀取一整行以匹配格式字串;其他的函數將換行看著空格。Scanf, Fscanf, and Sscanf根據格式字串解析資料,類似於Printf。例如,%x將讀取一個十六進位數,%v將讀取值的預設表示。格式行為類似於Printf,但有如下例外:%p沒有提供%T沒有提供%e %E %f %F %g %G是等價的,都可以讀取任何浮點數或者複合數(非複數,指科學計數法表示的帶指數的數)%s 和 %v字串使用這兩個格式讀取時會因為空白格而結束不設格式或者使用%v讀取整數時,如果首碼為0(八進位)或0x(十六進位),將按對應進位讀取。寬度在輸入中被解釋(%5s意思是最多從輸入讀取5個字元賦值給一個字串),但輸入系列函數沒有解釋精度的文法(木有%5.2f,只有%5f)。輸入系列函數中的格式字串,所有非空的空白字元(除了分行符號之外),無論在輸入裡還是格式字串裡,都等價於1個空白字元。格式字串必須匹配輸入的文本,如果不匹配將停止讀取資料並返回函數已經賦值的參數的數量。所有的scan系列函數,如果參數包含Scan方法(或者說實現了Scanner介面),該參數將使用該方法讀取文本。另外,如果被填寫的參數的數量少於提供的參數的數量,將返回一個錯誤。所有要被輸入的參數都應該是基礎類型或者實現了Scanner介面的資料類型的指標。注意:Fscan等函數可以從輸入略過一些字元讀取需要的字元並返回,這就意味著一個迴圈的讀取程式可能會跳過輸入的部分資料。當資料間沒有空白時就會導致出現問題。如果讀取這提供給Fscan系列函數ReadRune 方法,這個方法可以用來讀取字元。如果讀取者還提供了UnreadRune 方法,該方法將被用來儲存字元以使成功的調用不會遺失資料。為了給一個沒有這些功能的讀取者添加這倆方法,使用bufio.NewReader。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.