一、终端读写
操作终端相关文件语句常量,go所有的都是接口
os.Stdin:标准输入
os.Stdout:标准输入,只要实现输出这个接口,打印到终端,
os.Stderr:标准错误输出
os.OpenFile(“路径”,模式):打开文件
终端读写实例
package main
import(
“fmt”
)
var (
firstName,lastName,s string
I int
f float32
input =”56.12/5212/GO”
format =”%f /%d/%s”
)
func main(){
fmt.Println(“please enter your full name”) //打印一行的输出
fmt.Scanln(&firstName,&lastName) //只能输入字符串
//fmt.Scanf(input,format,&f,&I,&s) //格式化输入
fmt.Printf() //格式化输出
fmt.Sscanf(input,format,&f,&I,&s) //从一个字符串中格式化输入
fmt.Println(“from the we read ”,f,I,s)
}
带缓冲区的读写 从终端去读取数据
首先写道缓冲区里面,然后go或者系统再刷到文件里面,用于提高性能
下面是带缓冲区的读的代码
小结:
1)用bufio.NewReader创建一个新的Reader,返回值默认大小的Reader,也就是创建缓冲区然后把文件读入缓冲区
2)然后根据上面的返回值进行Read。。。方法读取,返回错误和读出的数据
3)进行err判断
文件读写
open:返回一个文件用于读取数据
OpenFile:如果需要读写 操作用这个
练习:从文件中读取一行字符串,统计英文、数字、空格以及其他字符的数量
读取到文件末尾会返回io.EOF这个错误
1、os.File封装所有文件相关操作,之间的os.Stdin,os.Stdout,os.Stderr都是*os.File(结构体)
a)打开一个文件进行读操作 os.Open(name string)(*File,error) //第一个括号是全路径,返回file
b)关闭一个文件:File.Close()
如果不关闭的话,linux最大为65535个文件句柄,如果超过最大数的话,那么以后再打的时候就一直是失败的
io/ioutil这个文件包可以一下把文件全部读取出来,读取到缓冲区里面
bufio这个包是一行一行把文件读取到缓冲区里面
读取整个文件实例
读取压缩文件
gzip.NewReader()参数接受一个文件句柄,读一部分文件数据解压缩,返回值是一个具有解压缩的功能
再把上面的具有解压缩的返回值放入到缓冲区里面,返回值为带缓冲区的解压缩功能
文件写入:
os.OpenFile(“output.dat”,os.O_WRONLY|os.O_CREATE,0666)
第一个参数是文件路径,第二个参数是模式
第二个参数
1.os.O_WRONLY:只写
2,os.O_CREATE: 创建文件
3.os.O_RDONLY:只读
4.os.O_RDWR,读写
5.os.O_TRUNC:清空
12 14
第三个参数:权限控制
r--à04
w--à02
x--à01
这里第三个三处分别是属主,数组,其他人
拷贝文件
源码简单,根据接口来实现
看copy源码
带缓冲区的读写
JSON数据协议
go如果和其他语言有交互,那么就需要序列化为json字符串,然后通过网络传输传递给程序,然后反序列化为其他语言
1)导入包:Import “encoding/json”
2)序列化:json.Marshal(data interface{})
3)反序列化:json.UnMarshal(data []byte,v interface{})
Json序列化结构体
testMap()的结果
testSlice()的结果
testSlice()的结果