2014-01-22 129 views
0

我在golang中使用sqlx,這是非常有用的,但它似乎不會拋出錯誤,當我使用結構掃描和結構的類型不匹配的SQL類型。比如我在這裏建立一個數據庫,有一個名稱(字符串)和年齡(INT):Golang Sqlx不拋出錯誤

+-------+--------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+-------+--------------+------+-----+---------+-------+ 
| name | varchar(255) | NO |  | NULL |  | 
| age | int(11)  | NO |  | NULL |  | 
+-------+--------------+------+-----+---------+-------+ 
+------+-----+ 
| name | age | 
+------+-----+ 
| bob | 10 | 
+------+-----+ 

然後我用SQLX讀出值轉換成一個結構,但結構有錯誤的類型。

package main 

import (
    "log" 
    "github.com/jmoiron/sqlx" 
    _ "github.com/go-sql-driver/mysql" 
) 

// in database name is a string and age is an int 

type Person struct{ 
    Name int 
    Age string 
} 

func main() { 
    sqlSession, err := sqlx.Open("mysql", "root:@(localhost:3306)/dashboard?parseTime=true") 
    if err != nil { 
    log.Panic(err) 
    } 
    err = sqlSession.Ping() 
    if err != nil { 
    log.Panic(err) 
    } 
    query := "SELECT * FROM test" 
    rows, errSql := sqlSession.Queryx(query) 
    if errSql != nil { 
    log.Panic(errSql) 
    } 
    for rows.Next() { 
    var p Person 
    errScan := rows.StructScan(&p) 
    if errScan != nil { 
     log.Panic(errScan) 
    } 
    log.Println("Person:", p) 
    } 
} 

所以不是給我一個錯誤,它已經清零了值。人員:{0}

是否有其他人遇到此問題?其他人是否認爲這是一個錯誤?我認爲當我嘗試掃描到無效類型時,它應該會給我一個錯誤。

回答

0

我懷疑這是一個副作用,當它找不到放置返回值的地方時決定不返回錯誤。您可能不想返回錯誤的一個原因是,如果您執行「select *」操作,那麼即使您的結構包含所有列,如果代碼不立即開始返回錯誤,您將無法添加新列。

有人可能會爭辯說,如果全部查詢列未使用,那麼它應該返回一個錯誤。這個項目可能會帶來一個問題,那就是要走了。

+0

感謝您的回答,我會嘗試打開併發布,看看它是如何發展。 – Gary