核心知识点

  1. json配置文件解析成结构体
  2. 将路由对应的接口抽离到单独的文件中,main函数中直接注册路由即可

项目目录图

项目代码

  • app.json代码
{
"app_name": "cloudRestaurant",
"app_mode": "debug",
"app_host": "127.0.0.1",
"app_port": "8000"
}
  • Config.go代码,解析配置文件到结构体
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) // 注意:要将和json对应的结构体指针传进来,而不是结构体对象
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",
})
}
  • main.go文件
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)
}

最新文章

  1. 自动生成数据库字典(sql2008)
  2. 解决Android studio首次启动gradle无法下载jar包
  3. bind搭建(二)反向解析
  4. (求助大牛)关于vs2010上的AVS代码bug问题~~
  5. Spring MVC PageNotFound.noHandlerFound No mapping found for HTTP request with URI
  6. bzoj2741(分块+可持久化Trie)
  7. 京东金融集团BD部门招聘 BD经理
  8. jsp与servlet联合处理
  9. IntelliJ IDEA 2017.3.1安装步骤
  10. GET vs. POST
  11. Codeforces 570E - Pig and Palindromes - [滚动优化DP]
  12. spring cloud/spring boot同时支持http和https访问
  13. Linux按照时间顺序列出文件
  14. mongodb 如何删除 字段值为 json对象中的某个字段值
  15. Java入门:练习——自定义通用工具类
  16. FireDAC 汉字字段名称过滤
  17. js基础(闭包实例)
  18. cmd连接mysql操作命令
  19. Xcode9出现错误safe area layout guide before ios 9 真正解决办法
  20. QPS、PV和需要部署机器数量计算公式

热门文章

  1. Centos 查询端口被占用命令
  2. Linux(Centos)配置vsftp使用账号密码(虚拟用户)登录ftp进行文件上传和修改
  3. 【LeetCode】42. Trapping Rain Water 接雨水 (C++)
  4. 【LeetCode】109. Convert Sorted List to Binary Search Tree 解题报告(Python)
  5. 【授课录屏】JavaScript高级(IIFE、js中的作用域、闭包、回调函数和递归等)、MySQL入门(单表查询和多表联查)、React(hooks、json-server等) 【可以收藏】
  6. MySQL 的性能
  7. eclipse的安装及最大子数组求和
  8. CycleGAN
  9. MQ消费失败,自动重试思路
  10. 编写Java程序,使用JTable表格组件展现人员信息列表