Comments 12
Еще одна проблема в том...Просто замените go на php и проблем будет значительно меньше.
Та не, нормально. Есть проект yaegi, который почти делает из го интерпретатор
Вот тут поинтереснее https://blog.cloudflare.com/using-go-as-a-scripting-language-in-linux/
echo ':golang:E::go::/usr/local/bin/gorun:OC' | sudo tee /proc/sys/fs/binfmt_misc/register
:golang:E::go::/usr/local/bin/gorun:OC
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
в статье про шебанги, шебанги (много где в первой половине статьи) с пробелом.
Можно рассмотреть данный проект https://magefile.org/magefiles как еще одну альтернативу
Можно скомбинировать варианты 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
, при этом сохраняются остальные преимущества обходного варанта.
История: пишем скрипты на Go