Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Ещё недостаток «Гоу»

В отличие от многих языков, в «Гоу» символ решётки не позволяет комментировать строку. В упомянутых языках это сделано не зря. В различных ЮНИКС-подобных системах, если запускаемый файл начинается с последовательности «#!», то считается, что дальше идёт путь до интерпретатора, который умеет обрабатывать запускаемый файл. Таким образом работают, например, все шелл-скрипты.

Сам же язык, встретив первой строкой «#!/bin/какой-то путь» просто посчитает это комментарием. Так поступает Пайтон, ПХП, Перл и ещё целая куча языков. Это удобно.

В «Гоу» такого нет. Несмотря, что в первой версии появилась команда «go run», позволяющая запускать программы из командной строки, не компилируя их (на самом деле компилируя, но результат не сохраняется), я не могу указать в первой строке «#!/usr/local/bin/go run», «Гоу» меня отругает:

bolk@dhcp-174 ~ $ ./main.go 
package : 
main.go:1:1: illegal character U+0023 '#'

Прискорбно.

6 комментариев
hshhhhh (hshhhhh.name) 2012

Создай свой скрипт ~/bin/go_run.sh
В go указывай его, в самом скрипте напиши так:

tail -n +2 $1 | go run

Евгений Степанищев (bolknote.ru) 2012

Комментарий для hshhhhh.name:

Да это какая-то адская жесть, а не решение :)

Денис Попов (besisland.name) 2012

В PHP ситуация совсем иная: директива должна находиться не внутри кода, а перед ним, с точки зрения синтаксиса PHP это текст, который будет выведен в STDIN. CLI-интерпретатор этот случай обрабатывает исключительно.

Евгений Степанищев (bolknote.ru) 2012

Комментарий для besisland.name:

Ну, интерпретатор для командной строки есть, уже хорошо (я, правда, никогда утилиты командной строки не пробовал пускать в веб-сервере).

guest 2012

В Lua ’#’ не комментирует, но:
«Lua может использоваться в качестве интерпретатора скриптов в системах Unix, если учесть то, что интерпретатор пропускает первую строку скрипта если она начинается с #. Таким образом, скрипты Lua могут быть превращены в исполняемые программы вызовом chmod +x и добавлением #! в начало файла, как показано в следующем примере:»

Евгений Степанищев (bolknote.ru) 2012

Комментарий для guest:

Ну, тоже решение.