file.go
func FileTimeModified(filename string) time.Time {
	info, err := os.Stat(filename)
	if err != nil {
		return time.Time{}
	}
	return info.ModTime()
}
func FileTimeModified(filename string) time.Time {
	info, err := os.Stat(filename)
	if err != nil {
		return time.Time{}
	}
	return info.ModTime()
}
// func FileTail(filenameOrURL string, numLines int, timeout ...time.Duration) (lines []string, err error) {
// 	if strings.Index(filenameOrURL, "file://") == 0 {
// 		filenameOrURL = filenameOrURL[len("file://"):]
// 	} else if strings.Contains(filenameOrURL, "://") {
// 		data, err := FileGetBytes(filenameOrURL, timeout...)
// 		if err != nil {
// 			return nil, err
// 		}
// 		lines, _ := BytesTail(data, numLines)
// 		return lines, nil
// 	}
// 	// data := make([]byte, 0, 1024*256)
// 	// file, err := os.Open(filenameOrURL)
// 	// if err != nil {
// 	// 	return nil, err
// 	// }
// 	// defer file.Close()
// 	// info, err := file.Stat()
// 	// if err != nil {
// 	// 	return nil, err
// 	// }
// 	// if start := info.Size() - 64*1024; start > 0 {
// 	// 	file.Seek(start, os.SEEK_SET)
// 	// }
// 	// data, err = ioutil.ReadAll(file)
// 	// if err != nil {
// 	// 	return nil, err
// 	// }
// 	return lines, nil
// }
// FileTimeModified returns the modified time of a file,
// or the zero time value in case of an error.