Go-如何在-中经常使用环境变量 (go如何在linux编译)
作为软件开发人员,咱们深知在名目中治感性能变量的关键性。在本篇文章中,我将引见在Golang中解决环境变量的弱小工具
.com/joho/godotenv
包。应用这个包,你可以简化解决文件的环节,确保更顺畅的开发体验。
![中经常使用环境变量](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
步骤1:装置
首先,咱们将经常使用以下命令装置GodotEnv包
gogetgithub.com/joho/godotenv
步骤2:制造.env文件
关键步骤是在名目根目录下创立一个文件。该文件将寄存环境变量。上方是一个文件示例
DB_USER=myusernameDB_PASS=mypassword
步骤3:加载环境变量
如今,咱们可以经常使用上方的代码片段将环境变量加载到名目中:
packagemnimport("fmt""github.com/joho/godotenv""log""os")funcmain(){err:=godotenv.Load()iferr!=nil{log.Fatal("Errorloading.envfile")}dbUser:=os.Getenv("DB_USER")dbPassword:=os.Getenv("DB_PASSWORD")fmt.Printf("DatabaseUser:%sn",dbUser)fmt.Printf("DatabasePassword:%sn",dbPassword)}
解释一下上方这段代码:
godotenv.Load()
godotenv中的函数用于读取名目目录下的文件。
os.Getenv("DB_USER")
这一行担任从环境变量中失掉特定的环境变量,在本例中就是。
步骤4:应用环境变量
加载了环境变量后,就可以将它们无缝集成到代码中了。在本例中,咱们展现了如何打印数据库衔接的具体信息。不过,您还可以应用这些变量来增强运行程序的性能。
总结
将
github.com/joho/godotenv
包集成到Golang名目中,可以简化环境变量的治理。这种方法不只增强了运行程序的灵敏性,还有助于提高其可保养性。在您谋求出色的环节中,这种简化的方法可以确保您的代码坚持有序和高效。
一、Go安装使用1、下载Go源码包上传到/usr/local/src目录下2、编译安装Go到/usr/localtar zxvf -C /usr/local/#注:必须使用root账户或者使用sudo来解压缩Go源码包3、设置PATH环境变量,添加/usr/local/go/bin到环境变量export PATH=$PATH:/usr/local/go/bin4、安装到自定义位置Go二进制文件默认安装到/usr/local/go,但是可以安装Go工具到不同的位置,可以自行定义,只需要设置正确的环境变量。 例如,安装Go到家目录下,必须添加环境变量到$HOME/ GOROOT=$HOME/goexport PATH=$PATH:$GOROOT/bin注:安装Go到其他目录时,GOROOT必须设置为环境变量5、检查是否正确安装程序通过设置一个工作区和建立一个简单的程序,检查是否正确安装了一个简单的程序。 创建一个目录包含您的工作空间,例如/data/work,并设置GOPATH环境变量指向的位置。 export GOPATH=/data/work#如果不存在/data/work,需要新建然后,在你的工作内创建src//user/hello,如果使用github,可以使用自己的用户名代替user,在hello目录下,新建# cat mainimport fmtfunc main {(hello,world!\n)}#使用go编译 install /user/hello#上面的命令讲名叫hello(or )的程序放到你的工作区内,执行下面命令,会得到输出结果。 $GOPATH/bin/hellohello,world!#当出现hello,world!表明Go已经安装成功可以工作。 二、Go工作区介绍1、机构组织代码概述Go语言程序通常将所有的代码保存在一个工作区中。 工作区包含许多版本控制库(由Git管理)。 每个存储库包含一个或多个包。 每个包由一个或多个在一个目录中的源文件组成。 一个包的目录的路径决定其导入路径。 注:同于其他的编程环境中,每一个项目都有一个独立的工作区且工作区是紧密联系在一起的版本控制库。 2、工作区介绍工作区是一个目录层次结构,它的根目录有三个目录:src 包含Go源文件pkg包含对象和包bin 包含可执行命令Go工具创建源码包并安装二进制文件到pkg和bin目录下src目录通常包含多个版本控制库(如Git或Mercurial),跟踪一个或多个源包的开发。 下面展示一个好的工作区的例子:bin/hello# command executableoutyet # command executablepkg/linux_amd64//golang/example/stringutil.a # package objectsrc//golang/example//# Git repository metadatahello/ # command sourceoutyet/# command sourcemain_ # test sourcestringutil/ # package sourcereverse_# test /x/image//# Git repository metadatabmp/# package # package source... (many more repositories and packages omitted) ...上面的属性图展示了一个包含两个存储库(example和image)的工作区,example 存储库包含两个命令(hello,outyet),image库包含bmp包和几个其他的包。 一个典型的工作区包含包含许多软件包和命令的多个源库。 大多数程序员将所有的源代码和依赖关系保存在一个工作区中3、GOPATH环境变量设置GOPATH环境变量指定工作区的位置。 它很可能是唯一的环境变量,代码开发时需要设置。 开始,创建一个工作区目录并设置相应的gopath。 您的工作区可以位于任何你喜欢的地方,但我们将在这个文档中使用/data/work。 请注意,这不能是您的“Go安装”路径相同。 mkdir -p /data/workexport GOPATH=/data/work为了方便。 添加工作区的bin到PATH中export PATH=$PATH:$GOPATH/bin4、导入路径一个导入路径是唯一标识一个包的字符串。 一个包的导入路径对应于它在工作区内或远程存储库中的位置。 从标准库的软件包中给出了短的导入路径等。 对于您自己的包,您必须选择不可能和未来添加到标准库或其他外部库的基础路径冲突的路径。 注意,你不需要将你的代码发布到一个远程存储库之前,你可以建立它。 这只是一个很好的习惯来组织你的代码,如果你有一天会出版它。 在实践中,你可以选择任何任意的路径名称,只要它是唯一的标准库和更大的去生态系统。 我们将使用/user作为我们的基本路径。 在您的工作区中创建一个目录,以保持源代码:mkdir -p $GOPATH/src//user5、第一个项目编译并运行一个简单的程序,首先选择一个包的路径(我们将使用/user/hello)和创建在您的工作区相应的软件包目录:mkdir $GOPATH/src//user/hello创建名叫的文件,上面创建过,此处略过。 cd $GOPATH/src//user/hellogo install$GOPATH/bin/hello或者:hello如果你使用的是一个源代码管理系统,现在是一个很好的时间来初始化一个存储库,添加文件,并提交你的第一次更改。 再次,这一步是可选的:您不需要使用源代码管理来写代码。 cd $GOPATH/src//user/hellogit initInitialized empty Git repository in /data/work/src//user/hello//git add commit -m first commit[master (root-commit) bbfb477] first commit6、first librarymkdir $GOPATH/src//user/stringutil下一步,在目录下创建一个名为文件中有下列内容:// Package stringutil contains utility functions for working with stringutil// Reverse returns its argument string reversed rune-wise left to Reverse(s string) string {r := []rune(s)for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {r[i], r[j] = r[j], r[i]}return string(r)}使用go build测试包的编译$ go build /user/stringutil如果当前位置源码包目录,只需要:go build上面操作并不会产生一个输出文件,必须使用go install,把包和对象输出到工作去的pkg目录内确认stringutil包创建完成后,修改原始,使用stringutil包:package mainimport (/user/stringutil)func main() {((\n !oG ,olleH))}无论使用go安装包还是二进制文件,所有相关的依赖都会自动安装。 所以当你安装hello程序时:$ go install /user/hello对应的stringutil包会自动安装好。 执行新的hello程序,可以看到消息已经被反转# helloHello, Go!完成上面操作之后,工作区应该为:├── bin│ └── hello# command executable├── pkg│ └── linux_amd64 # this will reflect your OS and architecture│ └── │ └── user│ └── stringutil.a # package object└── src└── └── user├── hello│ └── # command source└── stringutil└── # package source注意:go install会把库文件stringutil.a放到pkg/linux_amd64下边(目录结构跟源代码结构一样)。 这样可以go命令可以直接找到对应的包对象,避免不必要的重复编译。 linux_amd64是为了根据操作系统和你的系统架构交叉编译。 所有Go可执行程序都通过静态方式链接在一起,所以在运行时是不需要相关的包对象(库)。 7、包命令所有的Go源代码都以下面的语句开始:package name其中name就是包引用默认的名称,一个包中的所有文件必须使用同一个包名,可执行命令必须是main。 一个二进制文件下所有的包名不需要唯一,但是引用路径必须唯一8、测试Go自带了一个轻量级的测试框架,由go test和testing包组成。 可以通过新建xx_写一个测试,其中包含若干个TestXXX函数。 测试框架会自动执行这些函数;如果函数中包含tError或, 对应的测试会被判为失败。 添加一个针对stringutil的测试文件$GOPATH/src//user/stringutil/reverse_,包含以下内容:package stringutilimport testingfunc TestReverse(t *testing.T) {cases := []struct {in, want string}{{Hello, world, dlrow ,olleH},{Hello, 世界, 界世,olleH},{, },}for _, c := range cases {got := Reverse()if got != {(Reverse(%q) == %q, want %q, , got, )}}}#通过go test测试# go test /user//user/stringutil 0.002s#同样的,在包文件夹下可以忽略路径而直接执行go test[root@zabbix stringutil]# go /user/stringutil 0.002s9、远程包包的引用路径用来描述如何通过版本控制系统获取包的源代码。 go工具通过引用路径自动从远程代码仓库获取包文件。 比如本文中用的例子也对应的保存在/golang/example下。 go可以通过包的代码仓库的url直接获取、生成、安装对应的包。 [root@zabbix ~]# go get /golang/example/hello[root@zabbix ~]# $GOPATH/bin/helloHello, Go examples!如果工作区中不存在对应的包,go会将对应的包放到GOPATH环境变量指明的工作区下。 (如果包已经存在,go跳过代码拉去而直接执行go install)建议详细看一下这个,有图文
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。