废话不多说,直接上代码,简单清晰明了

	cmd := exec.Command(execPath)
	var rx_r, rx_w, tx_r, tx_w *os.File
	rx_r, rx_w, err = os.Pipe()
	if err != nil {
		return
	}
	tx_r, tx_w, err = os.Pipe()
	if err != nil {
		return
	}
	cmd.SysProcAttr = &syscall.SysProcAttr{} //Setpgid: true
	if runtime.GOOS == "linux" {
		cmd.ExtraFiles = append(cmd.ExtraFiles, tx_r, rx_w)
	}
	if runtime.GOOS == "windows" {
		cmd.Stdin = tx_r
		cmd.Stdout = rx_w
	}
	err = cmd.Start()
	tx_r.Close()
	rx_w.Close()

最终rx_r为 “execPath” 启动程序的读取管道,由于windows下设置ExtraFiles 之后start里的实现会有一个判断,最终导致失败,所以windows和linux下的参数改变是不一样的,这个需要特别注意!!!!!
注:runtime.GOOS在“runtime”包中