无法调用指针方法并且无法获取[maps golang]的地址

时间:2016-09-17 14:33:02

标签: pointers dictionary methods go hashmap

我有一个函数GetMySqlConn(variable bool) (db gorm.DB) {..,它为mySQL连接返回gorm.DB

案例1 :我的代码如下所示:

var (
    MysqlConn         gorm.DB
)

func main(){

    MysqlConn = GetMySqlConn(false)

    result := MysqlConn.Raw(sqlQuery).Row()
    result.Scan(&id)
    fmt.Println(id)
    :
}

哪个正常。但是

案例2 :当我尝试将MysqlConn转换为地图时:

var (
        MysqlConn         map[int]gorm.DB
    )

func main(){

    MysqlConn = make(map[int]gorm.DB)
    MysqlConn[0] = GetMySqlConn(false)

    // AND THEN DO THIS
    result := MysqlConn[0].Raw(sqlQuery).Row()
    result.Scan(&id)
    fmt.Println(id)
    :
}

它抛出了错误

:
cannot call pointer method on MysqlConn[0]
cannot take the address of MysqlConn[0]
:

立即

案例3 :考虑到错误,我尝试将其解决方法并将我的代码更改为:

var (
        MysqlConn         map[int]*gorm.DB
        tempMysqlConn     gorm.DB
    )

func main(){

    MysqlConn = make(map[int]*gorm.DB)
    tempMysqlConn = GetMySqlConn(false)
    MysqlConn[0] = &tempMysqlConn

    // AND THEN DO THIS
    result := MysqlConn[0].Raw(sqlQuery).Row()
    result.Scan(&id)
    fmt.Println(id)
    :
}

IT工作

现在,因为我是Golang的新手,即使我不知何故得到了解决方案,我也不能确切地知道错误的原因。

所以我想问的是,当我通过一个简单的method类型变量gorm.DB(在案例1中)访问gorm.DB MysqlConn结构时,它可以工作。

但是当我在案例2中做同样的事情但是现在有了一张地图(再次具有相同的gorm.DB类型值)它没有工作并且把错误扔给我,我去了convert它的值类型首先为pointer(即*gorm.DB)(案例3)。

那么为什么对于Map值,我必须创建一个指针类型来访问method,如果你用一个简单的变量来执行它就可以没有指针类型?

0 个答案:

没有答案