Go库存管理系统用Item和Inventory结构体建模,map实现O(1)查找,封装AddItem、UpdateStock等方法确保数据一致性与边界检查,支持JSON文件原子化持久化及命令行交互。
在 Go 语言中构建简易库存管理系统,核心是用结构体建模商品、用 map 或切片管理集合、配合增删改查逻辑实现基础库存控制。不需要框架,纯标准库即可完成,重点在于数据一致性与操作边界检查。
用结构体清晰表达商品属性和库存状态,避免裸用 map[string]interface{}:
map[string]*Item 实现 O(1) 查找,同时封装所有业务方法示例:
type Item struct {
ID string `jso
n:"id"`
Name string `json:"name"`
Stock int `json:"stock"`
MinStock int `json:"min_stock,omitempty"`
}
type Inventory struct {
items map[string]*Item
}
所有修改都通过 Inventory 的方法进行,确保逻辑集中、便于校验:
关键细节:出库前必须判断 item.Stock + delta ,避免负库存;更新后建议返回更新后的 Item 指针,方便链式调用或日志记录。
不依赖数据库时,用本地 JSON 文件保存状态,启动时加载、变更后写回:
json.MarshalIndent 写入可读格式,便于人工核对inventory.json.tmp),再原子重命名,防止写断导致数据损坏示例保存逻辑片段:
func (inv *Inventory) SaveToFile(filename string) error {
data, _ := json.MarshalIndent(inv.items, "", " ")
tmp := filename + ".tmp"
if err := os.WriteFile(tmp, data, 0644); err != nil {
return err
}
return os.Rename(tmp, filename)
}
用 flag 或 fmt.Scanln 快速验证逻辑,例如:
go run main.go add --id=SKU001 --name="无线耳机" --stock=50go run main.go sell --id=SKU001 --qty=3go run main.go list 输出当前全部商品及库存无需 Web 界面也能完成日常维护,适合小团队或嵌入设备场景。后续如需扩展,可将 CLI 替换为 HTTP API(用 net/http),结构体与核心逻辑完全复用。