I次のファイル構造を持っている:パッケージ内のファイル全体でglobal varを使用するにはどうすればよいですか?
モデル/ db.go
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私はInsertProfile
機能でdb
にアクセスしよう
func (p *Profile) InsertProfile() {
if db != nil {
_, err := db.Exec(...)
checkErr(err)
} else {
fmt.Println("DB object is NULL")
}
}
それはNULL ptr exception
と言います。 db_utils.go
のdb
にアクセスするにはどうすればよいですか?
db
を大文字にしたくないです(すべてのパッケージにアクセスできるようになります)。
db
から返されたQUERYが正しくinit()
に返されています。
正確に!これは私がやっていることです。 – lionelmessi
まだ他のファイルではnilです。 – lionelmessi
@lionelmessi私は、短い変数宣言 ':='を使用して、作成した '* DB'値をローカル変数に保存しただけで、グローバル変数ではないと思います。あなたのソースを見ずに話すことはできませんので、親切にして投稿してください。 – icza