文件监控-移除监控

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

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

使用示例1

package main

import (
    "context"
    "time"

    "github.com/gogf/gf/v2/frame/g"
    "github.com/gogf/gf/v2/os/gfsnotify"
    "github.com/gogf/gf/v2/os/gtimer"
)

func main() {
    var (
        ctx    = context.Background()
        logger = g.Log()
    )
    c1, err := gfsnotify.Add("/home/john/temp/log", func(event *gfsnotify.Event) {
        logger.Debug(ctx, "callback1")
    })
    if err != nil {
        panic(err)
    }
    c2, err := gfsnotify.Add("/home/john/temp/log", func(event *gfsnotify.Event) {
        logger.Debug(ctx, "callback2")
    })
    if err != nil {
        panic(err)
    }
    // 5秒后移除c1的回调函数注册,仅剩c2
    gtimer.SetTimeout(ctx, 5*time.Second, func(ctx context.Context) {
        err = gfsnotify.RemoveCallback(c1.Id)
        logger.Debug(ctx, "remove callback c1", err)
    })
    // 10秒后移除c2的回调函数注册,所有的回调都移除,不再有任何打印信息输出
    gtimer.SetTimeout(ctx, 10*time.Second, func(ctx context.Context) {
        err = gfsnotify.RemoveCallback(c2.Id)
        logger.Debug(ctx, "remove callback c2", err)
    })

    select {}
}

使用示例2

package main

import (
    "context"
    "time"

    "github.com/gogf/gf/v2/frame/g"
    "github.com/gogf/gf/v2/os/gfsnotify"
    "github.com/gogf/gf/v2/os/gtimer"
)

func main() {
    var (
        ctx      = context.Background()
        logger   = g.Log()
        callback = func(event *gfsnotify.Event) {
            logger.Debug(ctx, "callback")
        }
    )
    cb, err := gfsnotify.Add("/home/john/temp", callback)
    if err != nil {
        panic(err)
    }

    // 在此期间创建文件、目录、修改文件、删除文件

    // 20秒后移除回调函数注册,所有的回调都移除,不再有任何打印信息输出
    gtimer.SetTimeout(ctx, 20*time.Second, func(ctx context.Context) {
        err = gfsnotify.RemoveCallback(cb.Id)
        logger.Debug(ctx, "remove callback", err)
    })

    select {}
}