登录
首页 >  Golang >  Go问答

在一个文件夹中同时创建多个Go插件

来源:stackoverflow

时间:2024-03-01 20:36:26 145浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《在一个文件夹中同时创建多个Go插件》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我在子目录下有一个插件列表。我想用一个命令来构建所有这些。有一个示例目录布局。

plugins/cat/cat.go
plugins/dog/dog.go
plugins/cow/cow.go

我现在构建它们,如下所示:

go build -i -buildmode=plugin -o build/cat.so plugins/cat/cat.go
go build -i -buildmode=plugin -o build/dog.so plugins/dog/dog.go
go build -i -buildmode=plugin -o build/cow.so plugins/cow/cow.go

还有另一个命令(因为它在 makefile 中),它可以帮助我更接近:

# ex.: make bin-so target=cat
bin-so: builddir
    go build -i -buildmode=plugin -o build/$(target).so plugins/$(target)/$(target).go

我想创建一行来构建这些插件。我找到了如何列出文件夹名称,但我必须在上面的命令中以某种方式使用它。

find ./plugins -mindepth 1 -maxdepth 1 -type d | awk 'sub(/^.*\//, "")'

所以它会列出文件夹的名称,这些对我来说很好,但我必须将其重定向到插件构建器命令。

我想要类似的东西(只是一个例子):

find ./plugins -mindepth 1 -maxdepth 1 -type d | awk 'sub(/^.*\//, "")' | go build -i -buildmode=plugin -o build/$1).so plugins/$1/$1.go

解决方案


您可以使用 -execdir 选项在一个 find 命令中执行此操作,该选项允许您直接在文件的基本名称上运行命令

find ./plugins -mindepth 1 -maxdepth 1 -type d -execdir bash -c '
    for arg; do
        name="${arg##*./}"
        go build -i -buildmode=plugin -o build/"${name}".so plugins/"${name}"/"${name}".go
    done' _ {} +

这比在 find 之后使用多个管道来达到相同的结果要好得多。想象一下 sh -c '..' 中的部分作为一个单独的脚本,并且您将参数传递给脚本,并返回名称 ./cow.go 等。

这里 -execdir 的优点是您无需担心目录名称之前的直接路径。您将获得找到的目录的最终基本名称。

请参阅 Understanding the -exec option of find on Unix.SE 了解有关所使用的每个选项的更多信息。

理论要掌握,实操不能落!以上关于《在一个文件夹中同时创建多个Go插件》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>