新闻中心
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删除商品
I-Shop购物系统
部分功能简介:商品收藏夹功能热门商品最新商品分级价格功能自选风格打印结算页面内部短信箱商品评论增加上一商品,下一商品功能增强商家提示功能友情链接用户在线统计用户来访统计用户来访信息用户积分功能广告设置用户组分类邮件系统后台实现更新用户数据系统图片设置模板管理CSS风格管理申诉内容过滤功能用户注册过滤特征字符IP库管理及来访限制及管理压缩,恢复,备份数据库功能上传文件管理商品类别管理商品添加/修改/
0
查看详情
func AddProduct(name string, price float64, quantity int) {
product := Product{
ID: nextID,
Name: name,
Price: price,
Quantity: quantity,
}
products = append(products, product)
nextID++
}
<p>func GetAllProducts() []Product {
return products
}</p><p>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
}</p><p>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
}</p>3. 构建命令行交互界面
为了让用户能方便地使用系统,我们添加一个简单的菜单驱动的交互逻辑。
func showMenu() {
fmt.Println("\n--- 商品管理系统 ---")
fmt.Println("1. 添加商品")
fmt.Println("2. 查看所有商品")
fmt.Println("3. 修改商品")
fmt.Println("4. 删除商品")
fmt.Println("5. 退出")
fmt.Print("请选择操作: ")
}
<p>func main() {
scanner := bufio.NewScanner(os.Stdin)
for {
showMenu()
scanner.Scan()
choice := scanner.Text()</p><pre class='brush:php;toolbar:false;'> 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如何实现简单的商品管理系统_Golang 商品管理系统实践的详细内容,更多请关注其它相关文章!
# 商品管理系统
# js
# json
# go
# app
# csv
# ai
# golang
# 命令行
# 湛江机电seo优化托管
# 抖音SEO运营推广工具
# 长寿seo整站优化报价
# 未找到
# 该商品
# 如何使用
# 全局变量
# 请输入
# 购物系统
# 数据结构
# 如何实现
# 管理系统
# csv文件
# rest api
# switch
# 南宁本地seo方案
# 宜春优化seo
# 商丘网站建设模板
# 花西子网络营销推广方案
# 博客搜索网站建设主题
# 用seo网站排名
# SeO2氧化缩环
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
c++ 命名空间怎么用 c++ namespace使用指南
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
AO3官方可用镜像 Archive of Our Own网页版最新入口
漫蛙漫画官方首页 漫蛙2漫画在线阅读入口
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
生成rdflib自定义SPARQL函数:参数匹配与实践指南
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
铁路12306官网网页端快速入口 铁路12306官方首页登录教程
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
c++中的std::basic_string的SSO优化_c++短字符串优化深度解析
Mac怎么查看崩溃日志_Mac控制台错误报告分析
汽车之家官方网站官网入口_汽车之家网页版直接进入
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
浏览器打开即用 美图秀秀网页版入口
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
知音漫客正版漫画平台_知音漫客官网账号登录
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
小米Civi 4录制视频过暗_小米Civi 4亮度优化
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
J*aScript实现单选按钮与关联输入框的联动禁用教程
PHP 枚举:根据字符串获取枚举案例的策略与实现
怎样把文件彻底粉碎无法恢复_Windows下安全删除敏感数据【隐私保护】
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践
汽水音乐网页版使用入口_汽水音乐电脑版播放指南
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
Lar*el 8 多关键词数据库搜索优化实践
c++项目目录结构应该如何组织_c++工程化项目结构规范
蛙漫漫画免费阅读入口_蛙漫官方正版无广告纯净版
深入理解Promise链:如何在catch后中断then的执行
sublime怎么格式化代码_sublime代码美化与一键排版插件配置
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】
J*aScript中如何高效提取对象指定属性
Excel Power Pivot如何处理XML数据源 构建高级数据模型
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
解决Python单元测试中Mock异常方法调用计数为零的问题
必由学官网快捷入口 必由学网页版在线学习平台
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
葱吃多了会怎样 葱吃多了会伤胃吗
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
mcjs网页版在线存档 mcjs云存档登录入口
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】


2025-11-26
浏览次数:次
返回列表
)
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("⚠️ 无效选择,请重试")
}
}