Ce face package și pachetul main
Primul rând al oricărui fișier Go este package nume. Toate fișierele dintr-un director aparțin aceluiași pachet și își văd reciproc funcțiile, tipurile și variabilele. Numele pachetului este, de obicei, numele directorului, scris cu litere mici (package facturi).
Pachetul special main produce un program executabil. El trebuie să conțină funcția func main(), fără parametri și fără rezultate: execuția programului începe acolo (după funcțiile init) și se termină când main se întoarce. Argumentele din linia de comandă se citesc din os.Args, iar un cod de ieșire se dă cu os.Exit(cod).
Orice alt nume de pachet produce o bibliotecă, pe care alte pachete o folosesc prin import. Un modul (fișierul go.mod) poate avea mai multe pachete, câte unul pe director.
Exemple
Exemplul 1: Cel mai mic program Go
package main
import "fmt"
func main() {
fmt.Println("Salut din Iași!")
}
Rezultat
Salut din Iași!
Exemplul 2: Funcții ajutătoare și codul de ieșire
Toate funcțiile din pachetul main se văd între ele. Programul nu primește argumente, deci os.Args conține doar numele programului.
package main
import (
"fmt"
"os"
)
func salut(nume string) string {
return "Bună, " + nume + "!"
}
func main() {
fmt.Println(salut("Ana"))
fmt.Println("argumente primite:", len(os.Args)-1)
if len(os.Args) < 2 {
fmt.Println("folosire: program <nume>")
os.Exit(0) // 0 = succes; orice altă valoare = eroare
}
}
Rezultat
Bună, Ana!
argumente primite: 0
folosire: program <nume>
Greșeli frecvente
- Fișiere cu nume de pachet diferite în același director:
found packages main (a.go) and util (b.go). func main()cu parametri sau rezultat (func main() int):func main must have no arguments and no return values.- Lipsa lui
mainîn pachetulmain:function main is undeclared in the main package. os.Exitnu rulează funcțiile amânate cudefer.
Comenzi înrudite
import: Aduce în fișier pachete din biblioteca standard sau din alte module; numele pachetului devine prefixul folosit.init(): Funcție specială care rulează automat la pornire, după inițializarea variabilelor pachetului și înainte de main().module și pachete: Un pachet este un director cu fișiere .go; un modul (go.mod) este un proiect cu mai multe pachete și dependențele lor.vizibilitate (exportat/neexportat): Numele care încep cu literă mare sunt vizibile din alte pachete; cele cu literă mică rămân private pachetului.go run: Compilează și rulează imediat un program Go, fără să lase un executabil în director.