go语言环境搭建以及依赖处理

一.环境安装与配置(linux环境)

1.下载安装包

wget https://dl.google.com/go/go1.13.1.linux-amd64.tar.gz

2.解压到指定目录(home目录下)

tar -C /home/ -zxvf go1.13.1.linux-amd64.tar.gz

3.添加/home/go/bin目录到PATH变量中,使得go命令可以全局使用
vim /etc/profile  


#go安装路径
export GOROOT=/home/go
#配置go的可执行文件的路径,使得执行go相关命令可以全局使用
export PATH=$PATH:$GOROOT/bin  
#GOBIN 程序生成的可执行文件的路径。你可以设置它,也可以不设置,默认是个空字符串,如果不设置,go install 会在GOPATH/bin生成可执行文件,需要go install才会链接到GOBIN,go build之后你的可执行文件和你的main.go在同一目录下
export GOBIN=/home/gobin  
#一般完整的GOPATH下,会有src,pkg,bin三个目录。
#bin目录主要存放可执行文件;  
#pkg目录存放编译好的库文件;   
#src目录下主要存放go的源文件;  
#配置工作目录,配置GOPATH的作用是:  
#1.作为编译后二进制的存放目的地和import包时的搜索路径
#2.使用get go下载依赖时,会下载到对应的GOPATH/src下。当import包是会在GOPATH下进行检索,找到对应的包。
#3.go install 时,会生成对应的可执行文件到GOPATH/bin下,编译好的库文件会存放在pkg下。
export GOPATH=/home/project
  
  
source /etc/profile
4.执行go version,证明安装成功
[root@VM_0_17_centos src]# go version
go version go1.13.1 linux/amd64
总结:
  • 下载安装包,解压安装包
  • 配置环境变量,理解关键环境变量的意义

二.依赖获取的两种方法(原始go get和使用go mod)

大多数语言都会有包管理工具,像Node有npm,PHP有composer。可是,Go语言一直缺乏一个官方的包管理。终于,在go1.11 版本中,新增了module管理模块功能,用来管理依赖包。在这个之前,想要对go语言包进行管理,只能依赖第三方库实现,比如Vendor,GoVendor,GoDep,Dep,Glide等。

1.使用go get配合GOPATH进行依赖处理

项目想引入xorm包。执行 go get github.com/xormplus/xorm ,会在GOPATH/scr下生成 github.com/xormplus/xorm 包,同时在pkg下生成编译好的xorm库文件(这一步相当于下载 github.com/xormplus/xorm 到GOPATH/scr,再进行go install)

main文件:
package main

import (
	"fmt"
	"github.com/xormplus/xorm"
)

func main() {
	engine, _ := xorm.NewEngine("mysql", "root:123@/test?charset=utf8")
	fmt.Println(engine)
}

使用import,程序会在GOPATH检索需要用到的包,即引入 GOPATH/src/github.com/xormplus/xorm 。
依赖安装结束。

2.使用go mod,脱离GOPATH进行依赖处理

上述讲的是有go get 进行依赖安装。会发现一个问题,每次引入一个依赖时,都要进行一次go get。当你获取一个有很多外部依赖的项目时,你需要进行很多次的go get,非常不方便。使用go mod便可以解决这个问题。

Modules官方定义为:
模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。

步骤:

  • 1.把 golang 升级到 1.11以上
  • 2.设置 GO111MODULE。命令行执行:export GO111MODULE=on,开启go mod。
  • 3.在GOPATH目录外创建项目,cd进项目,执行 go mod init命令。
[root@VM_0_17_centos project]# mkdir gomod
[root@VM_0_17_centos project]# cd gomod/
[root@VM_0_17_centos gomod]# go mod init gomod
go: creating new go.mod: module gomod

在项目下生成go.mod和go.sum文件,go.mod记录所依赖的包,go.sum记录包的版本变更记录。如下:

go.mod
module demo3

go 1.12

require (
	github.com/Chronokeeper/anyxml v0.0.0-20160530174208-54457d8e98c6 // indirect
	github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a // indirect
	github.com/CloudyKit/jet v2.1.2+incompatible // indirect
	github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee // indirect
	github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4 // indirect
	github.com/bndr/gotabulate v1.1.2 // indirect
	github.com/fatih/structs v1.1.0 // indirect
	github.com/fsnotify/fsnotify v1.4.7 // indirect
	github.com/go-sql-driver/mysql v1.4.1 // indirect
	github.com/tealeg/xlsx v1.0.5 // indirect
	github.com/xormplus/builder v0.0.0-20190724032102-0ee351fedce9 // indirect
	github.com/xormplus/core v0.0.0-20190724072625-00f5a85ad6e0 // indirect
	github.com/xormplus/xorm v0.0.0-20190926190243-42377f593eb1 // indirect
	golang.org/x/sys v0.0.0-20191009170203-06d7bd2c5f4f // indirect
	gopkg.in/flosch/pongo2.v3 v3.0.0-20141028000813-5e81b817a0c4 // indirect
	gopkg.in/yaml.v2 v2.2.4 // indirect
)
go.sum
github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee h1:0RklYSvekYaIFI9JUx7TFPQvo++TdILmZiV17QI4nXk=
github.com/agrison/go-tablib v0.0.0-20160310143025-4930582c22ee/go.mod h1:M9nmO4lBRWR/bBv7UCOmDJ1MB2DVoqz19B4JchDA+K0=
github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4 h1:XBNSe5eibe5Fh131ah+xnO6s4A97U1T3tKZKLQQvqu0=
github.com/agrison/mxj v0.0.0-20160310142625-1269f8afb3b4/go.mod h1:n7qJAqL9BKqGqiJyjPbWtxpdswTL5wX0IVP2Uw4vVhQ=
github.com/bndr/gotabulate v1.1.2 h1:yC9izuZEphojb9r+KYL4W9IJKO/ceIO8HDwxMA24U4c=
github.com/bndr/gotabulate v1.1.2/go.mod h1:0+8yUgaPTtLRTjf49E8oju7ojpU11YmXyvq1LbPAb3U=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:56xuuqnHyryaerycW3BfssRdxQstACi0Epw/yC5E2xM=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=

再创建以下main.go文件.

package main

import (
	"fmt"
	"github.com/xormplus/xorm"
)

func main() {
	engine, _ := xorm.NewEngine("mysql", "root:123@/test?charset=utf8")
	fmt.Println(engine)
}

执行run go main.go

chenweijiedeMacBook-Pro:demo3 chenweijie$ go run main.go 
go: finding github.com/xormplus/xorm latest
go: finding github.com/agrison/go-tablib latest
go: finding github.com/Chronokeeper/anyxml latest
go: finding github.com/xormplus/core latest
go: finding github.com/xormplus/builder latest

直接下载依赖,依赖完成。

总结:
  • 解除 $GOPATH 的依赖
  • 解决 go get 的需要手动操作才能下载依赖的操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值