即使初始化后变量也为零
Variable is nil even after initialization
这是代码
config/config.go
const PROJECT_ID = "projectid"
var Ctx = context.Background()
var DSClient *datastore.Client
type Logger struct {
Pkg string
}
func (l *Logger) Error(v ...interface{}) {
log.Print("Error|", l.Pkg, ": ", v)
}
func (l *Logger) Info(v ...interface{}) {
log.Print("Info|", l.Pkg, ": ", v)
}
var propFile = "${env}.properties"
var Props *properties.Properties
func init(){
Props = properties.MustLoadFile(propFile, properties.UTF8)
DSClient, err := datastore.NewClient(Ctx, PROJECT_ID)
if err != nil {
log.Fatal("Couldn't connect to DataStore: ", err)
}
log.Print("DataStore Client: ", DSClient)
}
index/index.go
import (
...
"github.com/shwetanka19/project/internal/config"
)
urs := [] user.User{}
q := datastore.NewQuery("users").Filter("email=", greq.Email).Limit(1)
logger.Info("Now Client: ", config.DSClient)
keys, err := config.DSClient.GetAll(config.Ctx, q, &urs)
日志
DataStore Client: &{0xc000010840 0xc000119d40 projectid}
[Now Client: <nil>]
为什么已经初始化的客户端现在为nil? index.go 中的代码在 API 调用期间被调用。当服务器启动时调用配置。
当你
DSClient, err := datastore.NewClient(Ctx, PROJECT_ID)
您创建了一个 新 变量 DSClient
来隐藏另一个。您只需要将其更改为:
var err error
DSClient, err = datastore.NewClient(Ctx, PROJECT_ID)
这是代码 config/config.go
const PROJECT_ID = "projectid"
var Ctx = context.Background()
var DSClient *datastore.Client
type Logger struct {
Pkg string
}
func (l *Logger) Error(v ...interface{}) {
log.Print("Error|", l.Pkg, ": ", v)
}
func (l *Logger) Info(v ...interface{}) {
log.Print("Info|", l.Pkg, ": ", v)
}
var propFile = "${env}.properties"
var Props *properties.Properties
func init(){
Props = properties.MustLoadFile(propFile, properties.UTF8)
DSClient, err := datastore.NewClient(Ctx, PROJECT_ID)
if err != nil {
log.Fatal("Couldn't connect to DataStore: ", err)
}
log.Print("DataStore Client: ", DSClient)
}
index/index.go
import (
...
"github.com/shwetanka19/project/internal/config"
)
urs := [] user.User{}
q := datastore.NewQuery("users").Filter("email=", greq.Email).Limit(1)
logger.Info("Now Client: ", config.DSClient)
keys, err := config.DSClient.GetAll(config.Ctx, q, &urs)
日志
DataStore Client: &{0xc000010840 0xc000119d40 projectid}
[Now Client: <nil>]
为什么已经初始化的客户端现在为nil? index.go 中的代码在 API 调用期间被调用。当服务器启动时调用配置。
当你
DSClient, err := datastore.NewClient(Ctx, PROJECT_ID)
您创建了一个 新 变量 DSClient
来隐藏另一个。您只需要将其更改为:
var err error
DSClient, err = datastore.NewClient(Ctx, PROJECT_ID)