讀寫文件的操作#
讀取單行文件#
package main
import (
"fmt"
"os"
)
func main() {
//調用os下的Open函數打開文件
file, err := os.Open("讀寫文件/a.txt")
if err != nil {
fmt.Println("文件打開錯誤")
return
}
//關閉資源,這句實際會最後運行
defer file.Close()
//創建切片content,make([]byte, 100, 100)可以簡寫make([]byte, 100)
content := make([]byte, 100)
//調用Read函數,讀取文件,返回該文件占多少個字節
n, err := file.Read(content)
if err != nil {
fmt.Println("文件讀取錯誤")
return
}
//打印前n個字節,並強制轉化為字符串
fmt.Println(string(content[0:n]))
}
讀取多行文件#
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
open, err := os.Open("讀寫文件/c.txt")
if err != nil {
fmt.Println("讀取文件錯誤")
return
}
defer open.Close()
//緩衝讀取
reader := bufio.NewReader(open)
for {
//按換行符停頓讀取單行內容,然後用for循環到最後一行
readString, err := reader.ReadString('\n')
if err != nil {
//觸發錯誤,io.EOF表示讀取到了最後一行
if err == io.EOF {
//打印最後一行內容,並結束循環
fmt.Print(readString)
break
} else {
fmt.Println("出現錯誤:", err)
return
}
} else {
//依次打印除了最後一行,前面每行內容
fmt.Print(readString)
}
}
}
寫入文件#
package main
import (
"fmt"
"os"
)
func main() {
//調用os下的Create函數創建文件
file, err := os.Create("讀寫文件/c.txt")
if err != nil {
fmt.Println("創建文件失敗")
return
}
defer file.Close()
content := "你好,美女!"
//調用Write函數,寫入文件,返回該文件占多少個字節
n, err := file.Write([]byte(content))
if err != nil {
fmt.Println("寫入文件失敗")
return
} else {
fmt.Printf("寫入了%d個字節", n)
}
}
json 序列化#
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Name string
Sex string
Age int
}
type Class struct {
Id string
Students []Student
}
func main() {
s := Student{"張三", "男", 18}
c := Class{"3年2班", []Student{s, s, s}}
//調用Marshal函數序列化
m, err := json.Marshal(c)
if err != nil {
fmt.Println("json序列化失敗", err)
return
}
fmt.Println(string(m))
println("_______________________________________________")
//調用Marshal函數反序列化
var x Class
err = json.Unmarshal(m, &x)
if err != nil {
fmt.Println("json反序列化失敗", err)
return
}
fmt.Println(x)
}
使用第三方庫來優化:
先導包,命令終端輸入 go get github.com/bytedance/sonic
package main
import (
"fmt"
"github.com/bytedance/sonic"
)
type Student struct {
Name string
Sex string
Age int
}
type Class struct {
Id string
Students []Student
}
func main() {
s := Student{"張三", "男", 18}
c := Class{"3年2班", []Student{s, s, s}}
//sonic替代json,調用Marshal函數序列化
m, err := sonic.Marshal(c)
if err != nil {
fmt.Println("json序列化失敗", err)
return
}
fmt.Println(string(m))
println("_______________________________________________")
//sonic替代json,調用Marshal函數反序列化
var x Class
err = sonic.Unmarshal(m, &x)
if err != nil {
fmt.Println("json反序列化失敗", err)
return
}
fmt.Println(x)
}