避免可变全局变量
发布者:admin 发表于:445天前 阅读数:555 评论:0

使用选择依赖注入方式避免改变全局变量。

既适用于函数指针又适用于其他值类型

Bad Good

// sign.go var _timeNow = time.Now func sign(msg string) string { now := _timeNow() return signWithTime(msg, now) } |

// sign.go type signer struct { now func() time.Time } func newSigner() signer { return &signer{ now: time.Now, } } func (s signer) Sign(msg string) string { now := s.now() return signWithTime(msg, now) }

// sign_test.go func TestSign(t *testing.T) { oldTimeNow := _timeNow _timeNow = func() time.Time { return someFixedTime } defer func() { _timeNow = oldTimeNow }() assert.Equal(t, want, sign(give)) } |

// sign_test.go func TestSigner(t *testing.T) { s := newSigner() s.now = func() time.Time { return someFixedTime } assert.Equal(t, want, s.Sign(give)) } |