package tool import "fmt" const ( _ = iota KB = 1 << (10 * iota) // 1 KB = 1024 bytes MB // 1 MB = 1024 KB GB // 1 GB = 1024 MB TB // 1 TB = 1024 GB PB // 1 PB = 1024 TB ) func HumanDuration(nano int64) string { duration := float64(nano) unit := "ns" if duration >= 1000 { duration /= 1000 unit = "us" } if duration >= 1000 { duration /= 1000 unit = "ms" } if duration >= 1000 { duration /= 1000 unit = " s" } return fmt.Sprintf("%6.2f%s", duration, unit) } func HumanSize(size int64) string { switch { case size >= PB: return fmt.Sprintf("%.2f PB", float64(size)/PB) case size >= TB: return fmt.Sprintf("%.2f TB", float64(size)/TB) case size >= GB: return fmt.Sprintf("%.2f GB", float64(size)/GB) case size >= MB: return fmt.Sprintf("%.2f MB", float64(size)/MB) case size >= KB: return fmt.Sprintf("%.2f KB", float64(size)/KB) default: return fmt.Sprintf("%d bytes", size) } } // BytesToUnit 将字节转换为指定单位 func BytesToUnit(bytes int64, unit float64) float64 { return float64(bytes) / unit } // BytesToKB 转换为 KB func BytesToKB(bytes int64) float64 { return BytesToUnit(bytes, KB) } // BytesToMB 转换为 MB func BytesToMB(bytes int64) float64 { return BytesToUnit(bytes, MB) } // BytesToGB 转换为 GB func BytesToGB(bytes int64) float64 { return BytesToUnit(bytes, GB) } // BytesToTB 转换为 TB func BytesToTB(bytes int64) float64 { return BytesToUnit(bytes, TB) }