package gomod import ( "fmt" "os" "os/exec" "golang.org/x/mod/modfile" ) func command(url string) error { cmd := exec.Command("go", "get", "-u", url) if _, err := cmd.CombinedOutput(); err != nil { return err } return nil } func AllModUpgrade() { modFileData, err := os.ReadFile("go.mod") if err != nil { fmt.Printf("read go.mod file failed: %v\n", err) return } modFile, err := modfile.Parse("go.mod", modFileData, nil) if err != nil { fmt.Printf("parse go.mod file failed: %v\n", err) return } for _, mod := range modFile.Require { fmt.Printf("go get -u %s\n", mod.Mod.String()) if err := command(mod.Mod.String()); err != nil { fmt.Printf("upgrade %s failed: %v\n", mod.Mod.String(), err) continue } fmt.Printf("upgrade %s success\n", mod.Mod.String()) } } func SingleModUpgrade(url string) { if err := command(url); err != nil { fmt.Printf("upgrade %s failed: %v\n", url, err) return } fmt.Printf("upgrade %s success\n", url) }