GO語(yǔ)言學(xué)習(xí)---chapter12

第12章? 文件讀寫(xiě)? 2018.06.28-2018.06.29

主要涉及的庫(kù)有? os? io? bufio

打開(kāi)文件:

inputFile,err := os.Open(filename)? //這里inputFile將會(huì)是一個(gè)*File的指針,err返回打開(kāi)文件時(shí)的錯(cuò)誤信息

打開(kāi)文件后,一定要注意需要關(guān)閉文件,通過(guò)下面的語(yǔ)句來(lái)實(shí)現(xiàn)

defer inputFile.Close()

然后創(chuàng)建一個(gè)reader

inputReader := bufio.NewReader(inputFile)? //建返回一個(gè)Reader指針

《1》讀取一行:? line := inputReader.ReadLine()

《2》按照分隔符讀?。? str ,err := inputReader.ReadString('\n')

《3》讀取到緩沖區(qū)?

? ? ? ? ? ? buffer := make([]byte,1024)? //創(chuàng)建緩沖區(qū)

? ? ? ? ? ? n , error := inputReader.Read(buffer) //將數(shù)據(jù)讀取到緩沖區(qū),n表示讀取到的字節(jié)數(shù),error表示錯(cuò)誤信息

《4》讀取整個(gè)文件到緩沖區(qū)

? ? ? ? ? ? buffer,error := ioutil.ReadFile(inputFileName) //一次性將文件讀取到緩沖區(qū)

? ? ? ? ? ? err := ioutil.WriteFile(outFileName,buffer,0x644) //將緩沖區(qū)的數(shù)據(jù)寫(xiě)到文件中

《5》從文件中讀取一行到指定的變量中

? ? ? ? ? fmt.Fscanln(file,&var1,&var2,&var3)

《6》 讀取壓縮文件

? ? ? ? ? ? import "compress/gzip"? ? //引入壓縮包

? ? ? ? ? ? file,err := os.Open(filename)? ? //打開(kāi)文件,獲取*File

? ? ? ? ? ? fz , err := gzip.NewReader(file)? //獲取gzip Reader實(shí)例

? ? ? ? ? ? r ,? err := bufio.NewReader(fz)? ? //獲取*Reader實(shí)例

? ? ? ? ? ? 接下來(lái)的步驟和正常的讀取步驟一樣

《7》 文件寫(xiě)的過(guò)程

? ? ? ? ? ? outputFile, outputError := os.OpenFile(filename,O_WRITEONLY|O_CREATE,0666) //打開(kāi)文件,設(shè)置打開(kāi)方式及讀寫(xiě)權(quán)限

? ? ? ? ? ? defer outputFile.Close()? //記得程序退出時(shí)關(guān)閉文件

? ? ? ? ? ? outputWriter := bufio.NewWriter(outputFile)? //獲取一個(gè)*Writer

? ? ? ? ? ? outputWriter.WriteString("fuck you !") // 寫(xiě)入數(shù)據(jù)

? ? ? ? ? ? outputWriter.Flush()

《8》讀取整個(gè)文件的過(guò)程可以使用ioutil.ReadFile

? ? ? ? ? 寫(xiě)入整個(gè)文件的過(guò)程可以使用ioutil.WriteFile

《9》文件的復(fù)制? ioutil.Copy(dst,src)? //直接將src復(fù)制到dst ,這里需要注意參數(shù)的位置

《10》flag包可以幫助我們處理命令行參數(shù)

? ? ? ? ? ? type flag struct {

? ? ? ? ? ? ? ? Name string? //name as it appears on commandline

? ? ? ? ? ? ? ? Usage? string? // help message

? ? ? ? ? ? ? ? Value? Value? // value as set

? ? ? ? ? ? ? ? DefValue string? // default value (as text) ; for usage message

? ? ? ? ? ? }

獲取命令行參數(shù)的個(gè)數(shù):flag.NArg()?

獲取第i個(gè)參數(shù): flag.Arg(i)

《11》JSON 文件格式的讀取(重點(diǎn)關(guān)注,嘗試開(kāi)源包)

? ? ? ? json的局限性:

? ? ? ? ? ? ? ? 不是所有的類(lèi)型都可以轉(zhuǎn)成json

? ? ? ? ? ? ? ? json的key必須是string類(lèi)型

? ? ? ? ? ? ? ? 循環(huán)嵌套的數(shù)據(jù)類(lèi)型不支持

? ? ? ? ? ? ? ? 指針類(lèi)型會(huì)被提取出內(nèi)容并加封

? ? ? ? ? ? json encode數(shù)據(jù)的方法: ? js,_ := json.Marshal(go_object)?

? ? ? ? ? ? json encode數(shù)據(jù)到文件中 :

? ? ? ? ? ? file , _ := os.OpenFile(filename,os.O_CREATE|os.O_WRITEOLY,0666)

? ? ? ? ? ? enc := json.NewEncoder(file)?

? ? ? ? ? ? err := enc.Encode(go_object)?

? ? ? ? ? ? json 的數(shù)據(jù)類(lèi)型和 Go的數(shù)據(jù)類(lèi)型的對(duì)應(yīng)關(guān)系:

? ? ? ? ? ? bool ?<-----------> ?json boolean

? ? ? ? ? ? float64 <------------> ?json ?numbers

? ? ? ? ? ? string ?<-------------> json string?

? ? ? ? ? ? nil ? <-------------> ?json null?


《12》XML文件格式的讀取

? ? ? ? ? ? xml格式文件的讀取類(lèi)似于json格式的讀取

? ? ? ? ? ? input := ?xmlcontentstring?

? ? ? ? ? ? inputReader := strings.NewReader(input)

? ? ? ? ? ? p:= xml.NewDecoder(inputReader)?

? ??????????for t,err = p.Token(); err == nil ; t ,err = p.Token(){

????????????????switch token := t.(type) {

????????????????case xml.StartElement:

????????????????????????name := token.Name.Local

????????????????????????fmt.Printf("Token name :%s \n",name)

????????????????????????for _ , attr :=range token.Attr {

????????????????????????????????attrName := attr.Name.Local

????????????????????????????????attrValue := attr.Value

????????????????????????????????fmt.Printf("An attribute is : %s %s \n",attrName,attrValue)

????????????????????????}

????????????????case xml.EndElement:

????????????????????????name := token.Name.Local

????????????????????????fmt.Println("End of token",name)

????????????????case xml.CharData:

????????????????????????content := string([]byte(token))

????????????????????????fmt.Printf("This is content : %v \n",content)

? ? ? ? ? ? ? ? default:

????????????}

????????}

《13》GOB文件格式的讀取

? ? ? ? ? ? gob是go binary format的簡(jiǎn)稱(chēng),gob是go專(zhuān)屬的二進(jìn)制的格式,使用方法和json類(lèi)似

《14》加密摘要算法的使用

sha1,md5 這些常用的必須掌握

hasher := md5.New() ? // 創(chuàng)建算法的實(shí)例

b := []byte{} ?//md5值的存儲(chǔ)之地

io.WriteString(hasher,content) ?//寫(xiě)入方式一

content := []byte("blablabla")?

nbytes , err := hash.Write(content) ?//寫(xiě)入方式二

checksum := hasher.Sum(b)?

hasher.Reset() ?//清空內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容