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

5 回复

你需要创建一个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

然后修改你的目录结构和导入路径:

  1. 目录结构
Desktop/MyApp/
├── go.mod
├── main.go
└── pkg/
    └── variables.go
  1. 修改 variables.go
package variables

var (
	Array001 = []string{"a", "b", "c"}  // 首字母大写才能被外部访问
	Array002 = []string{"1", "2", "3"}
)
  1. 修改 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)
}

关键点:

  1. 使用 go mod init 创建模块
  2. 导入路径使用模块名(myapp)加上包所在目录路径(/pkg
  3. Go语言中只有首字母大写的标识符才能被其他包访问

如果还有问题,可以运行 go mod tidy 来同步依赖。

回到顶部