Golang本地模块找不到如何解决

Golang本地模块找不到如何解决 在迁移代码以使用模块时遇到了困难:

我有两个模块,位于GOPATH中:

src/project/lib 和 src/project/app

src/project/lib/main.go

package lib

import (
"fmt"
)

func Try() {
    fmt.Println("test")
}

src/project/app/main.go

package main

import (
	"project/lib"
)

func main() {
	lib.Try()
}

GO111MODULE=off 时,构建没有问题。 但是当切换到 GO111MODULE=on 时,无法再找到 lib 库

> go build
build app: cannot load project/lib: cannot find module providing package project/lib

感谢您的帮助


更多关于Golang本地模块找不到如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

感谢,这样解释就明白了。

我认为需要使用重定向功能来映射到正确的路径。

更多关于Golang本地模块找不到如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


module NAME

go 1.14

你好,

GO111MODULE=on 选项将查找以下路径 NAME/lib

在这种情况下,无论你使用 go mod init NAME 命令初始化模块时设置的是什么名称,都将作为起始路径,而不是 project

你可以检查 go.mod 文件,在里面你会找到 module NAME 这一行。NAME 将成为你的入口包。

希望这对你有所帮助。

这是一个典型的Go模块迁移问题。当启用模块支持时,Go不再依赖GOPATH来解析包路径,而是使用模块系统。以下是解决方案:

方法1:将项目转换为模块

首先,在两个目录中分别创建 go.mod 文件:

src/project/lib/go.mod:

module project/lib

go 1.21

src/project/app/go.mod:

module project/app

go 1.21

require project/lib v0.0.0

replace project/lib => ../lib

然后构建:

cd src/project/app
go build

方法2:使用相对路径导入

修改app的导入语句:

src/project/app/main.go:

package main

import (
	"../lib"
)

func main() {
	lib.Try()
}

src/project/app/go.mod:

module project/app

go 1.21

方法3:将两个包放在同一个模块中

创建统一的go.mod文件:

src/project/go.mod:

module project

go 1.21

src/project/app/main.go:

package main

import (
	"project/lib"
)

func main() {
	lib.Try()
}

目录结构:

src/project/
├── go.mod
├── lib/
│   └── main.go
└── app/
    └── main.go

推荐使用方法1,因为它最符合Go模块的设计理念,使用replace指令可以在开发阶段方便地引用本地模块。

回到顶部