【Go學習筆記10】go語言中的工具包-輸入輸出

輸入和輸出

go語言中,輸入和輸出主要在io包中。io包中,最主要的接口是io.Reader和io.Writer兩個。json

輸入

package main

import (
	"io"
	"strings"
	"log"
	"fmt"

)

func main(){
	r := strings.NewReader("這是一個字符串。。")
	
	buf := make([]byte, 6)
	if _, err := io.ReadFull(r, buf); err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", buf)
}
//這是
複製代碼

上面的代碼表示從r中讀取6個字節的數據到buf中。注意,一箇中文佔3個字節,因此若是讀取的字節數不是3的倍數的話,會出現亂碼。strings.NewReader函數經過給定字符串來建立一個Reader對象。更多詳情請點緩存

這裏

讀取文件數據:函數

package main

import (
	"fmt"
	"log"
	"os"

)

func main(){
	file ,err := os.OpenFile("data.json",os.O_RDONLY,0666)
	if err != nil{
		log.Println("打開文件失敗。。")
		return
	}
  //建立一個byte類型的切片,長度和容量都是1024
	b := make([]byte,1024)
  //讀取數據到b中
	file.Read(b)

	fmt.Println(string(b))
}
複製代碼

上面的代碼表示從data.json中讀取1024個字節的數據到b中。spa

那若是文件中的數據長度大於1024字節該怎麼辦呢?看下面的代碼:code

package main

import (
	"bytes"
	"io"
	"fmt"
	"log"
	"os"

)

func main(){
	file ,err := os.OpenFile("data.json",os.O_RDONLY,0666)
	if err != nil{
		log.Println("打開文件失敗。。")
		return
	}
	//定義一個byte的緩存,用來存儲每一次循環讀取出來的數據
	var buffer bytes.Buffer
	//定義一個byte類型的切片,表示每次讀取的數據大小
	b := make([]byte,8)
	var n int
	//循環讀取,知道文件末尾
	for  n, err = file.Read(b); err!=io.EOF ; n, err = file.Read(b)  {
    //從切片b中建立新的切片,新的切片包括此次讀取的全部數據
		temp := b[0:n:n]
		buffer.Write(temp)
	}
	//輸出結果
	fmt.Println(string(buffer.Bytes()))
}
 //{ "success":true,
 // "total":1214,
 // "rows":[{
 // "id":1,
 // "name":"zhongzhong",
 // "age":25
 // },{
 // "id":2,
 // "name":"wangerxiao",
 // "age":15
 // }]}
複製代碼

上面的代碼表示將data.json中的數據讀取出來,而後輸出到控制檯。cdn

輸出

package main

import (
	"os"
	"bytes"
)

func main(){
	var buffer bytes.Buffer
	buffer.Write([]byte("這是一段文字"))

	buffer.WriteTo(os.Stdout)
}
//這是一段文字
複製代碼

上面的代碼表示,輸出一段文字到標準輸出中。對象

輸出數據到文件中:接口

package main

import (
	"io"
	"log"
	"os"
	"bytes"
)

func main(){
	var buffer bytes.Buffer
	buffer.Write([]byte("這是一段文字"))

	file , err := os.OpenFile("data.txt",os.O_CREATE | os.O_WRONLY,0666)
	if err != nil{
		log.Println("打開文件失敗。。",err)
		return 
	}

	buffer.WriteTo(io.Writer(file))
}
複製代碼
相關文章
相關標籤/搜索