Golang如何实现简单的商品管理系统_Golang 商品管理系统实践


首先定义商品结构体,包含ID、名称、价格和库存;接着用切片存储商品并实现增删改查函数;然后通过命令行菜单交互,用户可选择功能操作商品;最后程序支持添加、查看、修改、删除商品并退出。1. 结构体设计清晰,2. 功能封装良好,3. 交互简洁易用,4. 便于扩展持久化与错误处理,适合Golang初学者学习基础语法与程序组织。

用Golang实现一个简单的商品管理系统,重点在于结构清晰、接口简洁、便于扩展。本文带你从零开始搭建一个基于命令行的商品管理程序,涵盖商品的增删改查功能,适合初学者理解Golang的基本语法和程序组织方式。

1. 定义商品结构体

首先,我们需要定义一个表示商品的数据结构。每个商品包含ID、名称、价格和库存等基本信息。

type Product struct {
    ID       int
    Name     string
    Price    float64
    Quantity int
}

这个结构体是系统的核心数据模型,后续所有操作都围绕它展开。

2. 实现商品管理功能

我们可以创建一个切片来存储商品列表,并封装一组方法来操作这些数据。

定义一个全局变量或结构体来持有商品数据:

var products []Product
var nextID = 1

接下来实现四个基本操作:

  • AddProduct:添加新商品,自动生成ID
  • GetAllProducts:获取所有商品列表
  • UpdateProduct:根据ID更新商品信息
  • DeleteProduct:根据ID删除商品

func AddProduct(name string, price float64, quantity int) {
    product := Product{
        ID:       nextID,
        Name:     name,
        Price:    price,
        Quantity: quantity,
    }
    products = append(products, product)
    nextID++
}

func GetAllProducts() []Product { return products }

func UpdateProduct(id int, name string, price float64, quantity int) bool { for i := range products { if products[i].ID == id { products[i].Name = name products[i].Price = price products[i].Quantity = quantity return true } } return false }

func DeleteProduct(id int) bool { for i, p := range products { if p.ID == id { products = append(products[:i], products[i+1:]...) return true } } return false }

3. 构建命令行交互界面

为了让用户能方便地使用系统,我们添加一个简单的菜单驱动的交互逻辑。

func showMenu() {
    fmt.Println("\n--- 商品管理系统 ---")
    fmt.Println("1. 添加商品")
    fmt.Println("2. 查看所有商品")
    fmt.Println("3. 修改商品")
    fmt.Println("4. 删除商品")
    fmt.Println("5. 退出")
    fmt.Print("请选择操作: ")
}

func main() { scanner := bufio.NewScanner(os.Stdin) for { showMenu() scanner.Scan() choice := scanner.Text()

    switch choice {
    case "1":
        fmt.Print("名称: ")
        scanner.Scan()
        name := scanner.Text()
        fmt.Print("价格: ")
        scanner.Scan()
        price, _ := strconv.ParseFloat(scanner.Text(), 64)
        fmt.Print("数量: ")
        scanner.Scan()
        quantity, _ := strconv.Atoi(scanner.Text())
        AddProduct(name, price, quantity)
        fmt.Println("✅ 商品添加成功!")

    case "2":
        ps := GetAllProducts()
        fmt.Printf("\n%-5s %-15s %-10s %-8s\n", "ID", "名称", "价格", "库存")
        for _, p := range ps {
            fmt.Printf("%-5d %-15s %-10.2f %-8d\n", p.ID, p.Name, p.Price, p.Quantity)
        }

    case "3":
        fmt.Print("请输入要修改的商品ID: ")
        scanner.Scan()
        id, _ := strconv.Atoi(scanner.Text())
        fmt.Print("新名称: ")
        scanner.Scan()
        name := scanner.Text()
        fmt.Print("新价格: ")
        scanner.Scan()
        price, _ := strconv.ParseFloat(scanner.Text(), 64)
        fmt.Print("新数量: ")
        scanner.Scan()
        quantity, _ := strconv.Atoi(scanner.Text())
        if UpdateProduct(id, name, price, quantity) {
            fmt.Println("✅ 商品更新成功!")
        } else {
            fmt.Println("❌ 未找到该商品")
        }

    case "4":
        fmt.Print("请输入要删除的商品ID: ")
        scanner.Scan()
        id, _ := strconv.Atoi(scanner.Text())
        if DeleteProduct(id) {
            fmt.Println("✅ 商品删除成功!")
        } else {
            fmt.Println("❌ 未找到该商品")
        }

    case "5":
        fmt.Println("? 退出系统")
        return

    default:
        fmt.Println("⚠️ 无效选择,请重试")
    }
}

}

4. 运行与优化建议

运行程序后,你可以通过输入数字选择对应功能,完成商品管理的基本流程。

虽然当前版本使用内存存储,但可以进一步改进:

  • 将数据持久化到JSON或CSV文件中
  • 使用SQLite数据库存储商品信息
  • 改为HTTP服务提供REST API接口
  • 加入输入校验和错误处理

基本上就这些。这个小项目涵盖了结构体、切片、函数、控制流和用户输入处理,是学习Golang实践的好起点。不复杂但容易忽略细节,比如ID去重和边界检查,实际开发中需要更严谨。


# golang  # js  # json  # go  # app  # csv  # ai  # switch  # rest api  # csv文件  # 封装  # 全局变量  # 结构体  # 数据结构  # 接口  # 切片  # sqlite  # 数据库  # http  # 命令行  # 管理系统  # 请输入  # 该商品  # 未找到  # 你可以  # 我们可以  # 请选择  # 易用 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: c++ std::future和std::promise c++线程间通信【教程】  手机php怎么转mp4_手机端php文件转mp4app推荐【指南】  Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选  MAC怎么解压RAR格式文件_MAC第三方解压工具安装与压缩包管理【教程】  Windows11如何设置专注助手_Windows11专注助手使用攻略【技巧】  Python如何创建带属性的XML节点  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Drupal 中 HTML 链接被双重转义导致渲染异常的解决方案  PHP主流架构怎么部署到Docker_容器化流程【操作】  Win11怎么快速锁屏_Win11一键锁屏快捷键Win+L【基础】  Python对象比较与排序_魔术方法解析【教程】  Win11怎么退出高对比度模式_Win11取消反色显示快捷键【修复】  Go 中的 := 运算符:类型推导机制与使用边界详解  Win11怎么设置默认邮件应用_Windows11应用关联Mail设置  如何在 Go 结构体中正确初始化 map 字段  Win11怎么设置屏保_Windows 11屏幕保护程序开启与设置【详解】  Win11怎么自动隐藏任务栏_Win11全屏显示设置【美化】  如何正确访问 Laravel 模型或对象的属性而非调用不存在的方法  Win11无法识别耳机怎么办_解决Win11插耳机没声音问题【步骤】  php删除数据怎么清空表_truncate与delete区别及用法【汇总】  Win11怎么关闭任务栏小图标_Windows11任务栏角溢出设置  Mac如何修改Hosts文件?(本地开发与屏蔽网站)  c++如何连接Redis c++ hiredis库使用教程【指南】  Win11怎么设置任务栏对齐方式_Windows11个性化任务栏行为  PythonFastAPI项目实战教程_API接口与异步处理实践  如何在 Go 后端安全获取并验证前端存储的 JWT?  c++怎么操作redis数据库_c++ hiredis库连接与命令执行【实战】  如何在Golang中写入XML文件_生成符合规范的XML数据  如何使用Golang实现路由分组管理_Golang路由分组与权限控制方法  如何使用Golang实现云原生应用弹性伸缩_自动应对流量变化  如何使用Golang包导出规则_控制函数和变量可见性  Windows资源管理器总是卡顿或重启怎么办?(修复方法)  Win10如何卸载Skype_Win10卸载Skype步骤【步骤】  Win11怎样安装网易云音乐_Win11安装网易云教程【步骤】  c++中的std::conjunction和std::disjunction是什么_c++模板元编程逻辑运算【C++17】  Python文件管理规范_工程实践说明【指导】  Win11怎么设置虚拟键盘_打开Win11屏幕键盘操作指南【技巧】  php查询数据怎么导出csv_查询结果转csv文件保存【操作】  php修改数据怎么改富文本_update更新html内容注意事项【说明】  MAC怎么设置程序窗口永远最前_MAC窗口置顶插件安装与快捷设置【方法】  Win11怎么设置环境变量_Win11配置Path路径变量【详解】  Win11如何设置省电模式 Win11开启电池节电功能【优化】  php订单日志怎么记录物流_php记录订单物流变更日志指南【指南】  php订单日志怎么记录发货_php记录订单发货操作日志指南【指南】  Windows服务无法启动错误1067是什么_进程意外终止的解决方法  c++ namespace命名空间用法_c++避免命名冲突  Python函数参数高级用法_默认值与可变参数解析【教程】  php中常量能用::访问吗_类常量与作用域操作符使用场景【汇总】  Win11任务栏怎么放到顶部_Win11修改任务栏位置方法【详细】  Golang如何实现基本的用户注册_Golang用户注册表单处理示例 

 2025-11-26

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.