Pull to refresh

Comments 12

Еще одна проблема в том...
Просто замените go на php и проблем будет значительно меньше.
UFO just landed and posted this here

Та не, нормально. Есть проект yaegi, который почти делает из го интерпретатор

UFO just landed and posted this here

Go — плохой язык для скриптов


  • Нет REPL. Писать скрипт по строчке в интерактивном режиме? Нет, нельзя. Отладчика с Go REPL тоже нет.
  • Компилятор злой и дотошный. Закомментировать кусок кода? Unused variables, unused imports здесь ошибки, ничего не запустится
  • Не хватает фич языка. Строка на list comprehension из Питона превращается в кучу строк на Го. Сортировка структур — боль. Yield? Не слышали, возитесь с горутинами и каналами.
  • Статический язык… Ладно объявлять типы, это ещё можно пережить. Но, чтобы распарсить JSON/YAML/XML, надо заранее объявить (статически!) всю его потенциальную структуру.
  • Вообще язык многословный. if err != nil { write two more lines }
  • Кроссплатформенность (теги сборки) в однофайловом скрипте не работает. CGO, если придётся брать, всё совсем испортит.

Го — плохой язык? Отнюдь. Просто это язык для другой задачи.

Добавлю еще про парсинг структуры - если она динамическая, то там количество строк совсем невменяемое становится.

Используем шебанг-строку:
//usr/bin/env go run "$0" "$@"; exit "$?"

а почему вы называете шебангом первую строчку в этом случае?
скрипт с шебангом обрабатывается ядром наравне с другими исполняемыми файлами, то есть вы можете запустить такой скрипт как с помощью system(), так и с помощью exec().
предложенная же вам первая строчка обрабатывается шеллом, поэтому с помощью system() его получится запустить, а помощью exec() — нет.

Интересная статья, но я так и не понял, какая необходимость писать скрипты на Go, здесь рассматривается сценарий, когда в компании остались сисадмины/программисты, которые знают только Go и поэтому и скрипты должны быть на этом языке?

>а затем изменить шебанг на #! /usr/bin/env
в статье про шебанги, шебанги (много где в первой половине статьи) с пробелом.

Можно скомбинировать варианты gorun и обохдной:

//usr/bin/env gorun "$0" "$@"; exit "$?"
package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println("Hello", os.Args[1])
    os.Exit(42)
}

У этого варианта код выхода корректный, если запускать ./example.go world, при этом сохраняются остальные преимущества обходного варанта.

Sign up to leave a comment.