⏱️ RunWithTimeout
在指定超时时间内执行 Composer 命令,超时后自动取消。内部基于 RunWithContext 实现。
何时使用
当某个命令可能运行很久(如大型项目的 install、update),你希望给它一个明确的时间上限时使用。Run 默认 10 分钟,本方法可自定义。
签名
go
func (c *Composer) RunWithTimeout(timeout time.Duration, args ...string) (string, error)参数
| 参数 | 类型 | 说明 |
|---|---|---|
timeout | time.Duration | 命令执行的最大超时时间 |
args | ...string | 命令参数,第一个参数是 Composer 子命令 |
返回值
| 返回值 | 类型 | 说明 |
|---|---|---|
| 第一返回值 | string | 命令的标准输出(含合并的 stderr) |
| 第二返回值 | error | 命令执行失败或超时(context.DeadlineExceeded)时返回 |
示例
go
package main
import (
"fmt"
"log"
"time"
"github.com/scagogogo/composer-skills/pkg/composer"
)
func main() {
comp, err := composer.New(composer.DefaultOptions())
if err != nil {
log.Fatalf("初始化失败: %v", err)
}
// 给安装命令 30 分钟超时
output, err := comp.RunWithTimeout(30*time.Minute, "install")
if err != nil {
log.Fatalf("安装超时或失败: %v", err)
}
fmt.Println("安装完成:")
fmt.Println(output)
}进阶
- 需要手动取消使用 RunWithContext。
- 不需要自定义超时使用 Run(默认 10 分钟,由
Options.DefaultTimeout决定)。 - 调整默认超时可在构造时设置
Options.DefaultTimeout。