go run în Go

Compilează și rulează imediat un program Go, fără să lase un executabil în director.

Sintaxă
go run fisier.go [argumente]
go run .                 # pachetul main din directorul curent
go run ./cmd/server
go run -race .
go run pachet@versiune   # un program dintr-un modul

Ce face go run

go run compilează pachetul main indicat într-un director temporar, rulează programul și șterge executabilul. Este comanda folosită cât timp scrii și încerci codul. Tot ce urmează după pachet (sau după fișierele .go) se trimite programului ca argumente și ajunge în os.Args.

go run . rulează pachetul din directorul curent, cu toate fișierele lui; go run main.go compilează doar fișierul dat, deci dacă pachetul are mai multe fișiere trebuie să le dai pe toate. -race activează detectorul de „data race”, util pentru programe cu goroutine. Cu pachet@versiune poți rula un program dintr-un alt modul fără să-l instalezi.

Codul de ieșire al programului este păstrat: dacă programul se termină cu os.Exit(3), go run afișează exit status 3 și iese cu cod nenul.

Parametri

Parametru Descriere
fișiere sau pachet main.go, ., ./cmd/server sau modul/cmd@v1.2.3.
-race Detectează accesul simultan nesincronizat la aceleași date.
argumente Tot ce vine după pachet ajunge în os.Args[1:].

Exemple

Exemplul 1: Rularea unui program cu argumente

Programul primește Ana și Iași în os.Args.

// main.go
package main

import (
    "fmt"
    "os"
)

func main() {
    if len(os.Args) < 3 {
        fmt.Println("folosire: salut <nume> <oraș>")
        os.Exit(2)
    }
    fmt.Printf("Salut, %s din %s!\n", os.Args[1], os.Args[2])
}

// în terminal:
// go run . Ana Iași
// go run .

Rezultat în terminal

Salut, Ana din Iași!
folosire: salut <nume> <oraș>
exit status 2

Exemplul 2: Un pachet cu mai multe fișiere

go run main.go nu vede funcțiile din preturi.go (același pachet main); go run . le compilează pe toate.

go run main.go
go run .

Rezultat în terminal

# command-line-arguments
./main.go:6:34: undefined: calculeazaTotal
Total: 245.00 lei

Greșeli frecvente

  • go run main.go într-un pachet cu mai multe fișiere: undefined: .... Folosește go run ..
  • go run pe un pachet care nu este main: package exemplu.ro/magazin/preturi is not a main package.
  • Folosirea lui go run în producție: compilează la fiecare pornire. Construiește o dată cu go build.

Comenzi înrudite

  • go build: Compilează pachetele și, pentru pachetul main, creează un executabil de sine stătător.
  • package și pachetul main: Fiecare fișier Go începe cu package; pachetul main cu funcția main() devine un program executabil.
  • go install: Compilează un program și pune executabilul în directorul bin (GOBIN sau GOPATH/bin), ca să-l poți rula de oriunde.