欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用

 更新時(shí)間:2023年10月27日 15:18:49   作者:紅蒲公英  
fmt包實(shí)現(xiàn)了類(lèi)似C語(yǔ)言printf和scanf的格式化I/O,主要分為向外輸出內(nèi)容和獲取輸入內(nèi)容兩大部分,本文就來(lái)介紹一下GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用,感興趣的可以了解下

fmt

fmt包實(shí)現(xiàn)了類(lèi)似C語(yǔ)言printf和scanf的格式化I/O。主要分為向外輸出內(nèi)容和獲取輸入內(nèi)容兩大部分。

fmt的向外輸出

標(biāo)準(zhǔn)庫(kù)fmt提供了以下幾種輸出相關(guān)函數(shù)。print,F(xiàn)print,Sprint,Errorf,

print

Print系列函數(shù)會(huì)將內(nèi)容輸出到系統(tǒng)的標(biāo)準(zhǔn)輸出,區(qū)別在于Print函數(shù)直接輸出內(nèi)容,Printf函數(shù)支持格式化輸出字符串,Println函數(shù)會(huì)在輸出內(nèi)容的結(jié)尾添加一個(gè)換行符。

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)

說(shuō)到這里就不得說(shuō)一個(gè)東西。格式化占位。

格式化占位

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

通用占位符

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

例子:

fmt.Printf("%v\n", 100)  //100
fmt.Printf("%v\n", false) //false
o := struct{ name string }{"你好"}
fmt.Printf("%v\n", o) //{小王子}
fmt.Printf("%#v\n", o) //struct { name string }{name:"小王子"}
fmt.Printf("%T\n", o)//struct { name string }
fmt.Printf("100%%\n")//100%

布爾類(lèi)型占位

占位符說(shuō)明
%ttrue或false

整型占位

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

例子:

n := 65
fmt.Printf("%b\n", n) //1000001
fmt.Printf("%c\n", n) //A
fmt.Printf("%d\n", n) //65
fmt.Printf("%o\n", n) //101
fmt.Printf("%x\n", n) //41
fmt.Printf("%X\n", n) //41

浮點(diǎn)數(shù)與復(fù)數(shù)

占位符說(shuō)明
%b無(wú)小數(shù)部分、二進(jìn)制指數(shù)的科學(xué)計(jì)數(shù)法,如-123456p-78
%e科學(xué)計(jì)數(shù)法,如-1234.456e+78
%E科學(xué)計(jì)數(shù)法,如-1234.456E+78
%f有小數(shù)部分但無(wú)指數(shù)部分,如123.456
%F等價(jià)于%f
%g根據(jù)實(shí)際情況采用%e或%f格式(以獲得更簡(jiǎn)潔、準(zhǔn)確的輸出)
%G根據(jù)實(shí)際情況采用%E或%F格式(以獲得更簡(jiǎn)潔、準(zhǔn)確的輸出)
例子
f := 12.34
fmt.Printf("%b\n", f)	//6946802425218990p-49
fmt.Printf("%e\n", f)//1.234000e+01
fmt.Printf("%E\n", f)//1.234000E+01
fmt.Printf("%f\n", f)//12.340000
fmt.Printf("%g\n", f)//12.34
fmt.Printf("%G\n", f)//12.34

字符串和[]byte

占位符說(shuō)明
%s直接輸出字符串或者[]byte
%q該值對(duì)應(yīng)的雙引號(hào)括起來(lái)的go語(yǔ)法字符串字面值,必要時(shí)會(huì)采用安全的轉(zhuǎn)義表示
%x每個(gè)字節(jié)用兩字符十六進(jìn)制數(shù)表示(使用a-f)
%X每個(gè)字節(jié)用兩字符十六進(jìn)制數(shù)表示(使用A-F)
s := "小王子"
fmt.Printf("%s\n", s)//小王子
fmt.Printf("%q\n", s)//"小王子"
fmt.Printf("%x\n", s)//e5b08fe78e8be5ad90
fmt.Printf("%X\n", s)//E5B08FE78E8BE5AD90

指針

占位符說(shuō)明
%p表示為十六進(jìn)制,并加上前導(dǎo)的0x
%#p表示為十六進(jìn)制,不加前導(dǎo)的0x
a := 10
fmt.Printf("%p\n", &a) //0xc000094000
fmt.Printf("%#p\n", &a) //c000094000

寬度表示符

寬度通過(guò)一個(gè)緊跟在百分號(hào)后面的十進(jìn)制數(shù)指定,如果未指定寬度,則表示值時(shí)除必需之外不作填充。精度通過(guò)(可選的)寬度后跟點(diǎn)號(hào)后跟的十進(jìn)制數(shù)指定。如果未指定精度,會(huì)使用默認(rèn)精度;如果點(diǎn)號(hào)后沒(méi)有跟數(shù)字,表示精度為0。

占位符說(shuō)明
%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)

在這里插入圖片描述

其他

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

Fprint

Fprint系列函數(shù)會(huì)將內(nèi)容輸出到一個(gè)io.Writer接口類(lèi)型的變量w中,我們通常用這個(gè)函數(shù)往文件中寫(xiě)入內(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)

注意,只要滿(mǎn)足io.Writer接口的類(lèi)型都支持寫(xiě)入。

// 向標(biāo)準(zhǔn)輸出寫(xiě)入內(nèi)容
fmt.Fprintln(os.Stdout, "向標(biāo)準(zhǔn)輸出寫(xiě)入內(nèi)容")
fileObj, err := os.OpenFile("./xx.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
	fmt.Println("打開(kāi)文件出錯(cuò),err:", err)
	return
}
name := "沙河小王子"
// 向打開(kāi)的文件句柄中寫(xiě)入內(nèi)容
fmt.Fprintf(fileObj, "往文件中寫(xiě)如信息:%s", name)

Sprint

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

func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string
s1 := fmt.Sprint("沙河小王子")
name := "沙河小王子"
age := 18
s2 := fmt.Sprintf("name:%s,age:%d", name, age)
s3 := fmt.Sprintln("沙河小王子")
fmt.Println(s1, s2, s3)

在這里插入圖片描述

Errorf

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

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

通常使用這種方式來(lái)自定義錯(cuò)誤類(lèi)型
err := fmt.Errorf("這是一個(gè)錯(cuò)誤")

fmt.Errorf函數(shù)加了一個(gè)%w占位符fmt.Errorf函數(shù)新加了一個(gè)%w占位符Error的Wrapping Error

e := errors.New("原始錯(cuò)誤e")
w := fmt.Errorf("Wrap了一個(gè)錯(cuò)誤%w", e)

fmt的獲取輸入

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

Fscan系列

這幾個(gè)函數(shù)功能分別類(lèi)似于fmt.Scan、fmt.Scanf、fmt.Scanln三個(gè)函數(shù),只不過(guò)它們不是從標(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)

Sscan系列

這幾個(gè)函數(shù)功能分別類(lèi)似于fmt.Scan、fmt.Scanf、fmt.Scanln三個(gè)函數(shù),只不過(guò)它們不是從標(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)

fmt.Scan

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

  • Scan從標(biāo)準(zhǔn)輸入掃描文本,讀取由空白符分隔的值保存到傳遞給本函數(shù)的參數(shù)中,換行符視為空白符。
  • 本函數(shù)返回成功掃描的數(shù)據(jù)個(gè)數(shù)遇到的任何錯(cuò)誤。如果讀取的數(shù)據(jù)個(gè)數(shù)提供的參數(shù)少,會(huì)返回一個(gè)錯(cuò)誤報(bào)告原因。
func Scan(a ...interface{}) (n int, err error)
func main() {
	var (
		name    string
		age     int
		married bool
	)
	fmt.Scan(&name, &age, &married)
	fmt.Printf("掃描結(jié)果 name:%s age:%d married:%t \n", name, age, married)
}

小王子 28 false //輸入
掃描結(jié)果 name:小王子 age:28 married:false  //輸入后的結(jié)果

fmt.Scanf

  • Scanf從標(biāo)準(zhǔn)輸入掃描文本,根據(jù)format參數(shù)指定的格式去讀取由空白符分隔的值保存到傳遞給本函數(shù)的參數(shù)中。
  • 本函數(shù)返回成功掃描的數(shù)據(jù)個(gè)數(shù)和遇到的任何錯(cuò)誤。
func Scanf(format string, a ...interface{}) (n int, err error)

例子

func main() {
	var (
		name    string
		age     int
		married bool
	)
	fmt.Scanf("1:%s 2:%d 3:%t", &name, &age, &married)
	fmt.Printf("掃描結(jié)果 name:%s age:%d married:%t \n", name, age, married)
}

1:小王子 2:28 3:false //輸入
掃描結(jié)果 name:小王子 age:28 married:false //輸出

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

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

小王子 28 false //輸入的值
掃描結(jié)果 name: age:0 married:false //輸出的值 

fmt.Scanln

  • Scanln類(lèi)似Scan,它在遇到換行時(shí)才停止掃描。最后一個(gè)數(shù)據(jù)后面必須有換行或者到達(dá)結(jié)束位置。
  • 本函數(shù)返回成功掃描的數(shù)據(jù)個(gè)數(shù)和遇到的任何錯(cuò)誤。
func Scanln(a ...interface{}) (n int, err error)

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

bufio.NewReader

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

func bufioDemo() {
	reader := bufio.NewReader(os.Stdin) // 從標(biāo)準(zhǔn)輸入生成讀對(duì)象
	fmt.Print("請(qǐng)輸入內(nèi)容:")
	text, _ := reader.ReadString('\n') // 讀到換行
	text = strings.TrimSpace(text)
	fmt.Printf("%#v\n", text)
}

在這里插入圖片描述

 到此這篇關(guān)于GoLang語(yǔ)法之標(biāo)準(zhǔn)庫(kù)fmt.Printf的使用的文章就介紹到這了,更多相關(guān)GoLang 標(biāo)準(zhǔn)庫(kù)fmt.Print內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文掌握go的sync.RWMutex鎖

    一文掌握go的sync.RWMutex鎖

    這篇文章主要介紹了一文掌握go的sync.RWMutex鎖,本文是為了在面試中能快速口述RW鎖,并非為了完整解答RW鎖的機(jī)制,需要的朋友可以參考下
    2023-03-03
  • Golang實(shí)現(xiàn)的聊天程序服務(wù)端和客戶(hù)端代碼分享

    Golang實(shí)現(xiàn)的聊天程序服務(wù)端和客戶(hù)端代碼分享

    這篇文章主要介紹了Golang實(shí)現(xiàn)的聊天程序服務(wù)端和客戶(hù)端代碼分享,本文先是講解了實(shí)現(xiàn)邏輯,然后給出了實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-10-10
  • Go語(yǔ)言中Slice常見(jiàn)陷阱與避免方法詳解

    Go語(yǔ)言中Slice常見(jiàn)陷阱與避免方法詳解

    這篇文章主要為大家詳細(xì)介紹的是 Go 語(yǔ)言中的 Slice 的常見(jiàn)陷阱以及如何避免這些錯(cuò)誤,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-02-02
  • go語(yǔ)言中context的使用說(shuō)明

    go語(yǔ)言中context的使用說(shuō)明

    Go語(yǔ)言中的Context是用于在多個(gè)函數(shù)或goroutine之間傳遞取消信號(hào)、超時(shí)控制、截止時(shí)間和請(qǐng)求范圍數(shù)據(jù)的重要概念,它提供了更好的控制和管理,適用于并發(fā)編程中需要傳遞狀態(tài)或進(jìn)行資源清理的場(chǎng)景
    2024-12-12
  • golang?Gorm框架講解

    golang?Gorm框架講解

    gorm是一個(gè)使用Go語(yǔ)言編寫(xiě)的ORM框架,這篇文章主要介紹了golang?Gorm框架,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • Golang中多個(gè)if代碼優(yōu)化小技巧

    Golang中多個(gè)if代碼優(yōu)化小技巧

    這篇文章主要為大家詳細(xì)介紹了Golang中一些常用的if代碼優(yōu)化小技巧,w文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 詳解Go strconv包

    詳解Go strconv包

    Go語(yǔ)言中strconv包實(shí)現(xiàn)了基本數(shù)據(jù)類(lèi)型和其字符串表示的相互轉(zhuǎn)換。這篇文章主要介紹了Go strconv包的相關(guān)知識(shí),需要的朋友可以參考下
    2020-10-10
  • 基于Go語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)事件管理器

    基于Go語(yǔ)言簡(jiǎn)單實(shí)現(xiàn)事件管理器

    在編程中,事件管理器是一種常見(jiàn)的工具,用于通過(guò)通知來(lái)觸發(fā)操作,本文將介紹一個(gè)簡(jiǎn)單的Go事件管理器的實(shí)現(xiàn),并通過(guò)異步改進(jìn)提高其性能,感興趣的可以了解下
    2023-11-11
  • 超實(shí)用的Golang通道指南之輕松實(shí)現(xiàn)并發(fā)編程

    超實(shí)用的Golang通道指南之輕松實(shí)現(xiàn)并發(fā)編程

    Golang?中的通道是一種高效、安全、靈活的并發(fā)機(jī)制,用于在并發(fā)環(huán)境下實(shí)現(xiàn)數(shù)據(jù)的同步和傳遞。本文主要介紹了如何利用通道輕松實(shí)現(xiàn)并發(fā)編程,需要的可以參考一下
    2023-04-04
  • 一文初探?Goroutine?與?channel基本用法

    一文初探?Goroutine?與?channel基本用法

    這篇文章主要為大家介紹了一文初探?Goroutine?與?channel基本用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評(píng)論