最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【轉(zhuǎn)】常用標(biāo)準(zhǔn)庫之-fmt

2023-07-15 15:41 作者:失傳技術(shù)  | 我要投稿


? ?1-常用標(biāo)準(zhǔn)庫之-fmt ? ? ? ? ? ? ? ?

fmt包實現(xiàn)了格式化I/O。主要分為向外輸出內(nèi)容和獲取輸入內(nèi)容兩大部分

一 標(biāo)準(zhǔn)輸出

標(biāo)準(zhǔn)庫fmt提供了以下幾種輸出相關(guān)函數(shù)。

1.1 Print

Print函數(shù)直接輸出內(nèi)容

Printf函數(shù)支持格式化輸出字符串

Println函數(shù)會在輸出內(nèi)容的結(jié)尾添加一個換行符

func Print(a ...interface{}) (n int, err error) func Printf(format string, a ...interface{}) (n int, err error) func Println(a ...interface{}) (n int, err error)

舉個簡單的例子:

func main() { fmt.Print("lqz is NB") name := "lqz" fmt.Printf("我是:%s\n", name) fmt.Println("打印并換行") }

執(zhí)行上面的代碼輸出:

lqz is NB我是:lqz 打印并換行

1.2 格式化輸出占位符

*printf系列函數(shù)都支持format格式化參數(shù),在這里我們按照占位符將被替換的變量類型劃分,方便查詢和記憶。

通用占位符

占位符說明%v值的默認(rèn)格式表示%+v類似%v,但輸出結(jié)構(gòu)體時會添加字段名%#v值的Go語法表示%T打印值的類型%%百分號

示例代碼如下:

fmt.Printf("名字是:%v\n","lqz") fmt.Printf("年齡是:%v\n",19) p:= struct { name string age int }{"lqz",19} fmt.Printf("結(jié)構(gòu)體內(nèi)容為:%v\n",p) fmt.Printf("結(jié)構(gòu)體內(nèi)容為(帶字段名):%+v\n",p) // 輸出結(jié)構(gòu)體是會帶name fmt.Printf("結(jié)構(gòu)體內(nèi)容為(值的Go語法表示):%#v\n",p) // 輸出結(jié)構(gòu)體是會帶name fmt.Printf("切片內(nèi)容為:%v\n",[]int{4,5,6}) fmt.Printf("切片內(nèi)容為(值的Go語法表示):%#v\n",[]int{4,5,6}) fmt.Printf("切片值的類型為:%T\n",[]int{4,5,6}) fmt.Printf("字符串值的類型為:%T\n","lqz") fmt.Printf("打印百分百:100%%\n")

輸出結(jié)果如下:

名字是:lqz 年齡是:19 結(jié)構(gòu)體內(nèi)容為:{lqz 19} 結(jié)構(gòu)體內(nèi)容為(帶字段名):{name:lqz age:19} 結(jié)構(gòu)體內(nèi)容為(值的Go語法表示):struct { name string; age int }{name:"lqz", age:19} 切片內(nèi)容為:[4 5 6] 切片內(nèi)容為(值的Go語法表示):[]int{4, 5, 6} 切片值的類型為:[]int 字符串值的類型為:string 打印百分百:100%

布爾型

占位符說明%ttrue或false

var limit bool = false; fmt.Printf("limit=%t \n",limit)

整型

占位符說明%b表示為二進(jìn)制%c該值對應(yīng)的unicode碼值%d表示為十進(jìn)制%o表示為八進(jìn)制%x表示為十六進(jìn)制,使用a-f%X表示為十六進(jìn)制,使用A-F%U表示為Unicode格式:U+1234,等價于”U+%04X”%q該值對應(yīng)的單引號括起來的go語法字符字面值,必要時會采用安全的轉(zhuǎn)義表示

示例代碼如下:

n := 3333 fmt.Printf("二進(jìn)制表示:%b\n", n) fmt.Printf("unicode對應(yīng)的字符:%c\n", n) fmt.Printf("十進(jìn)制表示:%d\n", n) fmt.Printf("八進(jìn)制表示:%o\n", 9) fmt.Printf("十六進(jìn)制小寫:%x\n", 123) fmt.Printf("十六進(jìn)制大寫:%X\n", 123) fmt.Printf("用引號引起來的字符字面值:%q\n", 65)

輸出結(jié)果如下:

二進(jìn)制表示:110100000101 unicode對應(yīng)的字符:? 十進(jìn)制表示:3333 八進(jìn)制表示:11 十六進(jìn)制小寫:7b 十六進(jìn)制大寫:7B 用引號引起來的字符字面值:'A'

浮點數(shù)與復(fù)數(shù)

占位符說明%b無小數(shù)部分、二進(jìn)制指數(shù)的科學(xué)計數(shù)法,如-123456p-78%e科學(xué)計數(shù)法,如-1234.456e+78%E科學(xué)計數(shù)法,如-1234.456E+78%f有小數(shù)部分但無指數(shù)部分,如123.456%F等價于%f%g根據(jù)實際情況采用%e或%f格式(以獲得更簡潔、準(zhǔn)確的輸出)%G根據(jù)實際情況采用%E或%F格式(以獲得更簡潔、準(zhǔn)確的輸出)

示例代碼如下:

f := 3.14159 fmt.Printf("無小數(shù)部分、二進(jìn)制指數(shù)的科學(xué)計數(shù)法,(如-123456p-78):%b\n", f) fmt.Printf("科學(xué)計數(shù)法(-1234.456e+78):%e\n", f) fmt.Printf("科學(xué)計數(shù)法(如-1234.456E+78):%E\n", f) fmt.Printf("有小數(shù)部分但無指數(shù)部分:%f\n", f) fmt.Printf("有小數(shù)部分但無指數(shù)部分:%F\n", f) fmt.Printf("根據(jù)實際情況采用%%e或%%f格式(以獲得更簡潔、準(zhǔn)確的輸出):%g\n", f) fmt.Printf("根據(jù)實際情況采用%%E或%%F格式(以獲得更簡潔、準(zhǔn)確的輸出):%G\n", f)

輸出結(jié)果如下:

無小數(shù)部分、二進(jìn)制指數(shù)的科學(xué)計數(shù)法,(如-123456p-78):7074231776675438p-51 科學(xué)計數(shù)法(-1234.456e+78):3.141590e+00 科學(xué)計數(shù)法(如-1234.456E+78):3.141590E+00 有小數(shù)部分但無指數(shù)部分:3.141590 有小數(shù)部分但無指數(shù)部分:3.141590 根據(jù)實際情況采用%e或%f格式(以獲得更簡潔、準(zhǔn)確的輸出):3.14159 根據(jù)實際情況采用%E或%F格式(以獲得更簡潔、準(zhǔn)確的輸出):3.14159

字符串和[]byte

占位符說明%s直接輸出字符串或者[]byte%q該值對應(yīng)的雙引號括起來的go語法字符串字面值,必要時會采用安全的轉(zhuǎn)義表示%x每個字節(jié)用兩字符十六進(jìn)制數(shù)表示(使用a-f)%X每個字節(jié)用兩字符十六進(jìn)制數(shù)表示(使用A-F)

示例代碼如下:

name:="lqz" b:=[]byte{'l','q','z',65} fmt.Printf("字符串為:%s\n",name) fmt.Printf("切片為:%s\n",b) fmt.Printf("雙引號括起來的go語法字符串字面值:%q\n",name) fmt.Printf("雙引號括起來的go語法字符串字面值:%q\n",b) fmt.Printf("每個字節(jié)用兩字符十六進(jìn)制數(shù)表示:%x\n",name) fmt.Printf("每個字節(jié)用兩字符十六進(jìn)制數(shù)表示:%x\n",b) fmt.Printf("每個字節(jié)用兩字符十六進(jìn)制數(shù)表示(使用a-f):%X\n",name) fmt.Printf("每個字節(jié)用兩字符十六進(jìn)制數(shù)表示(使用A-F):%X\n",b)

輸出結(jié)果如下:

字符串為:lqz 切片為:lqzA 雙引號括起來的go語法字符串字面值:"lqz" 雙引號括起來的go語法字符串字面值:"lqzA" 每個字節(jié)用兩字符十六進(jìn)制數(shù)表示:6c717a 每個字節(jié)用兩字符十六進(jìn)制數(shù)表示:6c717a41 每個字節(jié)用兩字符十六進(jìn)制數(shù)表示(使用a-f):6c717a 每個字節(jié)用兩字符十六進(jìn)制數(shù)表示(使用A-F):6C717A41

指針

占位符說明%p表示為十六進(jìn)制,并加上前導(dǎo)的0x

示例代碼如下:

a := 99 fmt.Printf("%p\n", &a) fmt.Printf("%#p\n", &a)

輸出結(jié)果如下:

0xc000018078 c000018078

寬度標(biāo)識符

寬度通過一個緊跟在百分號后面的十進(jìn)制數(shù)指定,如果未指定寬度,則表示值時除必需之外不作填充。精度通過(可選的)寬度后跟點號后跟的十進(jìn)制數(shù)指定。如果未指定精度,會使用默認(rèn)精度;如果點號后沒有跟數(shù)字,表示精度為0。舉例如下:

占位符說明%f默認(rèn)寬度,默認(rèn)精度%9f寬度9,默認(rèn)精度%.2f默認(rèn)寬度,精度2%9.2f寬度9,精度2%9.f寬度9,精度0

示例代碼如下:

n := 12.34 fmt.Printf("%f\n", n) fmt.Printf("%9f\n", n) fmt.Printf("%.2f\n", n) fmt.Printf("%9.2f\n", n) fmt.Printf("%9.f\n", n)

輸出結(jié)果如下:

默認(rèn)寬度,默認(rèn)精度:3.141593 寬度9,默認(rèn)精度: 3.141593 默認(rèn)寬度,精度2:3.14 寬度9,精度2: ? ? 3.14 寬度9,精度0: ? ? ? ?3

其他flag

占位符說明’+’總是輸出數(shù)值的正負(fù)號;對%q(%+q)會生成全部是ASCII字符的輸出(通過轉(zhuǎn)義);’ ‘對數(shù)值,正數(shù)前加空格而負(fù)數(shù)前加負(fù)號;對字符串采用%x或%X時(% x或% X)會給各打印的字節(jié)之間加空格’-’在輸出右邊填充空白而不是默認(rèn)的左邊(即從默認(rèn)的右對齊切換為左對齊);’#’八進(jìn)制數(shù)前加0(%#o),十六進(jìn)制數(shù)前加0x(%#x)或0X(%#X),指針去掉前面的0x(%#p)對%q(%#q),對%U(%#U)會輸出空格和單引號括起來的go字面值;‘0’使用0而不是空格填充,對于數(shù)值類型會把填充的0放在正負(fù)號后面;

舉個例子:

s := "劉清政" fmt.Printf("正常字符串輸出:%s\n", s) fmt.Printf("寬度是5,右對齊:%5s\n", s) fmt.Printf("寬度是5,左對齊:%-5s\n", s) fmt.Printf("總長度為3,截取2個,右對齊:%3.2s\n", s) fmt.Printf("總長度為3,截取2個,左對齊:%-3.2s\n", s) fmt.Printf("寬度為5,只要2個字符:%5.2s\n", s) fmt.Printf("寬度為5,不夠用0補(bǔ)齊:%05s\n", s)

輸出結(jié)果如下:

正常字符串輸出:劉清政 寬度是5,右對齊: ?劉清政 寬度是5,左對齊:劉清政 ? 總長度為3,截取2個,右對齊: 劉清 總長度為3,截取2個,左對齊:劉清 寬度為5,只要2個字符: ? 劉清 寬度為5,不夠用0補(bǔ)齊:00劉清政

1.3 Fprint

Fprint系列函數(shù)會將內(nèi)容輸出到一個io.Writer接口類型的變量w中,我們通常用這個函數(shù)往文件中寫入內(nèi)容。

func Fprint(w io.Writer, a ...interface{}) (n int, err error) func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) func Fprintln(w io.Writer, a ...interface{}) (n int, err error)

舉個例子:

func main() { // 向標(biāo)準(zhǔn)輸出寫入內(nèi)容 fmt.Fprintln(os.Stdout, "向標(biāo)準(zhǔn)輸出(控制臺)寫入內(nèi)容") fileObj, err := os.OpenFile("./xx.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { fmt.Println("打開文件出錯,err:", err) return } name := "lqz is nb" // 向打開的文件句柄中寫入內(nèi)容 fmt.Fprintf(fileObj, "往文件中(標(biāo)準(zhǔn)輸出)寫如信息:%s", name) }

注意,只要滿足io.Writer接口的類型都支持寫入

1.4 Sprint

Sprint系列函數(shù)會把傳入的數(shù)據(jù)生成并返回一個字符串。

func Sprint(a ...interface{}) string func Sprintf(format string, a ...interface{}) string func Sprintln(a ...interface{}) string

簡單的示例代碼如下:

s1 := fmt.Sprint("lqz") name := "lqz" age := 18 s2 := fmt.Sprintf("姓名:%s,年齡:%d", name, age) s3 := fmt.Sprintln("lqz is nb") fmt.Println(s1, s2, s3)lqz 姓名:lqz,年齡:18 lqz is nb

1.5 Errorf

Errorf函數(shù)根據(jù)format參數(shù)生成格式化字符串并返回一個包含該字符串的錯誤。

func Errorf(format string, a ...interface{}) error

通常使用這種方式來自定義錯誤類型,例如:

err := fmt.Errorf("這是一個錯誤")

Go1.13后版本為fmt.Errorf函數(shù)新加了一個%w占位符用來生成一個可以包裹Error的Wrapping Error。

e := errors.New("原始錯誤e") w := fmt.Errorf("Wrap了一個錯誤%w", e) err := fmt.Errorf("這是一個錯誤") fmt.Printf("類型是:%T,值是:%v",err,err) fmt.Println("-----") e := errors.New("原始錯誤e") w := fmt.Errorf("Wrap了一個錯誤:%w", e) fmt.Println(w)類型是:*errors.errorString,值是:這是一個錯誤----- Wrap了一個錯誤:原始錯誤e

二 標(biāo)準(zhǔn)輸入

Go語言fmt包下有fmt.Scanfmt.Scanf、fmt.Scanln三個函數(shù),可以在程序運行過程中從標(biāo)準(zhǔn)輸入獲取用戶的輸入。

2.1 fmt.Scan

函數(shù)定簽名如下:

func Scan(a ...interface{}) (n int, err error)

  • Scan從標(biāo)準(zhǔn)輸入掃描文本,讀取由空白符分隔的值保存到傳遞給本函數(shù)的參數(shù)中,換行符視為空白符。

  • 本函數(shù)返回成功掃描的數(shù)據(jù)個數(shù)和遇到的任何錯誤。如果讀取的數(shù)據(jù)個數(shù)比提供的參數(shù)少,會返回一個錯誤報告原因。

具體代碼示例如下:

var ( name string age ?int ) fmt.Scan(&name, &age) fmt.Printf("輸入的值為: 姓名:%s 年齡:%d \n", name, age)

將上面的代碼編譯后在終端執(zhí)行,在終端依次輸入lqz19使用空格或回車分隔。

lqz 19 // 或者 lqz 19

fmt.Scan從標(biāo)準(zhǔn)輸入中掃描用戶輸入的數(shù)據(jù),將以空白符分隔的數(shù)據(jù)分別存入指定的參數(shù)。

2.2 fmt.Scanf

函數(shù)簽名如下:

func Scanf(format string, a ...interface{}) (n int, err error)

  • Scanf從標(biāo)準(zhǔn)輸入掃描文本,根據(jù)format參數(shù)指定的格式去讀取由空白符分隔的值保存到傳遞給本函數(shù)的參數(shù)中。

  • 本函數(shù)返回成功掃描的數(shù)據(jù)個數(shù)和遇到的任何錯誤。

代碼示例如下:

var ( name string age ?int ) fmt.Scanf("name:%s age:%d", &name, &age) // 在控制臺按照該格式輸入name:lqz age:19 fmt.Printf("掃描結(jié)果: 姓名:%s 年齡:%d \n", name, age)

將上面的代碼編譯后在終端執(zhí)行,在終端按照指定的格式依次輸入name:lqz age:19

// 控制臺按如下格式輸入 name:lqz age:19 掃描結(jié)果: 姓名:lqz 年齡:19

fmt.Scanf不同于fmt.Scan簡單的以空格作為輸入數(shù)據(jù)的分隔符,fmt.Scanf為輸入數(shù)據(jù)指定了具體的輸入內(nèi)容格式,只有按照格式輸入數(shù)據(jù)才會被掃描并存入對應(yīng)變量。

例如,我們還是按照上個示例中以空格分隔的方式輸入,fmt.Scanf就不能正確掃描到輸入的數(shù)據(jù)。

lqz 19 掃描結(jié)果: 姓名: 年齡:0

2.3 fmt.Scanln

函數(shù)簽名如下:

func Scanln(a ...interface{}) (n int, err error)

  • Scanln類似Scan,它在遇到換行時才停止掃描。最后一個數(shù)據(jù)后面必須有換行或者到達(dá)結(jié)束位置。

  • 本函數(shù)返回成功掃描的數(shù)據(jù)個數(shù)和遇到的任何錯誤。

具體代碼示例如下:

var ( name ? ?string age ? ? int ) fmt.Scanln(&name, &age) fmt.Printf("掃描結(jié)果 姓名:%s 年齡:%d \n", name, age)

將上面的代碼編譯后在終端執(zhí)行,在終端依次輸入小王子28false使用空格分隔。

//輸入: ? 劉清政 19 ?敲回車 掃描結(jié)果 姓名:劉清政 年齡:19

fmt.Scanln遇到回車就結(jié)束掃描了,這個比較常用。

2.4 bufio.NewReader

除了fmt包的Scan類函數(shù),bufio包也可以讀取標(biāo)準(zhǔn)輸入。當(dāng)然,讀取標(biāo)準(zhǔn)輸入只是它的一個功能示例,它的作用是操作緩沖IO。

有時候我們想完整獲取輸入的內(nèi)容,而輸入的內(nèi)容可能包含空格,這種情況下可以使用bufio包來實現(xiàn)。代碼如下:

reader := bufio.NewReader(os.Stdin) // 從標(biāo)準(zhǔn)輸入生成讀對象 fmt.Print("請輸入內(nèi)容:") text, _ := reader.ReadString('\n') // 讀到換行 text = strings.TrimSpace(text) // 去掉空白 fmt.Printf("%#v\n", text)請輸入內(nèi)容:輸入的內(nèi)容 "輸入的內(nèi)容"

2.5 Fscan系列

這幾個函數(shù)功能分別類似于fmt.Scan、fmt.Scanf、fmt.Scanln三個函數(shù),只不過它們不是從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù)而是從io.Reader中讀取數(shù)據(jù)。

func Fscan(r io.Reader, a ...interface{}) (n int, err error) func Fscanln(r io.Reader, a ...interface{}) (n int, err error) func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)

2.6 Sscan系列

這幾個函數(shù)功能分別類似于fmt.Scan、fmt.Scanf、fmt.Scanln三個函數(shù),只不過它們不是從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù)而是從指定字符串中讀取數(shù)據(jù)。

func Sscan(str string, a ...interface{}) (n int, err error) func Sscanln(str string, a ...interface{}) (n int, err error) func Sscanf(str string, format string, a ...interface{}) (n int, err error)var name string="lqz" var newName string="" fmt.Sscan(name,&newName) // 相當(dāng)于把name的值賦值給newName fmt.Println(name) fmt.Println(newName) s:="lqz 19" var( name1 string age int ) fmt.Sscan(s,&name1,&age) fmt.Println(name1) fmt.Println(age)

作者:liuqingzheng

出處:https://www.cnblogs.com/liuqingzheng/p/15997375.html


【轉(zhuǎn)】常用標(biāo)準(zhǔn)庫之-fmt的評論 (共 條)

分享到微博請遵守國家法律
灵石县| 灵丘县| 原平市| 大冶市| 东兴市| 荥经县| 平乡县| 行唐县| 墨玉县| 云林县| 奉节县| 乌海市| 库尔勒市| 三明市| 维西| 汾西县| 平武县| 东乡县| 远安县| 南部县| 中方县| 介休市| 肥东县| 唐山市| 双流县| 界首市| 泽普县| 尉氏县| 沙田区| 洛阳市| 扶绥县| 固安县| 衡南县| 永定县| 桐庐县| 华亭县| 德州市| 贺兰县| 平谷区| 镇平县| 修文县|