注:本文已发布超过一年,请注意您所使用工具的相关版本是否适用
序
笔记
代码实现
举个 🌰,假设我现在要做一个短信推送的系统,那么需要
- 检查短信字数是否超过限制
- 检查手机号是否正确
- 发送短信
- 返回状态
我们可以发现,在发送短信的时候由于不同的供应商调用的接口不同,所以会有一些实现上的差异,但是他的算法(业务逻辑)是固定的
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| package template
import "fmt"
type ISMS interface { send(content string, phone int) error }
type sms struct { ISMS }
func (s *sms) Valid(content string) error { if len(content) > 63 { return fmt.Errorf("content is too long") } return nil }
func (s *sms) Send(content string, phone int) error { if err := s.Valid(content); err != nil { return err }
return s.send(content, phone) }
type TelecomSms struct { *sms }
func NewTelecomSms() *TelecomSms { tel := &TelecomSms{} tel.sms = &sms{ISMS: tel} return tel }
func (tel *TelecomSms) send(content string, phone int) error { fmt.Println("send by telecom success") return nil }
|
单元测试
1 2 3 4 5 6 7 8 9 10 11 12 13
| package template
import ( "testing"
"github.com/stretchr/testify/assert" )
func Test_sms_Send(t *testing.T) { tel := NewTelecomSms() err := tel.Send("test", 1239999) assert.NoError(t, err) }
|
关注我获取更新
猜你喜欢