go项目配置多开发环境 gin框架

开发一个项目是,需要线上、本地、测试环境切换,go的多环境项目搭建

创建多个环境的配置文件 yaml

在这里插入图片描述

创建了三个常用的环境

配置文件内容

runMode: debug
server:
  HTTPPort: 8080
  readTimeout: 10
  writeTimeout: 10
database:
  type: mysql
  user: root
  password: ceshi
	host: 0.0.0.0
  dbName: ceshi
redis:
  host: localhost
  password: 
log:
  path: logs/
  prefix: log_

获取配置文件

go项目配置多开发环境 gin框架_第1张图片

创建setting.go 文件,包名setting

获取yaml 使用第三方开源包 go get gopkg.in/yaml.v2

Setting.go 内容:

package setting

import (
	"gopkg.in/yaml.v2"
	"io/ioutil"
	"os"
	"time"
)

//相应设置配置
type Setting struct {
	RunMode string `yaml:"runMode"`
	Server server `yaml:"server"`
	Database database `yaml:"database"`
	Log log `yaml:"log"`
}

//服务配置
type server struct {
	HTTPPort     int           `yaml:"HTTPPort"`
	ReadTimeout  time.Duration `yaml:"readTimeout"`
	WriteTimeout time.Duration `yaml:"writeTimeout"`
}

//数据库配置
type database struct {
	Type     string `yaml:"type"`
	User     string `yaml:"user"`
	Password string `yaml:"password"`
	Host     string `yaml:"host"`
	DBName   string `yaml:"dbname"`
}

var conf = &Setting{}

//初始化方法
func InitSetting() {

	yamlFile, err := ioutil.ReadFile("etc/" + os.Getenv("ENV") + ".yaml")
	if err != nil {
		// 错误处理
	}

	err = yaml.Unmarshal(yamlFile, config)
	if err != nil {
		获取错误处理
	}
}

//获取配置  外部调用使用
func Conf() *Setting  {
	return config;
}
判断获取哪个配置文件   `ioutil.ReadFile("sss/" + os.Getenv("ENV") + ".yaml"`  os.Getenv("ENV") 获取当前环境下环境变量ENV的值。

ENV 哪里来的? 这是我个人加入到当前环境中的,我使用docker构建的go 开发环境,在docker的yml 文件中加入了环境变量

go项目配置多开发环境 gin框架_第2张图片

  • 这样就根据环境加载相应的配置文件了

配置文件使用 main.go 中举例

package main

import (
   "fmt"
   "gitee.com/phpjin/go_gin/conf"
   "gitee.com/phpjin/go_gin/routers"
   "net/http"
)

func main() {
   go func() {
      err := http.ListenAndServe("0.0.0.0:8084", nil)
      fmt.Println(err)
   }()

   //初始化路由
   router := routers.InitRouter()

   s := &http.Server{
      Addr:           fmt.Sprintf("0.0.0.0:%d",conf.Seting().Server.HTTPPort), 
      Handler:        router,
      ReadTimeout:    conf.Seting().Server.ReadTimeout, //使用相应的变量
      WriteTimeout:   conf.Seting().Server.WriteTimeout,
      MaxHeaderBytes: 1 << 20,
   }

   //启动
   if err := s.ListenAndServe(); err != nil {
      fmt.Println(err)
   }
}

你可能感兴趣的:(go语言,gin框架)