用go优雅的实现集成各支付通道接口,业务代码正在开发中,基本结构如下
package main import ( "fmt" ) type Pay interface { getName() string //支付通道名称 getPayUrl() string //获取支付url query(signMap map[string]interface{}) bool //签名校验 setAmount(amount float64) float64 //支付金额 } type WxPay struct { } func (p *WxPay) getName() string { fmt.Println("我是微信支付哦") return "微信支付" } func (p *WxPay) setAmount(amount float64) float64 { return amount } func (p *WxPay) getPayUrl() string { fmt.Println("我是微信支付的url哦哈哈哈") return "http://**.**.**.**" } func (p *WxPay) query(signMap map[string]interface{}) bool { return true } type AliPay struct { name string } func (p *AliPay) query(signMap map[string]interface{}) bool { return true } func (p *AliPay) getName() string { fmt.Println("我是Ali支付哦" + p.name) return p.name } func (p *AliPay) setAmount(amount float64) float64 { return amount } func (p *AliPay) getPayUrl() string { fmt.Println("我是Ali支付的url哦哈哈哈") return "https://alipay.**.**.**" } func NewWxPay() Pay { fmt.Println("wx init") return &WxPay{} } func NewAliPay() Pay { fmt.Println("ali init") return &AliPay{name: "我是ali的name牛啤了"} } var myPays = make(map[string]Pay) func Register(key string, pay Pay) { myPays[key] = pay } func init() { Register("wx", NewWxPay()) Register("ali", NewAliPay()) } func getPay(key string) Pay { return myPays[key] } func main() { wx := getPay("wx") wx.getName() wx.setAmount(1000.01) wx.getPayUrl() ali := getPay("ali") ali.getName() ali.setAmount(200.15) ali.getPayUrl() }