【问题标题】:Go import local package去导入本地包
【发布时间】:2021-05-16 23:29:36
【问题描述】:

我有一个main.go

package main

import (
    "context"
    "fmt"
    "log"

    model "model"

    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
)

func handler(...){
}

我尝试导入目录model中的模型,文件名为model.go

它只包含:

package model

type xxx struct {
    xxx
}

我尝试在 main 中导入它,但出现错误:

build: cannot load model: cannot find module providing package model

【问题讨论】:

标签: go


【解决方案1】:

如果您的模块 model 不是本地的,那么您可以使用 Tonys 答案,它会正常工作,但如果您在本地使用此模块,则需要在您的 go.mod 文件中添加路径。

例如,本地模块model 仅包含model.go,其内容如下

package model

type Example struct {
    Name string
}

func (e *Example) Foo() string {
    return e.Name
}

对于这个本地模块必须必须使用命令go mod init model 来初始化模块并且./model/go.mod 的内容将是

module model
go 1.13

在您要导入此模块的主模块中,您需要添加以下行

require model v1.0.0
replace model v1.0.0 => {Absolute or relative path to the model module}

所以,您的main 测试模块的go.mod 文件将如下所示

module main

require model v1.0.0
replace model v1.0.0 => ./model

go 1.13

通过设置,您可以在这个 test 模块中使用这个模块,只需 import "model"

因此在使用 main 方法测试模块时

package main

import (
    model "model"
)

func main() {
    example := model.Example{
        Name: "Hello World",
    }
    println(example.Foo())
}

输出将是

Hello World

【讨论】:

  • 它可以工作,但是在跨包调用方法时很复杂。每个包都必须有 go.mod 声明,更好的方法是将它们放在 vendor 文件夹中
【解决方案2】:

如果您的go.mod 看起来像这样:

module github.com/meakesbia/myproject

go 1.14

那么你需要使用完整的模块引用来导入模块包:

import "github.com/meakesbia/myproject/model"

如果它完全是本地项目,则将 github.com/meakesbia 替换为来自 go.mod 的模型名称,例如:

module meakesbia/myproject

go 1.14
import "meakesbia/myproject/model"

您不需要将replace 指令添加到go.mod 文件,除非您对从例如导入的模块进行本地更改。 github.

【讨论】:

  • 嗨,它完全是本地的。所以它不在 GitHub 上。
  • @tonys 您能否再次检查在本地项目的情况下,不带replace 指令的导入是否可以正常工作?
  • @HamzaAnis,我在编辑帖子之前仔细检查了一遍,然后又检查了一遍。看起来不错 - 至少“在我的机器上”:-)
  • 你的$GOPATH下有这个模块?
  • @HamzaAnis:不——根据官方指南(blog.golang.org/using-go-modules)和其他博客(例如blog.francium.tech/…),使用 Go 模块您不再使用 GOPATH。如果它已设置和/或您正在使用“src”目录结构,这可能就是您需要在 go.mod 中使用“替换”指令的原因。
猜你喜欢
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2012-04-25
相关资源
最近更新 更多