2016-03-23 21 views
0

私はginフレームワークを使用しており、gromを使用してcrud操作を試みています。私はMYSQLデータベースからデータを取得しようとしています。私はこれは私がデータベースを取得するにはgolaong gormで動作しないすべてを選択してください

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) 
} 

を使用しています1つのコントローラである私は、この

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"` 
} 

ようなモデルを持って、データベース・インスタンスを取得するために、各テーブルやモデル にいくつかのコントローラをdb.goています接続私は

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) 
} 

を使用していると私は、次の敗走

を使用しています私はこれを実行すると

私は、このエラーの原因が何であるかを次のエラーに

(/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 

を取得していますか?このエラーを修正するのに手伝ってください。

答えて

1

あなたは、ドライバのマニュアル https://github.com/go-sql-driver/mysql#timetime-supportで答えを見つけることができます。

MySQLのDATEとDATETIME値のデフォルトの内部出力タイプを使用すると、[]バイトに値をスキャンすることができます[]バイトで、 stringまたはsql.RawBytes変数を使用します。

しかし、多くの人は、MySQLのDATEとDATETIMEの値をtime.Time変数にスキャンする必要があります。これは、MySQLのDATEとDATETIMEへの論理的な逆です。内部出力タイプを[] byteからtime.Timeに変更することで、それを行うことができます。これは、DSNパラメーターparseTime = trueで行います。デフォルトのtime.Timeロケーションをloc DSNパラメーターで設定できます。

また、NullTimeタイプをスキャンの宛先として使用することもできます。これはtime.Timeとstring/[] byteの両方で機能します。

+0

私はDATETIME値を持たないが、intとstringのみを持つ別のアプリケーションを試しました。私は同じエラーが発生しました.. –

+0

これは私がhttps://bitbucket.org/nuwan600/golang/srcをテストするために使用したプロジェクトです –

+0

あなたが私に教えてください –

-1

ここで実際にデータベースを開いていますか?そこに実際にOpen()コールがありません。

関連する問題