bash_go_service/tests/testcase/write-read/main.go

93 lines
2.0 KiB
Go

package main
import (
"bytes"
"encoding/gob"
"fmt"
"os"
"path/filepath"
)
// UpdateInfo 结构体定义
type UpdateInfo struct {
Version string
Date string
Details string
}
// saveUpdateInfo 函数实现
func saveUpdateInfo(exePath string, info UpdateInfo) error {
// 创建一个字节缓冲区
var buffer bytes.Buffer
// 创建一个新的编码器,并将结构体编码到缓冲区
encoder := gob.NewEncoder(&buffer)
err := encoder.Encode(info)
if err != nil {
return fmt.Errorf("error encoding UpdateInfo: %v", err)
}
// 确保目录存在
err = os.MkdirAll(exePath, 0755)
if err != nil {
return fmt.Errorf("error creating directory: %v", err)
}
// 构建文件路径
filePath := filepath.Join(exePath, "update-infos")
// 将二进制数据写入文件
err = os.WriteFile(filePath, buffer.Bytes(), 0644)
if err != nil {
return fmt.Errorf("error writing to file: %v", err)
}
return nil
}
// LoadUpdateInfo 函数实现
func LoadUpdateInfo(exePath string) (*UpdateInfo, error) {
// 构建文件路径
filePath := filepath.Join(exePath, "update-infos")
// 从文件中读取二进制数据
data, err := os.ReadFile(filePath)
if err != nil {
return nil, fmt.Errorf("error reading from file: %v", err)
}
// 创建一个新的解码器,并将二进制数据解码到结构体
buffer := bytes.NewBuffer(data)
decoder := gob.NewDecoder(buffer)
var info UpdateInfo
err = decoder.Decode(&info)
if err != nil {
return nil, fmt.Errorf("error decoding binary data: %v", err)
}
return &info, nil
}
func main() {
// 示例使用
info := UpdateInfo{
Version: "1.0.1",
Date: "2025-04-23",
Details: "Bug fixes and performance improvements.",
}
err := saveUpdateInfo("./example/path", info)
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Println("UpdateInfo saved successfully.")
}
loadedInfo, err := LoadUpdateInfo("./example/path")
if err != nil {
fmt.Println("Error:", err)
} else {
fmt.Printf("Loaded UpdateInfo: %+v\n", loadedInfo)
}
}