读文件
读取的文件放在file/test:也就是file包下的test这个文件,里面写多一点文件
读文件方式一:利用直接从文件读取到[]byte中
func Read0() (string){
f, err := ("file/test")
if err != nil {
("read fail", err)
}
return string(f)
}
读文件方式二:先从文件读取到file中,在从file读取到buf, buf在追加到最终的[]byte
func Read1() (string){
//获得一个file
f, err := ("file/test")
if err != nil {
("read fail")
return ""
}
//把file读取到缓冲区中
defer ()
var chunk []byte
buf := make([]byte, 1024)
for {
//从file读取到buf中
n, err := (buf)
if err != nil && err != {
("read buf fail", err)
return ""
}
//说明读取结束
if n == 0 {
break
}
//读取到最终的缓冲区中
chunk = append(chunk, buf[:n]...)
}
return string(chunk)
//(string(chunk))
}
读文件方式三:先从文件读取到file, 在从file读取到Reader中,从Reader读取到buf, buf最终追加到[]byte
//先从文件读取到file, 在从file读取到Reader中,从Reader读取到buf, buf最终追加到[]byte,这个排第三
func Read2() (string) {
fi, err := ("file/test")
if err != nil {
panic(err)
}
defer ()
r := (fi)
var chunks []byte
buf := make([]byte, 1024)
for {
n, err := (buf)
if err != nil && err != {
panic(err)
}
if 0 == n {
break
}
//(string(buf))
chunks = append(chunks, buf...)
}
return string(chunks)
//(string(chunks))
}
读文件方式四:读取到file中,再利用ioutil将file直接读取到[]byte中
//读取到file中,再利用ioutil将file直接读取到[]byte中, 这是最优
func Read3() (string){
f, err := ("file/test")
if err != nil {
("read file fail", err)
return ""
}
defer ()
fd, err := (f)
if err != nil {
("read to fd fail", err)
return ""
}
return string(fd)
}
读取速度比较
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
"time"
)
func Read1() string {
f, err := ("/root/test")
if err != nil {
("read fail", err)
}
return string(f)
}
func Read2() string {
//获得一个file
f, err := ("/root/test")
if err != nil {
("read fail")
return ""
}
//把file读取到缓冲区中
defer ()
var chunk []byte
buf := make([]byte, 1024)
for {
//从file读取到buf中
n, err := (buf)
if err != nil && err != {
("read buf fail", err)
return ""
}
//说明读取结束
if n == 0 {
break
}
//读取到最终的缓冲区中
chunk = append(chunk, buf[:n]...)
}
return string(chunk)
//(string(chunk))
}
func Read3() string {
fi, err := ("/root/test")
if err != nil {
panic(err)
}
defer ()
r := (fi)
var chunks []byte
buf := make([]byte, 1024)
for {
n, err := (buf)
if err != nil && err != {
panic(err)
}
if 0 == n {
break
}
//(string(buf))
chunks = append(chunks, buf...)
}
return string(chunks)
//(string(chunks))
}
func Read4() string {
f, err := ("/root/test")
if err != nil {
("read file fail", err)
return ""
}
defer ()
fd, err := (f)
if err != nil {
("read to fd fail", err)
return ""
}
return string(fd)
}
func main() {
start := ().UnixNano() / 1e6
Read1()
end := ().UnixNano() / 1e6
("Read1=%d,\n", end-start)
}
分别测试 read2 read3 read4
func main() {
start := ().UnixNano() / 1e6
Read2()
end := ().UnixNano() / 1e6
("Read2=%d,\n", end-start)
}
func main() {
start := ().UnixNano() / 1e6
Read3()
end := ().UnixNano() / 1e6
("Read3=%d,\n", end-start)
}
func main() {
start := ().UnixNano() / 1e6
Read4()
end := ().UnixNano() / 1e6
("Read4=%d,\n", end-start)
}
输出结果
[root@localhost src]# ll -h /root | grep test
-rwxr-xr-x. 1 root root 136M Nov 7 19:20 test
[root@localhost src]# go build
[root@localhost src]# ./test
Read1=625,
[root@localhost src]# go build
[root@localhost src]# ./test
Read2=1313,
[root@localhost src]# go build
[root@localhost src]# ./test
Read3=1724,
[root@localhost src]# go build
[root@localhost src]# ./test
Read4=1057,
经过测试,这四种方式读的速度排名是:前者为优
方式一 > 方式四 > 方式二 > 方式三
写文件
写文件方式一:使用 写入文件
func Write0() {
fileName := "file/test1"
strTest := "测试测试"
var f *
var err error
if CheckFileExist(fileName) { //文件存在
f, err = (fileName, os.O_APPEND, 0666) //打开文件
if err != nil{
("file open fail", err)
return
}
}else { //文件不存在
f, err = (fileName) //创建文件
if err != nil {
("file create fail")
return
}
}
//将文件写进去
n, err1 := (f, strTest)
if err1 != nil {
("write error", err1)
return
}
("写入的字节数是:", n)
}
写文件方式二:使用 写入文件
func Write1() {
fileName := "file/test2"
strTest := "测试测试"
var d = []byte(strTest)
err := (fileName, d, 0666)
if err != nil {
("write fail")
}
("write success")
}
写文件方式三:使用 File(Write,WriteString) 写入文件
func Write2() {
fileName := "file/test3"
strTest := "测试测试"
var d1 = []byte(strTest)
f, err3 := (fileName) //创建文件
if err3 != nil{
("create file fail")
}
defer ()
n2, err3 := (d1) //写入文件(字节数组)
("写入 %d 个字节n", n2)
n3, err3 := ("writesn") //写入文件(字节数组)
("写入 %d 个字节n", n3)
()
}
写文件方式四:使用 写入文件
func Write3() {
fileName := "file/test3"
f, err3 := (fileName) //创建文件
if err3 != nil{
("create file fail")
}
w := (f) //创建新的 Writer 对象
n4, err3 := ("bufferedn")
("写入 %d 个字节n", n4)
()
()
}
检查文件是否存在:
func CheckFileExist(fileName string) bool {
_, err := (fileName)
if (err) {
return false
}
return true
}