package utils import ( "crypto/rand" "encoding/hex" "fmt" "os" "os/exec" "time" ) // CommandExists 检查命令是否存在 func CommandExists(cmd string) bool { _, err := exec.LookPath(cmd) return err == nil } // FileExists 检查文件是否存在 func FileExists(path string) bool { _, err := os.Stat(path) return err == nil || !os.IsNotExist(err) } func GenerateID() (string, error) { bytes := make([]byte, 16) if _, err := rand.Read(bytes); err != nil { return "", err } return hex.EncodeToString(bytes), nil } func GetTimestamp() string { return time.Now().Format("2006-01-02 15:04:05") } func OutputMaps(maps map[string]string) []string { output := []string{} maxLen := 0 for key := range maps { if len(key) > maxLen { maxLen = len(key) } } // 使用动态宽度的格式化字符串输出 // %-*s 的含义 // %: 格式化开始 // -: 左对齐,默认是右对齐 // *: 表示宽度由后续参数指定(maxLen) // s: 表示字符串类型 for key, value := range maps { output = append(output, fmt.Sprintf("%-*s: %s", maxLen, key, value)) } return output } // 定义短语 const ( NoAvailableNetworkInterfaces = "No available network interfaces" ) // 定义目录 const ( DefaultBaseDir string = "/etc/sunhpc" DefaultTmplDir string = DefaultBaseDir + "/tmpl.d" DefaultLogDir string = "/var/log/sunhpc" DefaultLogFile string = DefaultLogDir + "/sunhpc.log" ) // 定义数据库 const ( DefaultDBName string = "sunhpc.db" DefaultDBPath string = "/var/lib/sunhpc" DefaultDBArgs string = "_foreign_keys=on&_journal_mode=WAL&_timeout=5000" )