Подтвердить что ты не робот

Какая уместная линия Go shebang?

Мне нравится использовать shebangs для непосредственного запуска скриптов Perl:

#!/usr/bin/env perl

Что такое программы shebang для Go?

4b9b3361

Ответ 1

//usr/bin/go run $0 [email protected] ; exit

Пример:

//usr/bin/go run $0 [email protected] ; exit
package main

import "fmt"

func main() {
    fmt.Println("Hello World!")
}

go treat//как комментарий одной строки и shell игнорировать дополнительные/

Ответ 2

По умолчанию не существует. Существует сторонний инструмент, называемый gorun, который позволит вам это сделать. https://wiki.ubuntu.com/gorun

К сожалению, компиляторам не нравится строка shebang. Вы не можете скомпилировать тот же код, который вы используете с gorun.

Ответ 3

Я предпочитаю это:

///bin/true; exec /usr/bin/env go run "$0" "[email protected]"

Это имеет несколько преимуществ по сравнению с ответом هومن جاویدپور:

  • Использует "exec" для замены нового процесса оболочки вместо запуска процесса внука. В результате ваша программа Go станет прямым дочерним процессом. Это более эффективно, и это также важно для некоторых передовых ситуаций, таких как отладка и мониторинг.

  • Правильное цитирование аргументов. Пробелы и специальные символы не вызовут проблем.

  • Ведущий "///" более совместим со стандартами, чем просто "//". Если вы используете только "//", вы рискуете столкнуться с определенным поведением. Здесь цитата из http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html:

Если путь начинается с двух последовательных символов, первый компонент, следующий за ведущими символами, может быть интерпретирован в соответствии с реализацией, хотя более двух ведущих  символы должны рассматриваться как один символ.

Я проверил этот ответ с помощью bash, dash, zsh и ksh.

Пример:

///bin/true; exec /usr/bin/env go run "$0" "[email protected]"
package main
import "fmt"
func main() {
    fmt.Println("你好!")
}

Ответ 4

Программы

Go собираются в двоичные файлы; Я не думаю, что есть возможность запускать их непосредственно из источника.

Это похоже на другие скомпилированные языки, такие как С++ или Java. Некоторые языки (например, Haskell) предлагают как полностью скомпилированный режим, так и режим "script", который можно запускать непосредственно из источника с помощью строки shebang.