Golang导入包时遇到错误怎么办

Golang导入包时遇到错误怎么办

$ echo $GOPATH /home/lupe/prog/go

/home/lupe/prog/go/src/github.com/lpvm/newest_sapo_jobs 目录下有:

go.mod main.go controllers/controller.go models/models.go templates/index.gohtml

/home/lupe/prog/go/src/github.com/lpvm/empregos_sapo_scraper 目录下有:

go.mod main.go scraper/scraper.go

这个 main.go 文件的内容是:

package main
import "github.com/lpvm/empregos_sapo_scraper/scraper"
func main() {
	scraper.Scrape()
}

文件 scraper/scraper.go 的内容是:

package scraper
import (
	"github.com/lpvm/newest_sapo_jobs/models"
)

当从后一个目录运行 go run main.go 时,出现错误:

$ go run main.go go: finding module for package github.com/lpvm/newest_sapo_jobs/models go: found github.com/lpvm/newest_sapo_jobs/models in github.com/lpvm/newest_sapo_jobs v0.0.0-20200424210640-7bd36b493046 go: github.com/lpvm/empregos_sapo_scraper/scraper imports github.com/lpvm/newest_sapo_jobs/models: github.com/lpvm/newest_sapo_jobs@v0.0.0-20200424210640-7bd36b493046/go.mod: verifying module: github.com/lpvm/newest_sapo_jobs@v0.0.0-20200424210640-7bd36b493046/go.mod: reading https://sum.golang.org/lookup/github.com/lpvm/newest_sapo_jobs@v0.0.0-20200424210640-7bd36b493046: 410 Gone server response: not found: github.com/lpvm/newest_sapo_jobs@v0.0.0-20200424210640-7bd36b493046: invalid version: git fetch -f origin refs/heads/:refs/heads/ refs/tags/:refs/tags/ in /tmp/gopath/pkg/mod/cache/vcs/b1317fd2236a1ac7a6e82f4ba99f4dd56f6632bcee6f2923d3066ac5061b7d6f: exit status 128: fatal: could not read Username for ‘https://github.com’: terminal prompts disabled

最后一条可能相关的信息是,我之前对包 github.com/lpvm/newest_sapo_jobs 推送到 GitHub 的提交进行了 取消推送

如何解决这个问题。

另一个问题。既然后一个包与前一个包相关联,是否可以将其作为前一个包的子目录放置,如下所示:

go.mod main.go scraper/scraper.go controllers/controller.go models/models.go templates/index.gohtml 或者放在那里是否更合理?


更多关于Golang导入包时遇到错误怎么办的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

针对此问题有多个建议方案。 对我有效的方法是设置环境变量 GOPRIVATE=github.com/mygithubusername/*,并在执行 go run main.go 或某些 go get 命令前使用它。

因此,为了永久生效,将其添加到 ~/.bashrc 中:

export GOPRIVATE=github.com/mygithubusername/*

更多关于Golang导入包时遇到错误怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个典型的Go模块依赖验证失败问题。错误信息显示Go工具链无法验证github.com/lpvm/newest_sapo_jobs@v0.0.0-20200424210640-7bd36b493046这个版本,因为该版本在GitHub上已不存在(你执行了取消推送操作)。

解决方案

1. 清理模块缓存并更新依赖

# 清理模块缓存
go clean -modcache

# 删除go.sum文件
rm go.sum

# 更新依赖
go mod tidy

2. 如果上述方法无效,使用replace指令

empregos_sapo_scraper/go.mod文件中添加replace指令指向本地路径:

module github.com/lpvm/empregos_sapo_scraper

go 1.xx

replace github.com/lpvm/newest_sapo_jobs => ../newest_sapo_jobs

require (
    github.com/lpvm/newest_sapo_jobs v0.0.0-00010101000000-000000000000
)

3. 或者更新依赖到最新版本

# 获取最新版本
go get github.com/lpvm/newest_sapo_jobs@latest

# 或者指定master分支
go get github.com/lpvm/newest_sapo_jobs@master

关于项目结构问题

将scraper作为子目录放在同一个项目中是更合理的做法,特别是当它们紧密相关时:

// 项目结构
project/
├── go.mod
├── main.go
├── scraper/
│   └── scraper.go
├── controllers/
│   └── controller.go
├── models/
│   └── models.go
└── templates/
    └── index.gohtml

这样使用时,导入路径变为:

// main.go
package main

import "./scraper"

func main() {
    scraper.Scrape()
}
// scraper/scraper.go
package scraper

import (
    "./models"
)

func Scrape() {
    // 使用models包
}

或者使用完整的模块路径:

// scraper/scraper.go
package scraper

import (
    "github.com/lpvm/newest_sapo_jobs/models"
)

func Scrape() {
    // 使用models包
}

这种结构避免了跨模块的依赖管理问题,使项目更易于维护。

回到顶部