假设以最简单的加减乘除举例
type Money struct {
amount int64
currency string
}
想要实现
money.new(123.12, "USD").Add(456).Mul(123).toStr()
这里面,先初始化成 money ,然后做运算,最后 toStr 成科学计数法的格式。当然,每一步都可以拆开,比如先初始化,然后 add ,得到的 money 最后通过参数传给其他方法运行,在另外的方法里面可以继续计算或者格式化输出。
这里,new 可能报错,比如溢出、格式不正确,add 、mul 都有可能溢出。
如果是 java 来实现,可以很好的 try catch 包起来,但是放到 go 里面,因为只能通过 return value 来判断,感觉很难设计出都能兼容上面方式的代码。
要么就是在 tostr 最后计算的时候判断前面所有报错
if m, err := money.new(123.12, "USD"); err != nil {
m := m.Add(456).Mul(123)
if val, err := m.toStr(); err != nil {
...
}
}
要么就是每一步都判断,错误存入 money 对象中,需要的时候判断
m := money.new(123.12, "USD")
if Errors.isError(m) {
...
}
m := Add(456).Mul(123);
if Errors.isError(val) {
...
}
val := m.toStr()
if Errors.isError(val) {
...
}
or
val := money.new(123.12, "USD").Add(456).Mul(123).toStr()
if Errors.isError(val) {
...
}
刚学习 go ,希望能得到大家的一些中肯建议,感谢!