2016-03-16 2 views
0

Я пытаюсь вернуть экземпляр из gorm.Open() возвращают его я получаю следующее сообщение об ошибкене может назначить * gorm.DB в ходе Ланга

controllers/db.go:34: cannot assign *gorm.DB to dc.DB (type gorm.DB) in multiple assignment 

Это контроллер db.go

package controllers 

import (

    //"fmt" 

    _ "github.com/go-sql-driver/mysql" 
    //v "github.com/spf13/viper" 
    "github.com/jinzhu/gorm" 

) 

type DBController struct { 
    DB gorm.DB 
} 

func (dc *DBController) InitDB() { 
    var err error 


    dc.DB, err = gorm.Open("mysql","root:[email protected](localhost:3306)/api") 
    if err != nil { 
     log.Fatalf("Error when connect database, the error is '%v'", err) 
    } 
    dc.DB.LogMode(true) 
} 

func (dc *DBController) GetDB() gorm.DB { 
    return dc.DB 
} 

В чем причина этой ошибки и как я могу это исправить?

+0

Тип '* gorm.DB' (указатель на' gorm.DB'), типы возвращаемых и членов, которые вы используете, являются 'gorm.DB' как в методе' GetDB', так и 'DBController' тип. эти типы несовместимы друг с другом. Измените элемент 'DB' на указатель и верните указатель из' GetDB' –

ответ

0

Вам нужно и, скорее всего, вы хотите иметь указатель в структуре контроллера. Передача структуры с указателем на объект базы данных (gorm.DB) не позволит Go сделать копию этого объекта (gorm.DB).

Выполните следующие действия:

type DBController struct { 
    DB *gorm.DB 
} 

Теперь он должен работать нормально.

+0

, он даст такую ​​же ошибку. –

+0

Nuwan, Изменить тип возврата 'GetDB'. to * gorm.DB –

+5

API gorm недавно изменился, 'gorm.Open' теперь возвращает указатель: http://jinzhu.me/gorm/changelog.html – user1431317

Смежные вопросы