首页 > 文章列表 > 如何在同一包中的另一个文件中共享变量

如何在同一包中的另一个文件中共享变量

385 2024-04-15
问题内容

我非常习惯导入不同的包并使用其中的函数的全局变量。但我在互联网上的所有搜索都表明我无法导入文件。只是包裹。但我的 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.gomain.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)
       }
   }