浅析gowatch监听文件变动实现原理

Posted Go语言中文网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析gowatch监听文件变动实现原理相关的知识,希望对你有一定的参考价值。

刚开始接触go时,发现go程序和php程序的其中一个不同是php是解释性语言,go是编译型语言,即每次在有程序改动后,需要重新运行 go run或go build进行重新编译,更改才能生效,实则不便。于是乎在网络上搜索发现了gowatch这个包,该包可通过监听当前目录下相关文件的变动,对go文件实时编译,提高研发效率。那gowatch又是如何做到监听文件变化的呢
Watcher mu sync.Mutex fd watches fsnFlags fsnmut sync.Mutex paths Error error internalEvent *FileEvent Event *FileEvent done isClosed main( exit watcher, err := fsnotify.NewWatcher() err != fmt.Printf( fmt.Println( e := <-watcher.Event: fmt.Printf( e.IsCreate() fmt.Println( e.IsDelete() fmt.Println( e.IsModify() fmt.Println( e.IsRename() fmt.Println( e.IsAttrib() fmt.Println( fmt.Println( err := <-watcher.Error: fmt.Printf( () paths := [] _, path := paths err = watcher.Watch(path) err != fmt.Sprintf( <-exit runtime.Goexit()


推荐阅读

  • Go 使用场景和用 Go 的顶级公司

  • 福利

    我为大家整理了一份从入门到进阶的Go学习资料礼包,包含学习建议:入门看什么,进阶看什么。关注公众号 「polarisxu」,回复 ebook 获取;还可以回复「进群」,和数万 Gopher 交流学习。

    gowatch - 热编译工具,提升开发效率

    Go 程序热编译工具,提升开发效率

    通过监听当前目录下的相关文件变动,进行实时编译

    GITHUB:https://github.com/silenceper/gowatch

    安装使用

    go install github.com/silenceper/gowatch

     

    安装完成之后,即可使用gowatch命令,在当前文件执行:

    D:gocode1.14search_servercmd>gowatch

     

    技术图片

     

     

     

    当文件变动会重新编译并执行。

     

    相关配置

    大部分情况下,不需要更改配置,直接执行gowatch命令就能满足的大部分的需要,但是也提供了一些配置用于自定义,在执行目录下创建gowatch.yml文件,支持的配置如下:

    # gowatch.yml 配置示例
    
    # 当前目录执行下生成的可执行文件的名字,默认是当前目录名
    appname: "test"   
    # 是否对当前目录下相关依赖执行 ‘go install’命令,将会执行安装依赖
    go_install: true
    # 需要监听的文件名后缀,默认只有‘.go‘文件
    watch_exts:
        - .yml
    # 在执行命令时,需要增加的其他参数
    cmd_args:
        - arg1=val1
    # 需要增加环境变量,默认已加载当前环境变量
    envs:
        - a=b
    # 是否监听 ‘vendor’ 文件夹下的文件改变
    vendor_watch: false
    # 不需要监听的目录名字
    excluded_paths:
        - path
    # build tags
    build_tags: ""
    

      

    技术图片

     

    以上是关于浅析gowatch监听文件变动实现原理的主要内容,如果未能解决你的问题,请参考以下文章

    浅析vue的两项原理

    vue实现原理

    python 监目录文件变动,然后在做些其它的操作,watchdog 详细解答

    vue双向数据绑定原理

    Logstash 监听文件变动,并将内容同步到elasticsearch

    sh 配合Vue.js配置Webpack - 20. webpack监听文件变动进行自动编译的--watch