Golang中无法使用自定义包的问题如何解决

Golang中无法使用自定义包的问题如何解决 嗨,我被一个非常基础的问题卡住了。这是个新手问题。 我只想在不使用外部仓库的情况下创建一个自定义包。

这是我的文件夹结构,位于 ~/go/src 文件夹之外。

go-packages/
  +utility
     -helper.go
  -main.go
package main
import (
  "fmt"
  "go-packages/utility"
)
func main() {
     fmt.Println(utility.Testme())
}

以及 helper.go

package utility
func Testme() int {
return 1
}

运行 go run 总是产生错误 main.go:5:2: package go-packages/utility is not in GOROOT (/usr/local/go/src/go-packages/utility) 我尝试添加 mod 文件:go mod init example dot com/go-packages/,但没有帮助。 我哪里做错了?

我参考了很多资料,尝试了其中的例子。 blog.golang.org/using-go-modules 以及许多其他资料。


更多关于Golang中无法使用自定义包的问题如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

@skillian,谢谢你的提示!

更多关于Golang中无法使用自定义包的问题如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


http://example.com/go-packages/utility

@skillian 你拯救了我的第二天!非常感谢!

@anthonys 如果是这种情况,请使用 import "example.com/go-packages/utility"

实际上我在 go-packages 文件夹里有这个 go.mod

module example.com/go-packages

go 1.14

你好,@anthonys,你能编辑一下你的帖子然后尝试再次保存吗?我不太能确定文件夹结构,因为我觉得你的缩进可能丢失了。你能用反引号(`)把它包起来吗,像这样:

code

@anthonys 看看这篇帖子:使用Go模块组织本地代码包

我认为你需要在 go-packages 文件夹中创建一个 go.mod 文件,将模块名称定义为 "go-packages",然后你的 import 语句应该就能正常工作了。

这是一个常见的Go模块配置问题。你的项目结构是正确的,但需要正确设置模块。

在你的 go-packages 目录中,应该这样配置:

  1. 初始化模块(在 go-packages 目录中):
cd go-packages
go mod init go-packages
  1. 更新你的 main.go
package main

import (
    "fmt"
    "go-packages/utility"
)

func main() {
    fmt.Println(utility.Testme())
}
  1. 确保 helper.go 正确
package utility

func Testme() int {
    return 1
}
  1. 运行程序
go run main.go

如果仍然有问题,检查你的 go.mod 文件内容应该是:

module go-packages

go 1.xx

关键点是:

  • 模块名称(go mod init 的参数)应该与导入路径匹配
  • 所有文件都在模块根目录下
  • 不要将项目放在 GOPATH 中,因为你在使用Go模块

如果问题仍然存在,可以尝试:

go mod tidy
go run main.go
回到顶部