gvm是一个Linux、macOS、WINDOWS下的命令行工具,可以提供一个便捷的多版本go环境的管理和切换,下面为大家详细讲解一下使用GVM管理go项目具体方法。
安装 GVM 很简单。GVM 存储库安装文档指示你下载安装程序脚本并将其传送到 Bash 来安装:
尽管越来越多的人采用这种安装方法,但是在安装之前先看看安装程序在做什么仍然是一个很好的想法。以 GVM 为例,该安装程序脚本: 1.检查一些相关依赖性 2.克隆 GVM 存储库 3.使用 shell 脚本: (1)安装 Go 语言 (2)管理GOPATH环境变量 (3)向bashrc、zshrc或配置文件中添加一行内容 如果你想确认它在做什么,你可以克隆该存储库并查看 shell 脚本,然后运行 ./binscripts/gvm-installer 这个本地脚本进行设置。
注意: 因为 GVM 可以用来下载和编译新的 Go 版本,所以有一些预期的依赖关系,如 Make、Git 和 Curl。你可以在 GVM 的自述文件中找到完整的发行版列表。
一旦安装了 GVM,你就可以使用它来安装和管理不同版本的 Go。gvm listall 命令显示可下载和编译的可用版本的 Go:
[chris@marvin]$gVMListallgvmgos(available)go1go1.0.1go1.0.2go1.0.3
安装特定的 Go 版本就像 gvm install 一样简单,其中 是 gvm listall 命令返回的版本之一。 假设你正在进行一个使用 Go1.12.8 版本的项目。你可以使用 gvm install go1.12.8 安装这个版本:

[chris@marvin]$gvminstallgo1.12.8Installinggo1.12.8...*Compiling...go1.12.8successfullyinstalled!
输入 gvm list,你会看到 Go 版本 1.12.8 与系统 Go 版本(使用操作系统的软件包管理器打包的版本)一起并存:
[chris@marvin]$gvmlistgvmgos(installed)go1.12.8=>system
GVM 仍在使用系统版本的 Go ,由 => 符号表示。你可以使用 gvm use 命令切换你的环境以使用新安装的 go1.12.8:
[chris@marvin]$gvmusego1.12.8Nowusingversiongo1.12.8[chris@marvin]$goversiongoversiongo1.12.8linux/amd64
GVM 使管理已安装版本的 Go 变得极其简单,但它不止于此!
开箱即用,Go 有一种出色而令人沮丧的管理包和模块的方式。默认情况下,如果你 go get 获取一个包,它将被下载到 $GOPATH 目录中的 src 和 pkg 目录下,然后可以使用 import 将其包含在你的 Go 程序中。这使得获得软件包变得很容易,特别是对于非特权用户,而不需要 sudo 或 root 特权(很像 Python 中的 pip install –user)。然而,在不同的项目中管理相同包的不同版本是非常困难的。
有许多方法可以尝试修复或缓解这个问题,包括实验性 Go Modules(Go 1.11 版中增加了初步支持)和 Go dep(Go Modules 的“官方实验”并且持续迭代)。在我发现 GVM 之前,我会在一个 Go 项目自己的 Docker 容器中构建和测试它,以确保分离。
GVM 通过使用 “pkgsets” 将项目的新目录附加到安装的 Go 版本的默认 上,很好地实现了项目之间包的管理和隔离,就像 PATH 在 Unix/Linux 系统上工作一样。
想象它如何运行的。首先,安装新版 Go 1.12.9:
[chris@marvin]$/home/chris/.gvm/pkgsets/go1.12.8/global[chris@marvin]$gvminstallgo1.12.9Installinggo1.12.9...*Compiling...go1.12.9successfullyinstalled[chris@marvin]$gvmusego1.12.9Nowusingversiongo1.12.9
当 GVM 被告知使用新版本时,它会更改为新的 $GOPATH,默认 gloabl pkgset 应用于该版本:
[chris@marvin]$/home/chris/.gvm/pkgsets/go1.12.9/global[chris@marvin]$gvmpkgsetlistgvmgopackagesets(go1.12.9)=>global
尽管默认情况下没有安装额外的包,但是全局 pkgset 中的包对于使用该特定版本的 Go 的任何项目都是可用的。
现在,假设你正在启用一个新项目,它需要一个特定的包。首先,使用 GVM 创建一个新的 pkgset,名为 introToGvm:
[chris@marvin]$gvmpkgsetcreateintroToGvm[chris@marvin]$gvmpkgsetuseintroToGvmNowusingversiongo1.12.9@introToGvm[chris@marvin]$gvmpkgsetlistgvmgopackagesets(go1.12.9)global=>introToGvm
如上所述,pkgset 的一个新目录被添加到$GOPATH:
[chris@marvin]$/home/chris/.gvm/pkgsets/go1.12.9/introToGvm:/home/chris/.gvm/pkgsets/go1.12.9/global
将目录更改为预先设置的introToGvm 路径,检查目录结构,这里使用 awk 和 bash 完成。
[chris@marvin]$$(awk-F$GOPATH)[chris@marvin]$/home/chris/.gvm/pkgsets/go1.12.9/introToGvm[chris@marvin]$lsoverlaypkgsrc
请注意,新目录看起来很像普通的$GOPATH。新的 Go 包使用同样的 go get 命令下载并正常使用,且添加到 pkgset 中。 例如,使用以下命令获取 gorilla/mux 包,然后检查 pkgset 的目录结构:
[chris@marvin]$gogetgithub.com/gorilla/mux[chris@marvin]$tree[chris@marvinintroToGvm]$tree.├──overlay│├──bin│└──lib│└──pkgconfig├──pkg│└──linux_amd64│└──github.com│└──gorilla│└──mux.asrc/└──github.com└──gorilla└──mux├──AUTHORS├──bench_test.go├──context.go├──context_test.go├──doc.go├──example_authentication_middleware_test.go├──example_cors_method_middleware_test.go├──example_route_test.go├──go.mod├──LICENSE├──middleware.go├──middleware_test.go├──mux.go├──mux_test.go├──old_test.go├──README.md├──regexp.go├──route.go└──test_helpers.go
如你所见,gorilla/mux 已按预期添加到 pkgset $GOPATH 目录中,现在可用于使用此 pkgset 项目了。
GVM 是一种直观且非侵入性的管理 Go 版本和包的方式。它可以单独使用,也可以与其他 Go 模块管理技术结合使用并利用 GVM Go 版本管理功能。按 Go 版本和包依赖来分离项目使得开发更加容易,并且减少了管理版本冲突的复杂性,GVM 让这变得轻而易举。
企业进行内部研发活动所发生的费用,会计上应如何处理?
进入管理费用-研究开发费
以下说法正确的有 A:只有高层管理者需要承担控制的责任 B:现场控制是对正在进行的管理活动给予指导
正确的有B:现场控制是对正在进行的管理活动给予指导与监督 以保证管理活动按预定的程序和方法进行 。 C:反馈控制把注意力集中在实际的结果上 并通过对已形成的结果进行测量 比较和分析 发现偏差情况 依此采取措施 对今后的活动进行纠正。 D:计划与控制是既互相区别 又紧密相连 。 E:前馈控制的中心问题是预防组织使用不合格的资源 保证组织的投入在数量和质量上达到预定的标准。
校内校外活动安全资料
楼道安全1、上下楼梯时有序缓慢右行,严禁拥挤,特别是发现有人摔倒时,应立即停止上下,迅速将摔倒者扶起。 2、不在教室里打跳,翻越门窗;不在走廊上追逐嬉戏,身体不靠栏杆且使身体重心外倾或用力拉扯栏杆,不在走廊上齐步走造成共振,以免损坏楼板。 (四)严禁学生将棍棒、刀具等各类尖利物品带入校园,更不得带进教室;学生在使用小刀、圆规、铅笔、钢笔等学习用具时,要注意安全,以免误伤自己和他人。 (五)外出游玩1、外出活动要有教师或家长带队,身体有病同学不要勉强参加。 2、最好是当日去,当日回,未经监护人许可,不得在外宿营。 3、外出游玩,牢记家庭住址、电话、父母工作单位电话。 4、外出游玩,若遇歹徒抢劫、以大欺小、以强凌弱等人身侵害、伤病的情况时,应立即与公安、医院等部门联系,并及时向学校、家长报告。 5、严禁私自下河游泳,以免溺水事故发生。 严禁攀高探险。 6、被狗咬伤后应立即送医院处理伤口,若远离医院可迅速用清水或肥皂水对伤口流水冲洗。 7、被蛇咬伤千万不要惊慌,应迅速用手帕、皮带、绳索等物在距离伤口3-5厘米处绑扎,以减缓毒素扩散速度,每隔15分钟放松数秒,并迅速送医院治疗。 8、上学放学途中和外出游玩,学生不得去捅蜂窝,若被毒蜂蛰伤:先拨去毒刺;用肥皂水、食盐水或清水清洗伤口;可用食用醋、大蒜、生姜汁、韭菜捣成泥状涂于患处,症状比较严重的送医院救治。 9、上学放学途中和外出游玩,行至崖边、河边、水流湍急的农田灌溉渠边,应走安全的一侧,以免踩虚、脚滑,不慎发生危险事故。 10、外出游玩,若遇拥挤要主动退让,并自觉排队,不要到人多拥挤的场合去凑热闹,避免意外事故发生。 (六)以礼待人,诚实交友,不与人口角、斗殴,更不要械斗、群殴。
发表评论