美图齐众专注资阳网站设计 资阳网站制作 资阳网站建设
资阳网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

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.zsjierui.cn/article/djodsjo.html

其他资讯