Golang中如何调用不在GOROOT中的包
Golang中如何调用不在GOROOT中的包
你好,我正在尝试从另一个包中获取变量,但我遇到了错误:package pkg/variable is not in GOROOT (C:\Program Files\Go\src\pkg\variable)。我不想在 GOROOT 中创建包,那么如何调用一个不在 GOROOT 中的包呢?我的主代码在 Desktop\MyApp 目录下,而变量包在 Desktop\MyApp\pkg 目录下。以下代码展示了我尝试的做法:
变量包 (variables.go):
package variables
var (
array_001 = []string{"a", "b", "c"}
array_002 = []string{"1", "2", "3"}
)
主程序 (myapp.go):
package main
import (
"fmt"
variables "pkg/variable"
)
func main() {
w := variables.array_001
fmt.Println(w)
}
更多关于Golang中如何调用不在GOROOT中的包的实战教程也可以访问 https://www.itying.com/category-94-b0.html
你需要创建一个Go模块,然后就可以在该模块内解析包。
更多关于Golang中如何调用不在GOROOT中的包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
完美,这个方法有效。非常感谢。
我的项目结构如下: Myapp(文件夹) >> variables(文件夹) + go.mod + myapp.go variables(文件夹) >> variables.go
go.mod:
module myapp.go
go 1.18
模块名称下方有红色下划线提示错误:Desktop\MyApp\go.mod:2:2: unknown directive: variables.go
由于你的模块是 myapp.go,那么访问你变量的路径应该是 myapp.go/pkg(或者是 myapp.go/pkg/bariables,你描述中的文件夹结构不是很清晰)。
我不关心那些波浪线。只要在终端能编译通过,一切就都没问题。如果终端报错了,请告诉我们。
func main() {
fmt.Println("hello world")
}
这个问题是因为你的模块配置不正确。你需要创建一个 go.mod 文件来定义模块路径,然后正确导入本地包。
首先,在你的项目根目录(Desktop\MyApp)初始化模块:
cd Desktop/MyApp
go mod init myapp
这会创建 go.mod 文件,内容类似:
module myapp
go 1.21
然后修改你的目录结构和导入路径:
- 目录结构:
Desktop/MyApp/
├── go.mod
├── main.go
└── pkg/
└── variables.go
- 修改 variables.go:
package variables
var (
Array001 = []string{"a", "b", "c"} // 首字母大写才能被外部访问
Array002 = []string{"1", "2", "3"}
)
- 修改 main.go:
package main
import (
"fmt"
"myapp/pkg" // 使用模块路径 + 子目录路径
)
func main() {
w := variables.Array001 // 注意使用大写开头的变量名
fmt.Println(w)
}
或者使用带别名的导入:
package main
import (
"fmt"
vars "myapp/pkg"
)
func main() {
w := vars.Array001
fmt.Println(w)
}
关键点:
- 使用
go mod init创建模块 - 导入路径使用模块名(
myapp)加上包所在目录路径(/pkg) - Go语言中只有首字母大写的标识符才能被其他包访问
如果还有问题,可以运行 go mod tidy 来同步依赖。

