banner
音小董

哩哔哩哔

这世上的热闹出自孤单

第7章:ファイルの読み書きとJSONシリアライズ

ファイルの読み書き操作#

1 行ファイルの読み取り#

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 {  
// 改行文字で区切って1行ずつ読み取り、最後の行まで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}}  
// jsonの代わりにsonicを使用し、Marshal関数を呼び出してシリアライズします  
m, err := sonic.Marshal(c)  
if err != nil {  
fmt.Println("JSONシリアライズに失敗しました", err)  
return  
}  
fmt.Println(string(m))  
println("_______________________________________________")  
// jsonの代わりにsonicを使用し、Marshal関数を呼び出してデシリアライズします  
var x Class  
err = sonic.Unmarshal(m, &x)  
if err != nil {  
fmt.Println("JSONデシリアライズに失敗しました", err)  
return  
}  
fmt.Println(x)  
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。