golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的

1:执行脚本setGoPath.sh
#!/bin/bash
if [[ $GOPATH =~ .*$PWD.* ]]
then
echo "currnet dir is already in GOPATH"
else
export GOPATH=$GOPATH:$PWD
echo "fininsh setting $PWD in GOPATH"
fi
在项目主目录中运行source setGoPath.sh 将当期项目路径写入GOPATH

2:使用Golang包依赖管理工具gb替代go来构建项目
这个gb就是一个替代go的build 和 test的工具,可以让项目在任意路径时运行构建
github地址:https://github.com/constabulary/gb
首先要把这个gb装到GOPATH的src中。如果GOPATH有多个路径,装到任意一个路径中即可
确保你的GOPATH在PATH中,这样就能全局调用gb命令了

=============

Go语言提供两个关键路径,GOROOT 指向系统安装路径,GOPATH指向工作路径,这样的好处是,我们的工作可以和系统文件分离。
例如:
GOROOT = C:\Go
GOPATH = D:\MyWorks

其中,go语言源代码和编译的中间文件、目标文件存放位置如下:
C:\Go <<--- GOROOT 指向的位置
--src <<--- Go 语言自带的源代码
--pkg <<--- 编译的中间文件放在此文件夹
--bin <<--- 编译的目标文件放在此文件夹
D:\MyWorks <<--- GOPATH 指向的位置
--src <<--- 项目源代码放置在此文件夹。!!!警告:一个常犯的错误是把 GOPATH 指向此处!!!
--HelloWorld <<--- 我们项目源代码所在的文件夹。!!!警告:一个常犯的错误是把 GOPATH 指向此处!!!
--vendor <<--- 第三方开源代码文件夹
--github.com
--...
--pkg <<--- 编译的中间文件放在此文件夹,Go编译器自动生成此文件夹
--bin <<--- 编译的目标文件放在此文件夹,Go编译器自动生成此文件夹

========================

使用Golang包依赖管理工具gb替代go来构建项目
一个Golang项目工程通常由bin、pkg、src三个子目录构成,gb在这个概念的基础上新增了一个vendor目录来存放项目依赖的第三方包;一个gb项目的工作目录里包含该项目需要的所有Go代码。

gb项目不放在你的$GOPATH中,也不需要为你的gb项目设置或修改$GOPATH。依赖的第三包需要放到vendor/src目录中,并使用gb来编译和测试你的项目。

安装gb
gb的官网是:http://getgb.io/

使用如下命令即可安装gb:
go get github.com/constabulary/gb/...
安装gb后,会有gb和gb-vendor两个可执行文件放入你的$GOPATH/bin目录中,查看或编辑你的~/.bash_profile文件,确保你的$GOPATH/bin目录已经加入$PATH中:
export PATH=$PATH:$GOPATH/bin
使用gb进行项目开发
我们以一个简单的提供HTTP页面的“Hello World”程序来学习一下gb的使用。
为了体现gb管理第三方包依赖的特性,我们引入一个支持HTTP服务优雅重启的第三方包 github.com/tabalt/gracehttp。

创建gb项目目录结构:
cd ~/helloworld
mkdir -p src/helloworld
mkdir -p vendor/src
编写“Hello World”程序

#vim src/helloworld/main.go
package main

import (
"fmt"
"net/http"

"github.com/tabalt/gracehttp"
)

func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello world")
})

err := gracehttp.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println(err)
}
}

添加依赖的第三包
gb vendor fetch github.com/tabalt/gracehttp
项目目录结构如下:

./
|-- src
| `-- helloworld
| `-- main.go
`-- vendor
|-- manifest
`-- src
`-- github.com
`-- tabalt
`-- gracehttp
|-- README.md
|-- connection.go
|-- gracehttpdemo
| `-- main.go
|-- listener.go
`-- server.go
编译执行程序

gb build helloworld
./bin/helloworld
打开一个新终端并执行curl http://127.0.0.1:8080/,将会输出:

hello world

提交所有代码到git仓库

git init
git add .
git commit -am 'init hello world project with gb'
git add remote -v $your_remote_git_repository
git push origin master:master
gb常用命令
在上面的项目开发中,我们用到了两个命令gb build 和 gb vendor,实际上,build是我们之前所说的可执行文件$GOPATH/bin/gb包含的,而vendor是gb的一个插件,最终调用的是可执行文件$GOPATH/bin/gb-vendor。

可以通过gb help命令查看gb支持的更多命令,命令的具体用法可以通过gb help $command_name查看,很多gb命令都是在go命令行工具的基础上做的包装,用法也都相似,通过gb vendor help可以查看vendor插件具体用法,这里我们简单列举如下:

gb 命令列表

命令 功能
build 编译包
doc 显示文档
env 打印项目的环境变量
generate 处理源代码生成Go文件
info 显示项目的信息
list 显示项目下的所有包
test 执行测试
gb vendor 功能列表

参数 功能
fetch 获取一个远程依赖
update 更新一个本地依赖
list 每行一个列出所有依赖
delete 删除一个本地依赖
purge 清除所有未引用的依赖
restore 从manifest清单文件还原依赖

golang多个项目时如何配置GOPATH,使用gb包依赖管理工具,不同项目配置不同的GOPATH的的更多相关文章

  1. Golang modules包依赖管理工具

    初始化 执行go mod  init module-name,其中module-name为包名字,执行完后会生成go.mod文件,如下 module module-name go 1.13 包管理 使 ...

  2. Golang 包依赖管理工具

    1.godep:https://studygolang.com/articles/9877 2.dep:https://studygolang.com/articles/10589 3.glide:h ...

  3. Golang Gin 项目包依赖管理 godep 使用

    Golang Gin 项目包依赖管理 godep 使用 标签(空格分隔): Go 在按照github.com/tools/godep文档go get完包以后,调整项目结构为$GOPATH/src/$P ...

  4. Golang依赖管理工具:glide从入门到精通使用

    这是一个创建于 2017-07-22 05:33:09 的文章,其中的信息可能已经有所发展或是发生改变. 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰 ...

  5. 适合Linux嵌入式项目的代码构建与依赖管理工具——cazel

    前言 我们知道,现在有很多流行的优秀代码构建工具,如CMake.jetkins.bazel等.这些不同的构建工具在其应用的领域起到了举足轻重的作用. 但是,如果仔细研究就会发现,在嵌入式领域,构建工具 ...

  6. 必须使用“角色管理工具”安装或配置Microsoft .NET Framework 3.5 SP1

    在Windows Server 2008下直接安装SQL Server 2008时,会出现如下错误: 必须使用“角色管理工具”安装或配置Microsoft .NET Framework 3.5 SP1 ...

  7. 解决【必须使用“角色管理工具”安装或配置Microsoft .NET Framework 3.5 SP1】的方法

    [摘要:正在Windows Server 2008下间接装置SQL Server 2008时,会涌现以下毛病: 必需应用“脚色治理对象”装置或设置装备摆设Microsoft .NET Framewor ...

  8. 使用github作为maven仓库存放发布自己的jar包依赖 实现多个项目公共部分代码的集中,避免团队中多个项目之间代码的复制粘贴

    使用github作为maven仓库存放发布自己的jar包依赖 实现多个项目公共部分代码的集中,避免团队中多个项目之间代码的复制粘贴. 1.首先在本地maven位置的配置文件setting.xml(没有 ...

  9. 必须使用角色管理工具 安装或配置microsoft.net framework 3.5

    windows server 2008安装sql server 2012后报错,要求安装microsoft.net framework 3.5 sp1 但安装时提示,必须使用角色管理工具 安装或配置m ...

随机推荐

  1. 工具类ToastUtil 避免在子线程中使用抛异常 "Can't create handler inside thread that has not called Looper.prepare()"

    package com.example.kbr.utils; import android.view.Gravity; import android.widget.Toast; import io.r ...

  2. 版本管理·玩转git(推到远程仓库)

    经过前面的练习,你在本地的仓库里管理代码已经比较熟练了,但如果是团队开发呢,如何配合起来呢? 我们可以把版本仓库放在互联网上,开发者把自己最新的版本推到线上仓库,同时,把线上仓库的最新代码拉到自己本地 ...

  3. Windows远程桌面多用户登录的问题

    RDP WRAPPER 同时登录 多用户补丁   https://cloud.tencent.com/developer/article/1460728   解决系统更新导致无法多用户登录的问题 问题 ...

  4. Linux 修改/etc/sudoers 可被任何修改,如何解决

    今天不小心,修改了/etc/sudoers的权限 改成了 777的权限, 于是每次使用sudo都会弹出 sudo:sudo /etc/sudoers is world writable sudo:no ...

  5. windows系统下mount创建的.vhd

    自己无聊时候分出了几个磁盘用来练习,存放个人东西,cdef盘除了c盘都是随便乱存的(粗心-_-),于是分出了两个20G的vhd文件,但是每次开机都要去d盘点击挂载太麻烦,现在分享自己的方法. 创建mo ...

  6. 自定义MVC三

    完成t_mvc_book表的增删改查1.通用分页的jar.自定义mvc框架.自定义标签 导入jar.导入之前写好的pageTag.自定义mvc.xml pageTag private static f ...

  7. Linux中自旋锁

    传统的spinlock Linux的的内核最常见的锁是自旋锁.自旋锁最多只能被一个可执行线程持有.如果一个执行线程试图获得一个被已经持有(争用)的自旋锁,那么该线程就会一直进行忙循环-旋转-等待锁重新 ...

  8. 第七周第二次Scrum会议

    工作: 根据上个周对前端的布置学习,布置大家开发了相应的界面.(界面开发成果写在测试报告) 地点: 二餐二 会议照片: 忘记拍了... 核心问题: 如何编写统一风格的前端界面. 解决: 将相应资源打包 ...

  9. html各种弹出框和提示框

    控制台输出 console.log() console.info() confirm() alert() promt()   提示对话框

  10. 移动端(手机端)页面自适应解决方案1(rem布局)---750设计稿

    设计稿尺寸为750 * 1340.结合网易.淘宝移动端首页html元素上的动态font-size属性.设计稿尺寸.前端与设计之间协作流程一般分为下面两种: 网易做法: 页面开头处引入下面这段代码,用于 ...