repositorypackage
0.0.0-20250116134049-b1d6fde35e43
Repository: https://github.com/ulysses-xu/go-dbf.git
Documentation: pkg.go.dev
# README
GO-DBF
功能
- 新建并保存dbf文件
- 从现有DBF文件中加载
- 将model写入到文件
- 单条查询
- 批量查询
- 获取记录数
- 重新加载
- 支持软删除
- 缓存并通过索引构建数据加速查询、过滤
安装
go get
Demo
初始化
// 先定义一个与dbf列对应的结构体
type DBFRecord struct {
OrderType string `dbf:"order_type"`
PriceType string `dbf:"price_type"`
ModePrice float32 `dbf:"mode_price"`
StockCode string `dbf:"stock_code"`
Volume int `dbf:"volume"`
AccountID string `dbf:"account_id"`
ActType string `dbf:"act_type"`
BrokerType string `dbf:"brokertype"`
Strategy string `dbf:"strategy"`
Note string `dbf:"note"`
TradeParam string `dbf:"tradeparam"`
InsertTime string `dbf:"inserttime"`
BasketPath string `dbf:"basketpath"`
}
// 初始化
func main() {
fileName := "./data/XT_DBF_ORDER.dbf"
dbf, err := NewDBFFromFile(fileName, "utf-8", &DBFRecord{})
}
新增一条数据
func main() {
fileName := "./data/XT_DBF_ORDER.dbf"
dbf, err := NewDBFFromFile(fileName, "utf-8", &DBFRecord{})
if err != nil {
t.Fatalf("init failed %v", err)
}
r := DBFRecord{
OrderType: "23",
PriceType: "3",
ModePrice: 2.35,
StockCode: "000001",
Volume: 100,
AccountID: "000001",
ActType: "49",
BrokerType: "2",
}
err = dbf.Append(&r)
}
查询单条数据
func main() {
fileName := "./data/XT_DBF_ORDER.dbf"
dbf, err := NewDBFFromFile(fileName, "utf-8", &DBFRecord{})
if err != nil {
t.Fatalf("init failed %v", err)
}
r := DBFRecord{}
// 读取第一条数据
err = dbf.GetRecord(0, &r)
if err != nil {
t.Fatalf("read failed %v", err)
}
fmt.Printf("DBF Record: %+v\n", r)
}
查询多条数据
func main() {
fileName := "./data/XT_DBF_ORDER.dbf"
dbf, err := NewDBFFromFile(fileName, "utf-8", &DBFRecord{})
if err != nil {
t.Fatalf("init failed %v", err)
}
// 从474开始读到末尾
rs := make([]DBFRecord, dbf.NumRecords()-474)
err = dbf.GetRecords(474, dbf.header.NumRecords, &rs, 1)
if err != nil {
t.Fatalf("read failed %v", err)
}
}