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))
}
复制代码