gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:42:03 26 4
gpt4 key购买 nike

我根据它们与哪个页面相关,将不同的 http.HandleFunc 分隔在不同的文件中。我使用 gorilla/sessions 管理客户端 session 和用户身份验证,并使用 go-sql-driver 访问 MySQL 数据库。

项目布局:

<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

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

db, err := sql.Open("mysql", "user:password@/dbname")

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

var store = sessions.NewCookieStore([]byte("something-very-secret"))

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

  1. 将两个指针封装成两个包(sess, db)并导出。并且,需要导入包所需服务的包(sessdb)。并调用导出的指针。

    <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
    -> <service>
    -> sess.go // Storing the database service pointer
    -> db.go // Storing the session service pointer
    -> main.go
  2. 初始化主包中的两个指针并将它们作为参数传递给另一个包含页面句柄函数的包。在另一个包内,将 args 设置为局部变量,以便我们可以在另一个包中本地调用它。

     <PROJECT ROOT>
    -> <cliend> // This folder containing html, css, and js
    -> <pagehndler>
    -> <index>
    -> index.go // Need to access database and session
    // Containing a func newService(db *DB)
    -> <projbrwsr>
    -> projbrwsr.go // Need to access database and session
    // Containing a func newService(sess *CookieStore)
    -> main.go

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

最佳答案

这是应该起作用的概念。

在包内你应该声明一个变量,它是导出的。这个变量必须是一个指针。

var myVar = 3
var MyPointer = &myVar

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

从您的主包中,您可以将指针设置为您的“全局”数据库或 session 地址。

mypackage.MyPointer = dbPointer

然后你的包里面的指针指向你的dbPointer。我认为这是将指针传递给其他包的好方法。

关于pointers - 如何在 Go 中将服务指针从一个包传递到另一个包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38669971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com