【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))
}
复制代码
相关文章
相关标签/搜索