我有一个函数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
,如果你用一个简单的变量来执行它就可以没有指针类型?