【问题标题】:How can I automatically add dependency packages to go.mod如何自动将依赖包添加到 go.mod
【发布时间】:2020-09-05 09:58:45
【问题描述】:

我已经修改了一个existing github project 与几十个第三方进口包,但我保持基本结构不变,就像这样:

.
├── config
│   ├── config.json
│   └── mysql.sql
├── gowebapp.go
├── LICENSE
├── README.md
├── static
├── template
│   ├── about
│   │   └── about.tmpl
│   ├── base.tmpl
└── vendor
    └── app
        ├── controller
        │   ├── about.go
        │   ├── error.go
        │   ├── index.go
        │   ├── login.go
        │   ├── notepad.go
        │   ├── register.go
        │   └── static.go
        ├── model
        │   ├── model.go
        │   ├── note.go
        │   └── user.go
        ├── route
        │   ├── middleware
        │   │   ├── acl
        │   │   │   └── acl.go
        │   │   ├── httprouterwrapper
        │   │   │   └── httprouterwrapper.go
        │   │   ├── logrequest
        │   │   │   └── logrequest.go
        │   │   └── pprofhandler
        │   │       └── pprofhandler.go
        │   └── route.go
        └── shared
            ├── database
            │   └── database.go
            ├── email
            │   └── email.go
            ├── jsonconfig
            │   └── jsonconfig.go
            ├── passhash
            │   ├── passhash.go
            │   └── passhash_test.go
            ├── recaptcha
            │   └── recaptcha.go
            ├── server
            │   └── server.go
            ├── session
            │   └── session.go
            └── view
                ├── plugin
                │   ├── noescape.go
                │   ├── prettytime.go
                │   └── taghelper.go
                └── view.go

现在我想使用 go 模块使项目具有可移植性。

main.go 导入如下:

    package main

    import (
    "encoding/json"
    "log"
    "os"
    "runtime"

    "app/route"
    "app/shared/database"
    "app/shared/email"
    "app/shared/jsonconfig"
    "app/shared/recaptcha"
    "app/shared/server"
    "app/shared/session"
    "app/shared/view"
    "app/shared/view/plugin"
)

如您所见,代码大部分位于vendor/app 文件夹中。

我已经添加了其他几个包。

问题是手动将包添加到 go.mod 非常繁琐,毕竟我可能会错过一些导入。

所以我想知道是否有一些自动技巧来获取 go.mod 的依赖项?

【问题讨论】:

    标签: go go-modules


    【解决方案1】:

    使用go mod init module-path 初始化模块,这将创建go.mod 文件。使用go build 构建项目。它会自动将所有依赖项添加到go.mod,并传递。

    不涉及手动步骤。 go 工具为您完成一切。当然,如果自动选择的版本不符合您的需要/意图,您可以编辑 go.mod 文件并“微调”包含的版本。请参阅Version Selection 默认情况下是如何完成的。

    请注意,从 Go 1.16 开始,可能需要 go mod tidy 来添加依赖项。

    【讨论】:

    • 我得到这个错误:build proj1: cannot load app/route: malformed module path "app/route": missing dot in first path element
    • 然后先修复该错误。您必须使用完整的导入路径,并以模块路径为前缀。例如。如果您的模块具有路径github.com/joe,并且您的模块包含app/route 文件夹,则必须将其导入为github.com/joe/app/route,而不仅仅是app/route
    • 其实app/route位于/home/me/go/src/proj1/vendor/app/route。那么我应该如何修改导入才能有用呢?
    • vendor 是特殊的,它仅在您通过-mod=vendor 时使用,但是您的所有部门都应该被出售。决定你想要什么。如果您不想提供所有的部门,那么将app/route 移动到项目根目录或您可以正确导入的另一个模块。要使用磁盘上的文件夹,请参阅How to use a module that is outside of “GOPATH” in another module?
    • 您可以尝试go mod vendor,它将所有依赖项下载到vendor 文件夹中。但是您的设置似乎本身就是自找麻烦。 “不喜欢 github 导入” 在这里不是一个有效的论点。你并没有让你的生活更轻松。
    猜你喜欢
    • 2016-11-08
    • 2019-01-07
    • 2014-11-27
    • 2012-08-25
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多