Golang - 从 MySQL 存储/检索十进制

我正在使用 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

}

谢谢


天涯尽头无女友
浏览 146回答 2
2回答

守候你守候我

要将 MySQL 值扫描到 Go vars,最好的做法是使用 sql.Null... 类型。特别是当列可以为空时。对于小数,它可以是 sql.NullFloat64:// ...var dec sql.NullFloat64row.Scan(&dec)// dec.Valid - bool// dec.Float64 - float64

慕桂英546537

会float32带来什么问题吗?由于 MySQL 使用 32 位存储DECIMAL,float32应该足够好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go