banner
音小董

哩哔哩哔

这世上的热闹出自孤单

第7章:文件讀寫和json序列化

讀寫文件的操作#

讀取單行文件#

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)  
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。