2016-03-23 10 views
0

Ich benutze Gin-Framework und versuchen Crud-Betrieb mit grom.I versuchen, Daten aus MYSQL-Datenbank zu bekommen. Ich habe db.go Datenbankinstanzen zu bekommen, einige Controller jede Tabelle und Modelle ich habe ein Modell wie diesesWählen Sie alles funktioniert nicht in golaong gorm

type Campaigns struct { 

     ID      int  `json:"id" form:"id" gorm:"column:CampaignID"` 
     UserID     int  `json:"userId" form:"userId" gorm:"column:UserID"` 
     Name     string `json:"name" form:"name" gorm:"column:Name"` 
     StartDate    time.Time `json:"start" form:"start" gorm:"column:StartDate"` 
     EndDate    time.Time `json:"end" form:"end" gorm:"column:EndDate"` 
     Customer    string `json:"customer" form:"customer" gorm:"column:Customer"` 
     CustomerID    int  `json:"customerId" form:"customerId" gorm:"column:CustomerID"` 
     ImpressionsCounter  int  `json:"ImpressionsCounter" form:"ImpressionsCounter" gorm:"column:ImpressionsCounter"` 
     MaxImpressions   int  `json:"maxImpressions" form:"maxImpressions" gorm:"column:MaxImpressions"` 
     CurrentSpend   float64 `json:"currentSpend" gorm:"column:CurrentSpend"` 
     MaxSpend    float64 `json:"maxSpend" form:"maxSpend" gorm:"column:MaxSpend"` 
     Active     bool  `json:"active" form:"active" gorm:"column:Active"` 
     Created    time.Time `json:"created" gorm:"column:DateCreated"` 
     Updated    time.Time `json:"updated" gorm:"column:DateCreated"` 
} 

dies ist ein ein Controller I

package controllers 
import (
    "time" 

    "github.com/op/go-logging" 
    "github.com/gin-gonic/gin" 
    "github.com/jinzhu/gorm" 
    _ "github.com/go-sql-driver/mysql" 

    "../models" 
) 

var log = logging.MustGetLogger("AsAPI") 

type AsController struct { 
    DB gorm.DB 
} 

func (ac *AsController) SetDB(d gorm.DB) { 
    ac.DB = d 
    ac.DB.LogMode(true) 
} 


// Get all table 
func (ac *AsController) ListTable(c *gin.Context) { 

    var results []models.Campaigns 
    err := ac.DB.Find(&results) 

    if err != nil { 
     log.Debugf("Error when looking up Table, the error is '%v'", err) 
     res := gin.H{ 
       "status": "404", 
       "error": "No Table found", 
     } 
     c.JSON(404, res) 
     return 
    } 
    content := gin.H{ 
         "status": "200", 
      "result": "Success", 
      "Table": results, 
     } 

    c.Writer.Header().Set("Content-Type", "application/json") 
    c.JSON(200, content) 
} 

bin mit der Datenbank erhalten Verbindung ich bin mit

package controllers 
import (
    "time" 

    "github.com/op/go-logging" 
    "github.com/gin-gonic/gin" 
    "github.com/jinzhu/gorm" 
    _ "github.com/go-sql-driver/mysql" 

    "../models" 
) 

var log = logging.MustGetLogger("AdsAPI") 

type AsController struct { 
    DB gorm.DB 
} 

func (ac *AsController) SetDB(d gorm.DB) { 
    ac.DB = d 
    ac.DB.LogMode(true) 
} 

und ich bin mit folgenden router

wenn ich laufe diese erhalte ich folgende Fehler

(/api/controllers/table.go:30) 
[2016-03-23 09:56:39] [0.99ms] SELECT * FROM `tables` 
2016/03/23 09:56:39 Error when looking up tables, the error is '&{0xc8202140e0 sql: Scan error on column index 3: unsupported driver -> Scan pair: []uint8 -> *time.Time 1 <nil> 0xc82022f860 0xc82022f7c0 0xc82021e140 2 {0xc8201fb4a0} <nil> false map[] map[]}' 
[GIN] 2016/03/23 - 09:56:39 | 404 | 1.153811ms | 127.0.0.1 | GET  /table 

was ist der Grund für diesen Fehler? hilf mir diesen Fehler zu beheben?

Antwort

1

Sie können die Antwort in der Treiber-Dokumentation finden https://github.com/go-sql-driver/mysql#timetime-support:

Der interne Standardausgabetyp von MySQL DATE und DATETIME- Werte ist [] Byte, das Sie den Wert in einem [] Byte scannen können, Zeichenfolge oder sql.RawBytes-Variable in Ihrem Programm.

Viele möchten jedoch MySQL DATE und DATETIME Werte in time.Time Variablen scannen, was das logische Gegenteil in Go zu DATE und DATETIME in MySQL ist. Dazu können Sie den internen Ausgabetyp von [] byte in time.Time mit dem DSN-Parameter parseTime = true ändern. Sie können den Standardort time.Time mit dem Parameter loc DSN festlegen.

Alternativ können Sie den NullTime-Typ als Scan-Ziel verwenden, der sowohl mit time.Time als auch mit string/[] Byte arbeitet.

+0

ok ich habe eine andere Anwendung ausprobiert, die keine DATETIME-Werte hat, aber nur int und string hat. Ich habe den gleichen Fehler .. –

+0

Dies ist das Projekt, das ich verwendet habe, um https://bitbucket.org/nuwan600/golang/src –

+0

Jungs jeden anderen Vorschlag zu testen, wenn Sie haben, lassen Sie mich bitte wissen ... –

-1

Öffnen Sie die Datenbank tatsächlich hier? Ich sehe keinen tatsächlichen Aufruf von Open() überhaupt ...