Mi piace usare SheBangs per eseguire direttamente i miei script Perl:Qual è la linea Go Shebang appropriata?
#!/usr/bin/env perl
Qual è la baracca per i programmi Go?
Mi piace usare SheBangs per eseguire direttamente i miei script Perl:Qual è la linea Go Shebang appropriata?
#!/usr/bin/env perl
Qual è la baracca per i programmi Go?
I programmi di go vengono compilati in binari; Non penso che ci sia un'opzione per eseguirli direttamente dalla fonte.
Questo è simile ad altri linguaggi compilati come C++ o Java. Alcune lingue (come Haskell) offrono sia una modalità completamente compilata che una modalità "script" che puoi eseguire direttamente dal sorgente con una riga shebang.
+1 dove Perl è un linguaggio di scripting interpretato .... –
Non ce n'è uno di default. C'è uno strumento di terze parti chiamato gorun che ti permetterà di farlo, però. https://wiki.ubuntu.com/gorun
Sfortunatamente ai compilatori non piace la linea shebang. Non puoi compilare lo stesso codice che usi con gorun.
Argh. 6g e gli amici borkano quando vedono una shebang. – mcandre
Scusa, avrei dovuto dirlo. Modificato. –
//usr/bin/go run $0 [email protected] ; exit
esempio:
//usr/bin/go run $0 [email protected] ; exit
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
go trattare // come una singola riga di commento e Shell ignorano extra/
Potresti modificare lo shebang per applicarlo a qualsiasi file Go, non solo hello_world.go? Forse usare '$ 0' o simile? – mcandre
Questa non è una linea di shebang. Dovrebbe iniziare con '#!'. (Sapendo che andare non piace). Questo non è portabile, ma forse è abbastanza buono per molte persone, quindi +1 per la risposta. – topskip
Penso che sia meglio scrivere così: '/// usr/bin/env go run $ 0 $ @; exit' – ivanzoid
preferisco questo:
///bin/true; exec /usr/bin/env go run "$0" "[email protected]"
Questo ha diversi vantaggi rispetto alla risposta di هوم جاویدپور:
usi 'exec' per sostituire il nuovo processo shell invece di lanciare un processo nipotino. Di conseguenza, il tuo programma Go sarà un processo figlio diretto. Questo è più efficiente ed è anche importante per alcune situazioni avanzate, come il debug e il monitoraggio.
Quotazione corretta degli argomenti. Spazi e caratteri speciali non causeranno problemi.
Il principale "///" è più conforme agli standard di appena "//". Se si utilizza solo "//", si rischia di imbattersi in comportamenti definiti dall'implementazione. Ecco una citazione da http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html:
Se un percorso inizia con due caratteri successivi, il primo componente seguente protagonisti può essere interpretata in modo definito dall'implementazione, anche se più di due principali caratteri devono essere trattati come un singolo carattere.
Ho provato questa risposta con bash, dash, zsh e ksh.
Esempio:
///bin/true; exec /usr/bin/env go run "$0" "[email protected]"
package main
import "fmt"
func main() {
fmt.Println("你好!")
}
Voglio sottolineare che se il tuo programma os.Exit() s con un codice di uscita diverso da zero che sta stampando su stderr e go esegue restituisce 1 come codice di uscita. – tmc
Questo vale anche per la risposta di هومن جاویدپور –
L'uso di '/ bin/true' non è così trasferibile (ad es. OSX e Zsh) – Kreisquadratur
Go viene compilato. Non dovresti aver bisogno di una shebang. Destra? –
[Discussion thread in golang-nuts] (https://groups.google.com/d/msg/golang-nuts/iGHWoUQFHjg/hEhYPQjP3HcJ) che hanno un post simile a [هومن جاویدپور] (http://stackoverflow.com)/users/1040891) 's [risposta] (http: // stackoverflow.it/a/17900932/109747) –