当前位置: 首页 > news >正文

1--项目初始化与第一个HTTP引擎

一. Go项目模块的初始化

因为这是一个 Go 项目,我们需要开启并初始化 Go Modules,这是 Go 管理依赖的核心机制。请将 your_username 替换为你的 GitHub 或 Gitee 用户名:

bash

go mod init github.com/your_username/secgo-mall

执行后,项目根目录会生成一个 go.mod 文件,它将记录你后续引入的所有第三方依赖版本。

二. 规划标准化的项目目录骨架

商城系统通常业务复杂且迭代频繁,因此在一开始就采用业内流行的 Go Standard Project Layout(Go 标准项目布局) 会非常有帮助。我们在根目录下创建一些核心分层目录:

mkdir -p cmd/secgo-mall
mkdir -p internal/api/handlers 
mkdir -p internal/service 
mkdir -p internal/repository 
mkdir -p internal/model 
mkdir -p pkg/utils 
mkdir configs

这里为你简单梳理一下这些目录的职责划分:

  • cmd/:项目的启动入口。主程序 main.go 会放在 cmd/secgo-mall/ 下。
  • internal/:私有业务逻辑代码(Go 编译器会限制外部项目导入此目录下的包,保证业务代码的封装性)。
    • model/:数据模型(如数据库表的结构体定义)。
    • repository/:数据访问层(封装所有与 MySQL、Redis 等数据库交互的逻辑)。
    • service/:核心业务逻辑层(如处理订单生成、库存扣减等逻辑)。
    • api/handlers/:HTTP 路由控制器(接收前端请求、参数校验并调用 Service 层处理)。
  • pkg/:可被外部项目安全复用的公共组件包(如加密解密算法、分布式锁工具等)。
  • configs/:存放项目的配置文件及读取配置的代码。

三. 编写你的第一段启动代码

有了骨架,我们先在 cmd/secgo-mall/main.go 中写一个最基础的入口文件,跑通项目服务。在这个例子中,我们引入目前 Go 生态中最主流的 Web 框架 Gin 作为 HTTP 引擎。

首先,在终端中下载 Gin 依赖:

go get -u github.com/gin-gonic/gin

然后,创建 cmd/secgo-mall/main.go 文件,并写入以下基础代码:

package mainimport ("log""net/http""github.com/gin-gonic/gin"
)func main() {// 创建一个带默认中间件(Logger 和 Recovery)的路由引擎r := gin.Default()// 注册一个健康检查的路由,用来测试服务是否正常运行r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong","service": "Secgo-Mall is up and running!",})})log.Println("Secgo-Mall server is starting on port 8080...")// 启动服务,默认监听在 0.0.0.0:8080 端口if err := r.Run(":8080"); err != nil {log.Fatalf("Failed to start server: %v", err)}
}

现在,测试一下你的代码能否正常跑起来:

go run cmd/secgo-mall/main.go

打开浏览器,或者新建一个终端窗口使用 curl http://localhost:8080/ping 命令。如果能看到类似 {"message":"pong","service":"Secgo-Mall is up and running!"} 的返回,说明我们的基础底座已经搭建成功了!

PS C:\Users\Chuan81> curl http://localhost:8080/ping                                                                    StatusCode        : 200
StatusDescription : OK
Content           : {"massage":"pong","service":"secgo-mall is up and running"}
RawContent        : HTTP/1.1 200 OKContent-Length: 59Content-Type: application/json; charset=utf-8Date: Fri, 10 Apr 2026 06:53:20 GMT{"massage":"pong","service":"secgo-mall is up and running"}
Forms             : {}
Headers           : {[Content-Length, 59], [Content-Type, application/json; charset=utf-8], [Date, Fri, 10 Apr 2026 06:53:20 GMT]}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 59
http://www.jsqmd.com/news/656545/

相关文章:

  • Lattice Planner实战避坑指南:从Frenet坐标推导到参考线平滑,我的实车调试血泪史
  • 2026届最火的六大AI辅助论文神器推荐
  • 影墨·今颜惊艳效果:毛孔级细节+自然反射光真实人像生成展示
  • 告别重复点击:FGO-py如何用智能自动化解放你的双手
  • STM32硬件IIC实战:深入解析AT24C08 EEPROM的页写与跨页存储策略
  • 实战解析:如何运用GEMMA的LMM模型整合PCA与协变量进行高效GWAS分析
  • Windows多机MPI集群搭建避坑全记录:从账户同步到防火墙配置(基于MPICH2)
  • 别再手动填表了!JIRA新建问题单的5个高效技巧与隐藏功能(附自定义字段配置)
  • 【敏捷团队效率跃迁指南】:智能代码生成如何将迭代周期压缩47%并降低32%返工率?
  • Locale Remulator终极指南:Windows 11系统区域模拟完整解决方案
  • 如何利用Upscayl的GPU加速技术实现AI图像超分:完整指南
  • Python-for-Android架构解析:跨平台Python应用编译原理与性能对比
  • 革命性深度学习平台DIGITS:5分钟快速入门GPU训练系统
  • 数据库容灾方案
  • 如何快速部署NeatLogic ITOM:一站式IT运维管理解决方案
  • Element UI 时间选择器实战:从 el-time-picker 到 el-time-select 的进阶应用
  • 八大网盘直链解析工具:告别下载限速,轻松获取高速下载地址
  • OmenSuperHub终极指南:深度解锁惠普暗影精灵性能潜能
  • 基于FPGA进位链的TDC高精度延时链设计与实现
  • 《Linux运维总结:基于Ubuntu22.04操作系统+x86_64架构CPU二进制部署单机TLS/ACL版consul v1.18.1》
  • 微信数据解密终极指南:5步掌握PyWxDump从入门到实战
  • 别再手动敲编码了!用Naki.CI插件5分钟搞定PDMS材料编码(附避坑指南)
  • 2026年理料装盒线厂家推荐排行:食品、宠物食品、生物药业等多领域理料装盒线优质品牌之选! - 速递信息
  • 别再死记硬背了!用Wireshark抓包实战,5分钟搞懂子网内外通信的MAC地址变化
  • 2026 年鞍山新能源汽车贴膜全攻略:避坑指南与专业选择 - GrowthUME
  • 5个实用技巧:如何使用rails_best_practices统一团队Rails代码风格
  • Git-RSCLIP新手必看:3步提升遥感图像分类精度(附模板)
  • 2026年04月变压器焊接机器人优选厂家,口碑见证实力,光伏支架焊接机器人,变压器焊接机器人供应商哪家权威 - 品牌推荐师
  • AcousticSense AI从零开始:搭建视觉化音频分析工作站完整指南
  • 如何在Kompute中编写和编译GLSL着色器:完整教程