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

栏目: 数据库 · PostgreSQL · 发布时间: 6年前

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

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

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

Golang 版本

1.12.1

前言

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

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

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

实现

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

package main

import (
	"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 main

import (
	"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 main

import (
	"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 包中 GetenvSetenv 方法实现。方法名称已经很明确说明了自身的功能。

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

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人本界面

人本界面

(美)拉斯基(Jef Raskin) / 史元春 / 机械工业出版社 / 2004-1-1 / 28.0

如果我们想克服目前人机界面上的固有缺陷,就很有必要理解本书的教义;若无此愿望,读读也无妨。交互设计的许多重要方面此书并没有包括在内,因为许多文献中都已经有详尽的阐述。本书的意图是补充现有的界面设计的方法或预测未来。  本书概述了人机界面设计领域的研究成果,详细论证了界面设计思想应以认知学为基础,并考虑人类的心智特点,在指出当前界面设计中弊端的同时,提出了新产品开发的思路。本书集计算机科学、人体工程......一起来看看 《人本界面》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具