首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Go中将服务指针从一个包传递到另一个包?

如何在Go中将服务指针从一个包传递到另一个包?
EN

Stack Overflow用户
提问于 2016-07-30 03:02:07
回答 1查看 1.8K关注 0票数 2

我在不同的文件中分离了不同的http.HandleFunc,根据它们所涉及的页面。我使用gorilla/sessions管理客户端会话和用户身份验证,并使用go-sql-driver访问MySQL数据库。

项目布局:

代码语言:javascript
复制
<PROJECT ROOT>
   -> <cliend>                     // This folder containing html, css, and js
   -> <pagehndler>
         -> <index>
                -> index.go        // Need to access database and session 
         -> <projbrwsr>
                -> projbrwsr.go    // Need to access database and session
   -> main.go

因此,我有一个指向go-sql-driver服务的指针

代码语言:javascript
复制
db, err := sql.Open("mysql", "user:password@/dbname")

和指向gorilla/sessions服务的1个指针

代码语言:javascript
复制
var store = sessions.NewCookieStore([]byte("something-very-secret"))

根据我的理解,有两种方法可以将两个指针传递给其他包:

  1. 将两个指针封装到两个包(sessdb)中,并将它们导出。并且,需要导入包(sessdb)所需的服务的包。并调用导出的指针。 -> //此文件夹包含html、css、和js -> index.go //需要访问数据库和会话-> -> projbrwsr.go //需要访问数据库和会话-> -> sess.go //存储数据库服务指针-> db.go //存储会话服务指针-> main.go
  2. 初始化主包中的两个指针,并将它们传递给包含页面句柄函数的另一个包,作为args。在另一个包中,将args设置为一个局部变量,以便我们可以在另一个包中本地调用它。 -> //此文件夹包含html、css、和js -> index.go //需要访问数据库和会话//包含一个函数newService(db *DB) -> -> projbrwsr.go //需要访问数据库和会话//包含一个func newService(sess *CookieStore) -> main.go

将这两个指针传递给其他包以供其他句柄函数调用的最佳方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-30 08:44:56

这就是应该起作用的概念。

在包中,您应该声明一个变量,该变量被导出。这个变量必须是一个指针。

代码语言:javascript
复制
var myVar = 3
var MyPointer = &myVar

https://play.golang.org/p/EQDwGF7pjv

在主包中,您可以设置指向“全局”db或会话adress的指针。

代码语言:javascript
复制
mypackage.MyPointer = dbPointer

然后,包内的指针指向您的dbPointer。我认为这是将指针传递到其他包的好方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38669971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档