文件分類:文本文件和二進制文件
為黃陵等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及黃陵網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站建設、做網(wǎng)站、黃陵網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
文本文件可讀性好,占用的數(shù)據(jù)空間大
二進制文件,可讀性差,占用的數(shù)據(jù)空間小
文件存取方式:隨機存取和順序存放
隨機存?。翰僮魉俣嚷?,對磁盤的消耗大
順序存放:操作數(shù)據(jù)塊,對磁盤的消耗小
初級方法
高級方法
在程序和文件之間,添加一個緩沖區(qū),每次程序讀取文件內(nèi)容的時候,先去緩沖區(qū)查看,如果需要的內(nèi)容,直接獲取,如果沒有再去文件中獲取
由于緩沖是在內(nèi)存當中的,和程序的交互返回速度會非???,這樣可以大大提高程序的性能和速度
缺點:有的數(shù)據(jù)是只在緩沖中存儲的,如果在緩沖釋放之前,沒有將數(shù)據(jù)實例化落盤,會導致數(shù)據(jù)的丟失
按行操作文件對象
將之前的file方法封裝起來,可以更加方便的使用
使用gzip.NewReader(文件句柄),來操作壓縮文件
示例: file,err := os.OpenFile("main.go", os.O_WRONLY|os.O_WRONLY, 0666)
三個參數(shù),
文件操作方法,需要注意不能沖突
操作完成后,當前目錄出現(xiàn)一個text.txt 文件,內(nèi)容是:hello world,test
這里可以可以考慮使用buffio來實現(xiàn)
對比于其他語言的程序,Go語言的跨平臺能力是真的強,拿.Net和JAVA來說吧,.Net在.Net core出現(xiàn)之前是不能跨平臺的,只能在windows上編譯運行,即使是點虐 core出現(xiàn)以后,跨平臺的程序也是相當?shù)穆闊6鴍ava雖然一直都可以跨平臺,但是運行JAVA程序的機器上也必須要有JAVA程序運行環(huán)境JRE。而相對于Go程序,跨平臺就簡單的多了,只需要在編譯指定目標程序運行的架構(gòu)和環(huán)境即可編譯出指定操作系統(tǒng)和架構(gòu)的程序。
以上是指定了go的環(huán)境變量后執(zhí)行的go build命令進行目標程序的構(gòu)建,這種方式會一直生效的,如果不讓他一直生效,可以在構(gòu)建的時候臨時指定環(huán)境變量,下面以window的環(huán)境為例,來介紹臨時指定環(huán)境變量的方式構(gòu)建可以在Linux環(huán)境下運行的可執(zhí)行程序:
可以根據(jù)不同的架構(gòu)和操作系統(tǒng)將其編寫為不同的.bat的可執(zhí)行文件放置在程序的根目錄,Linux的和MAC的也一樣編寫成腳本文件放置在程序的根目錄,這樣在構(gòu)建的時候就不用再敲命令了,直接運行腳本就可以了。
Java程序編譯打包后為war包或者是java包,必須執(zhí)行java -jar 命令或者將其放置到tomcat的指定目錄下,運行tomcat程序。而Go語言編寫的程序最終為可執(zhí)行的文件(window下編譯出的是.exe的可執(zhí)行文件),只需要將其賦予可執(zhí)行的權限就可以直接運行了。
構(gòu)建JAVA程序的鏡像需要指定java的基礎鏡像,否則就需要在鏡像中安裝java的運行環(huán)境了,下面展示的是構(gòu)建的一個JAVA程序的鏡像,構(gòu)建出來鏡像的體積相對比較大
而Go程序制作出的鏡像就不需要安裝任何的依賴環(huán)境,因為他在打包的時候就已經(jīng)將依賴的包一塊打包到一起了
拿著這個鏡像就可以到處運行了。
通過對比我們可以發(fā)現(xiàn),如果沒有之前的技術和業(yè)務的積累,重新開發(fā)一個新的項目,使用go去開發(fā)無疑是最容易上手的,所以現(xiàn)在很多公司都使用go進行開發(fā),也逐漸將其他語言的項目逐步的用go語言進行改造。其實用什么語言不重要,合適的才重要,開發(fā)項目在選擇語言的時候也會綜合多方面來考慮選擇合適的語言和架構(gòu),畢竟很多公司都不是搞研究的,都需要項目來賺錢,所以開發(fā)的速度、客戶的滿意度、項目交付的時間才是驅(qū)動公司技術的主要因素。
我們個人也應該不斷完善自己的技術棧,不應該太依靠某種語言,最重要的還是自己的架構(gòu)思想和底層架構(gòu)知識,只有掌握了這些才能夠不被 社會 和公司“優(yōu)化”。
GraphicsMagick,一款高性能的圖片處理工具,由于項目需要,用到它,自然而然用到了關于gm的第三方庫 這個庫按照作者的提示,要安裝GraphicsMagick-devel依賴。
項目寫完了,接下來用alpine做為基礎鏡像,準備制作項目的鏡像。
golang項目,是在ubuntu下編寫的,編譯成二進制文件了,只要把二進制文件放進鏡像里即可,遇到的問題有2個
1 容器跑起來,一直報二進制文件no found
我認認真真的確認了文件,以及它的路徑,確實是存在的,怎么會報文件找不到呢?!
原來是musl和glibc是兼容的問題,在Dockerfile里要加以下兩步
2 Error loading shared library libGraphicsMagickWand-Q16.so.2: No such file or directory
明明按要求安裝GraphicsMagick-devel依賴,為啥還報這種錯
于是想到了,是不是也要ln做一下軟鏈接呢?于是學著上面的樣子在Dockerfile里補上
再跑,問題依舊,莫非是軟連接的地址寫錯了!回到開發(fā)的電腦上用ldd命令查看一下
果然,編譯后的二進制文件依賴路徑是/lib,而不是/lib64
于是,修改Dockerfile里的寫法
問題解決,開心:)
參考資料: