LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

Почему ты так решил? Я уже знал Go на момент начала проекта.

Предположил из за того, что

Достоинства го, вроде горутин, чего там ещё, нэйтив, здесь побоку. Зато выразительности не хватает: туча бойлерплейта и закатывания солнц вручную.

Так что или так, или выбрал короткий путь: тот который знаешь.

Неважно. Цимес в том, что Го для «клея» так себе подходит. Но всё познаётся в сравнении, конечно.

Я бы самоубился, если б пришлось для автоматизации писать такой бойлерплейт:

// Start qemu process
func (q *QemuSystem) Start() (err error) {
	q.cmd = exec.Command("qemu-system-"+string(q.arch),
		// TODO
		"-snapshot",
		"-nographic")

	if q.pipe.stdin, err = q.cmd.StdinPipe(); err != nil {
		return
	}

	if q.pipe.stdout, err = q.cmd.StdoutPipe(); err != nil {
		return
	}

	if q.pipe.stderr, err = q.cmd.StderrPipe(); err != nil {
		return
	}

	err = q.cmd.Start()
	if err != nil {
		return
	}

	go func() {
		q.Stdout, _ = readUntilEOF(q.pipe.stdout)
		q.Stderr, _ = readUntilEOF(q.pipe.stderr)
		q.exitErr = q.cmd.Wait()
		q.died = true
	}()

	time.Sleep(time.Second / 10) // wait for immediately die

	if q.died {
		err = errors.New("qemu died immediately: " + q.Stderr)
	}

	return
}

Даже IDE не спасла бы.

Исправление Deleted, :

Почему ты так решил? Я уже знал Go на момент начала проекта.

Предположил из за того, что

Достоинства го, вроде горутин, чего там ещё, нэйтив, здесь побоку. Зато выразительности не хватает: туча бойлерплейта и закатывания солнц вручную.

Так что или так, или выбрал короткий путь: тот который знаешь.

Неважно. Цимес в том, что Го для «клея» так себе подходит. Но всё познаётся в сравнении, конечно.

Я бы самоубился, если б пришлось для автоматизации писать так:

// Start qemu process
func (q *QemuSystem) Start() (err error) {
	q.cmd = exec.Command("qemu-system-"+string(q.arch),
		// TODO
		"-snapshot",
		"-nographic")

	if q.pipe.stdin, err = q.cmd.StdinPipe(); err != nil {
		return
	}

	if q.pipe.stdout, err = q.cmd.StdoutPipe(); err != nil {
		return
	}

	if q.pipe.stderr, err = q.cmd.StderrPipe(); err != nil {
		return
	}

	err = q.cmd.Start()
	if err != nil {
		return
	}

	go func() {
		q.Stdout, _ = readUntilEOF(q.pipe.stdout)
		q.Stderr, _ = readUntilEOF(q.pipe.stderr)
		q.exitErr = q.cmd.Wait()
		q.died = true
	}()

	time.Sleep(time.Second / 10) // wait for immediately die

	if q.died {
		err = errors.New("qemu died immediately: " + q.Stderr)
	}

	return
}

Даже IDE не спасла бы.

Исходная версия Deleted, :

Почему ты так решил? Я уже знал Go на момент начала проекта.

Предположил из за того, что

Достоинства го, вроде горутин, чего там ещё, нэйтив, здесь побоку. Зато выразительности не хватает: туча бойлерплейта и закатывания солнц вручную.

Так что или так, или выбрал короткий путь: тот который знаешь.

Неважно. Цимес в том, что Го для «клея» так себе подходит. Но всё познаётся в сравнении, конечно.