首先定义商品结构体,包含ID、名称、价格和库存;接着用切片存储商品并实现增删改查函数;然后通过命令行菜单交互,用户可选择功能操作商品;最后程序支持添加、查看、修改、删除商品并退出。1. 结构体设计清晰,2. 功能封装良好,3. 交互简洁易用,4. 便于扩展持久化与错误处理,适合Golang初学者学习基础语法与程序组织。
用Golang实现一个简单的商品管理系统,重点在于结构清晰、接口简洁、便于扩展。本文带你从零开始搭建一个基于命令行的商品管理程序,涵盖商品的增删改查功能,适合初学者理解Golang的基本语法和程序组织方式。
首先,我们需要定义一个表示商品的数据结构。每个商品包含ID、名称、价格和库存等基本信息。
type Product struct {
ID int
Name string
Price float64
Quantity int
}
这个结构体是系统的核心数据模型,后续所有操作都围绕它展开。
我们可以创建一个切片来存储商品列表,并封装一组方法来
操作这些数据。
定义一个全局变量或结构体来持有商品数据:
var products []Product var nextID = 1
接下来实现四个基本操作:
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
}
为了让用户能方便地使用系统,我们添加一个简单的菜单驱动的交互逻辑。
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. 运行与优化建议
运行程序后,你可以通过输入数字选择对应功能,完成商品管理的基本流程。
虽然当前版本使用内存存储,但可以进一步改进:
基本上就这些。这个小项目涵盖了结构体、切片、函数、控制流和用户输入处理,是学习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
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。