一尘不染

使用:=给出未使用的错误,但是使用=不在Go中

go

我有一段代码,使用:=时会出错,但使用时=会正确编译。我了解到的是,:=只需要定义至少一个变量,就不需要定义其他变量,但是考虑到此代码,这是Go中的错误吗?

无法编译的代码:

错误:services / db_service.go:16:会话已声明且未使用

package services

import (
    "gopkg.in/mgo.v2"
    "log"
)

const DB = "mmdb_dev"

var Session *mgo.Session

func InitMongo() bool {
    url := "mongodb://localhost"
    log.Println("Establishing MongoDB connection...")
    //var err error
    Session, err := mgo.Dial(url)
    if err != nil {
        log.Fatal("Cannot connect to MongoDB!")
        return true
    } else {
        return false
    }
}

func GetNewSession() mgo.Session {
    return *Session.Copy()
}

编译代码

package services

import (
    "gopkg.in/mgo.v2"
    "log"
)

const DB = "mmdb_dev"

var Session *mgo.Session

func InitMongo() bool {
    url := "mongodb://localhost"
    log.Println("Establishing MongoDB connection...")
    var err error
    Session, err = mgo.Dial(url)
    if err != nil {
        log.Fatal("Cannot connect to MongoDB!")
        return true
    } else {
        return false
    }
}

func GetNewSession() mgo.Session {
    return *Session.Copy()
}

改变是

Session, err := mgo.Dial(url)

var err error
Session, err = mgo.Dial(url)

阅读 148

收藏
2020-07-02

共1个答案

一尘不染

该运算符:=用于短变量声明。它声明并初始化变量。

在第一个示例中,您已Session在全局范围中声明了变量,并且在main函数中声明了在主范围中具有相同名称的新变量(与使用:=operator相同)。因此,Session在全局范围内声明的变量未使用,因此会出错。

在第二个示例中,您已经使用赋值运算符为全局变量分配了一个值=,因此它不是在声明新Session变量而是向现有全局变量分配一个值。

请找到显示全局变量和局部变量之间差异的示例

2020-07-02