File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -203,22 +203,33 @@ Original method:
203203
204204Cached method(singleton mode):
205205
206- type User Struct{}
207- var getUserInfoCached func(uid int) (&User, error)
208- func NewUser() *User{
209- u := &User{}
210- getUserInfoCached = gofnext.CacheFn1Err(u.getUserInfo)
211- return u
212- }
206+ ```
207+ type User struct {}
208+ var (
209+ getUserInfoCached func(uid int) (*User, error)
210+ once sync.Once
211+ )
212+
213+ func NewUser() *User {
214+ u := &User{}
215+ once.Do(func() {
216+ // use cache decorator
217+ getUserInfoCached = gofnext.CacheFn1Err(u.getUserInfo)
218+ })
219+ return u
220+ }
213221
214- // proxy method with cached
215- func (u *User) GetUserInfo(uid int) (*User, error){
216- return getUserInfoCached(uid)
217- }
222+ // Cached method
223+ func (u *User) GetUserInfo(uid int) (*User, error) {
224+ return getUserInfoCached(uid)
225+ }
218226
219- func (u *User) getUserInfo(uid int) (*User, error){
220- ...
221- }
227+ // Origin method
228+ func (u *User) getUserInfo(uid int) (*User, error) {
229+ fmt.Printf("mock data: uid=%d\n", uid)
230+ return &User{}, nil
231+ }
232+ ```
222233
223234Cached method(factory mode):
224235
You can’t perform that action at this time.
0 commit comments