我正在编写我的第一个go web应用程序,我有以下结构:
.
├── main.go
├── model
│ ├── model.go
│ └── book.go
├── route
│ └── route.go
└── view
└── view.go
/main.go 是我的 main()所在的位置。在那个文件中我还定义了一个变量Env,我将保留我的数据库实例(至少这是计划)。
在 /main.go 我做
import "project/view"
type Env struct {
db models.Collection
}
// rest of the code
func main() {
db, err := models.NewDB()
// etc
MyEnv := &Env{db}
// etc
}
但事实是,在 /view/view.go 中,我需要调用 /model/book.go 中定义的方法,我想是这样做的是通过 MyEnv.db 实例,但我当然得到一个错误:
view / view.go:13:14:undefined:Env
^^任何有助于解决这个问题的帮助都会受到赞赏,或者如何更好地构建我的项目。 :)
答案 0 :(得分:0)
在主要
上的代码顶层定义它var MyEnv Env
func main(){
MyEnv = &Env{}
}
答案 1 :(得分:0)
如果您想使用其他套餐的名称(变量,类型等),则需要import
该套餐,例如使用import "view"
,您可以在主程序包中执行view.Something
。
现在您无法导入主程序包,这意味着您的view
程序包无法导入main
来致电main.Env
。所以你必须使用另一种方式,一些可能性是:
将Env
类型放入view
包中,然后在main
包中声明var myEnv = view.Env{}
。
将Env
类型放入自己的包env
中,然后将其导入view
和main
您可以在Env
包中使用interface
类型,而不是使用具体类型view
。此类型应仅公开您需要的功能。然后,您可以在main
包中实施该类型,并将其实例传递给view
。