2 回答
TA贡献1836条经验 获得超4个赞
以下是填写的问题中的文件。说明了从 db 到模型的导入。我将模块名称设置为“my.example”。更改该名称以满足您的需求。最好选择包括“。”的内容。以避免与标准包冲突。您可以在 Go PlayGround 上运行此代码。如何编写 Go 代码详细解释了所有这些内容。
-- main.go --
package main
import (
"my.example/pkg/models/db"
)
func main() {
db.Hello()
}
-- go.mod --
module my.example
-- cmd/config/config.go --
package config
-- cmd/config/handlerr.go --
package config
-- handlers/handlers.go --
package handlers
-- pkg/models/models.go --
package models
func Hello() string { return "hello from models" }
-- pkg/models/db/db.go --
package db
import (
"fmt"
"my.example/pkg/models"
)
func Hello() {
fmt.Println("hello from db and", models.Hello())
}
-- pkg/router/router.go --
package router
关于文件的布局:这是在意见的土地上,所以我只是问你一个问题。pkg和中的额外嵌套级别会给cmd您带来什么好处吗?
TA贡献1772条经验 获得超8个赞
正如@maxm 提醒我的那样,使用GOPATH,这是他提到的一个很好的例子。
所以,如果我的网络搜索和一个小示例程序是正确的,这几乎就是这里发生的事情。
Golang 将本地包视为带有 .go 文件的文件夹,/modules/module.go如果modules.go在package modules第一行有的话。
所以,当我们包含一个本地包时,我们实际上是包含一个文件夹。我创建了一个小例子:
/project
main.go
/modules
modules.go
/printer
printer.go
main.go
package main
import (
"./modules/printer"
)
func main() {
printer.Print()
}
模块/modules.go
package modules
import (
"fmt"
)
func Modules() {
fmt.Println("Modules Package")
}
模块/打印机/printer.go
package printer
import (
"../../modules"
)
func Print() {
modules.Modules()
}
这确实有效!所以,你可以导入一个父模块,你只需要包含文件夹。
当然,我们不能有导入周期,Golang 不允许,如果你有这种错误,最好改变你的程序结构。
我不是在谈论路径和东西,这只是一个实用的解决方案。所以,聪明的人,请纠正我!
- 2 回答
- 0 关注
- 105 浏览
添加回答
举报