设为首页 收藏本站
查看: 938|回复: 0

[经验分享] golang安装和部署

[复制链接]

尚未签到

发表于 2018-9-19 14:05:49 | 显示全部楼层 |阅读模式
安装golang
  GOROOT 理论上只要定义这一个环境变量就可以玩了,go编译的时候会首先在安装目录下寻找包
  
GOBIN   如果不定义的话,默认是$GOROOT/bin 如果想不切换目录执行go的命令的话.需要将$GOBIN 加入到PATH目录中.这个你懂的
  
GOPATH  一般是你的开发目录,可以有多个.多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下
  
$GOPATH 目录约定有三个子目录:


  • src 存放源代码(比如:.go .c .h .s等)
  • pkg 编译后生成的文件(比如:.a)
  • bin 编译后生成的可执行文件(为了方便,可以把此目录加入到 $PATH 变量中)
编译
  
构建一个Go程序需要两步:编译和链接。
  
编译和链 接过程都由工具go处理,它不仅可以构建本地程序和包,还能够获取、构建以及安装第三方程序和包。

go build
  
go build  只编译主程序(有main()函数的go文件).且如果不指定-o参数,会当前目录下生成一个可执行文件。
  
go build -o myfirstgo        例如   hellogo.go  编译成指定目标文件名myfirstgo
  
go build  后面不带文件名,我们将得到一个与目录名同名的可执行文件  例如app/main.go    则得到app
  如果有多个项目,即由多个main..则可指定项目,可在go build之后加上文件名,例如go build a.go;

go get
  go get  获取远程包的工具,目前go get支持多数开源社区(例如:github、googlecode、bitbucket、Launchpad)
  
例如 :go get github.com/astaxie/beedb
go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方包
  
go get本质上可以理解为首先第一步是通过源码工具clone代码到src下面,然后执行go install
  要想go能够编译本地程序和包,有三个要求:


  • Go的bin目录($GOROOT/bin或%GOROOT%\bin)必须在PATH环境变 量下
  • 必须存在一个目录,该目录下包含一个src目录,本地程序和包的源码就驻留在src目录下
  • 包含src的那个目录必须在GOPATH环境变量中设置
  
Go编译器的package搜索顺序是这样的,以搜索hello这个package为例:


  • 首先,Go编译器会在GO安装目录(GOROOT,这里是/usr/local/go)下查找是否有src/pkg/hello相关包源码;如果没有则继续;
  • 若GOPATH=PATH1:PAHT2,则Go编译器会依次查找是否存在PATH1/src/hello、PATH2/src/hello;配置在GOPATH中的PATH1和PATH2被称作workplace;
go install
  
go install命令除了做了go build所做的事情之外,还将可执行文件放在标准位置($GOPATH/bin或%GOPATH%\bin)。
  
go install还可编译其他非主程序的包放在pkg目录下
  
这意味着将一个单一路径($GOPATH /bin或%GOPATH>%\bin)加入到PATH环境变量中,我们安装的所有Go程序就可以方便地被加入到PATH中。
install命令执行后,我们发现main目录下没有任何变化,原先build时产生的main可执行文件也不见了踪影。
  
别急,前面说过Go install也有一套自己的约定:


  • go install编译出的可执行文件文件名为其所在目录名.所以可以把main目录改成你想要的目录名
  • go install将可执行文件安装到与src同级别的bin目录下,bin目录由go install自动创建.如果主文件不在src/DIR 子目录下.则不会生成到bin目录下
  • go install将可执行文件依赖的各种package编译后,放在与src同级别的pkg目录下
  

.  
|-- bin
  
|   `-- main.exe
  
|-- pkg
  
|   `-- windows_amd64
  
|       `-- hello.a
  
`-- src
  
|-- hello
  
|   `-- hello.go
  
`-- main
  
`-- main.go
  

  

  1.go的入口程序,为package main下的main函数..和其所在的包名和文件名无关..即包名,和文件名可以自定义.
  2.虽然包名可以自定义,但是尽量保持为main.因为golang不允许同一个目录下有两个不同包名的文件出现,如果app/main.go,app/test.go,test的package为app,则会发生下面的冲突
  can't load package: package app: found packages main (main.go) and app (test.go) in /Volumes/Opt/workspace-go/src/app



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-594348-1-1.html 上篇帖子: 【GoLang】GoLang UTF8 与 Unicode 下篇帖子: golang实现base64编解码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表