据我所知go distribution
附带某种package manager
。安装go 1.4.1
后,我运行go help
以查找能够列出本地安装的go packages
的任何子命令,但遗憾的是没有。
那怎么办呢?
答案 0 :(得分:50)
goinstall
现在是历史 goinstall
已被go get
取代。 go get
用于管理外部/第三方库(例如,下载,更新,安装等)。
键入go help get
以查看命令行帮助,或查看以下页面:
如果要列出已安装的软件包,可以使用go list
命令执行此操作:
要列出工作区中的包,请转到工作区文件夹并运行以下命令:
go list ./...
./
告诉从当前文件夹开始,...
告诉递归下去。当然,这适用于任何其他文件夹,而不仅仅是你的工作区(但通常是你感兴趣的)。
执行
go list ...
在任何文件夹中列出所有包,包括标准库的包,首先是go工作区中的外部库。
如果您还想查看每个包的导入包,可以尝试以下自定义格式:
go list -f "{{.ImportPath}} {{.Imports}}" ./...
-f
使用包template
的语法指定列表的备用格式。可以引用其字段的结构可以通过go help list
命令打印。
如果要递归地查看所有依赖递归(导入包的依赖关系),可以使用此自定义格式:
go list -f "{{.ImportPath}} {{.Deps}}" ./...
但通常这是一个很长的列表,只是每个包的单个导入("{{.Imports}}"
)就是你想要的。
答案 1 :(得分:7)
答案 2 :(得分:2)
在* nix系统上(可能在带有msysgit或cmder等bash工具的Windows上),看看我安装了哪些软件包,我可以运行:
history | grep "go get"
但那是混乱的输出。无论出于何种原因,我决定看到我可以稍微清理一下这个输出,所以我为这个命令做了一个别名:
history | grep 'go get' | grep -v ' history ' | sed -e $'s/go get /\\\\\ngo get /g' | grep 'go get ' | sed -e $'s/-u //g' | sed -e $'s/-v //g' | sed -e $'s/ &&//g' | grep -v '\\\n' | egrep 'get [a-z]' | sed -e $'s/go get //g' | sed -e $'s/ //g' | sort -u
请不要问为什么我这样做。挑战可能吗?让我解释一下这些部分
history
历史
grep "go get"
grep over history,只显示我们去过的地方并获得了一些东西
grep -v " history "
并删除我们在历史记录中搜索“get get”的时间
sed -e $'s/go get /\\\\\ngo get /g'
现在我们采取“go get”的任何实例并在它前面推一条新线。现在他们都在开始。
grep "go get "
仅过滤现在以“go get”开头的行
sed -e $'s/-u //g'
和sed -e $'s/-v //g'
删除我们搜索过的标记。您可以将它们保留在输出中,但在输出完成后可能会重复。
sed -e $'s/ &&//g'
有时我们会使用'&&'安装多个命令所以让我们从线的末端删除它们。
grep -v "\\\n"
我的输出还有其他行打印了我不需要的换行符。所以这摆脱了他们
egrep "get [a-z]"
请确保正确格式化包裹网址。
sed -e $'s/go get //g'
删除“go get”文字
sed -e $'s/ //g'
删除任何空格(需要过滤重复项)
sort -u
现在对剩余的行进行排序并删除重复项。
这在其他系统上完全未经测试。同样,我很确定有更清洁的方法来做到这一点。只是觉得尝试会很有趣。
使用go ls
命令显示您明确安装的实际软件包可能会更有趣。但那还有很多工作要做。特别是因为我还在学习Go。
输出:
> gols
code.google.com/p/go.crypto/bcrypt
github.com/golang/lint/golint
github.com/kishorevaishnav/revelgen
github.com/lukehoban/go-find-references
github.com/lukehoban/go-outline
github.com/newhook/go-symbols
github.com/nsf/gocode
github.com/revel/cmd/revel
github.com/revel/revel
github.com/rogpeppe/godef
github.com/tpng/gopkgs
golang.org/x/tools/cmd/goimports
golang.org/x/tools/cmd/gorename
gopkg.in/gorp.v1
sourcegraph.com/sqs/goreturns
答案 3 :(得分:0)
go list ...
很有用,但对我来说可能有两个问题:
go.mod
文件中列出的软件包),而我不在乎周围的其他软件包(可能只是为了安装这些软件包而已)。试试看)。 go list ...
对此无济于事。所以这有点不同。假设所有项目都在~/work
下:
find ~/work -type f -name go.mod \
-exec sed $'/^require ($/,/^)$/!d; /^require ($/d;/^)$/d; /\/\/ indirect$/d; s/^\t+//g' {} \; \
| cut -d' ' -f1 \
| sort | uniq
逐行说明:
go.mod
个文件sed
应用于每个文件以按如下方式过滤其内容(逐个表达式解释表达式):
require(
... )
块require(
和)
行,因此仅保留包含软件包的行1)请注意,sed表达式参数使用bash quoting来将TAB字符转义为“ \ t”,以使其在文字TAB上易于阅读。