做旅游网约车的网站,网站二次开发是什么意思,h5网站建设 案例,百度学术官网入口在go语言中#xff0c;我们可以通过os/exec包中的Command和CommandContext 函数创建对应的外部程序执行Cmd对象#xff0c; 这2个函数创建的cmd命令执行对象是有区别的#xff0c;CommandContext创建的对象可以携带上下文#xff0c;这个主要用于我们通过cancel函数给对应的…在go语言中我们可以通过os/exec包中的Command和CommandContext 函数创建对应的外部程序执行Cmd对象 这2个函数创建的cmd命令执行对象是有区别的CommandContext创建的对象可以携带上下文这个主要用于我们通过cancel函数给对应的执行程序发送强制退出命令。
下面我们使用简单的调用系统中的ping命令来演示这2个函数的区别
exec.Command函数创建Cmd命令对象示例
// ping命令
func TestExecPing(t *testing.T) {cmd : exec.Command(ping, www.baidu.com)cmd.Stdout os.Stdoutfmt.Println(将要执行的命令: , cmd.String())cmd.Run() // 这个会一直执行,因为ping命令会一直执行
} exec.CommandContext函数创建Cmd命令对象示例 // 带执行上下文的ping命令
func TestExecPingWithTimeout(t *testing.T) {// 获取一个超时上下文对象ctx,和对应的cancel函数ctx, cancel : context.WithTimeout(context.Background(), 10*time.Second)defer cancel()// 创建一个带上下文的命令Cmd对象cmd : exec.CommandContext(ctx, ping, www.baidu.com)cmd.Stdout os.Stdoutfmt.Println(将要执行的命令: , cmd.String())cmd.Run() // 这个将在10秒钟后 强制结束ping命令并退出}总结
通过上面示例我们可以清除的看出 使用Command函数创建的ping命令会一直执行下去除非我们手动ctrlc 取消他 而CommandContext函数创建的cmd对象 我们给ping命令传递了一个超时的上下文这样程序在指定的时间后就自动退出了。 显然CommandContext的方式更为灵活和可控。