Golang 引入decimal类型
涉及到金额类型,Golang没有自带的decimal类型,计算的时候会出现精度问题,所以需要引入decimal类型标识金额字段,下面是引入的步骤(项目上使用的是graphql):
1、golang 引入了第三方包 github.com/shopspring/decimal;
2、Graphql在生成代码的时候BigDecimal类型不能映射对应引入的decimal.Decimal类型,为了映射需要手段匹配一下,代码如下:
package bigdecimal
import (
"fmt"
"github.com/99designs/gqlgen/graphql"
"github.com/shopspring/decimal"
"io"
)
// 写入类型
func MarshalMyDecimal(d decimal.Decimal) graphql.Marshaler {
return graphql.WriterFunc(func(w io.Writer) {
// TODO这点需要处理一下,现在是string类型,所以需要前端传递的金额数据是string的
io.WriteString(w, d.String())
})
}
// 返回类型
func UnmarshalMyDecimal(v interface{}) (decimal.Decimal, error) {
switch v := v.(type) {
case string:
return decimal.NewFromString(v)
case decimal.Decimal:
return v, nil
case float64:
return decimal.NewFromFloat(v), nil
default:
return decimal.Zero, fmt.Errorf("%T is not an Decimal", v)
}
}
3、在yml配置文件中配置model
models:
BigDecimal:
model:
- dtc.platform.com/dtc-service-common/bigdecimal.MyDecimal
4、根据第3步手动映射后,定义金额字段类型为BigDecimal,生产代码的时候会自动映射为decimal.Decimal;
3、对应decimal类型使用的方法链接:decimal package - github.com/shopspring/decimal - Go Packageshttps://pkg.go.dev/github.com/shopspring/decimal#pkg-index
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfahji
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01