πŸ’¬Π§Ρ‚ΠΎ ΠΈΠ· сСбя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Go workspaces?



πŸ”ΈΠ’ вСрсии Go 1.18 Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ workspace, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с нСсколькими модулями ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±Π΅Π· нСобходимости рСдактирования go.mod Ρ„Π°ΠΉΠ»ΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ модуля.



πŸ”ΈΠ’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ workspace, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ основныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ зависимостСй. Π”ΠΎ ввСдСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, для добавлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ Π΅Π΅ использования Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅, Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π»ΠΈΠ±ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ измСнСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ модуля, Π»ΠΈΠ±ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» go.mod зависимого модуля с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ replace для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…, Π½Π΅ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ модуля.



πŸ”ΈΠ Π΅ΠΆΠΈΠΌ workspace Π² Go 1.18 Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π² частности, устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. ВмСсто этого, всС зависимости ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с использованиСм Ρ„Π°ΠΉΠ»Π° go.work Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ вашСго workspace.



πŸ”ΈΠ€Π°ΠΉΠ» go.work содСрТит Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ use ΠΈ replace, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ go.mod, устраняя Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ рСдактирования ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° go.mod Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.



πŸ”ΈΠ”Π»Ρ создания workspace ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° go work init с пСрСчислСниСм Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ. Workspace Π½Π΅ обязан ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅. Команда init создаСт Ρ„Π°ΠΉΠ» go.work, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСчисляСт ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² workspace. Если Π²Ρ‹ запуститС go work init Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΠΌΠ°Π½Π΄Π° создаст пустой workspace.



πŸ“ŒΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ прСимущСства:



1. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠ΄Π°: workspaces ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ связанныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Go Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π°, особСнно Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… с мноТСством зависимостСй ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.



2. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями: с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ workspaces ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ зависимостями ΠΌΠ΅ΠΆΠ΄Ρƒ модулями. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Π·Π°ΠΌΠ΅Π½Ρƒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ зависимостСй Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….



3. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: workspaces ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, позволяя Π²Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ мноТСством ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±Π΅Π· нСобходимости постоянно ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ измСнСния Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.



4. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Go модулями: workspaces Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ возмоТности Go ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, добавляя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нСсколькими модулями Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ workspace, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ модулями Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ.



5. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс: Go workspaces ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², дСлая процСсс сборки ΠΈ тСстирования Π±ΠΎΠ»Π΅Π΅ простым ΠΈ эффСктивным.



6. ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ: созданиС workspace Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ окруТСниями Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ.



πŸ‘‰ ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅