3 回答
TA贡献1951条经验 获得超3个赞
您正在尝试像 Java 或 Python 一样编写 Go。Go 两者都不是。Go 没有类,Go 有类型。Go 不使用继承,Go 使用组合。
如果您希望每次调用另一个函数/方法时都调用某个函数/方法,您可以明确地对其进行编码:
func (th *BaseThing) Init() {
th.OpenDB()
// Your code here.
}
如果您希望多个值共享一个事物,请明确设置它:
db := NewDB()
th := NewThing() // Or th := NewThing(db) depending
th.DB = db // on how you design your constructor.
如果要共享此功能,请使用组合:
type MyThing struct {
BaseThing
// Other fields here.
}
func (th *MyThing) Foo() {
th.Init() // Same as th.BaseThing.Init(). Opens DB etc.
// Your code here.
}
TA贡献1735条经验 获得超5个赞
一个 API 请求进入MVC的视图
在 MVC 架构中,请求被分派到控制器,而不是视图。
每当调用某个控制器类时加载此函数。
类是实例化的,而不是调用的,Go 中没有类。
继承db 变量以在整个控制器中使用它。
Go 中没有继承。
您正在一个名为的包中打开一个数据库连接settings
。这可能不是该包的最佳名称。
通常,您尝试在 Go 中执行 python/ruby/php。那不会让你走得太远。阅读 Go 文档并学习像 gopher 一样思考 ;)
TA贡献1775条经验 获得超11个赞
我不完全理解你的意思,但是,如果你只想与所有处理程序共享一个数据库连接,你会做这样的事情:
var (
db *sql.DB
)
func main() {
db = newDb(DbConnection)
// handlers here
}
func newDb(connection string) *sql.DB {
db, err := sql.Open("postgres", connection)
if err != nil {
panic(err)
}
return db
}
在设置文件中,您可以拥有:
const (
DbConnection = "user=postgres password=postgres dbname=test_db"
)
您的所有处理程序都可以访问 db 上的连接。sql 库自动处理连接池。
- 3 回答
- 0 关注
- 274 浏览
添加回答
举报