go work în Go

Creează un workspace (go.work) ca să lucrezi deodată pe mai multe module locale, fără directive replace.

Sintaxă
go work init ./modul1 ./modul2
go work use ./modul3
go work use -r .
go work sync

Ce face go work

Un workspace leagă mai multe module aflate pe disc: dacă modulul magazin folosește modulul utile și le modifici pe amândouă, fișierul go.work face ca magazin să folosească direct codul local al lui utile, nu versiunea publicată. Toate comenzile go rulate din director sau din subdirectoare țin cont de go.work.

go work init creează fișierul, go work use adaugă module (-r le caută recursiv), iar go work sync aliniază versiunile dependențelor comune în go.mod-urile modulelor. De obicei go.work nu se pune în git, pentru că descrie configurația locală a unui programator; GOWORK=off îl dezactivează temporar.

Parametri

Parametru Descriere
init dir... Creează go.work cu modulele din directoarele date.
use dir... Adaugă (sau, cu -r, caută) module.
sync Sincronizează versiunile dependențelor între module.

Exemple

Exemplul 1: Un workspace cu două module

ls
go work init ./magazin ./utile
cat go.work
go list -m

Rezultat în terminal

magazin	utile
go 1.27.2

use (
	./magazin
	./utile
)
exemplu.ro/magazin
exemplu.ro/utile

Greșeli frecvente

  • Commit-ul lui go.work într-un proiect cu un singur modul: colegii primesc căi care nu există la ei.
  • Uitarea că go.work este activ: build-ul local merge, dar în CI (fără go.work) eșuează pentru că versiunea publicată a modulului nu are încă modificările.

Comenzi înrudite

  • go mod init: Creează fișierul go.mod în directorul curent și transformă directorul într-un modul Go.
  • 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.
  • go list: Listează pachete sau module și informații despre ele (fișiere, importuri, versiuni), în text sau JSON.