Go 1.12模块:非本地导入中的本地导入

mw3dktmi  于 2023-03-27  发布在  Go
关注(0)|答案(3)|浏览(151)

我目前正在使用Go 1.12模块,真的很厌倦导入。
我正在使用Gin(Web微服务)和Gorm(Golang ORM)来制作REST-API。在使用Golang模块时,一切正常。但在导入本地包时遇到了麻烦
目录树:

go.mod:

module github.com/Aragami1408/go-gorm

go 1.12

require (
    github.com/gin-gonic/gin v1.4.0
    github.com/jinzhu/gorm v1.9.9
    github.com/lib/pq v1.1.1
    github.com/satori/go.uuid v1.2.0
)

DB.go:

package db

//code below...

任务.go:

package task

import (
    "../db"
)

但是当我运行时,仍然得到这个错误:
local import "../db" in non-local package
我在谷歌上搜索了很多,没有任何帮助

ars1skjm

ars1skjm1#

从“模块是否使用相对导入(如import“./subdir”)?”
在模块中,子目录最终会有一个名称。
如果父目录显示为“module m”,则子目录将导入为“m/subdir”,而不再是“./subdir”。
在您的情况下:

import "github.com/Aragami1408/go-gorm/db"
# or maybe
import "go-gorm/db"

这假设您有set GO111MODULE=on,正如下面Silvio Lucas所注解的那样。

zujrkrfu

zujrkrfu2#

如果你使用的是go模块,你可以使用以下命令将你的包替换为本地包:

go mod edit -replace github.com/username/project=/localpath

那就打电话

go get github.com/username/project

一切都会正常的

46qrfjad

46qrfjad3#

当迁移到“软件包管理器”时,您可以使用以下命令创建文件go mod

go mod init myhost/myrepo/mymodule

然后将创建go.mod文件:

module myhost/myrepo/mymodule

go 1.15

现在你可以利用这个文件来列出你对其他模块的依赖:

# i.e: your module mymodule depends on github.com/gorilla/mux
go get github.com/gorilla/mux

你运行它?然后再次检查go.mod的内容

module myhost/myrepo/mymodule

go 1.15

require (
    github.com/gorilla/mux v1.7.4
)

你很高兴,因为你利用了包管理器的功能,你像老板一样管理依赖关系。

然而……

但是,您忘记了您需要维护所有使用相对路径导入目录的go文件。
示例:
如果有main.go

package main

import (
    "fmt"

    "./router" // !! RELATIVE PATH
)

您还必须通过将相对路径替换为[module-name]/relative-path来进行迁移。在这种情况下,它必须变为:

package main

import (
    "fmt"

    "myhost/myrepo/mymodule/router" // !! 💼 No more RELATIVE PATH
)

相关问题