先看一下目錄結(jié)構(gòu),注意這里的src名稱是必須的,go在設(shè)置了GOPATH后,默認會添加src去尋找package,暫未查詢是否有方法不按照src查詢
10年積累的成都網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先做網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有襄陽免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
根據(jù)上面的描述,Go語言中通過包中函數(shù)的名稱來區(qū)分公共函數(shù)和私有函數(shù),我們在main函數(shù)中是無法調(diào)用myPrivateFunc的
此時如果執(zhí)行通過go run方式執(zhí)行,會看到如下的提示信息,這與大部分語言對于包管理方式相關(guān),所以我們通過兩種不同的方法來讓代碼執(zhí)行起來
返回如下,這里面對我們后續(xù)執(zhí)行有影響的兩個參數(shù)GO111MODULE和GOPATH
如果要使用gopath模式引用包,則需要關(guān)閉mod模式
設(shè)置GOPATH為當前路徑,即main.go所在的路徑
此時再查看go env時,GOPATH已經(jīng)發(fā)生改變
我們再次嘗試執(zhí)行代碼
可以看到public函數(shù)被調(diào)用
一、介紹go標準庫中的bufio
最近用golang寫了一個處理文件的腳本,由于其中涉及到了文件讀寫,開始使用golang中的 io 包,后來發(fā)現(xiàn)golang 中提供了一個bufio的包,使用這個包可以大幅提高文件讀寫的效率,于是在網(wǎng)上搜索同樣的文件讀寫為什么bufio 要比io 的讀寫更快速呢?根據(jù)網(wǎng)上的資料和閱讀源碼,以下來詳細解釋下bufio的高效如何實現(xiàn)的。
bufio 包介紹
bufio包實現(xiàn)了有緩沖的I/O。它包裝一個io.Reader或io.Writer接口對象,創(chuàng)建另一個也實現(xiàn)了該接口,且同時還提供了緩沖和一些文本I/O的幫助函數(shù)的對象。
以上為官方包的介紹,在其中我們能了解到的信息如下:
bufio 是通過緩沖來提高效率
簡單的說就是,把文件讀取進緩沖(內(nèi)存)之后再讀取的時候就可以避免文件系統(tǒng)的io 從而提高速度。同理,在進行寫操作時,先把文件寫入緩沖(內(nèi)存),然后由緩沖寫入文件系統(tǒng)。看完以上解釋有人可能會表示困惑了,直接把 內(nèi)容-文件 和 內(nèi)容-緩沖-文件相比, 緩沖區(qū)好像沒有起到作用嘛。其實緩沖區(qū)的設(shè)計是為了存儲多次的寫入,最后一口氣把緩沖區(qū)內(nèi)容寫入文件。下面會詳細解釋
bufio 封裝了io.Reader或io.Writer接口對象,并創(chuàng)建另一個也實現(xiàn)了該接口的對象
io.Reader或io.Writer 接口實現(xiàn)read() 和 write() 方法,對于實現(xiàn)這個接口的對象都是可以使用這兩個方法的
注明:介紹內(nèi)容來自博主 LiangWenT
,原文鏈接: ,在查找資料時,發(fā)現(xiàn)這篇博客的內(nèi)容很好理解
bufio包實現(xiàn)了緩存IO。它包裝了io.Reader和io.Write對象,創(chuàng)建了另外的Reader和Writer對象,它們也實現(xiàn)了io.Reader和io.Write接口,具有緩存。注意:緩存是放在主存中,既然是保存在主存里,斷電會丟失數(shù)據(jù),那么要及時保存數(shù)據(jù)。
二、常用內(nèi)容
1、Reader類型
NewReaderSize
作用:NewReaderSize將rd封裝成一個帶緩存的bufio.Reader對象。緩存大小由size指定(如果小于16則會被設(shè)為16)。如果rd的基類型就是有足夠緩存的bufio.Reader類型,則直接將rd轉(zhuǎn)換為基類型返回。
NewReader
funcReader相當于NewReaderSize(rd, 4096)
Peek
Peek返回緩存的一個切片,該切片引用緩存中前n個字節(jié)的數(shù)據(jù),該操作不會將數(shù)據(jù)讀出,只是引用,引用的數(shù)據(jù)在下一次讀取操作之前有效的。如果切片長度小于n,則返回一個錯誤信息說明原因。如果n大于緩存的總大小,則返回ErrBufferFull。
Read
Read從b中數(shù)據(jù)到p中,返回讀出的字節(jié)數(shù)和遇到的錯誤。如果緩存不為空,則只能讀出緩沖中的數(shù)據(jù),不會從底層io.Reader中提取數(shù)據(jù),如果緩存為空,則:
1、len(p) = 緩存大小,則跳過緩存,直接從底層io.Reader中讀出到p中
2、len(p) 緩存大小,則先將數(shù)據(jù)從底層io.Reader中讀取到緩存中,再從緩存讀取到p中。
Buffered
Buffered返回緩存中未讀取的數(shù)據(jù)的長度。
Discard
Discard跳過后續(xù)的n個字節(jié)的數(shù)據(jù),返回跳過的字節(jié)數(shù)。
Writer類型和方法
write結(jié)構(gòu)
NewWriteSize
NewWriterSize將wr封裝成一個帶緩存的bufio.Writer對象,緩存大小由size指定(如果小于4096則會被設(shè)置未4096)。
NewWrite
NewWriter相等于NewWriterSize(wr, 4096)
WriteString
WriteString功能同Write,只不過寫入的是字符串
WriteRune
WriteRune向b寫入r的UTF-8編碼,返回r的編碼長度。
Flush
Available
Available 返回緩存中未使用的空間的長度
Buffered
Buffered返回緩存中未提交的數(shù)據(jù)長度
Reset
Reset將b的底層Write重新指定為w,同時丟棄緩存中的所有數(shù)據(jù),復位所有標記和錯誤信息。相當于創(chuàng)建了一個新的bufio.Writer。
GO中還提供了Scanner類型,處理一些比較簡單的場景。如處理按行讀取輸入序列或空格分隔的詞等。
內(nèi)容來自:
參考鏈接:
1)
2)
golang提供了一個簡單的日志輸出包log,常用用法,已經(jīng)基本滿足日常的日志輸出需求
1、日志級別有3個,info,fatal,panic
2、 日志文件的輸出
輸出的結(jié)果 a.log
[Debug]main.go:45: debug info is ,check list ,hello
[Debug]main.go:46: debug info is ,check list ,hello000111
[Info]2020/09/09 Info check
標準輸出:
[Info]2020/09/09 Info check stdout
樣例二:
輸出結(jié)果為:
[Info]2020/09/09 Check init info
[Info]2020/09/09 go to function Check
expvar 包是 Golang 官方提供的公共變量包,它可以輔助調(diào)試全局變量。支持一些常見的類型: float64 、 int64 、 Map 、 String 。如果我們的程序要用到上面提的四種類型(其中,Map 類型要求 Key 是字符串)。可以考慮使用這個包。
這些基礎(chǔ)的功能就不多說了,大家可以直接看官方的 文檔 。
看源碼的時候發(fā)現(xiàn)一個非常有意思的調(diào)試接口, /debug/vars 會把所有注冊的變量打印到接口里面。這個接口很有情懷。
感覺這個包還是針對簡單變量,比如整形、字符串這種比較好用。
看到就寫了,并沒有什么沉淀,寫得挺亂的。這個包很簡單,但是里面還是有些可以借鑒的編碼和設(shè)計。新版本的 Golang 已經(jīng)能解析整形為 Key 的哈希表了,這個包啥時候能跟上支持一下?
當前題目:go語言常用包介紹 go 常用包
網(wǎng)站URL:http://jinyejixie.com/article42/dodphec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、企業(yè)網(wǎng)站制作、微信小程序、搜索引擎優(yōu)化、外貿(mào)建站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)