Golangでpythonのパッケージ全てを並列実行で高速に最新にするものを作りたいのですが、どうすればいいのでしょうか?
goルーチンを使い、書いてみましたが下記のPythonのスクリプトより遅くなってしまいます。
Golangでマルチプロセスで実行するにはどうすればいいのでしょうか?
下記のPythonスクリプトのようなことをGolangで実現したいと思っています。


#!/usr/local/bin/python3.4
# coding:utf-8

from multiprocessing import Process
import re
import subprocess
import os

def u(v):
    os.system("echo 'mypassword' | sudo -S -H -p '' pip3.4 install " + v + " -U")

output = subprocess.check_output(["pip3.4", "freeze"]).decode()
output_list = re.findall(".+(?===)", output)
output_list.extend(["pip", "setuptools"])
print(output_list)

for v in output_list:
    Process(target=u, args=(v,)).start()


package main

import (
    "fmt"
    "os"
    "os/exec"
    "regexp"
    "strings"
    "log"
)

func main() {
    out, err := exec.Command("pip3.4", "freeze").Output()
    if err != nil {
        log.Fatal(err)
    }
    str_output := string(out)
    re := regexp.MustCompile(".+==")
    re_list := re.FindAllString(str_output, -1)
    for _, v := range re_list {
        c := make(chan string, 1)
        go update(v[:len(v)-2], c)
        command_output := <-c
        fmt.Println(command_output)
    }
    fmt.Println("end")

}

func update(package_name string, s chan string) {
    cmd := exec.Command(os.Getenv("SHELL"), "-c", "pip install "+package_name+" -U")
    cmd.Stdin = strings.NewReader("mypassword\n")
    out, err := cmd.Output()
    out_str := string(out)
    s <- out_str
    if err != nil {
        log.Fatal(err)
    }
}