golang 基础库之 go 获取命令行参数,介绍了环境变量的获取与设置以及如何使用默认值

环境变量的获取与设置以及如何使用默认值

Golang 版本

1.12.1

前言

环境变量作为配置选项可以显著简化应用的部署,并且这些在云基础架构中也是很常见的。

通常,本地和自动构建环境的 数据库 连接配置是不同的。

如果配置由环境变量定义,则无需更改应用的配置文件或者程序代码。如果环境变量没有设置,则默认配置也是可以使用的。这样对于开发人员就容易多了。

实现

创建 get.go 文件,代码如下:

package mainimport ("log""os"
)func main(){conStr := os.Getenv("DB_CONN")log.Printf("连接:%s\n",conStr)
}

运行命令 export DB_CONN=db:/user@example && go run get.go

$ export  DB_CONN=db:/user@example && go run get.go
2019/05/18 21:33:39 连接:db:/user@example

创建 lookup.go 文件,代码如下:

package mainimport ("fmt""log""os"
)func main() {key := "DB_CONN"connStr, ex := os.LookupEnv(key)if !ex {log.Printf("环境变量 %s 没有设置\n", key)}fmt.Println(connStr)
}

运行命令 unset DB_CONN && go run lookup.go

$ unset DB_CONN && go run lookup.go
2019/05/18 21:39:33 环境变量 DB_CONN 没有设置

创建 main.go 文件,代码如下:

package mainimport ("log""os"
)func main() {key := "DB_CONN"// 设置环境变量os.Setenv(key, "postgres://as:as@example.com/pg?sslmode=verify-full")val := GetEnvDefault(key, "postgres://as:as@localhost/pg?sslmode=verify-full")log.Println("值是 :" + val)os.Unsetenv(key)val = GetEnvDefault(key, "postgres://as:as@127.0.0.1/pg?sslmode=verify-full")log.Println("默认值是 :" + val)}func GetEnvDefault(key, defVal string) string {val, ex := os.LookupEnv(key)if !ex {return defVal}return val
}

运行命令 go run main.go

$ go run main.go
2019/05/18 21:42:58 值是 :postgres://as:as@example.com/pg?sslmode=verify-full
2019/05/18 21:42:58 默认值是 :postgres://as:as@127.0.0.1/pg?sslmode=verify-full

原理

环境变量的获取和设置分别可以通过 os 包中 Getenv 和 Setenv 方法实现。方法名称已经很明确说明了自身的功能。

但 Getenv 方法有个缺点,即使在未设置环境变量的情况下,它也返回一个空的字符串。

os 包中还有一个很有用的方法, LookupEnv ,该方法返回两个值,一个是变量的值,另一个则是变量在环境中是否设置的布尔值。而 LookupEnv 方法则可以克服上面 Getenv 的缺点。

当我们要判断是否设置了环境变量以及实现一个默认环境变量的方法,都应该使用 LookupEnv 。因为如果未设置环境变量,则第二个值会返回 false

go基础库之环境变量的获取与设置以及如何使用默认值相关推荐

  1. Linux 环境编程 day01 Linux系统介绍、GNU编译工具、静态/共享库、环境变量表

    Linux 环境编程 day01 Linux系统介绍.GNU编译工具.静态/动态库.环境变量表 学习Linux环境编程的原因 UNIX系统介绍 Linux系统介绍 GNU工程 POSIX标准 GNU通 ...

  2. Linux——孤儿进程|进程的优先级 用top命令去修改优先级 其他概念 环境变量 PATH 获取环境变量

    目录 孤儿进程 进程的优先级 用top命令去修改优先级 其他概念 环境变量 PATH 获取环境变量 习题 孤儿进程 父进程如果提前退出,那么子进程后退出,进入Z之后,那该如何处理呢? 父进程先退出,子 ...

  3. java 取系统环境变量_java获取和设置系统变量(环境变量)

    一.Java获取环境变量 Java 获取环境变量的方式很简单: System.getEnv()  得到所有的环境变量 System.getEnv(key) 得到某个环境变量 Map map = Sys ...

  4. Linux 下的动态库、静态库与环境变量

    最近这几天在处理集群软件的过程中,遇到各种各样的库和环境变量的问题,被虐的不清!趁此机会,整理了一下 Linux 下静态库.动态库(共享库)和环境变量的一些知识,与大家共享一下. 库的种类 Linux ...

  5. Jenkins 环境变量的作用范围及设置与获取,包括在Sharedlibraries与pipelin之间的传递

    首先要注意的是单引号,双引号,3单引号,3双引号的使用区别. 用def 在某个stage内定义的变量,仅在这个stage内有效. 要想定义的变量在每个stage内都有效,可以在script中使用VAR ...

  6. JAVA零基础安装教程+环境变量配置

    JAVA零基础安装教程+环境变量配置 JAVA官网 JAVA的下载选择 JAVA的正式安装 JAVA环境变量的配置 JAVA 8的安装包下载 注:嫌麻烦的直接点击 5. JAVA 8的安装包下载,即可 ...

  7. 环境变量的定义、设置及作用

    1. 什么是环境变量 ? 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等.环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程 ...

  8. jquery 获取或设置radio单选框选中值的方法

    jquery 获取或设置radio单选框选中值的代码 1.获取选中值,三种方法都可以: 2.设置第一个Radio为选中值: 3.设置最后一个Radio为选中值: 4.根据索引值设置任意一个radio为 ...

  9. Linux库概念及相关编程(动态库、静态库、环境变量)

    分文件编程: 好处:分模块编程思想,功能和责任划分清楚便与调试,main函数简洁,代码易于阅读. 编程时头文件有的是使用<>这个符号括起来的,有的是" "使用的是双引号 ...

最新文章

  1. VS2010正式版MSDN下载
  2. 【转】从源码分析PreparedStatement是如何防止SQL注入的?
  3. [Qt教程] 第47篇 进阶(七) 定制Qt帮助系统
  4. HDOJ 1398 Square Coins
  5. Android对话框dialog大全
  6. winform 消息通讯组件实习
  7. [BZOJ3545][ONTAK2010]Peaks
  8. python 列表间隔取值_python list数据等间隔抽取并新建list存储的例子
  9. 绝,Java 中创建对象的 5 种方法!
  10. rh php70 php fpm,mac 通过brew安装php70 +php-fpm+ phalcon3.0.3
  11. C语言课后习题(1)
  12. 使用python读取txt坐标文件生成挖空地块_批量
  13. OneNET麒麟座应用开发之五:获取加速度传感器ADXL345数据
  14. iOS-底层原理 06: cls 与类的关联原理
  15. 高压柜无线测温装置-无线无源温度传感器-安科瑞 顾月
  16. Retrofit实现App更新
  17. MATLAB——复数运算
  18. Redis全部知识总结(概念、安装、用法、数据类型、事务、持久化、Jeids、订阅系统、缓存穿透及雪崩等)
  19. Android实战技巧之八:Ubuntu下切换JDK版本
  20. java购物商城_基于javaweb实现的简单购物商城

热门文章

  1. 2021牛客多校1 - Journey among Railway Stations(线段树区间合并)
  2. CodeForces - 1481E Sorting Books(贪心+dp)
  3. CodeForces - 1453D Checkpoints(概率+构造)
  4. jupyter notebook python插件_Jupyter notebook一款非常好用的python IDE
  5. python绘图设置标题出现乱码_解决python2 绘图title,xlabel,ylabel出现中文乱码的问题...
  6. 11.IDA-this指针
  7. 【Boost】boost库asio详解1——io_service::run函数无任务时退出的问题
  8. 现代的缓存设计方案:Window-TinyLFU
  9. Trie(字典树) : 如何实现搜索引擎的关键词提示功能?
  10. Spectre CPU漏洞借着BPF春风卷土重来