第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在整個包中共享全局變量

在整個包中共享全局變量

Go
阿波羅的戰(zhàn)車 2021-11-22 15:35:27
所以我有一個*sql.DB需要在整個包中共享的 SQL 指針 ( )。例如:“ ./main.go”有一個全局變量“ db”,需要與“ ./another/package.go”中的包共享。不傳遞函數(shù)參數(shù)如何實現(xiàn)共享變量?
查看完整描述

2 回答

?
慕村9548890

TA貢獻1884條經(jīng)驗 獲得超4個贊

只要全局變量被導出(意思是它的名字以大寫字母: 開頭Db *sql.DB),你就可以通過它的全名在另一個包中訪問它:


package.name.Db

但是全局變量的替代方案是依賴注入,就像使用注入框架來初始化正確的數(shù)據(jù)庫一樣。


參見“使用 Go 進行依賴注入”:


該inject庫是這項工作和我們的解決方案的結(jié)果。

它使用struct標簽來啟用注入,為具體類型分配內(nèi)存,并支持接口類型的注入,只要它們是明確的。

它還具有一些不太常用的功能,例如命名注入。粗略地說,我們上面的簡單示例現(xiàn)在看起來像這樣:


type AppLoader struct {

  MongoService mongo.Service `inject:""`

}


func (l *AppLoader) Get(id uint64) *App {

  a := new(App)

  l.MongoService.Session().Find(..).One(a)

  return a

}


查看完整回答
反對 回復 2021-11-22
?
ITMISS

TA貢獻1871條經(jīng)驗 獲得超8個贊

VonC 問題的替代方法是提供一個構(gòu)造函數(shù) - 例如


// package datastore

var db *sql.DB


func NewDB(host, port string) (*sql.DB, error) {

    // Simplified example

    conn, err := sql.Open(...)

    if err != nil {

        return nil, err

    }


    db = conn

    return conn, nil

}


// package main

func main() {

    db, err := datastore.NewDB("localhost", "5432")

    if err != nil {

        log.Fatal(err)

    }


    // Now you can use it here, and/or in your datastore package

}

使用構(gòu)造函數(shù)來初始化包的要求和/或傳入預初始化的對象通常是一種很好的做法 - 例如datastore.NewFromExisting(db)傳入你已經(jīng)創(chuàng)建的池。


在可能的情況下,您package main應該只是其他包的入口點,并應盡量避免自己使用東西。


查看完整回答
反對 回復 2021-11-22
  • 2 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號