首页 > 解决方案 > 在 repo 中使用多个模块时,Go get 找不到本地包

问题描述

我在使用 go 的新模块系统时遇到问题,因为我想定义一个本地模块并将其导入到主程序中。本地包位于主包/根文件夹的文件夹中。想象一下在$GOPATH.

项目结构

./main.go

package main

import "fmt"
import "example.com/localModule/model"

func main() {
    var p = model.Person{name: "Dieter", age:25}
    fmt.Printf("Hello %s\n", p.name)
}

./model/person.go

package model

type Person struct {
    name string
    age int
}

在根文件夹中,我通过调用初始化了一个模块

go mod init example.com/localModule

然后在model/文件夹中,我通过调用初始化子模块

go mod init example.com/localModule/model

错误

在根文件夹中调用以下命令失败。

$ go get
go build example.com/localModule/model: no Go files in

$ go build
main.go:4:8: unknown import path "example.com/localModule/model": cannot find module providing package example.com/localModule/model

go get 的错误信息被截断,我没有解析错误。

我不打算将模块推送到服务器,只是需要一种引用本地包的方式model,所以我分别选择了example.com/localModule/example.com/localModule/model

我在go1.11 darwin/amd64运行 MacOS 10.13.6 的 Macbook 上使用。

标签: gomodulego-modules

解决方案


您可以通过在 go.mod 中添加 require 语句和具有相对文件路径的匹配替换语句来获得所需的本地“子”模块。

在“根”./go.mod 中:

module example.com/localModule

require example.com/localModule/model v0.0.0

replace example.com/localModule/model v0.0.0 => ./model

推荐阅读