Golang - 从MySQL

时间:2016-05-11 10:37:14

标签: mysql go

我正在使用gin gonic框架并构建了一个JSON API。

我想要一个新的终点,但其中一个值是小数。我创建了以下结构:

type AcceptedTerms struct {
    Id          int64           
    FirstName   string          
    LastName    string                    
    Fee         ***DECIMAL***
    Date        *time.Time
}

我的控制器代码片段:

    query = "SELECT " +
            "AcceptedTerms.* " +
            "FROM AcceptedTerms " +
            "ORDER BY " + sort_by + " " + order_by +
            " LIMIT " + limit2 +
            " OFFSET " + offset2`

_, err := dbmap.Select(&response.AcceptedTerms, query)

我应该为十进制设置什么类型?我希望用户能够发布小数,例如10.44或12.00等而不是“10.44”或“12.00”。我还希望像上面那样返回值而不是字符串。

更新

我试图对我的Struct进行此操作,但它仍然没有显示为2位小数

type AcceptedTerms struct {
    Id          int64
    FirstName   string
    LastName    string
    Fee         Number
    Date        *time.Time
}

type Number float64

func (n Number) MarshalJSON() ([]byte, error) {
    return []byte(fmt.Sprintf("%.2f", n)), nil
}

由于

2 个答案:

答案 0 :(得分:1)

float32是否会造成任何问题?由于MySQL使用32位来存储DECIMALfloat32应该足够好了。

答案 1 :(得分:0)

要将MySQL值扫描到Go vars,最好的做法是使用sql.Null ...类型。特别是当列可以为空时。

对于小数,它可以是sql.NullFloat64:

importScripts()