История изменений
Исправление 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 на момент начала проекта.
Предположил из за того, что
Достоинства го, вроде горутин, чего там ещё, нэйтив, здесь побоку. Зато выразительности не хватает: туча бойлерплейта и закатывания солнц вручную.
Так что или так, или выбрал короткий путь: тот который знаешь.
Неважно. Цимес в том, что Го для «клея» так себе подходит. Но всё познаётся в сравнении, конечно.