核心知识点
- json配置文件解析成结构体
- 将路由对应的接口抽离到单独的文件中,main函数中直接注册路由即可
项目目录图

项目代码
{
"app_name": "cloudRestaurant",
"app_mode": "debug",
"app_host": "127.0.0.1",
"app_port": "8000"
}
package tool
import (
"bufio"
"encoding/json"
"fmt"
"os"
)
type Config struct {
AppName string `json:"app_name"`
AppMode string `json:"app_mode"`
AppHost string `json:"app_host"`
AppPort string `json:"app_port"`
}
var _cfg Config
func ParseConfig(path string) (*Config, error) {
file, err := os.Open(path)
if err != nil {
panic(err.Error())
}
defer file.Close()
reader := bufio.NewReader(file)
decoder := json.NewDecoder(reader)
err = decoder.Decode(&_cfg)
if err != nil {
fmt.Println(err.Error())
return nil, err
}
return &_cfg, nil
}
- HelloController.go文件,接口写在这里面
package controller
import (
"github.com/gin-gonic/gin"
"net/http"
)
type HelloController struct {}
func (h *HelloController) Router(engine *gin.Engine) {
engine.GET("/hello", h.Hello)
engine.POST("/hello", h.HelloP)
}
func(h *HelloController) HelloP(ctx *gin.Context) {
ctx.Writer.Write([]byte("post hello"))
}
func(h *HelloController) Hello(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{
"msg": "OK",
})
}
package main
import (
"CloudRestaurant/controller"
"CloudRestaurant/tool"
"fmt"
"github.com/gin-gonic/gin"
)
var (
config *tool.Config
)
func init() {
var err error
config, err = tool.ParseConfig("./config/app.json")
if err != nil {
fmt.Println(err.Error())
}
}
func main() {
app := gin.Default()
registerRouter(app)
app.Run(config.AppHost + ":" + config.AppPort)
}
func registerRouter(router *gin.Engine) {
new(controller.HelloController).Router(router)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)