MST

星途 面试题库

面试题:Go中如何设计一个简单的监控循环

请描述在Go语言中设计一个监控循环的基本步骤,例如监控某个文件的修改时间,并在其发生变化时执行相应操作。请给出核心代码示例并简要解释。
26.4万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 基本步骤
    • 使用time.Ticker来设置一个时间间隔,用于定期检查文件的修改时间。
    • 使用os.Stat函数获取文件的状态信息,其中包含文件的修改时间。
    • 保存上一次获取的文件修改时间,与当前获取的时间进行比较,如果不同则说明文件发生了变化,执行相应操作。
  2. 核心代码示例
package main

import (
    "fmt"
    "os"
    "time"
)

func main() {
    filePath := "test.txt"
    var lastModTime time.Time
    ticker := time.NewTicker(1 * time.Second)
    defer ticker.Stop()

    for {
        select {
        case <-ticker.C:
            fileInfo, err := os.Stat(filePath)
            if err != nil {
                fmt.Printf("Error stating file: %v\n", err)
                continue
            }
            if lastModTime.IsZero() {
                lastModTime = fileInfo.ModTime()
            } else if fileInfo.ModTime() != lastModTime {
                fmt.Println("File has been modified. Performing action...")
                // 在这里执行相应操作
                lastModTime = fileInfo.ModTime()
            }
        }
    }
}
  1. 代码解释
    • 定义filePath为要监控的文件路径。
    • lastModTime用于保存上一次文件的修改时间,初始化为零值。
    • ticker设置为每1秒触发一次。
    • for循环中,通过select语句监听ticker.C通道,当时间间隔到达时,执行检查文件修改时间的逻辑。
    • 使用os.Stat获取文件信息,如果获取失败则打印错误并继续循环。
    • 如果lastModTime是零值,说明是第一次获取,将当前文件修改时间赋值给它。
    • 如果当前文件修改时间与lastModTime不同,说明文件发生了变化,打印提示并执行相应操作,然后更新lastModTime