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 main

import (
	"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 OK
                    Content-Length: 59
                    Content-Type: application/json; charset=utf-8
                    Date: 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
posted @ 2026-04-17 17:24  Chuan81  阅读(29)  评论(0)    收藏  举报