假设以最简单的加减乘除举例
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 ,希望能得到大家的一些中肯建议,感谢!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.