求教,写项目的时候用到数据库,我直接在代码里写了一个全局变量,如何友好的把这个db.open返回的指针作用于整个项目?

oscarzhou · 2017-10-25 08:47:40 · 1555 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-10-25 08:47:40 的主题,其中的信息可能已经有所发展或是发生改变。

大神们,没有什么项目实战经验,自己想写个website。 但是在用到数据库这块,觉得很不合理,直接就声明了一个db的全局变量,然后在main.go中调用db.open 类似的方法与数据库建立连接,然后返回值赋给了之前声明的db。我看了beego的代码,还有gin的。但是没法把人家的设计结构的思想转成我自己的。能有朋友给我指点么?

我自己也想了一些。就是声明一个结构体,里面有一个sql包里的db结构体作为我自定义结构体里的变量。然后在写一些这个结构体对应的method, 格式类似func (o *db) GetProducts(){...} . 但是感觉怪怪的。真心求大家帮个忙, 点我一下


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1555 次点击  
加入收藏 微博
12 回复  |  直到 2017-10-25 19:33:54
oscarzhou
oscarzhou · #1 · 7年之前

求电子邮件或者其他任何方法沟通。只要大神方便就行。

channel
channel · #2 · 7年之前

定义一个包,然后在包的 init 中初始化 bd,之后其他包直接引用该包,使用该变量。

oscarzhou
oscarzhou · #3 · 7年之前
channelchannel #2 回复

定义一个包,然后在包的 init 中初始化 bd,之后其他包直接引用该包,使用该变量。

那这个变量在这个包里是全局的?

oscarzhou
oscarzhou · #4 · 7年之前
channelchannel #2 回复

定义一个包,然后在包的 init 中初始化 bd,之后其他包直接引用该包,使用该变量。

谢谢回复啊,真心怕石沉大海,没想到这么快就有人回复 了,感激

channel
channel · #5 · 7年之前

包里全局,且是导出的(即首字母大写)

aiaa5505
aiaa5505 · #6 · 7年之前

在main 程序中引用你的db初始化!!初始化一次 其他函数 就都可以调用

oscarzhou
oscarzhou · #7 · 7年之前

@channel 啊~理解了,我之前是包里全局,但是没有用init初始化。谢谢啦

oscarzhou
oscarzhou · #8 · 7年之前

@aiaa5505 这个db也是其所在包里的全局可导出变量 是吗

oscarzhou
oscarzhou · #9 · 7年之前
channelchannel #5 回复

包里全局,且是导出的(即首字母大写)

刚才看了一眼beego工具生成的一个项目框架。

var (
    // BeeApp is an application instance
    BeeApp *App
)

func init() {
    // create beego application
    BeeApp = NewApp()
}

他是这样写的,大神,你说的也是这个意思是不?真的太感谢了。要不我一个人要纠结好长时间!

specita
specita · #10 · 7年之前

一般就是定义一个全局变量,初始化一次,方便快捷,坏处大概就是因为是全局变量吧 func (o *db) GetProducts(){...} 这种写法我也用过,确实比较繁琐,好处就是可以单测mock db的数据,也只是包可见 

channel
channel · #11 · 7年之前
oscarzhouoscarzhou #9 回复

#5楼 @channel 刚才看了一眼beego工具生成的一个项目框架。 ```go var ( // BeeApp is an application instance BeeApp *App ) func init() { // create beego application BeeApp = NewApp() } ``` 他是这样写的,大神,你说的也是这个意思是不?真的太感谢了。要不我一个人要纠结好长时间!

就是这个意思

oscarzhou
oscarzhou · #12 · 7年之前
channelchannel #11 回复

#9楼 @oscarzhou 就是这个意思

非常感谢,多向你学习

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传