关于Go的环境配置
笔者的go版本是1.19.5
创建Gin项目
Gin官方为我们提供了参考文档。学习地址如下:gin-gonic.com/zh-cn/docs/
下载之前配置好国内的代理
GOPROXY=https://goproxy.cn,direct
下载gin
go get -u github.com/gin-gonic/gin
完成下载后,在go.mod中可以看到增加了新的依赖
engineConfig.json
{
"engine_name": "socialnetwork_back_go",
"engine_mode": "debug",
"engine_host": "localhost",
"engine_port": "3000"
}
需要再在utils中增加一个解析函数
type Config struct {
EngineName string `json:"engine_name"`
EngineMode string `json:"engine_mode"`
EngineHost string `jsom:"engine_host"`
EnginePort string `json:"engine_port"`
}
var _cfg *Config = nil
func ParseConfig(path string) (*Config, error) {
file, err := os.Open(path)
if err != nil {
panic(err)
}
defer file.Close()
reader := bufio.NewReader(file)
decoder := json.NewDecoder(reader)
decoder.Decode(_cfg)
if err = decoder.Decode(&_cfg); err != nil { //参数时interfece类型,参数需要传入地址
return nil, err
}
return _cfg, nil
}
配置路由router
func InitRouter(r *gin.Engine) {
// public directory is used to serve static resources
r.Static("/static", "./static")
r.GET("/test/", controller.Test)
}
main.go中增加
// 初始化路由
router.InitRouter(engine)
解决跨域问题
main.go内增加
func main() {
// 设置跨域
engine.Use(Cors())
}
// 跨域访问
func Cors() gin.HandlerFunc {
return func(context *gin.Context) {
method := context.Request.Method
origin := context.Request.Header.Get("Origin")
var headerKeys []string
for key, _ := range context.Request.Header {
headerKeys = append(headerKeys, key)
}
headerStr := strings.Join(headerKeys, ",")
if headerStr != "" {
headerStr = fmt.Sprintf("access-control-allow-origin, access-control-allow-headers, %s", headerStr)
} else {
headerStr = "access-control-allow-origin, access-control-allow-headers"
}
if origin != "" {
context.Writer.Header().Set("Access-Control-Allow-Origin", "*")
context.Writer.Header().Set("Access-Control-Allow-Methods", "*")
context.Writer.Header().Set("Access-Control-Allow-Headers", "*")
context.Writer.Header().Set("Access-Control-Max-Age", "3600")
context.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
//context.Set("content-type", "application/json") // 设置返回格式是json
}
if method == "OPTIONS" {
context.JSON(http.StatusOK, "Options Request!")
} else {
// 处理请求
context.Next()
}
}
}
完整的main.go内容
func main() {
//解析配置文件
cfg, err := utils.ParseConfig("./config/engineConfig.json")
if err != nil {
panic(err.Error())
}
engine := gin.Default()
// 初始化路由
router.InitRouter(engine)
// 设置跨域
engine.Use(Cors())
// 运行web服务
pprof.Register(engine)
// EngineHost是项目的运行地址, EnginePort是项目运行的端口
engine.Run(cfg.EngineHost + ":" + cfg.EnginePort)
}
运行项目
终端执行
go run main.go
测试项目的运行
通过Apifox发送Get请求成功获得响应