Ho la seguente struttura di file:Come usare var globale su file in un pacchetto?
modelli/db.go modelli
type DB struct {
*sql.DB
}
var db *DB
func init() {
dbinfo := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable",
DB_USER, DB_PASSWORD, DB_NAME)
db, err := NewDB(dbinfo)
checkErr(err)
rows, err := db.Query("SELECT * FROM profile")
checkErr(err)
fmt.Println(rows)
}
func NewDB(dataSourceName string) (*DB, error) {
db, err := sql.Open("postgres", dataSourceName)
if err != nil {
return nil, err
}
if err = db.Ping(); err != nil {
return nil, err
}
return &DB{db}, nil
}
/db_util.go
func (p *Profile) InsertProfile() {
if db != nil {
_, err := db.Exec(...)
checkErr(err)
} else {
fmt.Println("DB object is NULL")
}
}
Quando provo ad accedere db
in funzione InsertProfile
, dice NULL ptr exception
. Come accedere allo db
in db_utils.go
?
Non vorrei inserire in maiuscolo db
(in quanto consentirebbe l'accesso a tutti i pacchetti).
Sto ottenendo correttamente il QUERY restituito da db
in init()
.
esattamente! Questo è quello che sto facendo. – lionelmessi
eppure è nullo nell'altro file. – lionelmessi
@lionelmessi La mia ipotesi sarebbe che tu abbia usato una breve dichiarazione di variabili ': =' e hai appena memorizzato il valore di '* DB' creato in una variabile locale e non in quella globale. Impossibile dirlo senza vedere la tua fonte, quindi per favore sii gentile e pubblicalo. – icza