开心每一天1111
更通用,更好的输出。使用exec.Command以及缓冲区来记录输出并仅在有用时显示它。您甚至可以通过使用可变参数,即任意数量元素的参数,使函数与任何命令一起工作。适当地标记未处理的错误,因此如果命令失败,您将被告知是哪一个以及原因。最后请注意,Go 虽然具有表现力,但它是一种非常原始的语言。它白白握着你的手。您将不得不自己编写大量程序。示例代码:package mainimport ( "bytes" "fmt" "os" "os/exec" "runtime" "strings")func main() { runCommand(currentFunction(), "ping", "-c1", "google.commm")}func commandErrorMessage(stderr bytes.Buffer, program string) string { message := string(stderr.Bytes()) if len(message) == 0 { message = "the command doesn't exist: " + program + "\n" } return message}func currentFunction() string { counter, _, _, success := runtime.Caller(1) if !success { println("functionName: runtime.Caller: failed") os.Exit(1) } return runtime.FuncForPC(counter).Name()}func printCommandError(stderr bytes.Buffer, callerFunc string, program string, args ...string) { printCommandErrorUbication(callerFunc, program, args...) fmt.Fprintf(os.Stderr, "%s", commandErrorMessage(stderr, program))}func printCommandErrorUbication(callerFunc string, program string, args ...string) { format := "error at: %s: %s %s\n" argsJoined := strings.Join(args, " ") fmt.Fprintf(os.Stderr, format, callerFunc, program, argsJoined)}func runCommand(callerFunc string, program string, args ...string) { command := exec.Command(program, args...) var stderr bytes.Buffer command.Stderr = &stderr fail := command.Run() if fail != nil { printCommandError(stderr, callerFunc, program, args...) os.Exit(1) }}示例运行:$ go run test.goerror at: main.main: ping -c1 google.commmping: google.commm: Name or service not knownexit status 1