广告
返回顶部
首页 > 资讯 > 后端开发 > GO >go项目中环境变量的配置
  • 538
分享到

go项目中环境变量的配置

2024-04-02 19:04:59 538人浏览 八月长安
摘要

目录一、为什么要配置文件二、在Go中使用配置文件三、使用结构体的方式读取四、区分开发环境和生产环境五、在gin中集成配置文件一、为什么要配置文件 1、容易编辑,配置比较集中,方便修改

一、为什么要配置文件

1、容易编辑,配置比较集中,方便修改,在大业务量的系统里面,通过配置会方便后人理解整个系统的架构
2、做到业务代码和环境解耦,环境配置变量不侵入到代码层面
3、不同的环境切换比较方便

二、在go中使用配置文件

1、viper网站地址

2、本地安装


go get GitHub.com/spf13/viper

3、简单的读取配置文件


package main

import (
 "fmt"
 "github.com/spf13/viper"
)

func main() {
 v := viper.New()
 v.SetConfigFile("config.yaml")
 if err := v.ReadInConfig(); err != nil {
  fmt.Println("读取配置文件失败", err)
 }
 fmt.Println(v.Get("name"))
}

4、在文件的同级下创建一个config.yaml的文件


name: "test"

5、使用go run 文件名运行文件,这样直接运行会报错找不到文件

6、建议配置后可以使用右键运行项目


package main

import (
 "fmt"
 "github.com/spf13/viper"
 "os"
 "path"
)

func main() {
 // 获取项目目录
 workDir, _ := os.Getwd()
 v := viper.New()
  // 直接拼接文件目录读取
 v.SetConfigFile(path.Join(workDir, "test/config.yaml"))
 if err := v.ReadInConfig(); err != nil {
  fmt.Println("读取配置文件失败", err)
 }
 fmt.Println(v.Get("name"))
}

三、使用结构体的方式读取

1、简单的使用


package main

import (
 "fmt"
 "github.com/spf13/viper"
 "os"
 "path"
)

type ServerConfig struct {
 Name string `mapstructure:"name"`
}

func main() {
 // 获取项目目录
 workDir, _ := os.Getwd()
 v := viper.New()
 v.SetConfigFile(path.Join(workDir, "test/config.yaml"))
 if err := v.ReadInConfig(); err != nil {
  fmt.Println("读取配置文件失败", err)
 }
 serverConfig := ServerConfig{}
 if err := v.Unmarshal(&serverConfig); err != nil {
  fmt.Println("解析结构体失败", err)
 }
 fmt.Println(serverConfig.Name)
}

2、结构体的嵌套,很常见的是Mysql数据库的配置


// 定义mysql的
type MysqlConfig struct {
 Host string `mapstructure:"host"`
 Port int `mapstructure:"port"`
 Username string `mapstructure:"username"`
 PassWord string `mapstructure:"password"`
}
type ServerConfig struct {
 Name string `mapstructure:"name"`
 // 嵌套使用,注意这个地方要和yaml中一样
 MySqlConfig MySQLConfig `mapstructure:"mysql"`
}

// 直接使用
fmt.Println(serverConfig.MySqlConfig)

四、区分开发环境和生产环境

1、在Mac电脑上配置环境变量,在.bash_profile中导出一个环境变量,注意要关闭goland重新打开


# vim .bash_profile
export IS_DEV= true
source .bash_profile 

2、定义方法直接获取环境变量


func GetEnvInfo(env string) bool {
 viper.AutomaticEnv()
 return viper.GetBool(env)
}
func main() {
 fmt.Println(GetEnvInfo("IS_DEV"))
}

3、在目录下创建一个application.dev.yml和application.prod.yml的文件,分别存放不同环境下的配置

4、使用环境变量来读取配置完整代码


func GetEnvInfo1(env string) bool {
 viper.AutomaticEnv()
 return viper.GetBool(env)
}

// 定义mysql的
type MySQLConfig struct {
 Host string `mapstructure:"host"`
 Port int `mapstructure:"port"`
 Username string `mapstructure:"username"`
 Password string `mapstructure:"password"`
}
type ServerConfig struct {
 Name string `mapstructure:"name"`
 // 嵌套使用,注意这个地方要和yaml中一样
 MySqlConfig MySQLConfig `mapstructure:"mysql"`
}

func main() {
 // 获取项目目录
 workDir, _ := os.Getwd()
 isDev := GetEnvInfo1("IS_DEV")
 configFileName := path.Join(workDir, "11.config/application.prod.yml")
 if isDev {
  configFileName = path.Join(workDir, "11.config/application.dev.yml")
 }
 v := viper.New()
 v.SetConfigFile(configFileName)
 if err := v.ReadInConfig(); err != nil {
  fmt.Println("读取配置文件失败", err)
 }
 serverConfig := ServerConfig{}
 if err := v.Unmarshal(&serverConfig); err != nil {
  fmt.Println("解析结构体失败", err)
 }
 fmt.Println(serverConfig.MySqlConfig)
}

五、在gin中集成配置文件

1、在和main.go同级的目录下创建两个xx.yml的文件

2、目录下创建一个config、global、initialize的文件夹

3、在config/config.go的文件中书写使用结构体读取配置的


package config

// 定义mysql的
type MySQLConfig struct {
 Host string `mapstructure:"host"`
 Port int `mapstructure:"port"`
 Username string `mapstructure:"username"`
 Password string `mapstructure:"password"`
}
type ServerConfig struct {
 Name string `mapstructure:"name"`
 // 嵌套使用,注意这个地方要和yaml中一样
 MySqlConfig MySQLConfig `mapstructure:"mysql"`
}

4、在global/global.go文件中定义全局变量(可能在全项目中某一个文件中需要获取配置)


var (
 ServerConfig *config.ServerConfig = &config.ServerConfig{}
)

5、在initialize/config目录初始化配置


func GetEnvInfo(env string) bool {
 viper.AutomaticEnv()
 return viper.GetBool(env)
}

func InitConfig() {
 workDir, _ := os.Getwd()
 isDev := GetEnvInfo("IS_DEV")
 configFileName := path.Join(workDir, "11.config/application.prod.yml")
 if isDev {
  configFileName = path.Join(workDir, "11.config/application.dev.yml")
 }
 v := viper.New()
 //文件的路径如何设置
 v.SetConfigFile(configFileName)
 if err := v.ReadInConfig(); err != nil {
  panic(err)
 }
 err := v.Unmarshal(&global.ServerConfig)
 if err != nil {
  fmt.Println("读取配置失败")
 }
 fmt.Println(&global.ServerConfig)
}

6、在mian.go中初始化配置文件并且打印出信息


func main() {
 // 初始化配置
 initialize.InitConfig()
 fmt.Println(global.ServerConfig.MySqlConfig)
}

到此这篇关于go项目中环境变量的配置的文章就介绍到这了,更多相关go 环境变量配置内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: go项目中环境变量的配置

本文链接: https://www.lsjlt.com/news/130377.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go项目中环境变量的配置
    目录一、为什么要配置文件二、在go中使用配置文件三、使用结构体的方式读取四、区分开发环境和生产环境五、在gin中集成配置文件一、为什么要配置文件 1、容易编辑,配置比较集中,方便修改...
    99+
    2022-11-12
  • go项目中环境变量的配置方法
    这篇文章主要介绍“go项目中环境变量的配置方法”,在日常操作中,相信很多人在go项目中环境变量的配置方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go项目中环境变量的配置方法”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-20
  • ubuntu如何配置go环境变量
    ubuntu配置go环境变量的方法:下载好的tar解压后,将go文件夹放到/usr/local目录下。在当前用户的.bashrc文件中,添加以下代码并保存修改。export PATH=$PATH:/usr/local/go/bin执行以下命...
    99+
    2022-10-05
  • React项目中动态设置环境变量
    目录使用 dotenv 库1. 安装 dotenv 库2. 创建 .env 文件3. 在项目中使用环境变量通过命令行参数传递环境变量1. 在 package.json 中定义命令2....
    99+
    2023-05-16
    React 动态设置环境变量 React 环境变量
  • Android环境变量&macOS环境变量配置
    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导...
    99+
    2023-10-28
    android macos android studio
  • go语言怎么配置环境变量
    要配置Go语言的环境变量,需要进行以下步骤:1. 下载并安装Go语言的二进制发行版,可以从官方网站(https://golang.o...
    99+
    2023-09-26
    go语言
  • vue项目多租户环境变量的设置
    目录问题策略修改编译命令核心生成文件配置文件总结问题 在vue项目中,在 .env 文件内,以 VUE_APP*开头的变量,可以在项目源码中使用,在编译阶段由编译器静态替换为对应值;...
    99+
    2023-05-16
    vue 多租户环境变量 vue 多租户
  • 配置JDK环境变量
    一、安装JDK及配置环境变量 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次是安装 jdk ,第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。(不能都安装在java文件夹的根目录下,jdk...
    99+
    2023-09-10
    java 前端 服务器 tomcat
  • tomcat环境变量配置
    要配置Tomcat的环境变量,需要执行以下步骤:1. 打开Tomcat的安装目录,找到`bin`文件夹。2. 复制该目录的路径(例如...
    99+
    2023-09-21
    tomcat
  • adb环境变量配置
    关于adb 什么ADB如何配置CMD命令窗口的使用 什么是adb 首先,我们先说说,adb是什么,他的全称叫安卓调试桥,也就是Android debug bridge ,它是连接Windows平台和安卓手机之间的软件调试工具,很适合软件开发...
    99+
    2023-08-16
    adb android
  • maven配置环境变量
    Maven 是一个基于 Java 的工具,所以需要安装 JDK这是前提。 接下来记录下maven配置环境变量 1.maven的安装 下载地址:https://maven.apache.org/download.cgi 或者你也可以点击a...
    99+
    2023-08-30
    maven java spring
  • JDK环境变量配置
    在Windows系统中配置JDK的环境变量,可以按照以下步骤进行:1. 打开电脑的控制面板。2. 点击"系统和安全"。3. 点击"系...
    99+
    2023-09-06
    JDK
  • JDK配置环境变量
    要配置JDK的环境变量,您可以按照以下步骤进行操作:1. 下载并安装JDK:您可以从Oracle官方网站下载适用于您的操作系统的JD...
    99+
    2023-09-13
    JDK
  • linux配置环境变量
    第一种方法.配置全局的环境变量 第一步(非必须):可以输入export命令,查看已有的环境变量 2.第二步:输入 vi /etc/profile 进入配置文件 3.第三步:如果是新增环境变量的话,...
    99+
    2023-09-15
    linux 服务器 运维
  • 配置anaconda环境变量
    conda环境变量的配置 配置环境变量找到anaconda安装位置打开环境变量配置设置输入python命令跳入商店问题 总结 配置环境变量 找到anaconda安装位置 ...
    99+
    2023-09-06
    python 开发语言
  • Java配置环境变量
    先去官网下载对应系统的jdk,下载路径放同一文件路径下,配置JAVA_HOME(表示你的jdk安装路径),配置jdk的根目录(表示对应的jdk安装路径)。 配置Path里的%\JAVA_HOME%\jre\bin运行时环境和开发环境%\JA...
    99+
    2023-08-31
    java 开发语言
  • Mac 配置Java 环境变量
    首先先下载jdk11,然后安装下载好的jdk11。 1.打开终端,创建.bash_profile 如果是第一次配置环境变量,可以使用"touch .bash_profile" 创建一个 .bash_profile 的隐藏配置文件(如果已经...
    99+
    2023-10-18
    java android
  • JDK环境变量配置(WIN11)
    目标: 完成windows11环境变量的配置 操作内容:    1、搭建 Java 开发环境    2、配置Java环境变量         2.1 右键我的电脑属性或者在设置中找到高级属性设置                  2.2点...
    99+
    2023-09-28
    java windows intellij idea 开发语言
  • nuxt.js 多环境变量配置
    目录1、前言2、场景3、创建环境3.1 注入环境变量4、最后1、前言 一般在我们项目开发中,一般会有以下3个环境 开发环境也叫测试环境(test) RC环境也叫预发...
    99+
    2022-11-12
  • Mac配置MySQL环境变量
    如果已经安装好mysql,请直接查看第三步 一、下载mysql mysql下载地址 二、启动mysql 1.打开系统偏好设置 2.启动mysql 三、配置mysql环境变量 1.查看Mac ...
    99+
    2023-10-19
    mysql macos bash
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作