移除监控我们可以使用 Remove 方法,会移除对整个文件/目录的监控。

当对同一个文件/目录存在多个监控回调时,我们可以通过 RemoveCallback 方法移除指定的回调。方法参数 callbackId 是在添加监控时返回的 Callback 对象的唯一ID。

使用示例1

  1. package main
  2. import (
  3. "context"
  4. "time"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "github.com/gogf/gf/v2/os/gfsnotify"
  7. "github.com/gogf/gf/v2/os/gtimer"
  8. )
  9. func main() {
  10. var (
  11. ctx = context.Background()
  12. logger = g.Log()
  13. )
  14. c1, err := gfsnotify.Add("/home/john/temp/log", func(event *gfsnotify.Event) {
  15. logger.Debug(ctx, "callback1")
  16. })
  17. if err != nil {
  18. panic(err)
  19. }
  20. c2, err := gfsnotify.Add("/home/john/temp/log", func(event *gfsnotify.Event) {
  21. logger.Debug(ctx, "callback2")
  22. })
  23. if err != nil {
  24. panic(err)
  25. }
  26. // 5秒后移除c1的回调函数注册,仅剩c2
  27. gtimer.SetTimeout(ctx, 5*time.Second, func(ctx context.Context) {
  28. err = gfsnotify.RemoveCallback(c1.Id)
  29. logger.Debug(ctx, "remove callback c1", err)
  30. })
  31. // 10秒后移除c2的回调函数注册,所有的回调都移除,不再有任何打印信息输出
  32. gtimer.SetTimeout(ctx, 10*time.Second, func(ctx context.Context) {
  33. err = gfsnotify.RemoveCallback(c2.Id)
  34. logger.Debug(ctx, "remove callback c2", err)
  35. })
  36. select {}
  37. }

使用示例2

  1. package main
  2. import (
  3. "context"
  4. "time"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "github.com/gogf/gf/v2/os/gfsnotify"
  7. "github.com/gogf/gf/v2/os/gtimer"
  8. )
  9. func main() {
  10. var (
  11. ctx = context.Background()
  12. logger = g.Log()
  13. callback = func(event *gfsnotify.Event) {
  14. logger.Debug(ctx, "callback")
  15. }
  16. )
  17. cb, err := gfsnotify.Add("/home/john/temp", callback)
  18. if err != nil {
  19. panic(err)
  20. }
  21. // 在此期间创建文件、目录、修改文件、删除文件
  22. // 20秒后移除回调函数注册,所有的回调都移除,不再有任何打印信息输出
  23. gtimer.SetTimeout(ctx, 20*time.Second, func(ctx context.Context) {
  24. err = gfsnotify.RemoveCallback(cb.Id)
  25. logger.Debug(ctx, "remove callback", err)
  26. })
  27. select {}
  28. }