即使初始化后变量也为零

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)