-2

我正在开发一个结构如下的 Go 项目:

pages (folder)
     -> faculty (folder)
        > instructors.go 
        > professors.go

     generalpages.go (inside pages folder)

generalpages.goRepository使用以下声明处理我的模式结构:

type Repository struct {
    App *config.AppConfig
}

所有常见页面(例如“主页”、“关于”)都可以正常使用这种类型的声明:

func (m *Repository) AboutPage(w http.ResponseWriter, r *http.Request) {
 // some functionality
}

但是,如果我想构造我的页面并为我的InstructorsPage(inside instructor.go) 使用相同的声明,如下所示,它不起作用并且 VSCode 中的错误说:undeclared name.

我的理解是一个对象应该在同一个包中可见,但它仍然不起作用。go build没有抛出任何错误,但是当我使用路由包(chi)时,它无法正确引用它。

4

1 回答 1

3

Go 包不是这样工作的。

如果你的目录结构是:

moduleRootDir
  parentDir
     subDir

如果两个目录都定义了包名pkg,那么这是两个不同的包。

如果模块名称是module,那么 parentDir 中包的导入路径是,子目录中module/pkg的包是module/pkg/pkg。为了使用 subDir 中定义的名称,将其导入到 parentDir 的 go 文件中:

package pkg

import (
   subpkg "module/pkg/pkg"
)

然后您可以使用subpkg.SymbolName.

于 2021-09-01T15:16:38.750 回答