我非常习惯导入不同的包并使用其中的函数的全局变量。但我在互联网上的所有搜索都表明我无法导入文件。只是包裹。但我的 IDE(在 IntelliJ 和 VS Code 中都尝试过)无法引用该变量。代码如下:
这是我的文件夹结构
. ├── QuickPOCinGo.iml ├── cmd │ └── data │ └── assets.go ├── go.mod └── main.go
这是 go.mod
文件
// go.mod module QuickPOCinGo go 1.21
这是 assets.go
文件
package main var Assets = []string{"guitar", "laptop", "phone"}
这里是main.go
package main import "log" func main() { log.Println("This is a simple project") for i, a := range Assets { # Assets variable is not getting resolved log.Printf("Index is %d and name is %s", i, a) } }
assets.go
和 main.go
都在主包中。不确定如何解决这个问题,网上找到的所有资源都没有处理相同的包引用。
正如我所说,您不能直接导入文件,只能导入包,但是,您可以在项目中创建一个单独的包来封装要从多个文件访问的变量或函数,因此在您的示例中,您可以创建一个名为 data
的包并将 assets.go
文件移动到该包中,之后,在 main.go
文件中,您可以导入 data
包并访问 Assets
变量作为 data.Assets
。
让我向您展示如何操作,例如这是您的结构:
├── QuickPOCinGo.iml ├── cmd │ └── main.go ├── go.mod └── data └── assets.go
首先将包编辑并声明到您的 assets.go
文件中,如下所示:
package data var Assets = []string{"guitar", "laptop", "phone"}
然后更新您的 main.go
以导入 data
包并访问 Assets
,如下所示:
package main import ( "log" "your_module_path/data" ) func main() { log.Println("This is a simple project") for i, a := range data.Assets { log.Printf("Index is %d and name is %s", i, a) } }