最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言中println和fmt.Println區(qū)別

 更新時(shí)間:2023年07月04日 15:09:49   作者:PigeonEssence  
本文主要介紹了Go語(yǔ)言中println和fmt.Println區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

作為一個(gè)剛剛接觸Go的萌新,在學(xué)習(xí)Go語(yǔ)言的時(shí)候發(fā)現(xiàn)demo用了兩種用法輸出語(yǔ)句:

package main
import "fmt"
func main() {
   const LENGTH int = 10
   const WIDTH int = 5  
   var area int
   const a, b, c = 1, false, "str" //多重賦值
   area = LENGTH * WIDTH
   fmt.Printf("面積為 : %d", area)
   println()
   println(a, b, c)  
}

其中運(yùn)用了println()和fmt包中的Printf()函數(shù)用于輸出,然后我又想起,再fmt函數(shù)中,還有一個(gè)相似的函數(shù)是

fmt.Println

于是我就研究了一下println()和fmt.Println()的區(qū)別與用法:

println()函數(shù):

我們點(diǎn)進(jìn)函數(shù)可以清楚地看到注釋:

// The println built-in function formats its arguments in an
// implementation-specific way and writes the result to standard error.
// Spaces are always added between arguments and a newline is appended.
// Println is useful for bootstrapping and debugging; it is not guaranteed
// to stay in the language.
func println(args ...Type)

簡(jiǎn)單翻譯一下:

1.The println built-in function formats its arguments in an implementation-specific way and writes the result to standard error.
   println內(nèi)置函數(shù)以特定于實(shí)現(xiàn)的方式格式化其參數(shù),并將結(jié)果寫入標(biāo)準(zhǔn)錯(cuò)誤。
2.Spaces are always added between arguments and a newline is appended.
   始終在參數(shù)之間添加空格,并追加換行符。
3.Println is useful for bootstrapping and debugging; it is not guaranteed to stay in the language.
   Println用于引導(dǎo)和調(diào)試;但是不保證在未來(lái)的Go版本中繼續(xù)存在

fmt.println()函數(shù):        

// Println formats using the default formats for its operands and writes to standard output.
// Spaces are always added between operands and a newline is appended.
// It returns the number of bytes written and any write error encountered.
func Println(a ...interface{}) (n int, err error) {
	return Fprintln(os.Stdout, a...)
}

簡(jiǎn)單翻譯一下:

1.Println formats using the default formats for its operands and writes to standard output.
   Println格式使用其操作數(shù)的默認(rèn)格式,并寫入標(biāo)準(zhǔn)輸出。
2.Spaces are always added between operands and a newline is appended.
   始終在操作數(shù)之間添加空格,并追加換行符。
3.It returns the number of bytes written and any write error encountered.
   它返回寫入的字節(jié)數(shù)和遇到的任何寫入錯(cuò)誤。

根據(jù)官方注釋,我們可以很清楚的看到在注釋中他們很大的區(qū)別是在于,fmt.println()是在fmt包下的方法,將結(jié)果寫入標(biāo)準(zhǔn)輸出,而println是在builtin包下的方法,將結(jié)果寫入標(biāo)準(zhǔn)錯(cuò)誤。

總結(jié)區(qū)別:

1.包不同:

fmt包:fmt 包使用函數(shù)實(shí)現(xiàn) I/O 格式化(類似于 C 的 printf 和 scanf 的函數(shù)), 格式化參數(shù)源自C,但更簡(jiǎn)單。

builtin包:builtin包是go的預(yù)聲明定義,包括go語(yǔ)言中常用的各種類型和方法聲明,包括變量和常量?jī)刹糠郑湓敿?xì)聲明在builtin.go文件中。

因?yàn)閎uiltin包是預(yù)申明的包,所以不需要import就可以使用,而 fmt 包需要提前import。

2.輸出方式不同:

輸入標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤也是很明顯的輸出體現(xiàn),使用菜鳥教程const iota的例子說(shuō)明:

//iota
	const (
		a = iota   //0
		b          //1
		c          //2
		d = "ha"   //獨(dú)立值,iota += 1
		e          //"ha"   iota += 1
		f = 100    //iota +=1
		g          //100  iota +=1
		h = iota   //7,恢復(fù)計(jì)數(shù)
		i          //8
	)
	fmt.Println(a,b,c,d,e,f,g,h,i)
	println(a,b,c,d,e,f,g,h,i)

輸出:

很明顯可以看出,在Windows Goland IDE下:標(biāo)準(zhǔn)輸出是白色,錯(cuò)誤輸出是紅色。所以一般適用于debug的時(shí)候,并且不保證在未來(lái)的Go版本中繼續(xù)存在。一般輸出還是調(diào)用fmt包輸出更為妥當(dāng)。

3.方法返回值不同:

我們首先觀察兩個(gè)方法的代碼:

package fmt
func Println(a ...interface{}) (n int, err error) {
	return Fprintln(os.Stdout, a...)
}
package builtin
func println(args ...Type)

可以發(fā)現(xiàn),fmt.Println是有返回值參數(shù)的。

fmt.println():

  • 第一個(gè)返回值是:the number of bytes written,也就是往輸出上寫入了多少個(gè)字節(jié)
  • 第二個(gè)返回值是:any write error encountered,也就是寫入的任何錯(cuò)誤

也就是說(shuō)fmt.println()可以實(shí)現(xiàn)println()中無(wú)法實(shí)現(xiàn)的字節(jié)數(shù)統(tǒng)計(jì)和錯(cuò)誤分析。

4.內(nèi)置print/println函數(shù)的調(diào)用不能接受數(shù)組和結(jié)構(gòu)體參數(shù)

//定義數(shù)組
	arr := [5]int{1,2,3,4,5}
	fmt.Println(arr)

成功輸出:

//定義數(shù)組
	arr := [5]int{1,2,3,4,5}
	println(arr)

輸出錯(cuò)誤:

 5.對(duì)于組合類型的參數(shù),內(nèi)置的print/println函數(shù)將輸出參數(shù)的底層值部的地址,而fmtlog標(biāo)準(zhǔn)庫(kù)包中的打印函數(shù)將輸出接口參數(shù)的動(dòng)態(tài)值的字面形式。

func main() {
	var numbers = make([]int,3,5)
	printSlice(numbers)
}
func printSlice(x []int){
	fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
	println("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

輸出結(jié)果:

 6.如果一個(gè)實(shí)參有String() stringError() string方法,那么fmtlog標(biāo)準(zhǔn)庫(kù)包里的打印函數(shù)在打印參數(shù)時(shí)會(huì)調(diào)用這兩個(gè)方法,而內(nèi)置的print/println函數(shù)則會(huì)忽略參數(shù)的這些方法。

func main() {
	conent, err := openFile()
	if err != nil {
		fmt.Printf("fmt.Printf:存在錯(cuò)誤,%v\n", err)
	} else {
		fmt.Println(string(conent))
	}
	if err != nil {
		println("println:存在錯(cuò)誤,%v\n",err)
	} else {
		println(string(conent))
	}
}
//只是模擬一個(gè)錯(cuò)誤
func openFile() ([]byte, error) {
	return nil, &fileError{}
}
type fileError struct {
}
func (fe *fileError) Error() string {
	return "文件錯(cuò)誤"
}

輸出結(jié)果:

到此這篇關(guān)于Go語(yǔ)言中println和fmt.Println區(qū)別的文章就介紹到這了,更多相關(guān)Go語(yǔ)言 println fmt.Println內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言為什么不支持前綴自增運(yùn)算符原理解析

    Go語(yǔ)言為什么不支持前綴自增運(yùn)算符原理解析

    這篇文章主要為大家介紹了Go語(yǔ)言為什么不支持前綴自增運(yùn)算符原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Go slice切片使用示例詳解

    Go slice切片使用示例詳解

    這篇文章主要為大家介紹了Go slice切片使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go設(shè)計(jì)模式之備忘錄模式講解和代碼示例

    Go設(shè)計(jì)模式之備忘錄模式講解和代碼示例

    備忘錄是一種行為設(shè)計(jì)模式, 允許生成對(duì)象狀態(tài)的快照并在以后將其還原,本文就通過(guò)代碼示例給大家講講Go備忘錄模式,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2023-08-08
  • 實(shí)時(shí)通信的服務(wù)器推送機(jī)制 EventSource(SSE) 簡(jiǎn)介附go實(shí)現(xiàn)示例代碼

    實(shí)時(shí)通信的服務(wù)器推送機(jī)制 EventSource(SSE) 簡(jiǎn)介附go實(shí)現(xiàn)示例代碼

    EventSource是一種非常有用的 API,適用于許多實(shí)時(shí)應(yīng)用場(chǎng)景,它提供了一種簡(jiǎn)單而可靠的方式來(lái)建立服務(wù)器推送連接,并實(shí)現(xiàn)實(shí)時(shí)更新和通知,這篇文章主要介紹了實(shí)時(shí)通信的服務(wù)器推送機(jī)制 EventSource(SSE)簡(jiǎn)介附go實(shí)現(xiàn)示例,需要的朋友可以參考下
    2024-03-03
  • 詳解Go語(yǔ)言運(yùn)用廣度優(yōu)先搜索走迷宮

    詳解Go語(yǔ)言運(yùn)用廣度優(yōu)先搜索走迷宮

    廣度優(yōu)先搜索是從圖中的某一頂點(diǎn)出發(fā),遍歷每一個(gè)頂點(diǎn)時(shí),依次遍歷其所有的鄰接點(diǎn),再?gòu)倪@些鄰接點(diǎn)出發(fā),依次訪問(wèn)它們的鄰接點(diǎn),直到圖中所有被訪問(wèn)過(guò)的頂點(diǎn)的鄰接點(diǎn)都被訪問(wèn)到。然后查看圖中是否存在尚未被訪問(wèn)的頂點(diǎn),若有,則以該頂點(diǎn)為起始點(diǎn),重復(fù)上述遍歷的過(guò)程
    2021-06-06
  • Go 語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之雙鏈表學(xué)習(xí)教程

    Go 語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之雙鏈表學(xué)習(xí)教程

    這篇文章主要為大家介紹了Go 語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之雙鏈表學(xué)習(xí)教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Go語(yǔ)言實(shí)現(xiàn)從PDF自動(dòng)化提取條碼的開發(fā)全流程解析

    Go語(yǔ)言實(shí)現(xiàn)從PDF自動(dòng)化提取條碼的開發(fā)全流程解析

    在實(shí)際的業(yè)務(wù)場(chǎng)景中,我們常常需要從?PDF?文件中提取條碼信息,本文將通過(guò)?Go?語(yǔ)言開發(fā)一個(gè)自動(dòng)掃描目錄內(nèi)所有?PDF?并提取條碼的工具,感興趣的小伙伴可以了解下
    2025-11-11
  • Golang操作Kafka的實(shí)現(xiàn)示例

    Golang操作Kafka的實(shí)現(xiàn)示例

    本文主要介紹了Golang操作Kafka的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Go語(yǔ)言連接Oracle數(shù)據(jù)庫(kù)的方法

    Go語(yǔ)言連接Oracle數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了Go語(yǔ)言連接Oracle數(shù)據(jù)庫(kù)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Go 中的Map與字符處理指南

    Go 中的Map與字符處理指南

    在Go中,map可以存儲(chǔ)字符,但需要理解字符在Go中的表示方式,本文給大家介紹Go中的Map與字符處理指南,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-06-06

最新評(píng)論

永宁县| 绥宁县| 郯城县| 四川省| 昌乐县| 庆城县| 延吉市| 商水县| 塔河县| 鄂托克旗| 祁连县| 梧州市| 清水县| 漠河县| 若尔盖县| 阳城县| 汾阳市| 广宗县| 西和县| 巴马| 利辛县| 个旧市| 达拉特旗| 长顺县| 扶绥县| 平罗县| 汝城县| 唐河县| 七台河市| 垣曲县| 康乐县| 普兰店市| 延庆县| 新余市| 永定县| 明光市| 磴口县| 沙雅县| 祁连县| 双峰县| 桑日县|