Pull to refresh

Comments 45

По-моему это из пушки по воробьям.

В unix такой проблемы нет, shell-скрипты могут быть полноценными программами (не без огороворок, но простейшее скачивание файлов делается элементарно). Потребление памяти для скриптов, запускаемых редко — вообще не проблема.

Прочитал заметку по диагонали, и насколько понял, рассматриваемая задача приведена просто для примера и не говорится, что именно она невозможна через shell-скрипт. Ну а скрипты на go/python вполне себе имеют смысл, если приходится выполнять задачи на различных ос
Хендлинг ошибок в баше и чуть более сложная логика — это боль.
Кроме того, для unix и windows данный скрипт пришлось бы писать отдельно, решение с Go кроссплатформенно.
ну да, кросплатформенно, с точностью до обратных слешей :-)
Offtopic: побороть cmd.exe вам поможет delayed expansion. Пример:

setlocal enabledelayedexpansion

echo %time%
ping 127.0.0.1 -n 1 -w 1000 >nul 2>&1
echo %time%
if 1 neq 0 (
  echo %time% !time!
  ping 127.0.0.1 -n 1 -w 1000 >nul 2>&1
  echo %time% !time!
)
На что только не пойдут люди, что бы PowerShell не изучать!

:)

Однако если потом захочется перейти на *nix то данный опыт позволит ещё не изучать ещё и shell-скрипты.
Вы так говорите, как будто это хорошо.
он просто ленивый разработчик.

но есть трудолюбивые, да.
На что только люди идут, чтобы не ставить Cygwin и работать в одной среде независимо от платформы вообще… Ведь не windows единым жив админ…
Вам приходилось поддерживать целую ферму Cygwin? Мне вот с одним Curl проблем хватает. Буквально вчера пришлось обновлять версию, так как в одном филиале NAT средствами Windows организован.
Я ничего не писан на PowerShell, но писал на C#. Код на PowerShell будет зависеть от версии PowerShell на конечной машине? Если нет, то смогу ли я выполнить код на PowerShell в установке WinXP или Win2003 по-умолчанию или мне придется проверить версию и доустановить необходимое?
В качестве примера куда лучше подошёл бы случай, в котором сложность кода при переписывании на Go уменьшается.
В примере я старался наиболее точно воспроизвести логику работы. Выгода появляется при росте сложности, например думаю у 50-строчного СMD/BAT (мне и такие писать приходилось) выиграю.
UFO just landed and posted this here
Не надо ставить питон на целевую машину.
Это сарказм?
Емнип, в nix* мире (разве что за исключением embedded) python в большинстве случаев уже стоит. А вот тот же go ещё нужно поставить.
А в win мире какая разница что ставить, если всё равно нужно ставить?
под скомпилированный файл ставить то ничего не нужно, среду необходимо поставить единожды на компьютере разработчика
Во-первых, это аргумент автора. Во-вторых, речь о винде. В-третьих, standalone-экзешник не нуждается в установленном на целевую машину Go.
так вроде из питон скрипта можно тоже exe сделать?
Ничем. Если вам удобно писать на python. Где-то читал, что при выборе языка для конкретной задачи, берется тот в котором код меньше и понятнее. Лично мне, например нравится классический sh, но на нем tcp-сервер c tls и авторизацией не напишешь. Насчет питона, классический «однострочный http-сервер» съедает 18 мегабайт памяти. Пятистрочный на Go — три.
А зачем скачивать файлики в программе на Go, через отдельную утилиту?
Почему нельзя было средствами Go скачать?
Скачивание файликов здесь для примера. Я знаю про go-curl. Но использование его слишком усложняет и увеличивает код, а я писал статью для начинающих. Кроме того, в go-curl C-шные вставки. Пришлось бы рассказывать про mingw и как настроить liteide на работу с ним. По этой же причине я пока не заикался про go-sqlite3. Иногда все-же проще притащить на целевую машину готовый экзэшник, особенно если из возврата нужен только код завершения.
out_file := ".\\test\\test.zip" //В Go бэкслэш используется для экранирования, так что в пути windows его придется удваивать
Ну так используйте другие кавычки:
out_file := `.\test\test.zip`
… а еще windows в функциях работы прекрасно кушает / как разделитель пути…
Не все. Я встречал приложения, которым \, иначе «путь не найден».
Я говорю про функции системы, а не приложения. Приложения многие ругаются, да…
> В этот файл будут собраны минимальная среда исполнения и все необходимые пакеты.

Это не так — curl то в него не попадет, и его нужно будет отдельно таскать. Или в Windows он встроенный?
Каюсь. Curl использовал для примера, но если кто-то собрался использовать, то киньте curl.exe в папку с программой.
Да, собтвенно, курл здесь и не нужен. Можно воспользоваться встроенными модулями Go.
понравилось слово goroutines
и так как это — одна из киллер фич языка, думаю будет интересно увидеть продолжение именно об этом(concurrency)
Про это уже писали и не раз. Может позже…
Тоже использую Go для административных скриптов иногда, запускаемых через shebang (#!) — одна из проблем, это заморочки с GOPATH, если нужно использовать сторонние пакаджи (mysql, к примеру). Но для большинства задач — намного более приятный опыт и уверенность в коде, нежели с bash.
В linux я примерно так запускаю:

$ cat ~/devel/start_liteide_64.sh

export GOROOT=$HOME/devel/go64
export GOPATH=$HOME/devel
export PATH=$PATH:$GOROOT/bin
exec $HOME/devel/liteide/bin/liteide

а для 86 у меня отдельный скрипт соответственно GOPATH общий. Но заметил одну деталь, при компиляции возможность запуска зависит от версии glibc. Так что приложение собранное на машине с debian пойдет и для ubuntu, но не наоборот.
Возможно в Go 1.5 эта проблема исчезнет — там будет новый компилятор.
Нет-нет, проблема в другом. Есть скрипт, который я хочу запускать через gorun. go и gorun поставить на сервер — не проблема, и все что мне нужно — чтобы скрипт можно было запускать, как, ну, обычный sh-скрипт. Но если мне нужен доступ к myqsql из этого Go-скрипта (или любой third-party package), то уже не получится просто так запускать — нужно на целевом сервере (в моем случае их много) устанавливать GOPATH и go get-ить туда нужный package, чтобы скрипт работал.
Ну, это больше не проблема, это так — заморочка. )
В моем случае. Нужно просто с целевой машиной синхронизировать каталог devel/src. Ну и опять же в скрипте запуска указать GOPATH. Но проще скомпилировать.
А можно еще в курс включить более практическое:
Имеем Excel-файл, где в первом столбце список устройств (объединение из 3х ячеек);
Осуществить поиск нужной ячейки;
Требуется прочитать второй столбец (собственно те самые 3 ячейки — ip/netmask/gw);
В третий столбец записать некую строку.

Powershell мне в работе с excel совсем не понравился.

Еще вопрос — А как с работой с устройством по telnet/ssh/console — возможности есть?
Как насчет expect-like работы — вводим строку в терминал, дожидаемся ключевого слова, читаем вывод, на основе этого — даем следующую команду.
мне бы было интересно почитать про отсылку/прием e-mail через го.
Вы же понимаете, что поставили задачу не для новичков? Если я правильно понял, то прочитать значение из excel вам поможет github.com/mattn/go-ole. Там есть пример работы именно с excel.А вобще я бы сохранил лист с csv. Его читать гораздо проще.
Были бы интересны в первую очередь первые два пункта TODO. Хотя все остальное не менее интересно.
Sign up to leave a comment.

Articles