Golang调用系统命令时如何指定执行路径(切换目录)?

场景带入

先看一个场景,假如从代码托管平台(github、gitlab、gitee等)克隆一个Golang项目,使用git clone完成以后,需要切换(cd)到这个项目里面去做一些操作,例如使用go mod download安装依赖包。

这一系列操作如果使用程序来实现的话还是有一点不同的,特别是切换到项目目录的动作。人工操作的话直接执行 cd dst-path 命令即可,使用程序调用 cd 系统命令这么做却是无效的。

Golang中的实现方法

Golang中调用系统命令的方法是这样的,以上面的git clone为例:

package main

import "os/exec"

func main() {
err := exec.Command("git", "clone", "https://github.com/xxx/test").Run()
if err != nil {
panic(err)
}
}

接下来就需要切换到这里的 test 目录去执行 go mod tidy 命令了,你可能会想到这么实现:

package main

import "os/exec"

func main() {
err := exec.Command("git", "clone", "https://github.com/xxx/test").Run()
if err != nil {
panic(err)
}

err = exec.Command("cd", "./test").Run()
if err != nil {
panic(err)
}

err = exec.Command("go", "mod", "download").Run()
if err != nil {
panic(err)
}
}

到这里你就错了,在程序里这么写是不会生效的,可以执行代码看看效果。正确的方式应该这么写:

package main

import "os/exec"

func main() {
err := exec.Command("git", "clone", "https://github.com/xxx/test").Run()
if err != nil {
panic(err)
}

cmd := exec.Command("go", "mod", "download")
cmd.Dir = "./test"
err = cmd.Run()
if err != nil {
panic(err)
}
}

文章题目:Golang调用系统命令时如何指定执行路径(切换目录)?
网址分享:http://www.mswzjz.cn/qtweb/news49/470699.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能