[{"data":1,"prerenderedAt":70921},["ShallowReactive",2],{"navigation_docs":3,"-client-server-architecture-type-system-and-memory-model":3728,"-client-server-architecture-type-system-and-memory-model-surround":70916},[4,1707,1912,2366,2547,2673,2880,3002,3052,3109,3143,3269,3346,3360,3495,3512,3525,3671,3724],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"C#","i-devicon-csharp","\u002Fcsharp","01.csharp",[10,13,60,90,120,202,219,253,379,404,457,650,1364,1654,1703],{"title":11,"path":7,"stem":12},"C# та .NET","01.csharp\u002Findex",{"title":14,"icon":15,"path":16,"stem":17,"children":18,"page":59},"Fundamentals","i-lucide-book-open","\u002Fcsharp\u002Ffundamentals","01.csharp\u002F01.fundamentals",[19,23,27,31,35,39,43,47,51,55],{"title":20,"path":21,"stem":22},"Вступ до екосистеми .NET","\u002Fcsharp\u002Ffundamentals\u002Fintroduction-to-ecosystem","01.csharp\u002F01.fundamentals\u002F01.introduction-to-ecosystem",{"title":24,"path":25,"stem":26},"Структура програми на C#","\u002Fcsharp\u002Ffundamentals\u002Fprogram-structure","01.csharp\u002F01.fundamentals\u002F02.program-structure",{"title":28,"path":29,"stem":30},"Змінні та Типи Даних","\u002Fcsharp\u002Ffundamentals\u002Fvariables-data-types","01.csharp\u002F01.fundamentals\u002F03.variables-data-types",{"title":32,"path":33,"stem":34},"Масиви","\u002Fcsharp\u002Ffundamentals\u002Farrays","01.csharp\u002F01.fundamentals\u002F04.arrays",{"title":36,"path":37,"stem":38},"Strings & Text Handling","\u002Fcsharp\u002Ffundamentals\u002Fstrings-text-handling","01.csharp\u002F01.fundamentals\u002F05.strings-text-handling",{"title":40,"path":41,"stem":42},"Дати і Час","\u002Fcsharp\u002Ffundamentals\u002Fdates-time-handling","01.csharp\u002F01.fundamentals\u002F06.dates-time-handling",{"title":44,"path":45,"stem":46},"Потік Керування","\u002Fcsharp\u002Ffundamentals\u002Fcontrol-flow","01.csharp\u002F01.fundamentals\u002F07.control-flow",{"title":48,"path":49,"stem":50},"Методи","\u002Fcsharp\u002Ffundamentals\u002Fmethods","01.csharp\u002F01.fundamentals\u002F08.methods",{"title":52,"path":53,"stem":54},"Основи Відлагодження","\u002Fcsharp\u002Ffundamentals\u002Fdebugging-basics","01.csharp\u002F01.fundamentals\u002F09.debugging-basics",{"title":56,"path":57,"stem":58},"Інтерактивна Консоль (Classic)","\u002Fcsharp\u002Ffundamentals\u002Finteractive-console","01.csharp\u002F01.fundamentals\u002F10.interactive-console",false,{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":59},"OOP","i-lucide-box","\u002Fcsharp\u002Foop","01.csharp\u002F02.oop",[66,70,74,78,82,86],{"title":67,"path":68,"stem":69},"Package Management (Управління Пакетами)","\u002Fcsharp\u002Foop\u002Fpackage-management","01.csharp\u002F02.oop\u002F01.package-management",{"title":71,"path":72,"stem":73},"Класи та Об'єкти","\u002Fcsharp\u002Foop\u002Fclasses-objects","01.csharp\u002F02.oop\u002F02.classes-objects",{"title":75,"path":76,"stem":77},"Властивості та Поля","\u002Fcsharp\u002Foop\u002Fproperties-fields","01.csharp\u002F02.oop\u002F03.properties-fields",{"title":79,"path":80,"stem":81},"Стовпи ООП","\u002Fcsharp\u002Foop\u002Foop-pillars","01.csharp\u002F02.oop\u002F04.oop-pillars",{"title":83,"path":84,"stem":85},"Advanced Types","\u002Fcsharp\u002Foop\u002Fadvanced-types","01.csharp\u002F02.oop\u002F05.advanced-types",{"title":87,"path":88,"stem":89},"Namespaces (Простори Імен)","\u002Fcsharp\u002Foop\u002Fnamespaces","01.csharp\u002F02.oop\u002F06.namespaces",{"title":91,"icon":92,"path":93,"stem":94,"children":95,"page":59},"Advanced Core","i-lucide-zap","\u002Fcsharp\u002Fadvanced-core","01.csharp\u002F03.advanced-core",[96,100,104,108,112,116],{"title":97,"path":98,"stem":99},"Generics (Узагальнення)","\u002Fcsharp\u002Fadvanced-core\u002Fgenerics","01.csharp\u002F03.advanced-core\u002F01.generics",{"title":101,"path":102,"stem":103},"Делегати, Події та Лямбда-вирази","\u002Fcsharp\u002Fadvanced-core\u002Fdelegates-events-lambdas","01.csharp\u002F03.advanced-core\u002F02.delegates-events-lambdas",{"title":105,"path":106,"stem":107},"Interfaces Deep Dive (Інтерфейси: Поглиблений Розгляд)","\u002Fcsharp\u002Fadvanced-core\u002Finterfaces-deep-dive","01.csharp\u002F03.advanced-core\u002F03.interfaces-deep-dive",{"title":109,"path":110,"stem":111},"Обробка Винятків","\u002Fcsharp\u002Fadvanced-core\u002Fexception-handling","01.csharp\u002F03.advanced-core\u002F04.exception-handling",{"title":113,"path":114,"stem":115},"Pattern Matching","\u002Fcsharp\u002Fadvanced-core\u002Fpattern-matching","01.csharp\u002F03.advanced-core\u002F05.pattern-matching",{"title":117,"path":118,"stem":119},"Додаткові Можливості C#","\u002Fcsharp\u002Fadvanced-core\u002Fadditional-features","01.csharp\u002F03.advanced-core\u002F06.additional-features",{"title":121,"icon":122,"path":123,"stem":124,"children":125,"page":59},"Architecture Best Practices","i-lucide-building-2","\u002Fcsharp\u002Farchitecture-best-practices","01.csharp\u002F04.architecture-best-practices",[126,130,149,153,157,161,165,169],{"title":127,"path":128,"stem":129},"Software Design Principles (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fsoftware-design-principles","01.csharp\u002F04.architecture-best-practices\u002F01.software-design-principles",{"title":131,"icon":132,"path":133,"stem":134,"children":135,"page":59},"Design Patterns","i-lucide-folder","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns",[136],{"title":137,"icon":132,"path":138,"stem":139,"children":140,"page":59},"Creational","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational",[141,145],{"title":142,"path":143,"stem":144},"Singleton (Одинак)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fsingleton","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F01.singleton",{"title":146,"path":147,"stem":148},"Builder (Будівельник)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdesign-patterns\u002Fcreational\u002Fbuilder","01.csharp\u002F04.architecture-best-practices\u002F02.design-patterns\u002Fcreational\u002F02.builder",{"title":150,"path":151,"stem":152},"Building Professional CLIs","\u002Fcsharp\u002Farchitecture-best-practices\u002Fbuilding-professional-clis","01.csharp\u002F04.architecture-best-practices\u002F03.building-professional-clis",{"title":154,"path":155,"stem":156},"Validation & Flow Control","\u002Fcsharp\u002Farchitecture-best-practices\u002Fvalidation-flow-control","01.csharp\u002F04.architecture-best-practices\u002F04.validation-flow-control",{"title":158,"path":159,"stem":160},"The Modern .NET Host (Microsoft.Extensions)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fmodern-dotnet-host","01.csharp\u002F04.architecture-best-practices\u002F05.modern-dotnet-host",{"title":162,"path":163,"stem":164},"Data Mapper: Repository та DAO патерни (Частина 1)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part1","01.csharp\u002F04.architecture-best-practices\u002F06.data-mapper-part1",{"title":166,"path":167,"stem":168},"Data Mapper: Repository та DAO патерни (Частина 2)","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdata-mapper-part2","01.csharp\u002F04.architecture-best-practices\u002F07.data-mapper-part2",{"title":170,"icon":132,"path":171,"stem":172,"children":173,"page":59},"Di Ioc","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc",[174,178,182,186,190,194,198],{"title":175,"path":176,"stem":177},"Проблема залежностей та Інверсія Контролю","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fthe-dependency-problem","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F01.the-dependency-problem",{"title":179,"path":180,"stem":181},"Будуємо власний Service Container","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fbuild-your-own-container","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F02.build-your-own-container",{"title":183,"path":184,"stem":185},"Service Locator: Паттерн та Анти-паттерн","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-locator-pattern","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F03.service-locator-pattern",{"title":187,"path":188,"stem":189},"Паттерни Dependency Injection","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdependency-injection-patterns","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F04.dependency-injection-patterns",{"title":191,"path":192,"stem":193},"Microsoft DI: IServiceCollection та IServiceProvider","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fmicrosoft-di-deep-dive","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F05.microsoft-di-deep-dive",{"title":195,"path":196,"stem":197},"Service Lifetimes та Scopes","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fservice-lifetimes-and-scopes","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F06.service-lifetimes-and-scopes",{"title":199,"path":200,"stem":201},"DI Анти-паттерни та Найкращі Практики","\u002Fcsharp\u002Farchitecture-best-practices\u002Fdi-ioc\u002Fdi-anti-patterns-and-best-practices","01.csharp\u002F04.architecture-best-practices\u002F08.di-ioc\u002F07.di-anti-patterns-and-best-practices",{"title":203,"icon":132,"path":204,"stem":205,"children":206,"page":59},"Standard Library","\u002Fcsharp\u002Fstandard-library","01.csharp\u002F05.standard-library",[207,211,215],{"title":208,"path":209,"stem":210},"Collections (Колекції)","\u002Fcsharp\u002Fstandard-library\u002Fcollections","01.csharp\u002F05.standard-library\u002F01.collections",{"title":212,"path":213,"stem":214},"High Performance Types (Високопродуктивні Типи)","\u002Fcsharp\u002Fstandard-library\u002Fhigh-performance-types","01.csharp\u002F05.standard-library\u002F02.high-performance-types",{"title":216,"path":217,"stem":218},"LINQ (Language Integrated Query)","\u002Fcsharp\u002Fstandard-library\u002Flinq","01.csharp\u002F05.standard-library\u002F03.linq",{"title":220,"icon":221,"path":222,"stem":223,"children":224,"page":59},"System Internals Concurrency","i-lucide-server","\u002Fcsharp\u002Fsystem-internals-concurrency","01.csharp\u002F06.system-internals-concurrency",[225,229,233,237,241,245,249],{"title":226,"path":227,"stem":228},"Memory Management","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmemory-management","01.csharp\u002F06.system-internals-concurrency\u002F01.memory-management",{"title":230,"path":231,"stem":232},"Reflection API: System.Type та Метадані","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Freflection-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F02.reflection-fundamentals",{"title":234,"path":235,"stem":236},"Attributes та Dynamic Language Runtime","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fattributes-dynamic","01.csharp\u002F06.system-internals-concurrency\u002F03.attributes-dynamic",{"title":238,"path":239,"stem":240},"Expression Trees: Швидка Альтернатива Рефлексії","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fexpression-trees-compiled","01.csharp\u002F06.system-internals-concurrency\u002F04.expression-trees-compiled",{"title":242,"path":243,"stem":244},"Source Generators: Compile-Time Code Generation","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsource-generators","01.csharp\u002F06.system-internals-concurrency\u002F05.source-generators",{"title":246,"path":247,"stem":248},"Multithreading Fundamentals","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fmultithreading-fundamentals","01.csharp\u002F06.system-internals-concurrency\u002F06.multithreading-fundamentals",{"title":250,"path":251,"stem":252},"Synchronization Primitives","\u002Fcsharp\u002Fsystem-internals-concurrency\u002Fsynchronization-primitives","01.csharp\u002F06.system-internals-concurrency\u002F07.synchronization-primitives",{"title":254,"icon":255,"path":256,"stem":257,"children":258,"page":59},"System Programming Windows","i-lucide-cpu","\u002Fcsharp\u002Fsystem-programming-windows","01.csharp\u002F07.system-programming-windows",[259,263,267,271,275,279,283,287,291,295,299,303,307,311,315,319,323,327,331,335,339,343,347,351,355,359,363,367,371,375],{"title":260,"path":261,"stem":262},"Як Працює Операційна Система","\u002Fcsharp\u002Fsystem-programming-windows\u002Fhow-os-works","01.csharp\u002F07.system-programming-windows\u002F01.how-os-works",{"title":264,"path":265,"stem":266},"Процеси в .NET — API та Запуск","\u002Fcsharp\u002Fsystem-programming-windows\u002Fprocesses-in-dotnet","01.csharp\u002F07.system-programming-windows\u002F02.processes-in-dotnet",{"title":268,"path":269,"stem":270},"Процеси в .NET — IPC та Міжпроцесна Комунікація","\u002Fcsharp\u002Fsystem-programming-windows\u002F02a.processes-ipc","01.csharp\u002F07.system-programming-windows\u002F02a.processes-ipc",{"title":272,"path":273,"stem":274},"Application Domains та Збірки — AppDomain і AssemblyLoadContext","\u002Fcsharp\u002Fsystem-programming-windows\u002Fappdomains-assemblies","01.csharp\u002F07.system-programming-windows\u002F03.appdomains-assemblies",{"title":276,"path":277,"stem":278},"Application Domains та Збірки — Plug-in Система з Hot-Reload","\u002Fcsharp\u002Fsystem-programming-windows\u002F03a.appdomains-plugin-system","01.csharp\u002F07.system-programming-windows\u002F03a.appdomains-plugin-system",{"title":280,"path":281,"stem":282},"Потоки — Основи та API Thread","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-fundamentals","01.csharp\u002F07.system-programming-windows\u002F04.thread-fundamentals",{"title":284,"path":285,"stem":286},"Потоки — Lifecycle, Пріоритети та Безпечне Завершення","\u002Fcsharp\u002Fsystem-programming-windows\u002F04a.thread-lifecycle-priorities","01.csharp\u002F07.system-programming-windows\u002F04a.thread-lifecycle-priorities",{"title":288,"path":289,"stem":290},"Проблеми Спільного Стану — Race Condition та Data Race","\u002Fcsharp\u002Fsystem-programming-windows\u002Fshared-state-problems","01.csharp\u002F07.system-programming-windows\u002F05.shared-state-problems",{"title":292,"path":293,"stem":294},"Проблеми Спільного Стану — Memory Model та volatile","\u002Fcsharp\u002Fsystem-programming-windows\u002F05a.shared-state-memory-model","01.csharp\u002F07.system-programming-windows\u002F05a.shared-state-memory-model",{"title":296,"path":297,"stem":298},"Синхронізація — Monitor, lock та еволюція примітивів","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-fundamentals","01.csharp\u002F07.system-programming-windows\u002F06.synchronization-fundamentals",{"title":300,"path":301,"stem":302},"Синхронізація — Наскрізний Приклад та Deadlock Detection","\u002Fcsharp\u002Fsystem-programming-windows\u002F06a.synchronization-walkthrough","01.csharp\u002F07.system-programming-windows\u002F06a.synchronization-walkthrough",{"title":304,"path":305,"stem":306},"Синхронізація — Mutex, Semaphore та Event-Based Primitives","\u002Fcsharp\u002Fsystem-programming-windows\u002Fsynchronization-advanced","01.csharp\u002F07.system-programming-windows\u002F07.synchronization-advanced",{"title":308,"path":309,"stem":310},"Синхронізація — Interlocked, Volatile та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002F07a.synchronization-advanced-walkthrough","01.csharp\u002F07.system-programming-windows\u002F07a.synchronization-advanced-walkthrough",{"title":312,"path":313,"stem":314},"Interlocked, CAS та Lock-Free Структури","\u002Fcsharp\u002Fsystem-programming-windows\u002Finterlocked-cas-lockfree","01.csharp\u002F07.system-programming-windows\u002F08.interlocked-cas-lockfree",{"title":316,"path":317,"stem":318},"Volatile, Memory Model та Spinning","\u002Fcsharp\u002Fsystem-programming-windows\u002F08a.volatile-memory-model","01.csharp\u002F07.system-programming-windows\u002F08a.volatile-memory-model",{"title":320,"path":321,"stem":322},"ThreadPool — Пул Потоків для Ефективного Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fthread-pool","01.csharp\u002F07.system-programming-windows\u002F09.thread-pool",{"title":324,"path":325,"stem":326},"ThreadPool — Просунуті Сценарії та Внутрішня Будова","\u002Fcsharp\u002Fsystem-programming-windows\u002F09a.thread-pool-advanced","01.csharp\u002F07.system-programming-windows\u002F09a.thread-pool-advanced",{"title":328,"path":329,"stem":330},"Concurrent та Immutable Collections","\u002Fcsharp\u002Fsystem-programming-windows\u002Fconcurrent-collections","01.csharp\u002F07.system-programming-windows\u002F10.concurrent-collections",{"title":332,"path":333,"stem":334},"TPL, Task та Композиція — Від Thread до Task","\u002Fcsharp\u002Fsystem-programming-windows\u002Ftpl-parallel-plinq","01.csharp\u002F07.system-programming-windows\u002F11.tpl-parallel-plinq",{"title":336,"path":337,"stem":338},"Parallel Class та PLINQ — Data Parallelism","\u002Fcsharp\u002Fsystem-programming-windows\u002F11a.tpl-parallel-plinq-advanced","01.csharp\u002F07.system-programming-windows\u002F11a.tpl-parallel-plinq-advanced",{"title":340,"path":341,"stem":342},"Async\u002FAwait — Фундамент Асинхронного Програмування","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-fundamentals","01.csharp\u002F07.system-programming-windows\u002F12.async-fundamentals",{"title":344,"path":345,"stem":346},"SynchronizationContext та ConfigureAwait — Контекст Виконання","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-context-configureawait","01.csharp\u002F07.system-programming-windows\u002F13.async-context-configureawait",{"title":348,"path":349,"stem":350},"Async — Просунуті Паттерни","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-advanced","01.csharp\u002F07.system-programming-windows\u002F14.async-advanced",{"title":352,"path":353,"stem":354},"System.Threading.Channels — Async Producer-Consumer","\u002Fcsharp\u002Fsystem-programming-windows\u002Fchannels","01.csharp\u002F07.system-programming-windows\u002F15.channels",{"title":356,"path":357,"stem":358},"Асинхронна Синхронізація","\u002Fcsharp\u002Fsystem-programming-windows\u002Fasync-synchronization","01.csharp\u002F07.system-programming-windows\u002F16.async-synchronization",{"title":360,"path":361,"stem":362},"Unsafe Code та Вказівники","\u002Fcsharp\u002Fsystem-programming-windows\u002Funsafe-code","01.csharp\u002F07.system-programming-windows\u002F17.unsafe-code",{"title":364,"path":365,"stem":366},"P\u002FInvoke та Windows API — Міст між .NET та Native Code","\u002Fcsharp\u002Fsystem-programming-windows\u002Fpinvoke-winapi","01.csharp\u002F07.system-programming-windows\u002F18.pinvoke-winapi",{"title":368,"path":369,"stem":370},"Реєстр Windows — Центральна База Конфігурації Системи","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-registry","01.csharp\u002F07.system-programming-windows\u002F19.windows-registry",{"title":372,"path":373,"stem":374},"Windows Hooks, Hotkeys та Services — Глибока Інтеграція з ОС","\u002Fcsharp\u002Fsystem-programming-windows\u002Fwindows-hooks-services","01.csharp\u002F07.system-programming-windows\u002F20.windows-hooks-services",{"title":376,"path":377,"stem":378},"Системне Програмування C# (Windows) — 07.system-programming-windows","\u002Fcsharp\u002Fsystem-programming-windows\u002Fimplementation_plan","01.csharp\u002F07.system-programming-windows\u002Fimplementation_plan",{"title":380,"icon":132,"path":381,"stem":382,"children":383,"page":59},"Io","\u002Fcsharp\u002Fio","01.csharp\u002F08.io",[384,388,392,396,400],{"title":385,"path":386,"stem":387},"8.1.1. Основи роботи з файловою системою","\u002Fcsharp\u002Fio\u002Ffile-system-basics","01.csharp\u002F08.io\u002F01.file-system-basics",{"title":389,"path":390,"stem":391},"8.1.2. Потоки (Streams) та Серіалізація Даних","\u002Fcsharp\u002Fio\u002Fstreams-serialization","01.csharp\u002F08.io\u002F02.streams-serialization",{"title":393,"path":394,"stem":395},"8.2.1. JSON Serialization з System.Text.Json","\u002Fcsharp\u002Fio\u002Fjson-serialization","01.csharp\u002F08.io\u002F03.json-serialization",{"title":397,"path":398,"stem":399},"8.2.2. XML Serialization та LINQ to XML","\u002Fcsharp\u002Fio\u002Fxml-serialization","01.csharp\u002F08.io\u002F04.xml-serialization",{"title":401,"path":402,"stem":403},"8.2.3. Binary Serialization: MessagePack та Protocol Buffers","\u002Fcsharp\u002Fio\u002Fbinary-serialization","01.csharp\u002F08.io\u002F05.binary-serialization",{"title":405,"icon":132,"path":406,"stem":407,"children":408,"page":59},"Ado Net","\u002Fcsharp\u002Fado-net","01.csharp\u002F09.ado-net",[409,413,417,421,425,429,433,437,441,445,449,453],{"title":410,"path":411,"stem":412},"9.1. Введення в ADO.NET","\u002Fcsharp\u002Fado-net\u002Fintroduction-to-adonet","01.csharp\u002F09.ado-net\u002F01.introduction-to-adonet",{"title":414,"path":415,"stem":416},"9.2. Клас DbConnection — з'єднання з базою даних","\u002Fcsharp\u002Fado-net\u002Fconnection","01.csharp\u002F09.ado-net\u002F02.connection",{"title":418,"path":419,"stem":420},"9.3. Клас DbCommand — виконання SQL-запитів","\u002Fcsharp\u002Fado-net\u002Fcommand-and-queries","01.csharp\u002F09.ado-net\u002F03.command-and-queries",{"title":422,"path":423,"stem":424},"9.4. Клас DbDataReader — ефективне читання даних","\u002Fcsharp\u002Fado-net\u002Fdatareader","01.csharp\u002F09.ado-net\u002F04.datareader",{"title":426,"path":427,"stem":428},"9.5. Параметризовані запити та захист від SQL Injection","\u002Fcsharp\u002Fado-net\u002Fparameters-and-sql-injection","01.csharp\u002F09.ado-net\u002F05.parameters-and-sql-injection",{"title":430,"path":431,"stem":432},"9.6. Транзакції в ADO.NET","\u002Fcsharp\u002Fado-net\u002Ftransactions","01.csharp\u002F09.ado-net\u002F06.transactions",{"title":434,"path":435,"stem":436},"9.7. DbProviderFactory — провайдер-незалежний код","\u002Fcsharp\u002Fado-net\u002Fprovider-factory","01.csharp\u002F09.ado-net\u002F07.provider-factory",{"title":438,"path":439,"stem":440},"9.8. Асинхронний доступ до даних","\u002Fcsharp\u002Fado-net\u002Fasync-data-access","01.csharp\u002F09.ado-net\u002F08.async-data-access",{"title":442,"path":443,"stem":444},"9.9. Від'єднаний режим: DataSet, DataTable, DataRow","\u002Fcsharp\u002Fado-net\u002Fdisconnected-mode-dataset","01.csharp\u002F09.ado-net\u002F09.disconnected-mode-dataset",{"title":446,"path":447,"stem":448},"9.10. DataAdapter — міст між DataSet та базою даних","\u002Fcsharp\u002Fado-net\u002Fdata-adapter","01.csharp\u002F09.ado-net\u002F10.data-adapter",{"title":450,"path":451,"stem":452},"9.11. Data Mapper та Repository: Архітектура доступу до даних","\u002Fcsharp\u002Fado-net\u002Fdata-mapper-repository","01.csharp\u002F09.ado-net\u002F11.data-mapper-repository",{"title":454,"path":455,"stem":456},"9.12. Identity Map, Unit of Work та Specification Pattern","\u002Fcsharp\u002Fado-net\u002Fadvanced-patterns","01.csharp\u002F09.ado-net\u002F12.advanced-patterns",{"title":458,"icon":255,"path":459,"stem":460,"children":461,"page":59},"Ef Core","\u002Fcsharp\u002Fef-core","01.csharp\u002F10.ef-core",[462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,532,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646],{"title":463,"path":464,"stem":465},"Що таке ORM? Від SQL до об'єктів","\u002Fcsharp\u002Fef-core\u002Fwhat-is-orm","01.csharp\u002F10.ef-core\u002F01.what-is-orm",{"title":467,"path":468,"stem":469},"Перший проєкт — від нуля до CRUD","\u002Fcsharp\u002Fef-core\u002Ffirst-project","01.csharp\u002F10.ef-core\u002F02.first-project",{"title":471,"path":472,"stem":473},"DbContext — Серце EF Core","\u002Fcsharp\u002Fef-core\u002Fdbcontext-deep-dive","01.csharp\u002F10.ef-core\u002F03.dbcontext-deep-dive",{"title":475,"path":476,"stem":477},"Провайдери баз даних — Архітектура та Вибір СУБД","\u002Fcsharp\u002Fef-core\u002Fdatabase-providers","01.csharp\u002F10.ef-core\u002F04.database-providers",{"title":479,"path":480,"stem":481},"Конвенції EF Core — Магія без конфігурації","\u002Fcsharp\u002Fef-core\u002Fconventions","01.csharp\u002F10.ef-core\u002F05.conventions",{"title":483,"path":484,"stem":485},"Fluent API та Data Annotations — Явна конфігурація моделі","\u002Fcsharp\u002Fef-core\u002Ffluent-api-vs-annotations","01.csharp\u002F10.ef-core\u002F06.fluent-api-vs-annotations",{"title":487,"path":488,"stem":489},"Зв'язки — One-to-One та One-to-Many","\u002Fcsharp\u002Fef-core\u002Frelationships-basics","01.csharp\u002F10.ef-core\u002F07.relationships-basics",{"title":491,"path":492,"stem":493},"Зв'язки Advanced — Many-to-Many та Складні Сценарії","\u002Fcsharp\u002Fef-core\u002Frelationships-advanced","01.csharp\u002F10.ef-core\u002F08.relationships-advanced",{"title":495,"path":496,"stem":497},"Властивості — Типи, Конвертери, Компаратори (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part1","01.csharp\u002F10.ef-core\u002F09.property-configuration-part1",{"title":499,"path":500,"stem":501},"Властивості — Value Comparers, Generators, Shadow Properties (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fproperty-configuration-part2","01.csharp\u002F10.ef-core\u002F09.property-configuration-part2",{"title":503,"path":504,"stem":505},"Складні типи — Owned Types та Complex Types (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part1","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part1",{"title":507,"path":508,"stem":509},"Складні типи — Complex Types, Keyless Entities, Порівняння (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fcomplex-types-owned-part2","01.csharp\u002F10.ef-core\u002F10.complex-types-owned-part2",{"title":511,"path":512,"stem":513},"JSON Columns — Складні дані у JSON (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part1","01.csharp\u002F10.ef-core\u002F11.json-columns-part1",{"title":515,"path":516,"stem":517},"JSON Columns — Value Comparers, Індекси, Провайдери (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fjson-columns-part2","01.csharp\u002F10.ef-core\u002F11.json-columns-part2",{"title":519,"path":520,"stem":521},"Успадкування — Абстрактні класи та TPH (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finheritance-part1","01.csharp\u002F10.ef-core\u002F12.inheritance-part1",{"title":523,"path":524,"stem":525},"Успадкування — TPT, TPC та Порівняння Стратегій (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finheritance-part2","01.csharp\u002F10.ef-core\u002F12.inheritance-part2",{"title":527,"path":528,"stem":529,"children":530},"Індекси, Обмеження та Схема (Частина 1)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part1","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part1",[531],{"title":527,"path":528,"stem":529},{"title":533,"path":534,"stem":535,"children":536},"Індекси, Обмеження та Схема (Частина 2)","\u002Fcsharp\u002Fef-core\u002Findexes-constraints-part2","01.csharp\u002F10.ef-core\u002F13.indexes-constraints-part2",[537],{"title":533,"path":534,"stem":535},{"title":539,"path":540,"stem":541},"Seed Data — Початкові Дані (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fseeding-part1","01.csharp\u002F10.ef-core\u002F14.seeding-part1",{"title":543,"path":544,"stem":545},"Seed Data — SQL-скрипти, Bogus та Стратегії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fseeding-part2","01.csharp\u002F10.ef-core\u002F14.seeding-part2",{"title":547,"path":548,"stem":549},"Global Query Filters — Глобальні Фільтри (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part1","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part1",{"title":551,"path":552,"stem":553},"Global Query Filters — Підводні камені та Інтеграція (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fglobal-query-filters-part2","01.csharp\u002F10.ef-core\u002F15.global-query-filters-part2",{"title":555,"path":556,"stem":557},"LINQ-запити в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part1","01.csharp\u002F10.ef-core\u002F16.linq-queries-part1",{"title":559,"path":560,"stem":561},"LINQ-запити в EF Core (Частина 2)","\u002Fcsharp\u002Fef-core\u002Flinq-queries-part2","01.csharp\u002F10.ef-core\u002F16.linq-queries-part2",{"title":563,"path":564,"stem":565},"Завантаження Пов'язаних Даних (Частина 1)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part1","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part1",{"title":567,"path":568,"stem":569},"Завантаження Пов'язаних Даних (Частина 2)","\u002Fcsharp\u002Fef-core\u002Floading-related-data-part2","01.csharp\u002F10.ef-core\u002F17.loading-related-data-part2",{"title":571,"path":572,"stem":573},"Raw SQL, Views та Stored Procedures (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part1","01.csharp\u002F10.ef-core\u002F18.raw-sql-part1",{"title":575,"path":576,"stem":577},"Raw SQL — Stored Procedures, DbFunction та Bulk Operations (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fraw-sql-part2","01.csharp\u002F10.ef-core\u002F18.raw-sql-part2",{"title":579,"path":580,"stem":581},"Продвинуті Запити — Compiled Queries, Bulk та Оптимізація (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part1","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part1",{"title":583,"path":584,"stem":585},"Продвинуті Запити — Query Tags, Bulk та Interceptors (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fadvanced-queries-part2","01.csharp\u002F10.ef-core\u002F19.advanced-queries-part2",{"title":587,"path":588,"stem":589},"Change Tracker — Відстеження Змін (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part1","01.csharp\u002F10.ef-core\u002F20.change-tracking-part1",{"title":591,"path":592,"stem":593},"Change Tracker — Графи Об'єктів та Disconnected (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fchange-tracking-part2","01.csharp\u002F10.ef-core\u002F20.change-tracking-part2",{"title":595,"path":596,"stem":597},"Збереження Даних та Транзакції (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part1","01.csharp\u002F10.ef-core\u002F21.saving-data-part1",{"title":599,"path":600,"stem":601},"Збереження Даних — Concurrency та Outbox (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fsaving-data-part2","01.csharp\u002F10.ef-core\u002F21.saving-data-part2",{"title":603,"path":604,"stem":605},"Конкурентність та Блокування (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part1","01.csharp\u002F10.ef-core\u002F22.concurrency-part1",{"title":607,"path":608,"stem":609},"Конкурентність — Дедлоки та Queue Processing (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fconcurrency-part2","01.csharp\u002F10.ef-core\u002F22.concurrency-part2",{"title":611,"path":612,"stem":613},"Міграції в EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part1","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part1",{"title":615,"path":616,"stem":617},"Міграції в EF Core — Основи (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-basics-part2","01.csharp\u002F10.ef-core\u002F23.migrations-basics-part2",{"title":619,"path":620,"stem":621},"Міграції — Просунуті Сценарії (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part1","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part1",{"title":623,"path":624,"stem":625},"Міграції — Просунуті Сценарії (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fmigrations-advanced-part2","01.csharp\u002F10.ef-core\u002F24.migrations-advanced-part2",{"title":627,"path":628,"stem":629},"Управління Схемою та Database-First (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part1","01.csharp\u002F10.ef-core\u002F25.schema-management-part1",{"title":631,"path":632,"stem":633},"Управління Схемою та Database-First (Частина 2)","\u002Fcsharp\u002Fef-core\u002Fschema-management-part2","01.csharp\u002F10.ef-core\u002F25.schema-management-part2",{"title":635,"path":636,"stem":637},"Продуктивність EF Core — Основи (Частина 1)","\u002Fcsharp\u002Fef-core\u002Fperformance-fundamentals-part1","01.csharp\u002F10.ef-core\u002F26.performance-fundamentals-part1",{"title":639,"path":640,"stem":641},"Interceptors в EF Core (Частина 1)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part1","01.csharp\u002F10.ef-core\u002F29.interceptors-part1",{"title":643,"path":644,"stem":645},"Interceptors в EF Core — Connection, Transaction та Materialization (Частина 2)","\u002Fcsharp\u002Fef-core\u002Finterceptors-part2","01.csharp\u002F10.ef-core\u002F29.interceptors-part2",{"title":647,"path":648,"stem":649},"План вивчення Entity Framework Core — Повний курс","\u002Fcsharp\u002Fef-core\u002Fimplementation_plan","01.csharp\u002F10.ef-core\u002Fimplementation_plan",{"title":651,"icon":652,"path":653,"stem":654,"children":655,"page":59},"ASP.NET","i-devicon-dotnetcore","\u002Fcsharp\u002Faspnet","01.csharp\u002F11.aspnet",[656,730,791,869,927,941,967,1057,1111,1182,1212,1289,1346],{"title":657,"icon":658,"path":659,"stem":660,"children":661,"page":59},"Minimal API","i-lucide-network","\u002Fcsharp\u002Faspnet\u002Fminimal-api","01.csharp\u002F11.aspnet\u002F01.minimal-api",[662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726],{"title":663,"path":664,"stem":665},"Вступ до ASP.NET та еволюція фреймворку","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fintroduction","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F01.introduction",{"title":667,"path":668,"stem":669},"Перший додаток на ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Ffirst-application","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F02.first-application",{"title":671,"path":672,"stem":673},"WebApplication, Builder та Dependency Injection","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fwebapplication-builder","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F03.webapplication-builder",{"title":675,"path":676,"stem":677},"Конвеєр запитів та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frequest-pipeline-middleware","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F04.request-pipeline-middleware",{"title":679,"path":680,"stem":681},"Маршрутизація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F05.routing-basics",{"title":683,"path":684,"stem":685},"Маршрутизація в ASP.NET Core: Розширені можливості","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Frouting-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F06.routing-advanced",{"title":687,"path":688,"stem":689},"Статичні файли в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-files","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F07.static-files",{"title":691,"path":692,"stem":693},"Статичні Активи: MapStaticAssets (ASP.NET Core 9.0)","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstatic-assets","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F08.static-assets",{"title":695,"path":696,"stem":697},"Конфігурація в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-fundamentals","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F09.configuration-fundamentals",{"title":699,"path":700,"stem":701},"Конфігурація: Паттерн Options","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fconfiguration-options","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F10.configuration-options",{"title":703,"path":704,"stem":705},"Логування в ASP.NET Core: Основи","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-basics","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F11.logging-basics",{"title":707,"path":708,"stem":709},"Логування: Serilog та Middleware","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Flogging-advanced","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F12.logging-advanced",{"title":711,"path":712,"stem":713},"Управління станом: HttpContext.Items та Cookies","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fstate-management","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F13.state-management",{"title":715,"path":716,"stem":717},"Стан сесії: Sessions","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fsession-state","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F14.session-state",{"title":719,"path":720,"stem":721},"Структура проєкту: від хаосу до архітектури","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fproject-structure","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F15.project-structure",{"title":723,"path":724,"stem":725},"Scalar у Minimal API: повний проєкт і Fluent OpenAPI","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fscalar-openapi-fluent","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F16.scalar-openapi-fluent",{"title":727,"path":728,"stem":729},"Swagger \u002F Swashbuckle у Minimal API: окремий класичний шлях","\u002Fcsharp\u002Faspnet\u002Fminimal-api\u002Fswagger-swashbuckle","01.csharp\u002F11.aspnet\u002F01.minimal-api\u002F17.swagger-swashbuckle",{"title":731,"icon":658,"path":732,"stem":733,"children":734,"page":59},"API","\u002Fcsharp\u002Faspnet\u002Fapi","01.csharp\u002F11.aspnet\u002F02.api",[735,739,743,747,751,755,759,763,767,771,775,779,783,787],{"title":736,"path":737,"stem":738},"Що таке API. Клієнт-серверна архітектура","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fwhat-is-api","01.csharp\u002F11.aspnet\u002F02.api\u002F01.what-is-api",{"title":740,"path":741,"stem":742},"Формати даних: JSON, XML, TOML та бінарні формати","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fdata-formats","01.csharp\u002F11.aspnet\u002F02.api\u002F02.data-formats",{"title":744,"path":745,"stem":746},"Парадигми API та концепція REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-paradigms-rest","01.csharp\u002F11.aspnet\u002F02.api\u002F03.api-paradigms-rest",{"title":748,"path":749,"stem":750},"HTTP-методи, статус-коди та заголовки","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fhttp-methods-status-codes","01.csharp\u002F11.aspnet\u002F02.api\u002F04.http-methods-status-codes",{"title":752,"path":753,"stem":754},"Організація HTTP API за принципами REST","\u002Fcsharp\u002Faspnet\u002Fapi\u002Frest-organizing","01.csharp\u002F11.aspnet\u002F02.api\u002F05.rest-organizing",{"title":756,"path":757,"stem":758},"Номенклатура URL та CRUD-операції","\u002Fcsharp\u002Faspnet\u002Fapi\u002Furl-nomenclature-crud","01.csharp\u002F11.aspnet\u002F02.api\u002F06.url-nomenclature-crud",{"title":760,"path":761,"stem":762},"Правила дизайну: іменування та стандарти","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-naming","01.csharp\u002F11.aspnet\u002F02.api\u002F07.api-design-naming",{"title":764,"path":765,"stem":766},"Валідація, ліміти та обробка помилок","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-validation","01.csharp\u002F11.aspnet\u002F02.api\u002F08.api-design-validation",{"title":768,"path":769,"stem":770},"Обробка помилок у Minimal API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Ferror-handling-http","01.csharp\u002F11.aspnet\u002F02.api\u002F09.error-handling-http",{"title":772,"path":773,"stem":774},"Ідемпотентність та синхронізація стану","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fidempotency-sync","01.csharp\u002F11.aspnet\u002F02.api\u002F10.idempotency-sync",{"title":776,"path":777,"stem":778},"Пагінація та організація списків","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fpagination-lists","01.csharp\u002F11.aspnet\u002F02.api\u002F11.pagination-lists",{"title":780,"path":781,"stem":782},"Безпека API, кешування та інтернаціоналізація","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fsecurity-auth","01.csharp\u002F11.aspnet\u002F02.api\u002F12.security-auth",{"title":784,"path":785,"stem":786},"Процес проєктування API та документування","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fapi-design-process","01.csharp\u002F11.aspnet\u002F02.api\u002F13.api-design-process",{"title":788,"path":789,"stem":790},"OpenAPI: контракт, специфікація та документація API","\u002Fcsharp\u002Faspnet\u002Fapi\u002Fopenapi","01.csharp\u002F11.aspnet\u002F02.api\u002F14.openapi",{"title":792,"icon":793,"path":794,"stem":795,"children":796,"page":59},"Auth","i-lucide-shield-check","\u002Fcsharp\u002Faspnet\u002Fauth","01.csharp\u002F11.aspnet\u002F03.auth",[797,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865],{"title":798,"path":799,"stem":800},"Основи аутентифікації та авторизації","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauth-fundamentals","01.csharp\u002F11.aspnet\u002F03.auth\u002F01.auth-fundamentals",{"title":802,"path":803,"stem":804},"JWT-аутентифікація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fjwt-authentication","01.csharp\u002F11.aspnet\u002F03.auth\u002F02.jwt-authentication",{"title":806,"path":807,"stem":808},"Авторизація: ролі, політики та resource-based доступ","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fauthorization-policies","01.csharp\u002F11.aspnet\u002F03.auth\u002F03.authorization-policies",{"title":810,"path":811,"stem":812},"Cookie-аутентифікація та ASP.NET Core Identity","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcookie-auth-identity","01.csharp\u002F11.aspnet\u002F03.auth\u002F04.cookie-auth-identity",{"title":814,"path":815,"stem":816},"JWT + Refresh Tokens (HttpOnly Cookie)","\u002Fcsharp\u002Faspnet\u002Fauth\u002F04b.identity-auth-jwt","01.csharp\u002F11.aspnet\u002F03.auth\u002F04b.identity-auth-jwt",{"title":818,"path":819,"stem":820},"Identity: Підтвердження Email та Скидання Пароля","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-email-confirmation","01.csharp\u002F11.aspnet\u002F03.auth\u002F05.identity-email-confirmation",{"title":822,"path":823,"stem":824},"Identity: Двофакторна Аутентифікація (2FA)","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-two-factor","01.csharp\u002F11.aspnet\u002F03.auth\u002F06.identity-two-factor",{"title":826,"path":827,"stem":828},"Identity: Внутрішня Архітектура та Кастомізація","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fidentity-internals","01.csharp\u002F11.aspnet\u002F03.auth\u002F07.identity-internals",{"title":830,"path":831,"stem":832},"OAuth 2.0 та зовнішні провайдери","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-external-providers","01.csharp\u002F11.aspnet\u002F03.auth\u002F08.oauth-external-providers",{"title":834,"path":835,"stem":836},"Безпека на практиці: CORS, HTTPS та захист від атак","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fsecurity-hardening","01.csharp\u002F11.aspnet\u002F03.auth\u002F09.security-hardening",{"title":838,"path":839,"stem":840},"Теорія OAuth 2.0: Поняття, Аналогії та Флоу","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foauth-theory","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oauth-theory",{"title":842,"path":843,"stem":844},"OIDC, OAuth 2.0 та Keycloak в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Foidc-keycloak","01.csharp\u002F11.aspnet\u002F03.auth\u002F10.oidc-keycloak",{"title":846,"path":847,"stem":848},"API Keys аутентифікація в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fapi-keys","01.csharp\u002F11.aspnet\u002F03.auth\u002F11.api-keys",{"title":850,"path":851,"stem":852},"Rate Limiting та Throttling в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frate-limiting","01.csharp\u002F11.aspnet\u002F03.auth\u002F12.rate-limiting",{"title":854,"path":855,"stem":856},"Refresh Token Rotation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frefresh-token-rotation","01.csharp\u002F11.aspnet\u002F03.auth\u002F13.refresh-token-rotation",{"title":858,"path":859,"stem":860},"Certificate Authentication та mTLS в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fcertificate-auth","01.csharp\u002F11.aspnet\u002F03.auth\u002F14.certificate-auth",{"title":862,"path":863,"stem":864},"RBAC, ABAC та ReBAC в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Frbac-abac-rebac","01.csharp\u002F11.aspnet\u002F03.auth\u002F15.rbac-abac-rebac",{"title":866,"path":867,"stem":868},"Multi-tenancy та ізоляція даних в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fauth\u002Fmulti-tenancy","01.csharp\u002F11.aspnet\u002F03.auth\u002F16.multi-tenancy",{"title":870,"icon":871,"path":872,"stem":873,"children":874,"page":59},"Нотифікації","i-lucide-bell","\u002Fcsharp\u002Faspnet\u002Fnotifications","01.csharp\u002F11.aspnet\u002F04.notifications",[875,879,883,887,891,895,899,903,907,911,915,919,923],{"title":876,"path":877,"stem":878},"In-App нотифікації через базу даних","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fin-app-database-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F01.in-app-database-notifications",{"title":880,"path":881,"stem":882},"Polling: Регулярний запит оновлень","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fpolling","01.csharp\u002F11.aspnet\u002F04.notifications\u002F02.polling",{"title":884,"path":885,"stem":886},"Server-Sent Events: Однострімовий push від сервера","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fserver-sent-events","01.csharp\u002F11.aspnet\u002F04.notifications\u002F03.server-sent-events",{"title":888,"path":889,"stem":890},"WebSockets: Двостороннє з'єднання в реальному часі","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fwebsockets","01.csharp\u002F11.aspnet\u002F04.notifications\u002F04.websockets",{"title":892,"path":893,"stem":894},"SignalR: Абстракція над транспортами реального часу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fsignalr","01.csharp\u002F11.aspnet\u002F04.notifications\u002F05.signalr",{"title":896,"path":897,"stem":898},"Background Services: Фонові задачі в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fbackground-services","01.csharp\u002F11.aspnet\u002F04.notifications\u002F06.background-services",{"title":900,"path":901,"stem":902},"Web Push нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fweb-push","01.csharp\u002F11.aspnet\u002F04.notifications\u002F07.web-push",{"title":904,"path":905,"stem":906},"Email нотифікації","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Femail-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F08.email-notifications",{"title":908,"path":909,"stem":910},"Порівняння підходів: Як вибрати правильну технологію нотифікацій","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fchoosing-the-right-approach","01.csharp\u002F11.aspnet\u002F04.notifications\u002F09.choosing-the-right-approach",{"title":912,"path":913,"stem":914},"Hangfire: Надійне планування фонових задач","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire","01.csharp\u002F11.aspnet\u002F04.notifications\u002F10.hangfire",{"title":916,"path":917,"stem":918},"Практика: Конвертація зображень у WebP через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-image-webp","01.csharp\u002F11.aspnet\u002F04.notifications\u002F11.hangfire-image-webp",{"title":920,"path":921,"stem":922},"Практика: Підготовка відео до HLS-стрімінгу через Hangfire","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Fhangfire-video-hls","01.csharp\u002F11.aspnet\u002F04.notifications\u002F12.hangfire-video-hls",{"title":924,"path":925,"stem":926},"Telegram-нотифікації: від одного повідомлення до масових розсилок і мульти-канального підходу","\u002Fcsharp\u002Faspnet\u002Fnotifications\u002Ftelegram-notifications","01.csharp\u002F11.aspnet\u002F04.notifications\u002F13.telegram-notifications",{"title":928,"icon":929,"path":930,"stem":931,"children":932,"page":59},"Інтернаціоналізація","i-lucide-languages","\u002Fcsharp\u002Faspnet\u002Fi18n","01.csharp\u002F11.aspnet\u002F05.i18n",[933,937],{"title":934,"path":935,"stem":936},"Інтернаціоналізація (i18n) у Minimal API: від A до Я","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Finternationalization","01.csharp\u002F11.aspnet\u002F05.i18n\u002F01.internationalization",{"title":938,"path":939,"stem":940},"Humanizer: людиномовні рядки у .NET","\u002Fcsharp\u002Faspnet\u002Fi18n\u002Fhumanizer","01.csharp\u002F11.aspnet\u002F05.i18n\u002F02.humanizer",{"title":942,"icon":943,"path":944,"stem":945,"children":946,"page":59},"Кешування","i-lucide-layers","\u002Fcsharp\u002Faspnet\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching",[947,951,955,959,963],{"title":948,"path":949,"stem":950},"Огляд кешування: чотири рівні і коли що обирати","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fcaching","01.csharp\u002F11.aspnet\u002F06.caching\u002F01.caching",{"title":952,"path":953,"stem":954},"IMemoryCache: кеш в оперативній пам'яті","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fmemory-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F02.memory-cache",{"title":956,"path":957,"stem":958},"IDistributedCache і Redis: розподілений кеш","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fdistributed-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F03.distributed-cache",{"title":960,"path":961,"stem":962},"Response Cache: HTTP-кешування через Cache-Control","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Fresponse-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F04.response-cache",{"title":964,"path":965,"stem":966},"Output Cache: серверний кеш HTTP-відповідей (.NET 7+)","\u002Fcsharp\u002Faspnet\u002Fcaching\u002Foutput-cache","01.csharp\u002F11.aspnet\u002F06.caching\u002F05.output-cache",{"title":968,"icon":969,"path":970,"stem":971,"children":972,"page":59},"Тестування","i-lucide-test-tube","\u002Fcsharp\u002Faspnet\u002Ftesting","01.csharp\u002F11.aspnet\u002F07.testing",[973,977,981,985,989,993,997,1001,1005,1009,1013,1017,1021,1025,1029,1033,1037,1041,1045,1049,1053],{"title":974,"path":975,"stem":976},"Що таке тестування? Від інтуїції до науки","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-is-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F01.what-is-testing",{"title":978,"path":979,"stem":980},"Піраміда тестування — Стратегія, а не Догма","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-pyramid","01.csharp\u002F11.aspnet\u002F07.testing\u002F02.testing-pyramid",{"title":982,"path":983,"stem":984},"Дві Школи Тестування — Лондон проти Детройту","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-schools","01.csharp\u002F11.aspnet\u002F07.testing\u002F03.testing-schools",{"title":986,"path":987,"stem":988},"TDD та BDD — Тести як Дизайн-інструмент","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftdd-and-bdd","01.csharp\u002F11.aspnet\u002F07.testing\u002F04.tdd-and-bdd",{"title":990,"path":991,"stem":992},"Що саме тестувати — Техніки аналізу та Циклomatична складність","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwhat-to-test","01.csharp\u002F11.aspnet\u002F07.testing\u002F05.what-to-test",{"title":994,"path":995,"stem":996},"Тестові Фреймворки — Навіщо вони і що всередині","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftest-frameworks","01.csharp\u002F11.aspnet\u002F07.testing\u002F06.test-frameworks",{"title":998,"path":999,"stem":1000},"xUnit — Факти, Теорії та Lifecycle тестів","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-basics","01.csharp\u002F11.aspnet\u002F07.testing\u002F07.xunit-basics",{"title":1002,"path":1003,"stem":1004},"xUnit Advanced — Fixtures, Кастомізація та Розширення","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fxunit-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F08.xunit-advanced",{"title":1006,"path":1007,"stem":1008},"Moq — Глибоке занурення в мокування","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fmocking-with-moq","01.csharp\u002F11.aspnet\u002F07.testing\u002F09.mocking-with-moq",{"title":1010,"path":1011,"stem":1012},"Тестування Баз Даних — EF Core, SQLite та Testcontainers","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fdatabase-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F10.database-testing",{"title":1014,"path":1015,"stem":1016},"Integration Testing — Частина 1 [Теорія та WebApplicationFactory]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F11.integration-testing",{"title":1018,"path":1019,"stem":1020},"Інтеграційне тестування — Практика","\u002Fcsharp\u002Faspnet\u002Ftesting\u002F11a.integration-testing-practice","01.csharp\u002F11.aspnet\u002F07.testing\u002F11a.integration-testing-practice",{"title":1022,"path":1023,"stem":1024},"Integration Testing — Частина 2 [Просунуті Сценарії та Testcontainers]","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fintegration-testing-advanced","01.csharp\u002F11.aspnet\u002F07.testing\u002F12.integration-testing-advanced",{"title":1026,"path":1027,"stem":1028},"Професійний Postman: Колекції, Змінні та GitHub Інтеграція","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fpostman-professional","01.csharp\u002F11.aspnet\u002F07.testing\u002F13.postman-professional",{"title":1030,"path":1031,"stem":1032},"HttpClient у Тестах Частина 1: Архітектура та MockHttpMessageHandler","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fhttpclient-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F14.httpclient-testing",{"title":1034,"path":1035,"stem":1036},"HttpClient у Тестах Частина 2: WireMock.Net та Resilience","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fwiremock-net","01.csharp\u002F11.aspnet\u002F07.testing\u002F15.wiremock-net",{"title":1038,"path":1039,"stem":1040},"Патерни та Анти-патерни Тестування: Test Smells","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Ftesting-patterns","01.csharp\u002F11.aspnet\u002F07.testing\u002F16.testing-patterns",{"title":1042,"path":1043,"stem":1044},"Просунуті інструменти: Time, Snapshots та Властивості","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fadvanced-testing-tools","01.csharp\u002F11.aspnet\u002F07.testing\u002F17.advanced-testing-tools",{"title":1046,"path":1047,"stem":1048},"Тестування Архітектури з NetArchTest","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Farchitecture-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F18.architecture-testing",{"title":1050,"path":1051,"stem":1052},"Тестування Продуктивності: BenchmarkDotNet, NBomber та k6","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fperformance-testing","01.csharp\u002F11.aspnet\u002F07.testing\u002F19.performance-testing",{"title":1054,"path":1055,"stem":1056},"Залишок плану для курсу \"Тестування ASP.NET Minimal API\"","\u002Fcsharp\u002Faspnet\u002Ftesting\u002Fremaining_plan","01.csharp\u002F11.aspnet\u002F07.testing\u002Fremaining_plan",{"title":1058,"icon":1059,"path":1060,"stem":1061,"children":1062,"page":59},"Платежі","i-lucide-credit-card","\u002Fcsharp\u002Faspnet\u002Fpayments","01.csharp\u002F11.aspnet\u002F08.payments",[1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1103,1107],{"title":1064,"path":1065,"stem":1066},"Основи платіжної інфраструктури","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-fundamentals","01.csharp\u002F11.aspnet\u002F08.payments\u002F01.payment-fundamentals",{"title":1068,"path":1069,"stem":1070},"Методи оплати в Україні","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-methods-ukraine","01.csharp\u002F11.aspnet\u002F08.payments\u002F02.payment-methods-ukraine",{"title":1072,"path":1073,"stem":1074},"PCI DSS та безпека платежів","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpci-dss-security","01.csharp\u002F11.aspnet\u002F08.payments\u002F03.pci-dss-security",{"title":1076,"path":1077,"stem":1078},"Архітектура платіжної підсистеми","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fpayment-architecture","01.csharp\u002F11.aspnet\u002F08.payments\u002F04.payment-architecture",{"title":1080,"path":1081,"stem":1082},"Інтеграція LiqPay (ПриватБанк)","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fliqpay-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F05.liqpay-integration",{"title":1084,"path":1085,"stem":1086},"Інтеграція Monobank Acquiring API","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fmonobank-acquiring","01.csharp\u002F11.aspnet\u002F08.payments\u002F06.monobank-acquiring",{"title":1088,"path":1089,"stem":1090},"Інтеграція Stripe","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fstripe-integration","01.csharp\u002F11.aspnet\u002F08.payments\u002F07.stripe-integration",{"title":1092,"path":1093,"stem":1094},"Webhooks — глибоке занурення","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fwebhooks-deep-dive","01.csharp\u002F11.aspnet\u002F08.payments\u002F08.webhooks-deep-dive",{"title":1096,"path":1097,"stem":1098},"Підписки та рекурентні платежі","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fsubscriptions-recurring","01.csharp\u002F11.aspnet\u002F08.payments\u002F09.subscriptions-recurring",{"title":1100,"path":1101,"stem":1102},"Повернення коштів та диспути","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Frefunds-disputes","01.csharp\u002F11.aspnet\u002F08.payments\u002F10.refunds-disputes",{"title":1104,"path":1105,"stem":1106},"Тестування платіжних інтеграцій","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Ftesting-payments","01.csharp\u002F11.aspnet\u002F08.payments\u002F11.testing-payments",{"title":1108,"path":1109,"stem":1110},"Чекліст виходу в Production","\u002Fcsharp\u002Faspnet\u002Fpayments\u002Fproduction-checklist","01.csharp\u002F11.aspnet\u002F08.payments\u002F12.production-checklist",{"title":1112,"icon":1113,"items":1114,"path":1127,"stem":1128,"children":1129,"page":59},"Популярні бібліотеки","lucide:box",[1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126],"01.fluent-validation","02.mapster","03.erroror-result-pattern","04.serilog","05.mediatr","06.polly","07.health-checks","08.feature-management","09.fluent-email","10.quest-pdf","11.bogus","12.humanizer-guard","\u002Fcsharp\u002Faspnet\u002Flibraries","01.csharp\u002F11.aspnet\u002F09.libraries",[1130,1134,1138,1142,1146,1150,1154,1158,1162,1166,1170,1174,1178],{"title":1131,"path":1132,"stem":1133},"Валідація з FluentValidation в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-validation","01.csharp\u002F11.aspnet\u002F09.libraries\u002F01.fluent-validation",{"title":1135,"path":1136,"stem":1137},"Маппінг об","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmapster","01.csharp\u002F11.aspnet\u002F09.libraries\u002F02.mapster",{"title":1139,"path":1140,"stem":1141},"Обробка помилок з ErrorOr та Result Pattern в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ferroror-result-pattern","01.csharp\u002F11.aspnet\u002F09.libraries\u002F03.erroror-result-pattern",{"title":1143,"path":1144,"stem":1145},"Структуроване логування з Serilog в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fserilog","01.csharp\u002F11.aspnet\u002F09.libraries\u002F04.serilog",{"title":1147,"path":1148,"stem":1149},"CQRS та Mediator з MediatR в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fmediatr","01.csharp\u002F11.aspnet\u002F09.libraries\u002F05.mediatr",{"title":1151,"path":1152,"stem":1153},"Відмовостійкість з Polly в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fpolly","01.csharp\u002F11.aspnet\u002F09.libraries\u002F06.polly",{"title":1155,"path":1156,"stem":1157},"Health Checks в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F09.libraries\u002F07.health-checks",{"title":1159,"path":1160,"stem":1161},"Feature Management та Feature Flags в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffeature-management","01.csharp\u002F11.aspnet\u002F09.libraries\u002F08.feature-management",{"title":1163,"path":1164,"stem":1165},"Відправка Email з FluentEmail в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Ffluent-email","01.csharp\u002F11.aspnet\u002F09.libraries\u002F09.fluent-email",{"title":1167,"path":1168,"stem":1169},"Генерація PDF з QuestPDF в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fquest-pdf","01.csharp\u002F11.aspnet\u002F09.libraries\u002F10.quest-pdf",{"title":1171,"path":1172,"stem":1173},"Генерація тестових даних з Bogus в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fbogus","01.csharp\u002F11.aspnet\u002F09.libraries\u002F11.bogus",{"title":1175,"path":1176,"stem":1177},"Humanizer та Guard Clauses в ASP.NET Core","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fhumanizer-guard","01.csharp\u002F11.aspnet\u002F09.libraries\u002F12.humanizer-guard",{"title":1179,"path":1180,"stem":1181},"План модуля 10.libraries — Популярні бібліотеки ASP.NET","\u002Fcsharp\u002Faspnet\u002Flibraries\u002Fplan","01.csharp\u002F11.aspnet\u002F09.libraries\u002Fplan",{"title":1183,"icon":1184,"path":1185,"stem":1186,"children":1187,"page":59},"Razor Pages","i-lucide-layout-template","\u002Fcsharp\u002Faspnet\u002Frazor-pages","01.csharp\u002F11.aspnet\u002F10.razor-pages",[1188,1192,1196,1200,1204,1208],{"title":1189,"path":1190,"stem":1191},"Від Minimal API до Razor Pages: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ffrom-minimal-api","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F01.from-minimal-api",{"title":1193,"path":1194,"stem":1195},"PageModel: логіка сторінки Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fpage-model","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F02.page-model",{"title":1197,"path":1198,"stem":1199},"Razor синтаксис: шаблонізатор у .cshtml","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Frazor-syntax","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F03.razor-syntax",{"title":1201,"path":1202,"stem":1203},"Tag Helpers: типізований HTML","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Ftag-helpers","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F04.tag-helpers",{"title":1205,"path":1206,"stem":1207},"Форми і валідація: повний цикл обробки даних","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fforms-validation","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F05.forms-validation",{"title":1209,"path":1210,"stem":1211},"Практичний проєкт: TaskManager на Razor Pages","\u002Fcsharp\u002Faspnet\u002Frazor-pages\u002Fproject-task-manager","01.csharp\u002F11.aspnet\u002F10.razor-pages\u002F06.project-task-manager",{"title":1213,"path":1214,"stem":1215,"children":1216,"page":59},"ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc","01.csharp\u002F11.aspnet\u002F11.mvc",[1217,1221,1225,1229,1233,1237,1241,1245,1249,1253,1257,1261,1265,1269,1273,1277,1281,1285],{"title":1218,"path":1219,"stem":1220},"Патерн MVC: архітектура, що змінила веб","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-pattern","01.csharp\u002F11.aspnet\u002F11.mvc\u002F01.mvc-pattern",{"title":1222,"path":1223,"stem":1224},"Від Razor Pages до MVC: концептуальний перехід","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffrom-razor-pages","01.csharp\u002F11.aspnet\u002F11.mvc\u002F02.from-razor-pages",{"title":1226,"path":1227,"stem":1228},"Controllers та Actions: серце MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fcontrollers-actions","01.csharp\u002F11.aspnet\u002F11.mvc\u002F03.controllers-actions",{"title":1230,"path":1231,"stem":1232},"Маршрутизація в MVC: Convention vs Attribute Routing","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Frouting-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F04.routing-mvc",{"title":1234,"path":1235,"stem":1236},"Model Binding: від HTTP до C#","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmodel-binding","01.csharp\u002F11.aspnet\u002F11.mvc\u002F05.model-binding",{"title":1238,"path":1239,"stem":1240},"Views, ViewData, ViewBag, TempData і ViewModel","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fviews-viewdata-tempdata","01.csharp\u002F11.aspnet\u002F11.mvc\u002F06.views-viewdata-tempdata",{"title":1242,"path":1243,"stem":1244},"Filters: аспектно-орієнтоване програмування в MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffilters","01.csharp\u002F11.aspnet\u002F11.mvc\u002F07.filters",{"title":1246,"path":1247,"stem":1248},"Areas: структурування великих застосунків","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fareas","01.csharp\u002F11.aspnet\u002F11.mvc\u002F08.areas",{"title":1250,"path":1251,"stem":1252},"View Components: повторювані незалежні блоки UI","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fview-components","01.csharp\u002F11.aspnet\u002F11.mvc\u002F09.view-components",{"title":1254,"path":1255,"stem":1256},"Display та Editor Templates","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fdisplay-editor-templates","01.csharp\u002F11.aspnet\u002F11.mvc\u002F10.display-editor-templates",{"title":1258,"path":1259,"stem":1260},"Валідація: IValidatableObject та FluentValidation","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fvalidation-advanced","01.csharp\u002F11.aspnet\u002F11.mvc\u002F11.validation-advanced",{"title":1262,"path":1263,"stem":1264},"HTMX: інтерактивність через HTML-атрибути","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx","01.csharp\u002F11.aspnet\u002F11.mvc\u002F12.htmx",{"title":1266,"path":1267,"stem":1268},"HTMX у ASP.NET Core MVC: серверна інтеграція","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fajax-htmx-mvc","01.csharp\u002F11.aspnet\u002F11.mvc\u002F13.ajax-htmx-mvc",{"title":1270,"path":1271,"stem":1272},"Практичний проєкт: Каталог товарів з HTMX","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fhtmx-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F14.htmx-project",{"title":1274,"path":1275,"stem":1276},"Завантаження та обробка файлів","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Ffile-upload","01.csharp\u002F11.aspnet\u002F11.mvc\u002F15.file-upload",{"title":1278,"path":1279,"stem":1280},"Глобалізація та Локалізація MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fglobalization-localization","01.csharp\u002F11.aspnet\u002F11.mvc\u002F16.globalization-localization",{"title":1282,"path":1283,"stem":1284},"Підсумковий проєкт: Блог-платформа","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fmvc-project","01.csharp\u002F11.aspnet\u002F11.mvc\u002F17.mvc-project",{"title":1286,"path":1287,"stem":1288},"План курсу: ASP.NET Core MVC","\u002Fcsharp\u002Faspnet\u002Fmvc\u002Fplan","01.csharp\u002F11.aspnet\u002F11.mvc\u002Fplan",{"title":1290,"path":1291,"stem":1292,"children":1293,"page":59},"Web Api","\u002Fcsharp\u002Faspnet\u002Fweb-api","01.csharp\u002F11.aspnet\u002F12.web-api",[1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334,1338,1342],{"title":1295,"path":1296,"stem":1297},"Від Minimal API до Controller-based API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffrom-minimal-api-to-controllers","01.csharp\u002F11.aspnet\u002F12.web-api\u002F01.from-minimal-api-to-controllers",{"title":1299,"path":1300,"stem":1301},"ControllerBase, ActionResult\u003CT> та Response Types","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontroller-base-actionresult","01.csharp\u002F11.aspnet\u002F12.web-api\u002F02.controller-base-actionresult",{"title":1303,"path":1304,"stem":1305},"Content Negotiation - JSON, XML та власні форматери","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fcontent-negotiation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F03.content-negotiation",{"title":1307,"path":1308,"stem":1309},"Версіонування API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-versioning","01.csharp\u002F11.aspnet\u002F12.web-api\u002F04.api-versioning",{"title":1311,"path":1312,"stem":1313},"ProblemDetails та структурована обробка помилок","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fproblemdetails-error-handling","01.csharp\u002F11.aspnet\u002F12.web-api\u002F05.problemdetails-error-handling",{"title":1315,"path":1316,"stem":1317},"Фільтри у Web API контексті","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Ffilters-for-api","01.csharp\u002F11.aspnet\u002F12.web-api\u002F06.filters-for-api",{"title":1319,"path":1320,"stem":1321},"Пагінація, фільтрація та сортування","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fpagination-filtering-sorting","01.csharp\u002F11.aspnet\u002F12.web-api\u002F07.pagination-filtering-sorting",{"title":1323,"path":1324,"stem":1325},"HATEOAS та Resource Expansion","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhateoas-resource-expansion","01.csharp\u002F11.aspnet\u002F12.web-api\u002F08.hateoas-resource-expansion",{"title":1327,"path":1328,"stem":1329},"Гібридна архітектура - Minimal API + Controllers","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fminimal-api-vs-controllers-hybrid","01.csharp\u002F11.aspnet\u002F12.web-api\u002F09.minimal-api-vs-controllers-hybrid",{"title":1331,"path":1332,"stem":1333},"Документація API - Swashbuckle, NSwag та генерація клієнтів","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fapi-documentation-generation","01.csharp\u002F11.aspnet\u002F12.web-api\u002F10.api-documentation-generation",{"title":1335,"path":1336,"stem":1337},"Health Checks та моніторинг API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fhealth-checks-monitoring","01.csharp\u002F11.aspnet\u002F12.web-api\u002F11.health-checks-monitoring",{"title":1339,"path":1340,"stem":1341},"Підсумковий проєкт - Production-Ready REST API","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fweb-api-project","01.csharp\u002F11.aspnet\u002F12.web-api\u002F12.web-api-project",{"title":1343,"path":1344,"stem":1345},"План курсу: ASP.NET Core Web API (Controllers)","\u002Fcsharp\u002Faspnet\u002Fweb-api\u002Fplan","01.csharp\u002F11.aspnet\u002F12.web-api\u002Fplan",{"title":1347,"icon":1348,"path":1349,"stem":1350,"children":1351,"page":59},"Моніторинг","i-lucide-activity","\u002Fcsharp\u002Faspnet\u002Fmonitoring","01.csharp\u002F11.aspnet\u002F13.monitoring",[1352,1356,1360],{"title":1353,"path":1354,"stem":1355},"Спостережуваність: від console.log до production-систем","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fobservability-intro","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F01.observability-intro",{"title":1357,"path":1358,"stem":1359},"Health Checks: перший рівень observability","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fhealth-checks","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F02.health-checks",{"title":1361,"path":1362,"stem":1363},"Вбудовані метрики .NET 10 та System.Diagnostics.Metrics","\u002Fcsharp\u002Faspnet\u002Fmonitoring\u002Fdotnet-metrics","01.csharp\u002F11.aspnet\u002F13.monitoring\u002F03.dotnet-metrics",{"title":1365,"icon":1366,"path":1367,"stem":1368,"children":1369,"page":59},"Desktop UI","i-lucide-app-window","\u002Fcsharp\u002Fdesktop-ui","01.csharp\u002F12.desktop-ui",[1370,1374,1378,1382,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446,1450,1454,1458,1462,1466,1470,1474,1478,1482,1486,1490,1494,1498,1502,1506,1510,1514,1518,1522,1526,1530,1534,1538,1542,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598,1602,1606,1610,1614,1618,1622,1626,1630,1634,1638,1642,1646,1650],{"title":1371,"path":1372,"stem":1373},"Що таке десктопна розробка?","\u002Fcsharp\u002Fdesktop-ui\u002Fwhat-is-desktop-dev","01.csharp\u002F12.desktop-ui\u002F01.what-is-desktop-dev",{"title":1375,"path":1376,"stem":1377},"Архітектура WPF — як влаштований графічний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-architecture","01.csharp\u002F12.desktop-ui\u002F02.wpf-architecture",{"title":1379,"path":1380,"stem":1381},"Перший WPF-проєкт — від нуля до вікна","\u002Fcsharp\u002Fdesktop-ui\u002Ffirst-wpf-app","01.csharp\u002F12.desktop-ui\u002F03.first-wpf-app",{"title":1383,"path":1384,"stem":1385},"Перший Avalonia-проєкт: WPF для всіх платформ","\u002Fcsharp\u002Fdesktop-ui\u002F03a.first-avalonia-app","01.csharp\u002F12.desktop-ui\u002F03a.first-avalonia-app",{"title":1387,"path":1388,"stem":1389},"XAML: декларативний інтерфейс","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-basics","01.csharp\u002F12.desktop-ui\u002F04.xaml-basics",{"title":1391,"path":1392,"stem":1393},"Fluent UI у WPF — сучасний дизайн Windows 11","\u002Fcsharp\u002Fdesktop-ui\u002F04a.wpf-fluent-ui","01.csharp\u002F12.desktop-ui\u002F04a.wpf-fluent-ui",{"title":1395,"path":1396,"stem":1397},"WPF UI — сучасна бібліотека Fluent контролів","\u002Fcsharp\u002Fdesktop-ui\u002F04b.wpf-ui-library","01.csharp\u002F12.desktop-ui\u002F04b.wpf-ui-library",{"title":1399,"path":1400,"stem":1401},"HandyControl — велика бібліотека UI контролів для WPF","\u002Fcsharp\u002Fdesktop-ui\u002F04c.handycontrol-library","01.csharp\u002F12.desktop-ui\u002F04c.handycontrol-library",{"title":1403,"path":1404,"stem":1405},"Простори імен та ресурси XAML","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-namespaces-resources","01.csharp\u002F12.desktop-ui\u002F05.xaml-namespaces-resources",{"title":1407,"path":1408,"stem":1409},"XAML в Avalonia: ключові відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F05a.avalonia-xaml-differences","01.csharp\u002F12.desktop-ui\u002F05a.avalonia-xaml-differences",{"title":1411,"path":1412,"stem":1413},"Розширення розмітки XAML (Markup Extensions)","\u002Fcsharp\u002Fdesktop-ui\u002Fxaml-markup-extensions","01.csharp\u002F12.desktop-ui\u002F06.xaml-markup-extensions",{"title":1415,"path":1416,"stem":1417},"Панелі Layout: StackPanel, WrapPanel, DockPanel","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part1","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part1",{"title":1419,"path":1420,"stem":1421},"Grid, Canvas, UniformGrid","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-panels-part2","01.csharp\u002F12.desktop-ui\u002F07.layout-panels-part2",{"title":1423,"path":1424,"stem":1425},"Просунуті техніки Layout","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-advanced","01.csharp\u002F12.desktop-ui\u002F08.layout-advanced",{"title":1427,"path":1428,"stem":1429},"Адаптивний Layout та найкращі практики","\u002Fcsharp\u002Fdesktop-ui\u002Flayout-responsive","01.csharp\u002F12.desktop-ui\u002F09.layout-responsive",{"title":1431,"path":1432,"stem":1433},"Layout в Avalonia: відмінності та нові можливості","\u002Fcsharp\u002Fdesktop-ui\u002F09a.layout-avalonia","01.csharp\u002F12.desktop-ui\u002F09a.layout-avalonia",{"title":1435,"path":1436,"stem":1437},"Button, Image, ProgressBar та інші базові контроли","\u002Fcsharp\u002Fdesktop-ui\u002Fbasic-controls","01.csharp\u002F12.desktop-ui\u002F10.basic-controls",{"title":1439,"path":1440,"stem":1441},"Контроли в Avalonia: відмінності від WPF","\u002Fcsharp\u002Fdesktop-ui\u002F10a.controls-avalonia","01.csharp\u002F12.desktop-ui\u002F10a.controls-avalonia",{"title":1443,"path":1444,"stem":1445},"Текстові контроли — TextBlock, TextBox, RichTextBox","\u002Fcsharp\u002Fdesktop-ui\u002Ftext-controls","01.csharp\u002F12.desktop-ui\u002F11.text-controls",{"title":1447,"path":1448,"stem":1449},"Контроли вибору — CheckBox, RadioButton, ComboBox, ListBox, DatePicker","\u002Fcsharp\u002Fdesktop-ui\u002Fselection-controls","01.csharp\u002F12.desktop-ui\u002F12.selection-controls",{"title":1451,"path":1452,"stem":1453},"Content Model — GroupBox, Expander, TabControl, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fcontent-controls","01.csharp\u002F12.desktop-ui\u002F13.content-controls",{"title":1455,"path":1456,"stem":1457},"UI\u002FUX принципи десктопних застосунків","\u002Fcsharp\u002Fdesktop-ui\u002F13a.ui-ux-principles","01.csharp\u002F12.desktop-ui\u002F13a.ui-ux-principles",{"title":1459,"path":1460,"stem":1461},"Dependency Properties — Концепція та Value Resolution","\u002Fcsharp\u002Fdesktop-ui\u002Fdependency-properties-part1","01.csharp\u002F12.desktop-ui\u002F14.dependency-properties-part1",{"title":1463,"path":1464,"stem":1465},"Avalonia Property System — StyledProperty та DirectProperty","\u002Fcsharp\u002Fdesktop-ui\u002F14a.avalonia-property-system","01.csharp\u002F12.desktop-ui\u002F14a.avalonia-property-system",{"title":1467,"path":1468,"stem":1469},"Attached Properties — Властивості без меж","\u002Fcsharp\u002Fdesktop-ui\u002Fattached-properties","01.csharp\u002F12.desktop-ui\u002F15.attached-properties",{"title":1471,"path":1472,"stem":1473},"Routed Events — Маршрутизація подій у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Frouted-events","01.csharp\u002F12.desktop-ui\u002F16.routed-events",{"title":1475,"path":1476,"stem":1477},"Data Binding — Від Code-Behind до Декларативності","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part1","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part1",{"title":1479,"path":1480,"stem":1481},"INotifyPropertyChanged — Живе оновлення UI","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-basics-part2","01.csharp\u002F12.desktop-ui\u002F17.data-binding-basics-part2",{"title":1483,"path":1484,"stem":1485},"Compiled Bindings в Avalonia — Безпека на етапі компіляції","\u002Fcsharp\u002Fdesktop-ui\u002F17a.avalonia-compiled-bindings","01.csharp\u002F12.desktop-ui\u002F17a.avalonia-compiled-bindings",{"title":1487,"path":1488,"stem":1489},"Просунутий Data Binding — ElementName, RelativeSource, MultiBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-binding-advanced","01.csharp\u002F12.desktop-ui\u002F18.data-binding-advanced",{"title":1491,"path":1492,"stem":1493},"Value Converters — Перетворення типів даних у Data Binding","\u002Fcsharp\u002Fdesktop-ui\u002Fvalue-converters","01.csharp\u002F12.desktop-ui\u002F19.value-converters",{"title":1495,"path":1496,"stem":1497},"Data Templates — Візуалізація об'єктів у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-templates","01.csharp\u002F12.desktop-ui\u002F20.data-templates",{"title":1499,"path":1500,"stem":1501},"Collections Binding Part 1 — ObservableCollection та ItemsControl","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part1","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part1",{"title":1503,"path":1504,"stem":1505},"Collections Binding Part 2 — ICollectionView, Filtering, Sorting та Virtualization","\u002Fcsharp\u002Fdesktop-ui\u002Fcollections-binding-part2","01.csharp\u002F12.desktop-ui\u002F21.collections-binding-part2",{"title":1507,"path":1508,"stem":1509},"MVVM Pattern — Від Spaghetti Code до архітектури","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-pattern","01.csharp\u002F12.desktop-ui\u002F22.mvvm-pattern",{"title":1511,"path":1512,"stem":1513},"ViewModel Implementation — Від BaseViewModel до валідації","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-implementation","01.csharp\u002F12.desktop-ui\u002F23.viewmodel-implementation",{"title":1515,"path":1516,"stem":1517},"Commands — Від event handlers до декларативних команд","\u002Fcsharp\u002Fdesktop-ui\u002Fcommands","01.csharp\u002F12.desktop-ui\u002F24.commands",{"title":1519,"path":1520,"stem":1521},"MVVM Toolkit — MVVM без boilerplate через Source Generators","\u002Fcsharp\u002Fdesktop-ui\u002Fmvvm-toolkit","01.csharp\u002F12.desktop-ui\u002F25.mvvm-toolkit",{"title":1523,"path":1524,"stem":1525},"Messenger Pattern — Комунікація між ViewModel без прямих посилань","\u002Fcsharp\u002Fdesktop-ui\u002Fmessenger-pattern","01.csharp\u002F12.desktop-ui\u002F26.messenger-pattern",{"title":1527,"path":1528,"stem":1529},"Стилі WPF — CSS для десктопу","\u002Fcsharp\u002Fdesktop-ui\u002Fstyles-basics","01.csharp\u002F12.desktop-ui\u002F27.styles-basics",{"title":1531,"path":1532,"stem":1533},"CSS-like стилі Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F27a.avalonia-css-styling","01.csharp\u002F12.desktop-ui\u002F27a.avalonia-css-styling",{"title":1535,"path":1536,"stem":1537},"Control Templates — Частина 1. Концепція та TemplateBinding","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part1","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part1",{"title":1539,"path":1540,"stem":1541},"Control Templates — Частина 2. Named Parts та ContentPresenter","\u002Fcsharp\u002Fdesktop-ui\u002Fcontrol-templates-part2","01.csharp\u002F12.desktop-ui\u002F28.control-templates-part2",{"title":1543,"path":1544,"stem":1545},"Control Themes в Avalonia — нова ера стилізації","\u002Fcsharp\u002Fdesktop-ui\u002F28a.avalonia-control-themes","01.csharp\u002F12.desktop-ui\u002F28a.avalonia-control-themes",{"title":1547,"path":1548,"stem":1549},"Triggers та Visual State Manager у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Ftriggers-visual-states","01.csharp\u002F12.desktop-ui\u002F29.triggers-visual-states",{"title":1551,"path":1552,"stem":1553},"Pseudo-classes в Avalonia — замість WPF Triggers","\u002Fcsharp\u002Fdesktop-ui\u002F29a.avalonia-pseudo-classes","01.csharp\u002F12.desktop-ui\u002F29a.avalonia-pseudo-classes",{"title":1555,"path":1556,"stem":1557},"Теми та ресурсні словники у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fresources-themes","01.csharp\u002F12.desktop-ui\u002F30.resources-themes",{"title":1559,"path":1560,"stem":1561},"Avalonia Themes — Fluent Design та система тематизації","\u002Fcsharp\u002Fdesktop-ui\u002F30a.avalonia-themes-fluent","01.csharp\u002F12.desktop-ui\u002F30a.avalonia-themes-fluent",{"title":1563,"path":1564,"stem":1565},"Контроли колекцій — глибоке занурення","\u002Fcsharp\u002Fdesktop-ui\u002Fcollection-controls","01.csharp\u002F12.desktop-ui\u002F31.collection-controls",{"title":1567,"path":1568,"stem":1569},"DataGrid — колонки та базове відображення","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part1","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part1",{"title":1571,"path":1572,"stem":1573},"DataGrid — сортування, фільтрація, редагування","\u002Fcsharp\u002Fdesktop-ui\u002Fdatagrid-part2","01.csharp\u002F12.desktop-ui\u002F32.datagrid-part2",{"title":1575,"path":1576,"stem":1577},"TreeView та GridView","\u002Fcsharp\u002Fdesktop-ui\u002Ftreeview-listview","01.csharp\u002F12.desktop-ui\u002F33.treeview-listview",{"title":1579,"path":1580,"stem":1581},"Меню, Toolbar, ContextMenu, StatusBar","\u002Fcsharp\u002Fdesktop-ui\u002Fmenus-toolbars","01.csharp\u002F12.desktop-ui\u002F34.menus-toolbars",{"title":1583,"path":1584,"stem":1585},"Навігація та керування вікнами. Частина 1: вікна та сторінки","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part1","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part1",{"title":1587,"path":1588,"stem":1589},"Навігація та керування вікнами. Частина 2: MVVM-навігація","\u002Fcsharp\u002Fdesktop-ui\u002Fnavigation-windows-part2","01.csharp\u002F12.desktop-ui\u002F35.navigation-windows-part2",{"title":1591,"path":1592,"stem":1593},"Avalonia — Навігація та діалоги","\u002Fcsharp\u002Fdesktop-ui\u002F35a.avalonia-navigation-dialogs","01.csharp\u002F12.desktop-ui\u002F35a.avalonia-navigation-dialogs",{"title":1595,"path":1596,"stem":1597},"Діалоги та File Pickers у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fdialogs-file-pickers","01.csharp\u002F12.desktop-ui\u002F36.dialogs-file-pickers",{"title":1599,"path":1600,"stem":1601},"UserControl: компонентний підхід у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fuser-controls","01.csharp\u002F12.desktop-ui\u002F37.user-controls",{"title":1603,"path":1604,"stem":1605},"Custom Controls: Lookless Controls у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fcustom-controls","01.csharp\u002F12.desktop-ui\u002F38.custom-controls",{"title":1607,"path":1608,"stem":1609},"Avalonia TemplatedControl — Lookless Controls","\u002Fcsharp\u002Fdesktop-ui\u002F38a.avalonia-templated-controls","01.csharp\u002F12.desktop-ui\u002F38a.avalonia-templated-controls",{"title":1611,"path":1612,"stem":1613},"Анімації у WPF: Storyboard та Easing Functions","\u002Fcsharp\u002Fdesktop-ui\u002Fanimations-transitions","01.csharp\u002F12.desktop-ui\u002F39.animations-transitions",{"title":1615,"path":1616,"stem":1617},"Анімації в Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002F39a.avalonia-animations","01.csharp\u002F12.desktop-ui\u002F39a.avalonia-animations",{"title":1619,"path":1620,"stem":1621},"2D Графіка та Мультимедіа у WPF","\u002Fcsharp\u002Fdesktop-ui\u002Fmedia-graphics","01.csharp\u002F12.desktop-ui\u002F40.media-graphics",{"title":1623,"path":1624,"stem":1625},"Dependency Injection у WPF та Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Fdi-integration","01.csharp\u002F12.desktop-ui\u002F41.di-integration",{"title":1627,"path":1628,"stem":1629},"SQLite та EF Core у десктопних додатках","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part1","01.csharp\u002F12.desktop-ui\u002F42.data-persistence-part1",{"title":1631,"path":1632,"stem":1633},"Repository Pattern та Unit of Work","\u002Fcsharp\u002Fdesktop-ui\u002Fdata-persistence-part2","01.csharp\u002F12.desktop-ui\u002F43.data-persistence-part2",{"title":1635,"path":1636,"stem":1637},"Тестування ViewModels","\u002Fcsharp\u002Fdesktop-ui\u002Fviewmodel-testing","01.csharp\u002F12.desktop-ui\u002F44.viewmodel-testing",{"title":1639,"path":1640,"stem":1641},"Avalonia Headless Testing — тестування UI без вікон","\u002Fcsharp\u002Fdesktop-ui\u002F44a.avalonia-headless-testing","01.csharp\u002F12.desktop-ui\u002F44a.avalonia-headless-testing",{"title":1643,"path":1644,"stem":1645},"Кросплатформна розробка з Avalonia","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-cross-platform","01.csharp\u002F12.desktop-ui\u002F45.avalonia-cross-platform",{"title":1647,"path":1648,"stem":1649},"Пакування та розгортання Avalonia додатків","\u002Fcsharp\u002Fdesktop-ui\u002Favalonia-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F46.avalonia-packaging-deployment",{"title":1651,"path":1652,"stem":1653},"Розгортання WPF застосунків","\u002Fcsharp\u002Fdesktop-ui\u002Fwpf-packaging-deployment","01.csharp\u002F12.desktop-ui\u002F47.wpf-packaging-deployment",{"title":1655,"icon":658,"path":1656,"stem":1657,"children":1658,"page":59},"Network Programming","\u002Fcsharp\u002Fnetwork-programming","01.csharp\u002F13.network-programming",[1659,1663,1667,1671,1675,1679,1683,1687,1691,1695,1699],{"title":1660,"path":1661,"stem":1662},"Основи комп'ютерних мереж","\u002Fcsharp\u002Fnetwork-programming\u002Ffoundations","01.csharp\u002F13.network-programming\u002F01.foundations",{"title":1664,"path":1665,"stem":1666},"Модель OSI та стек TCP\u002FIP","\u002Fcsharp\u002Fnetwork-programming\u002Fosi-model","01.csharp\u002F13.network-programming\u002F02.osi-model",{"title":1668,"path":1669,"stem":1670},"IP-протокол та адресація","\u002Fcsharp\u002Fnetwork-programming\u002Fip-addressing","01.csharp\u002F13.network-programming\u002F03.ip-addressing",{"title":1672,"path":1673,"stem":1674},"UDP — протокол без з'єднання","\u002Fcsharp\u002Fnetwork-programming\u002Fudp","01.csharp\u002F13.network-programming\u002F05.udp",{"title":1676,"path":1677,"stem":1678},"UDP Broadcast та Multicast","\u002Fcsharp\u002Fnetwork-programming\u002Fudp-broadcast-multicast","01.csharp\u002F13.network-programming\u002F06.udp-broadcast-multicast",{"title":1680,"path":1681,"stem":1682},"HTTP — протокол вебу","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-fundamentals","01.csharp\u002F13.network-programming\u002F07.http-fundamentals",{"title":1684,"path":1685,"stem":1686},"HttpListener — вбудований HTTP-сервер .NET","\u002Fcsharp\u002Fnetwork-programming\u002F07a.http-listener","01.csharp\u002F13.network-programming\u002F07a.http-listener",{"title":1688,"path":1689,"stem":1690},"HTTP Advanced — cookies, аутентифікація та HTTPS","\u002Fcsharp\u002Fnetwork-programming\u002Fhttp-advanced","01.csharp\u002F13.network-programming\u002F08.http-advanced",{"title":1692,"path":1693,"stem":1694},"SMTP та протоколи електронної пошти","\u002Fcsharp\u002Fnetwork-programming\u002Fsmtp","01.csharp\u002F13.network-programming\u002F09.smtp",{"title":1696,"path":1697,"stem":1698},"WebSocket — повнодуплексний протокол реального часу","\u002Fcsharp\u002Fnetwork-programming\u002Fwebsockets","01.csharp\u002F13.network-programming\u002F10.websockets",{"title":1700,"path":1701,"stem":1702},"TLS\u002FSSL — криптографічний захист мережевих з'єднань","\u002Fcsharp\u002Fnetwork-programming\u002Ftls-ssl","01.csharp\u002F13.network-programming\u002F11.tls-ssl",{"title":1704,"path":1705,"stem":1706},"C# & .NET: The Ultimate Roadmap","\u002Fcsharp\u002Froadmap","01.csharp\u002Froadmap",{"title":1708,"icon":1709,"path":1710,"stem":1711,"children":1712,"page":59},"C++","i-devicon-cplusplus","\u002Fcpp","02.cpp",[1713,1717,1721,1725,1729,1733,1737,1741,1745,1748,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1844,1848,1852,1856,1860,1864,1868,1872,1876,1880,1884,1888,1892,1896,1900,1904,1908],{"title":1714,"path":1715,"stem":1716},"Вступ у програмування та алгоритми","\u002Fcpp\u002Fintro-algorithms","02.cpp\u002F01.intro-algorithms",{"title":1718,"path":1719,"stem":1720},"Code Style: угоди про оформлення коду","\u002Fcpp\u002Fcode-style","02.cpp\u002F02.code-style",{"title":1722,"path":1723,"stem":1724},"Середовище розробки та перший проєкт","\u002Fcpp\u002Fide-setup","02.cpp\u002F03.ide-setup",{"title":1726,"path":1727,"stem":1728},"Вивід даних на екран","\u002Fcpp\u002Fdata-output","02.cpp\u002F04.data-output",{"title":1730,"path":1731,"stem":1732},"Типи даних, змінні та константи","\u002Fcpp\u002Fdata-types-variables","02.cpp\u002F05.data-types-variables",{"title":1734,"path":1735,"stem":1736},"Ввід даних з клавіатури","\u002Fcpp\u002Fdata-input","02.cpp\u002F06.data-input",{"title":1738,"path":1739,"stem":1740},"Оператори, перетворення типів та логічні операції","\u002Fcpp\u002Foperators-type-conversion","02.cpp\u002F07.operators-type-conversion",{"title":1742,"path":1743,"stem":1744},"Цикли","\u002Fcpp\u002Floops","02.cpp\u002F08.loops",{"title":32,"path":1746,"stem":1747},"\u002Fcpp\u002Farrays","02.cpp\u002F09.arrays",{"title":1749,"path":1750,"stem":1751},"Алгоритми сортування та аналіз складності","\u002Fcpp\u002Fsorting","02.cpp\u002F10.sorting",{"title":1753,"path":1754,"stem":1755},"Алгоритми пошуку","\u002Fcpp\u002Fsearching","02.cpp\u002F11.searching",{"title":1757,"path":1758,"stem":1759},"Функції: основи","\u002Fcpp\u002Ffunctions-basics","02.cpp\u002F12.functions-basics",{"title":1761,"path":1762,"stem":1763},"Функції: прототипи, область видимості та додаткові можливості","\u002Fcpp\u002Ffunctions-scope","02.cpp\u002F13.functions-scope",{"title":1765,"path":1766,"stem":1767},"Функції: перевантаження та шаблони","\u002Fcpp\u002Ffunctions-overloading-templates","02.cpp\u002F14.functions-overloading-templates",{"title":1769,"path":1770,"stem":1771},"Вказівники: основи","\u002Fcpp\u002Fpointers-basics","02.cpp\u002F15.pointers-basics",{"title":1773,"path":1774,"stem":1775},"Посилання (References)","\u002Fcpp\u002Freferences","02.cpp\u002F16.references",{"title":1777,"path":1778,"stem":1779},"Вказівники, const і масиви","\u002Fcpp\u002Fpointers-const-arrays","02.cpp\u002F17.pointers-const-arrays",{"title":1781,"path":1782,"stem":1783},"Адресна арифметика","\u002Fcpp\u002Fpointer-arithmetic","02.cpp\u002F18.pointer-arithmetic",{"title":1785,"path":1786,"stem":1787},"Динамічна пам'ять","\u002Fcpp\u002Fdynamic-memory","02.cpp\u002F19.dynamic-memory",{"title":1789,"path":1790,"stem":1791},"Вказівники типу void","\u002Fcpp\u002Fvoid-pointers","02.cpp\u002F20.void-pointers",{"title":1793,"path":1794,"stem":1795},"Вказівники на вказівники","\u002Fcpp\u002Fpointers-to-pointers","02.cpp\u002F21.pointers-to-pointers",{"title":1797,"path":1798,"stem":1799},"Оператор доступу до членів через вказівник (->)","\u002Fcpp\u002Fmember-access-operator","02.cpp\u002F22.member-access-operator",{"title":1801,"path":1802,"stem":1803},"Цикл for-each (Range-based for)","\u002Fcpp\u002Fforeach-loop","02.cpp\u002F23.foreach-loop",{"title":1805,"path":1806,"stem":1807},"Вказівники на функції","\u002Fcpp\u002Ffunction-pointers","02.cpp\u002F24.function-pointers",{"title":1809,"path":1810,"stem":1811},"Лямбда-вирази","\u002Fcpp\u002Flambdas","02.cpp\u002F25.lambdas",{"title":1813,"path":1814,"stem":1815},"Лямбда-захоплення","\u002Fcpp\u002Flambda-captures","02.cpp\u002F26.lambda-captures",{"title":1817,"path":1818,"stem":1819},"Еліпсис","\u002Fcpp\u002Fellipsis","02.cpp\u002F27.ellipsis",{"title":1821,"path":1822,"stem":1823},"Безпечні альтернативи еліпсису","\u002Fcpp\u002F27a.ellipsis","02.cpp\u002F27a.ellipsis",{"title":1825,"path":1826,"stem":1827},"Аргументи командного рядка","\u002Fcpp\u002Fcommand-line-arguments","02.cpp\u002F28.command-line-arguments",{"title":1829,"path":1830,"stem":1831},"Перерахування (enum)","\u002Fcpp\u002Fenum","02.cpp\u002F29.enum",{"title":1833,"path":1834,"stem":1835},"Класи-перерахування (enum class)","\u002Fcpp\u002Fenum-class","02.cpp\u002F30.enum-class",{"title":1837,"path":1838,"stem":1839},"Псевдоніми типів (typedef і using)","\u002Fcpp\u002Ftype-aliases","02.cpp\u002F31.type-aliases",{"title":1841,"path":1842,"stem":1843},"Системи числення та двійкова арифметика","\u002Fcpp\u002Fnumber-systems","02.cpp\u002F32.number-systems",{"title":1845,"path":1846,"stem":1847},"Структури (struct): агрегування даних","\u002Fcpp\u002Fstruct","02.cpp\u002F33.struct",{"title":1849,"path":1850,"stem":1851},"Структури у функціях","\u002Fcpp\u002Fstruct-functions","02.cpp\u002F34.struct-functions",{"title":1853,"path":1854,"stem":1855},"Масиви структур і вкладені структури","\u002Fcpp\u002Fstruct-arrays","02.cpp\u002F35.struct-arrays",{"title":1857,"path":1858,"stem":1859},"Патерни struct та межі застосування","\u002Fcpp\u002Fstruct-patterns","02.cpp\u002F36.struct-patterns",{"title":1861,"path":1862,"stem":1863},"Символи та таблиця ASCII","\u002Fcpp\u002Fascii-characters","02.cpp\u002F37.ascii-characters",{"title":1865,"path":1866,"stem":1867},"Unicode та кодування UTF","\u002Fcpp\u002Funicode-utf","02.cpp\u002F38.unicode-utf",{"title":1869,"path":1870,"stem":1871},"C-style рядки","\u002Fcpp\u002Fc-strings","02.cpp\u002F39.c-strings",{"title":1873,"path":1874,"stem":1875},"Вступ до std::string","\u002Fcpp\u002Fstd-string-intro","02.cpp\u002F40.std-string-intro",{"title":1877,"path":1878,"stem":1879},"Довжина, ємність та доступ до символів std::string","\u002Fcpp\u002Fstd-string-capacity-access","02.cpp\u002F41.std-string-capacity-access",{"title":1881,"path":1882,"stem":1883},"Модифікація std::string: присвоювання, додавання, вставка, видалення та заміна","\u002Fcpp\u002Fstd-string-modification","02.cpp\u002F42.std-string-modification",{"title":1885,"path":1886,"stem":1887},"Пошук у std::string: find, npos та практичні патерни","\u002Fcpp\u002Fstd-string-search","02.cpp\u002F43.std-string-search",{"title":1889,"path":1890,"stem":1891},"std::string_view: невласницький погляд на рядок без копіювання","\u002Fcpp\u002Fstd-string-view","02.cpp\u002F44.std-string-view",{"title":1893,"path":1894,"stem":1895},"Об'єднання (union): один блок пам'яті, кілька інтерпретацій","\u002Fcpp\u002Funion","02.cpp\u002F45.union",{"title":1897,"path":1898,"stem":1899},"Організація коду: файли, препроцесор, простори імен","\u002Fcpp\u002Fmultifile-programs","02.cpp\u002F46.multifile-programs",{"title":1901,"path":1902,"stem":1903},"Робота з файлами: C-стиль (stdio.h)","\u002Fcpp\u002Fc-style-files","02.cpp\u002F47.c-style-files",{"title":1905,"path":1906,"stem":1907},"Робота з файлами: C++-стиль (fstream)","\u002Fcpp\u002Fcpp-style-files","02.cpp\u002F48.cpp-style-files",{"title":1909,"path":1910,"stem":1911},"План навчання: Курс C++ — Продовження (Статті 29–60+)","\u002Fcpp\u002Fcurriculum-plan","02.cpp\u002Fcurriculum-plan",{"title":1913,"icon":1914,"path":1915,"stem":1916,"children":1917,"page":59},"JavaScript","i-devicon-javascript","\u002Fjavascript","03.javascript",[1918,1944,1998,2020,2324,2362],{"title":1919,"icon":1920,"path":1921,"stem":1922,"children":1923,"page":59},"Events","i-lucide-mouse-pointer-click","\u002Fjavascript\u002Fevents","03.javascript\u002F01.events",[1924,1928,1932,1936,1940],{"title":1925,"path":1926,"stem":1927},"Вступ до подій браузера","\u002Fjavascript\u002Fevents\u002Fintro","03.javascript\u002F01.events\u002F01.intro",{"title":1929,"path":1930,"stem":1931},"Бульбашковий механізм (Bubbling) та занурення (Capturing)","\u002Fjavascript\u002Fevents\u002Fbubbling-capturing","03.javascript\u002F01.events\u002F02.bubbling-capturing",{"title":1933,"path":1934,"stem":1935},"Делегування подій (Event Delegation)","\u002Fjavascript\u002Fevents\u002Fdelegate-events","03.javascript\u002F01.events\u002F03.delegate-events",{"title":1937,"path":1938,"stem":1939},"Типові дії браузера та preventDefault()","\u002Fjavascript\u002Fevents\u002Fprevent-default","03.javascript\u002F01.events\u002F04.prevent-default",{"title":1941,"path":1942,"stem":1943},"Запуск користувацьких подій (Custom Events)","\u002Fjavascript\u002Fevents\u002Fcustom-events","03.javascript\u002F01.events\u002F05.custom-events",{"title":1945,"icon":1946,"path":1947,"stem":1948,"children":1949,"page":59},"Network","i-lucide-globe","\u002Fjavascript\u002Fnetwork","03.javascript\u002F02.network",[1950,1954,1958,1962,1966,1970,1974,1978,1982,1986,1990,1994],{"title":1951,"path":1952,"stem":1953},"Fetch API - Сучасний підхід до HTTP-запитів","\u002Fjavascript\u002Fnetwork\u002F01-fetch-api","03.javascript\u002F02.network\u002F01-fetch-api",{"title":1955,"path":1956,"stem":1957},"FormData - Робота з формами та файлами","\u002Fjavascript\u002Fnetwork\u002F02-formdata","03.javascript\u002F02.network\u002F02-formdata",{"title":1959,"path":1960,"stem":1961},"Відстеження прогресу завантаження","\u002Fjavascript\u002Fnetwork\u002F03-download-progress","03.javascript\u002F02.network\u002F03-download-progress",{"title":1963,"path":1964,"stem":1965},"Переривання fetch-запитів","\u002Fjavascript\u002Fnetwork\u002F04-abort-requests","03.javascript\u002F02.network\u002F04-abort-requests",{"title":1967,"path":1968,"stem":1969},"CORS - Запити між різними джерелами","\u002Fjavascript\u002Fnetwork\u002F05-cors","03.javascript\u002F02.network\u002F05-cors",{"title":1971,"path":1972,"stem":1973},"Fetch API - Повний довідник опцій","\u002Fjavascript\u002Fnetwork\u002F06-fetch-options","03.javascript\u002F02.network\u002F06-fetch-options",{"title":1975,"path":1976,"stem":1977},"URL Objects - Робота з посиланнями","\u002Fjavascript\u002Fnetwork\u002F07-url-objects","03.javascript\u002F02.network\u002F07-url-objects",{"title":1979,"path":1980,"stem":1981},"XMLHttpRequest - AJAX та низькорівневі запити","\u002Fjavascript\u002Fnetwork\u002F08-xmlhttprequest","03.javascript\u002F02.network\u002F08-xmlhttprequest",{"title":1983,"path":1984,"stem":1985},"Відновлюване завантаження файлів","\u002Fjavascript\u002Fnetwork\u002F09-resumable-upload","03.javascript\u002F02.network\u002F09-resumable-upload",{"title":1987,"path":1988,"stem":1989},"Cookies, document.cookie та світ після \"Cookiepocalypse\"","\u002Fjavascript\u002Fnetwork\u002F10-cookies","03.javascript\u002F02.network\u002F10-cookies",{"title":1991,"path":1992,"stem":1993},"js-cookie: Керування Cookies без Болю","\u002Fjavascript\u002Fnetwork\u002F11-js-cookie","03.javascript\u002F02.network\u002F11-js-cookie",{"title":1995,"path":1996,"stem":1997},"Axios: Потужний HTTP-клієнт для JavaScript","\u002Fjavascript\u002Fnetwork\u002F12-axios","03.javascript\u002F02.network\u002F12-axios",{"title":1999,"icon":2000,"path":2001,"stem":2002,"children":2003,"page":59},"Bom","i-lucide-monitor","\u002Fjavascript\u002Fbom","03.javascript\u002F03.bom",[2004,2008,2012,2016],{"title":2005,"path":2006,"stem":2007},"LocalStorage, SessionStorage та patterns збереження даних","\u002Fjavascript\u002Fbom\u002F01-localstorage","03.javascript\u002F03.bom\u002F01-localstorage",{"title":2009,"path":2010,"stem":2011},"Location Object - Керування адресою сторінки","\u002Fjavascript\u002Fbom\u002F02-location-object","03.javascript\u002F03.bom\u002F02-location-object",{"title":2013,"path":2014,"stem":2015},"History API - Керування історією браузера","\u002Fjavascript\u002Fbom\u002F03-history-api","03.javascript\u002F03.bom\u002F03-history-api",{"title":2017,"path":2018,"stem":2019},"Navigator Object - Ідентифікація та Можливості Пристрою","\u002Fjavascript\u002Fbom\u002F04-navigator-object","03.javascript\u002F03.bom\u002F04-navigator-object",{"title":2021,"icon":2022,"path":2023,"stem":2024,"children":2025},"React","i-devicon-react","\u002Fjavascript\u002Freact","03.javascript\u002F04.react\u002Findex",[2026,2027,2031,2035,2039,2043,2106,2141,2293],{"title":2021,"path":2023,"stem":2024},{"title":2028,"path":2029,"stem":2030},"Робота з Формами в React","\u002Fjavascript\u002Freact\u002Freact-forms","03.javascript\u002F04.react\u002F01.react-forms",{"title":2032,"path":2033,"stem":2034},"React Hook Form: Професійна Робота з Формами","\u002Fjavascript\u002Freact\u002Freact-hook-form","03.javascript\u002F04.react\u002F02.react-hook-form",{"title":2036,"path":2037,"stem":2038},"React Hook Form: Глибоке Розуміння Архітектури та Оптимізації","\u002Fjavascript\u002Freact\u002Freact-hook-form-new","03.javascript\u002F04.react\u002F02.react-hook-form-new",{"title":2040,"path":2041,"stem":2042},"Axios та React: Професійна Архітектура Запитів","\u002Fjavascript\u002Freact\u002Fdata-fetching-axios","03.javascript\u002F04.react\u002F03.data-fetching-axios",{"title":2044,"icon":132,"path":2045,"stem":2046,"children":2047},"Tanstack Query","\u002Fjavascript\u002Freact\u002Ftanstack-query","03.javascript\u002F04.react\u002F04.tanstack-query\u002Findex",[2048,2050,2054,2058,2062,2066,2070,2074,2078,2082,2086,2090,2094,2098,2102],{"title":2049,"path":2045,"stem":2046},"TanStack Query: Майстерність Керування Станом Сервера",{"title":2051,"path":2052,"stem":2053},"Парадигма Server State: Чому useEffect недостатньо","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-state-paradigm","03.javascript\u002F04.react\u002F04.tanstack-query\u002F01.server-state-paradigm",{"title":2055,"path":2056,"stem":2057},"Встановлення та Налаштування: Фундамент","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Finstallation-and-devtools","03.javascript\u002F04.react\u002F04.tanstack-query\u002F02.installation-and-devtools",{"title":2059,"path":2060,"stem":2061},"Основи Запитів та Магія Ключів","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fquery-basics-and-keys","03.javascript\u002F04.react\u002F04.tanstack-query\u002F03.query-basics-and-keys",{"title":2063,"path":2064,"stem":2065},"Синхронізація Даних: Життєвий Цикл Запиту","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fdata-synchronization","03.javascript\u002F04.react\u002F04.tanstack-query\u002F04.data-synchronization",{"title":2067,"path":2068,"stem":2069},"Мутації та Інвалідація: Зміна Даних","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fmutations-and-invalidation","03.javascript\u002F04.react\u002F04.tanstack-query\u002F05.mutations-and-invalidation",{"title":2071,"path":2072,"stem":2073},"Оптимістичні Оновлення: Швидше за Світло","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Foptimistic-updates","03.javascript\u002F04.react\u002F04.tanstack-query\u002F06.optimistic-updates",{"title":2075,"path":2076,"stem":2077},"Пагінація та Infinite Scroll","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fpagination-and-load-more","03.javascript\u002F04.react\u002F04.tanstack-query\u002F07.pagination-and-load-more",{"title":2079,"path":2080,"stem":2081},"Просунуті Патерни та Оптимізація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F04.tanstack-query\u002F08.advanced-patterns",{"title":2083,"path":2084,"stem":2085},"Архітектура та Best Practices","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Farchitecture-and-best-practices","03.javascript\u002F04.react\u002F04.tanstack-query\u002F09.architecture-and-best-practices",{"title":2087,"path":2088,"stem":2089},"Server-Side Rendering (SSR) та Гідратація","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fserver-side-rendering","03.javascript\u002F04.react\u002F04.tanstack-query\u002F10.server-side-rendering",{"title":2091,"path":2092,"stem":2093},"Стратегії Тестування","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Ftesting-strategies","03.javascript\u002F04.react\u002F04.tanstack-query\u002F11.testing-strategies",{"title":2095,"path":2096,"stem":2097},"Аутентифікація та Обробка Помилок","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fauthentication-and-errors","03.javascript\u002F04.react\u002F04.tanstack-query\u002F12.authentication-and-errors",{"title":2099,"path":2100,"stem":2101},"React Suspense та Майбутнє","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Freact-suspense","03.javascript\u002F04.react\u002F04.tanstack-query\u002F13.react-suspense",{"title":2103,"path":2104,"stem":2105},"Глибоке Занурення в Продуктивність","\u002Fjavascript\u002Freact\u002Ftanstack-query\u002Fperformance-deep-dive","03.javascript\u002F04.react\u002F04.tanstack-query\u002F14.performance-deep-dive",{"title":2107,"icon":2022,"path":2108,"stem":2109,"children":2110},"React Router","\u002Fjavascript\u002Freact\u002Freact-router","03.javascript\u002F04.react\u002F05.react-router\u002Findex",[2111,2113,2117,2121,2125,2129,2133,2137],{"title":2112,"path":2108,"stem":2109},"React Router: Навігаційна система сучасного вебу",{"title":2114,"path":2115,"stem":2116},"Налаштування та Базовий Роутинг","\u002Fjavascript\u002Freact\u002Freact-router\u002Fsetup-and-basic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F01.setup-and-basic-routing",{"title":2118,"path":2119,"stem":2120},"Динамічна Навігація","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnavigation-and-links","03.javascript\u002F04.react\u002F05.react-router\u002F02.navigation-and-links",{"title":2122,"path":2123,"stem":2124},"Вкладені Маршрути та Макети","\u002Fjavascript\u002Freact\u002Freact-router\u002Fnested-routes-and-layouts","03.javascript\u002F04.react\u002F05.react-router\u002F03.nested-routes-and-layouts",{"title":2126,"path":2127,"stem":2128},"Динамічні Маршрути та Параметри","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdynamic-routing","03.javascript\u002F04.react\u002F05.react-router\u002F04.dynamic-routing",{"title":2130,"path":2131,"stem":2132},"Data APIs: Loaders та Actions","\u002Fjavascript\u002Freact\u002Freact-router\u002Fdata-loading","03.javascript\u002F04.react\u002F05.react-router\u002F05.data-loading",{"title":2134,"path":2135,"stem":2136},"Просунуті Патерни","\u002Fjavascript\u002Freact\u002Freact-router\u002Fadvanced-patterns","03.javascript\u002F04.react\u002F05.react-router\u002F06.advanced-patterns",{"title":2138,"path":2139,"stem":2140},"Legacy Routing: Компонентний підхід","\u002Fjavascript\u002Freact\u002Freact-router\u002Flegacy-routing","03.javascript\u002F04.react\u002F05.react-router\u002F07.legacy-routing",{"title":2142,"icon":132,"path":2143,"stem":2144,"children":2145},"Redux","\u002Fjavascript\u002Freact\u002Fredux","03.javascript\u002F04.react\u002F06.redux\u002Findex",[2146,2148,2164,2193,2202,2223,2239,2268],{"title":2147,"path":2143,"stem":2144},"Redux: Еволюція управління станом",{"title":14,"icon":15,"path":2149,"stem":2150,"children":2151,"page":59},"\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals",[2152,2156,2160],{"title":2153,"path":2154,"stem":2155},"Вступ до State Management","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fintro-state-management","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F01.intro-state-management",{"title":2157,"path":2158,"stem":2159},"Філософія Redux та Три Принципи","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fredux-philosophy","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F02.redux-philosophy",{"title":2161,"path":2162,"stem":2163},"Чисті функції та Іммутабельність","\u002Fjavascript\u002Freact\u002Fredux\u002Ffundamentals\u002Fpure-functions-immutability","03.javascript\u002F04.react\u002F06.redux\u002F01.fundamentals\u002F03.pure-functions-immutability",{"title":2165,"icon":132,"path":2166,"stem":2167,"children":2168,"page":59},"Classic Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux",[2169,2173,2177,2181,2185,2189],{"title":2170,"path":2171,"stem":2172},"Створення Store (Classic Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fstore-setup","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F01.store-setup",{"title":2174,"path":2175,"stem":2176},"Actions, Constants та Action Creators","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Factions-constants","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F02.actions-constants",{"title":2178,"path":2179,"stem":2180},"Логіка Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freducers","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F03.reducers",{"title":2182,"path":2183,"stem":2184},"Комбінування Reducers (Root Reducer)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fdata-flow","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F04.data-flow",{"title":2186,"path":2187,"stem":2188},"Підключення до React (React-Redux)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Freact-redux-connection","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F05.react-redux-connection",{"title":2190,"path":2191,"stem":2192},"Middleware та Асинхронність (Redux Thunk)","\u002Fjavascript\u002Freact\u002Fredux\u002Fclassic-redux\u002Fmiddleware-thunk","03.javascript\u002F04.react\u002F06.redux\u002F02.classic-redux\u002F06.middleware-thunk",{"title":2194,"icon":132,"path":2195,"stem":2196,"children":2197,"page":59},"Transition To Rtk","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk",[2198],{"title":2199,"path":2200,"stem":2201},"Проблеми класичного Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftransition-to-rtk\u002Fproblems-with-classic","03.javascript\u002F04.react\u002F06.redux\u002F03.transition-to-rtk\u002F01.problems-with-classic",{"title":2203,"icon":132,"path":2204,"stem":2205,"children":2206,"page":59},"Redux Toolkit","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit",[2207,2211,2215,2219],{"title":2208,"path":2209,"stem":2210},"Налаштування Store з configureStore","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fconfigure-store","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F01.configure-store",{"title":2212,"path":2213,"stem":2214},"createSlice: Революція в Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fcreate-slice","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F02.create-slice",{"title":2216,"path":2217,"stem":2218},"Асинхронність з createAsyncThunk","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fasync-thunks","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F03.async-thunks",{"title":2220,"path":2221,"stem":2222},"04. Entity Adapter: Керування нормалізованим станом","\u002Fjavascript\u002Freact\u002Fredux\u002Fredux-toolkit\u002Fentity-adapter","03.javascript\u002F04.react\u002F06.redux\u002F04.redux-toolkit\u002F04.entity-adapter",{"title":2224,"icon":92,"path":2225,"stem":2226,"children":2227,"page":59},"Advanced","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced",[2228,2232,2236],{"title":2229,"path":2230,"stem":2231},"Мемоізація та Селектори: Повний Гайд по Reselect","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Fselectors-reselect","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F01.selectors-reselect",{"title":2233,"path":2234,"stem":2235},"RTK Query: Архітектура Серверного Кешу","\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Frtk-query-intro","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F02.rtk-query-intro",{"title":2083,"path":2237,"stem":2238},"\u002Fjavascript\u002Freact\u002Fredux\u002Fadvanced\u002Farchitecture-best-practices","03.javascript\u002F04.react\u002F06.redux\u002F05.advanced\u002F03.architecture-best-practices",{"title":2240,"icon":132,"path":2241,"stem":2242,"children":2243,"page":59},"Project Kanban","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban",[2244,2248,2252,2256,2260,2264],{"title":2245,"path":2246,"stem":2247},"Проєкт: Kanban Board (Trello Clone)","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fproject-overview","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F01.project-overview",{"title":2249,"path":2250,"stem":2251},"Налаштування та Типізація","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fsetup-and-types","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F02.setup-and-types",{"title":2253,"path":2254,"stem":2255},"Board Slice: Серце Дошки","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fboard-slice","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F03.board-slice",{"title":2257,"path":2258,"stem":2259},"Логіка Drag & Drop","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Fdrag-and-drop-logic","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F04.drag-and-drop-logic",{"title":2261,"path":2262,"stem":2263},"Інтеграція з RTK Query","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Frtk-query-integration","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F05.rtk-query-integration",{"title":2265,"path":2266,"stem":2267},"Optimistic Updates","\u002Fjavascript\u002Freact\u002Fredux\u002Fproject-kanban\u002Foptimistic-updates","03.javascript\u002F04.react\u002F06.redux\u002F06.project-kanban\u002F06.optimistic-updates",{"title":2269,"icon":132,"path":2270,"stem":2271,"children":2272,"page":59},"Testing","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting","03.javascript\u002F04.react\u002F06.redux\u002F07.testing",[2273,2277,2281,2285,2289],{"title":2274,"path":2275,"stem":2276},"Тестування Redux","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Fintro-testing","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F01.intro-testing",{"title":2278,"path":2279,"stem":2280},"Тестування Reducers","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-reducers","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F02.testing-reducers",{"title":2282,"path":2283,"stem":2284},"Тестування Селекторів","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-selectors","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F03.testing-selectors",{"title":2286,"path":2287,"stem":2288},"Тестування Компонентів (Integration)","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-components","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F04.testing-components",{"title":2290,"path":2291,"stem":2292},"Тестування Async Thunks","\u002Fjavascript\u002Freact\u002Fredux\u002Ftesting\u002Ftesting-thunks","03.javascript\u002F04.react\u002F06.redux\u002F07.testing\u002F05.testing-thunks",{"title":2294,"icon":132,"path":2295,"stem":2296,"children":2297},"Ui Libraries","\u002Fjavascript\u002Freact\u002Fui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002Findex",[2298,2300,2304,2308,2312,2316,2320],{"title":2299,"path":2295,"stem":2296},"UI Бібліотеки в React",{"title":2301,"path":2302,"stem":2303},"Вступ до UI Бібліотек: Навіщо Винаходити Велосипед Двічі?","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fintroduction-to-ui-libraries","03.javascript\u002F04.react\u002F07.ui-libraries\u002F01.introduction-to-ui-libraries",{"title":2305,"path":2306,"stem":2307},"Філософія shadcn\u002Fui: \"Not a Component Library\"","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-philosophy","03.javascript\u002F04.react\u002F07.ui-libraries\u002F02.shadcn-philosophy",{"title":2309,"path":2310,"stem":2311},"Установка та Налаштування shadcn\u002Fui","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-installation","03.javascript\u002F04.react\u002F07.ui-libraries\u002F03.shadcn-installation",{"title":2313,"path":2314,"stem":2315},"Базові Компоненти shadcn\u002Fui: Фундамент Інтерфейсу","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-basics","03.javascript\u002F04.react\u002F07.ui-libraries\u002F04.shadcn-components-basics",{"title":2317,"path":2318,"stem":2319},"Компоненти Форм: Побудова Інтерактивних Form","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-forms","03.javascript\u002F04.react\u002F07.ui-libraries\u002F05.shadcn-components-forms",{"title":2321,"path":2322,"stem":2323},"Складні Компоненти: Dialog, Dropdown, Table та Command","\u002Fjavascript\u002Freact\u002Fui-libraries\u002Fshadcn-components-advanced","03.javascript\u002F04.react\u002F07.ui-libraries\u002F06.shadcn-components-advanced",{"title":2325,"icon":2326,"path":2327,"stem":2328,"children":2329,"page":59},"TypeScript","i-devicon-typescript","\u002Fjavascript\u002Ftypescript","03.javascript\u002F05.typescript",[2330,2334,2338,2342,2346,2350,2354,2358],{"title":2331,"path":2332,"stem":2333},"TypeScript: Броня для вашого коду","\u002Fjavascript\u002Ftypescript\u002Fintro-and-basic-types","03.javascript\u002F05.typescript\u002F01.intro-and-basic-types",{"title":2335,"path":2336,"stem":2337},"Майстерність Моделювання Даних: Інтерфейси та Просунуті Типи","\u002Fjavascript\u002Ftypescript\u002Finterfaces-and-advanced-types","03.javascript\u002F05.typescript\u002F02.interfaces-and-advanced-types",{"title":2339,"path":2340,"stem":2341},"Алхімія Типів: Generics та Utility Types","\u002Fjavascript\u002Ftypescript\u002Fgenerics-and-utilities","03.javascript\u002F05.typescript\u002F03.generics-and-utilities",{"title":2343,"path":2344,"stem":2345},"Архітектура та Шаблони: Класи в TypeScript","\u002Fjavascript\u002Ftypescript\u002Fclasses-and-oop","03.javascript\u002F05.typescript\u002F04.classes-and-oop",{"title":2347,"path":2348,"stem":2349},"Продакшн та Екосистема: Advanced Config & Workflow","\u002Fjavascript\u002Ftypescript\u002Fadvanced-patterns-and-config","03.javascript\u002F05.typescript\u002F05.advanced-patterns-and-config",{"title":2351,"path":2352,"stem":2353},"TypeScript у світі React","\u002Fjavascript\u002Ftypescript\u002Freact-basics","03.javascript\u002F05.typescript\u002F06.react-basics",{"title":2355,"path":2356,"stem":2357},"React + TypeScript: Продвинуті патерни","\u002Fjavascript\u002Ftypescript\u002Freact-advanced","03.javascript\u002F05.typescript\u002F07.react-advanced",{"title":2359,"path":2360,"stem":2361},"React + TypeScript: Екосистема та бібліотеки","\u002Fjavascript\u002Ftypescript\u002Freact-ecosystem","03.javascript\u002F05.typescript\u002F08.react-ecosystem",{"title":2363,"path":2364,"stem":2365},"Atomic Design","\u002Fjavascript\u002Fatomic-design","03.javascript\u002F2.atomic-design",{"title":2367,"icon":2368,"path":2369,"stem":2370,"children":2371,"page":59},"Java","i-devicon-java","\u002Fjava","04.java",[2372,2375,2378,2382,2386,2390,2394],{"title":162,"path":2373,"stem":2374},"\u002Fjava\u002Fdata-mapper-part1","04.java\u002F01.data-mapper-part1",{"title":166,"path":2376,"stem":2377},"\u002Fjava\u002Fdata-mapper-part2","04.java\u002F02.data-mapper-part2",{"title":2379,"path":2380,"stem":2381},"Service Layer: Організація бізнес-логіки","\u002Fjava\u002Fservice-layer","04.java\u002F03.service-layer",{"title":2383,"path":2384,"stem":2385},"Rich Domain Model та State Pattern","\u002Fjava\u002Frich-domain-model","04.java\u002F04.rich-domain-model",{"title":2387,"path":2388,"stem":2389},"Патерни для складної бізнес-логіки","\u002Fjava\u002Fbusiness-logic-patterns","04.java\u002F05.business-logic-patterns",{"title":2391,"path":2392,"stem":2393},"Обробка помилок та валідація","\u002Fjava\u002Ferror-handling-validation","04.java\u002F06.error-handling-validation",{"title":2395,"path":2396,"stem":2397,"children":2398,"page":59},"Проектування баз даних","\u002Fjava\u002Fpr2","04.java\u002Fpr2",[2399,2403,2407,2411,2415,2419,2423,2427,2431,2435,2439,2443,2447,2451,2455,2459,2463,2467,2471,2475,2479,2483,2487,2491,2495,2499,2503,2507,2511,2515,2519,2523,2527,2531,2535,2539,2543],{"title":2400,"path":2401,"stem":2402},"Концептуальне моделювання: Мистецтво розуміння предметної області","\u002Fjava\u002Fpr2\u002Fconceptual-modeling","04.java\u002Fpr2\u002F01.conceptual-modeling",{"title":2404,"path":2405,"stem":2406},"Логічне моделювання: Від бізнес-ідей до структур даних","\u002Fjava\u002Fpr2\u002Flogical-modeling","04.java\u002Fpr2\u002F02.logical-modeling",{"title":2408,"path":2409,"stem":2410},"Нормалізація: Гігієна даних та боротьба з аномаліями","\u002Fjava\u002Fpr2\u002Fnormalization","04.java\u002Fpr2\u002F03.normalization",{"title":2412,"path":2413,"stem":2414},"Фізична схема: Від абстракції до DDL","\u002Fjava\u002Fpr2\u002Fphysical-schema","04.java\u002Fpr2\u002F04.physical-schema",{"title":2416,"path":2417,"stem":2418},"Архітектурна класифікація таблиць","\u002Fjava\u002Fpr2\u002Ftable-classification","04.java\u002Fpr2\u002F05.table-classification",{"title":2420,"path":2421,"stem":2422},"Database Migrations: Версіонування схеми з Flyway","\u002Fjava\u002Fpr2\u002Fdatabase-migrations","04.java\u002Fpr2\u002F06.database-migrations",{"title":2424,"path":2425,"stem":2426},"А що, якби це була не реляційна БД?","\u002Fjava\u002Fpr2\u002Fbeyond-relational","04.java\u002Fpr2\u002F07.beyond-relational",{"title":2428,"path":2429,"stem":2430},"Object-Relational Impedance Mismatch: Два світи, що не хочуть дружити","\u002Fjava\u002Fpr2\u002Fimpedance-mismatch","04.java\u002Fpr2\u002F09.impedance-mismatch",{"title":2432,"path":2433,"stem":2434},"JDBC: Перший контакт із базою даних","\u002Fjava\u002Fpr2\u002Fjdbc-fundamentals","04.java\u002Fpr2\u002F10.jdbc-fundamentals",{"title":2436,"path":2437,"stem":2438},"Якість коду: Spotless, SpotBugs та SonarQube","\u002Fjava\u002Fpr2\u002F10a.code-quality","04.java\u002Fpr2\u002F10a.code-quality",{"title":2440,"path":2441,"stem":2442},"Connection Pool: Патерн Object Pool для JDBC-з'єднань","\u002Fjava\u002Fpr2\u002Fconnection-pool","04.java\u002Fpr2\u002F11.connection-pool",{"title":2444,"path":2445,"stem":2446},"Row Data Gateway: Об'єкт як обгортка рядка таблиці","\u002Fjava\u002Fpr2\u002Frow-data-gateway","04.java\u002Fpr2\u002F12.row-data-gateway",{"title":2448,"path":2449,"stem":2450},"Table Data Gateway: Фасад таблиці як архітектурний відступ","\u002Fjava\u002Fpr2\u002Ftable-data-gateway","04.java\u002Fpr2\u002F13.table-data-gateway",{"title":2452,"path":2453,"stem":2454},"Repository + Data Mapper: Правильна шарова архітектура з JDBC","\u002Fjava\u002Fpr2\u002Frepository-data-mapper","04.java\u002Fpr2\u002F14.repository-data-mapper",{"title":2456,"path":2457,"stem":2458},"Identity Map: Кешування сутностей у рамках сесії","\u002Fjava\u002Fpr2\u002Fidentity-map","04.java\u002Fpr2\u002F15.identity-map",{"title":2460,"path":2461,"stem":2462},"Unit of Work: Відстеження змін і координація JDBC-транзакцій","\u002Fjava\u002Fpr2\u002Funit-of-work","04.java\u002Fpr2\u002F16.unit-of-work",{"title":2464,"path":2465,"stem":2466},"Strategy: Замінювані SQL-стратегії для підтримки різних СУБД","\u002Fjava\u002Fpr2\u002Fstrategy-sql","04.java\u002Fpr2\u002F17.strategy-sql",{"title":2468,"path":2469,"stem":2470},"Proxy: Lazy Loading для One-To-Many колекцій","\u002Fjava\u002Fpr2\u002Fproxy-lazy-loading","04.java\u002Fpr2\u002F18.proxy-lazy-loading",{"title":2472,"path":2473,"stem":2474},"Generic Repository через Java Reflection: анотації та динамічний SQL","\u002Fjava\u002Fpr2\u002Fgeneric-repository-reflection","04.java\u002Fpr2\u002F19.generic-repository-reflection",{"title":2476,"path":2477,"stem":2478},"Specification Pattern: Композиція бізнес-правил для складних запитів","\u002Fjava\u002Fpr2\u002Fspecification-pattern","04.java\u002Fpr2\u002F20.specification-pattern",{"title":2480,"path":2481,"stem":2482},"Розширені можливості Specification Pattern: підзапити, агрегації та гібридний підхід","\u002Fjava\u002Fpr2\u002F20a.advanced-specifications","04.java\u002Fpr2\u002F20a.advanced-specifications",{"title":2484,"path":2485,"stem":2486},"Асинхронність у JDBC: Від блокуючих викликів до CompletableFuture","\u002Fjava\u002Fpr2\u002Fasynchronous-jdbc","04.java\u002Fpr2\u002F21.asynchronous-jdbc",{"title":2488,"path":2489,"stem":2490},"Інтеграційне тестування JDBC-репозиторіїв: Embedded H2 та патерн AAA","\u002Fjava\u002Fpr2\u002Fintegration-testing-h2","04.java\u002Fpr2\u002F22.integration-testing-h2",{"title":2492,"path":2493,"stem":2494},"Testcontainers: Тестування з реальною PostgreSQL у Docker-контейнерах","\u002Fjava\u002Fpr2\u002Fintegration-testing-testcontainers","04.java\u002Fpr2\u002F23.integration-testing-testcontainers",{"title":2496,"path":2497,"stem":2498},"Google Guice: Впровадження залежностей у JavaFX-проєкті","\u002Fjava\u002Fpr2\u002Fdependency-injection-guice","04.java\u002Fpr2\u002F24.dependency-injection-guice",{"title":2500,"path":2501,"stem":2502},"JavaFX: Основи побудови графічних інтерфейсів","\u002Fjava\u002Fpr2\u002Fjavafx-fundamentals","04.java\u002Fpr2\u002F25.javafx-fundamentals",{"title":2504,"path":2505,"stem":2506},"Properties та Bindings: Реактивність у JavaFX","\u002Fjava\u002Fpr2\u002Fjavafx-properties-bindings","04.java\u002Fpr2\u002F26.javafx-properties-bindings",{"title":2508,"path":2509,"stem":2510},"MVC vs MVP vs MVVM: Еволюція архітектурних патернів UI","\u002Fjava\u002Fpr2\u002Fui-architecture-patterns","04.java\u002Fpr2\u002F27.ui-architecture-patterns",{"title":2512,"path":2513,"stem":2514},"MVVM на практиці: Побудова ViewModel","\u002Fjava\u002Fpr2\u002Fmvvm-viewmodel-implementation","04.java\u002Fpr2\u002F28.mvvm-viewmodel-implementation",{"title":2516,"path":2517,"stem":2518},"View та Controller: Зв'язування з ViewModel через FXML","\u002Fjava\u002Fpr2\u002Fmvvm-view-controller","04.java\u002Fpr2\u002F29.mvvm-view-controller",{"title":2520,"path":2521,"stem":2522},"Інтеграція MVVM з Guice: Автоматична ін'єкція залежностей","\u002Fjava\u002Fpr2\u002Fmvvm-guice-integration","04.java\u002Fpr2\u002F30.mvvm-guice-integration",{"title":2524,"path":2525,"stem":2526},"Валідація та обробка помилок у MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-validation-error-handling","04.java\u002Fpr2\u002F31.mvvm-validation-error-handling",{"title":2528,"path":2529,"stem":2530},"Навігація та управління екранами у JavaFX MVVM","\u002Fjava\u002Fpr2\u002Fmvvm-navigation-screen-management","04.java\u002Fpr2\u002F32.mvvm-navigation-screen-management",{"title":2532,"path":2533,"stem":2534},"Тестування JavaFX MVVM-додатків","\u002Fjava\u002Fpr2\u002Fmvvm-testing","04.java\u002Fpr2\u002F33.mvvm-testing",{"title":2536,"path":2537,"stem":2538},"Стилізація та теми у JavaFX: CSS та User Experience","\u002Fjava\u002Fpr2\u002Fjavafx-styling-themes","04.java\u002Fpr2\u002F34.javafx-styling-themes",{"title":2540,"path":2541,"stem":2542},"AtlantaFX: Сучасні теми для JavaFX додатків","\u002Fjava\u002Fpr2\u002Fatlantafx-modern-themes","04.java\u002Fpr2\u002F35.atlantafx-modern-themes",{"title":2544,"path":2545,"stem":2546},"Пакування та розповсюдження JavaFX-додатків","\u002Fjava\u002Fpr2\u002Fjar-packaging-distribution","04.java\u002Fpr2\u002F36.jar-packaging-distribution",{"title":2548,"icon":2549,"path":2550,"stem":2551,"children":2552,"page":59},"Python","i-devicon-python","\u002Fpython","05.python",[2553,2557,2560,2564,2568,2572,2576,2580,2584,2588,2592,2596,2600,2604,2608,2669],{"title":2554,"path":2555,"stem":2556},"Модулі, Пакети та Віртуальні Середовища","\u002Fpython\u002Fmodules-packages-venv","05.python\u002F00.modules-packages-venv",{"title":71,"path":2558,"stem":2559},"\u002Fpython\u002Fclasses-objects","05.python\u002F01.classes-objects",{"title":2561,"path":2562,"stem":2563},"Інкапсуляція, Керування Доступом та Властивості","\u002Fpython\u002Fencapsulation","05.python\u002F02.encapsulation",{"title":2565,"path":2566,"stem":2567},"Наслідування, MRO та суперсила super()","\u002Fpython\u002Finheritance-mro","05.python\u002F03.inheritance-mro",{"title":2569,"path":2570,"stem":2571},"Абстракція — ABC проти Статичних Протоколів (PEP 544)","\u002Fpython\u002Fabstraction-protocols","05.python\u002F04.abstraction-protocols",{"title":2573,"path":2574,"stem":2575},"Магічні методи (Dunder) та Емуляція протоколів","\u002Fpython\u002Fdunder-methods","05.python\u002F05.dunder-methods",{"title":2577,"path":2578,"stem":2579},"Декоратори та Керування життєвим циклом методів","\u002Fpython\u002Fdecorators-static-class","05.python\u002F06.decorators-static-class",{"title":2581,"path":2582,"stem":2583},"Дескриптори — Магія доступу до атрибутів","\u002Fpython\u002Fdescriptors","05.python\u002F07.descriptors",{"title":2585,"path":2586,"stem":2587},"Метакласи — Динамічне створення класів під капотом CPython","\u002Fpython\u002Fmetaclasses","05.python\u002F08.metaclasses",{"title":2589,"path":2590,"stem":2591},"Dataclasses, NamedTuple та сучасні контейнери Python","\u002Fpython\u002Fmodern-containers","05.python\u002F09.modern-containers",{"title":2593,"path":2594,"stem":2595},"GIL та модель конкурентності CPython — фундамент перед потоками і процесами","\u002Fpython\u002Fgil-concurrency-intro","05.python\u002F11.gil-concurrency-intro",{"title":2597,"path":2598,"stem":2599},"Threading — конкурентність для I\u002FO-bound задач","\u002Fpython\u002Fthreading","05.python\u002F12.threading",{"title":2601,"path":2602,"stem":2603},"Multiprocessing — справжній паралелізм для CPU-bound задач","\u002Fpython\u002Fmultiprocessing","05.python\u002F13.multiprocessing",{"title":2605,"path":2606,"stem":2607},"asyncio — кооперативна конкурентність та event loop","\u002Fpython\u002Fasyncio","05.python\u002F14.asyncio",{"title":2609,"icon":92,"path":2610,"stem":2611,"children":2612,"page":59},"FastAPI","\u002Fpython\u002Ffastapi","05.python\u002Ffastapi",[2613,2617,2621,2625,2629,2633,2637,2641,2645,2649,2653,2657,2661,2665],{"title":2614,"path":2615,"stem":2616},"Глибокий Typing та Pydantic v2 — від анотацій до валідації","\u002Fpython\u002Ffastapi\u002Ftyping-pydantic","05.python\u002Ffastapi\u002F15.typing-pydantic",{"title":2618,"path":2619,"stem":2620},"WSGI, ASGI та Python Web-екосистема","\u002Fpython\u002Ffastapi\u002Fwsgi-asgi-ecosystem","05.python\u002Ffastapi\u002F16.wsgi-asgi-ecosystem",{"title":2622,"path":2623,"stem":2624},"FastAPI: Перший додаток, Uvicorn та OpenAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-intro","05.python\u002Ffastapi\u002F17.fastapi-intro",{"title":2626,"path":2627,"stem":2628},"Маршрутизація, параметри запитів та APIRouter","\u002Fpython\u002Ffastapi\u002Ffastapi-routing-params","05.python\u002Ffastapi\u002F18.fastapi-routing-params",{"title":2630,"path":2631,"stem":2632},"Pydantic v2 у FastAPI — схеми, валідація та серіалізація","\u002Fpython\u002Ffastapi\u002Ffastapi-pydantic-schemas","05.python\u002Ffastapi\u002F19.fastapi-pydantic-schemas",{"title":2634,"path":2635,"stem":2636},"Dependency Injection — серце архітектури FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-dependency-injection","05.python\u002Ffastapi\u002F20.fastapi-dependency-injection",{"title":2638,"path":2639,"stem":2640},"Обробка помилок, Middleware та CORS у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-errors-middleware","05.python\u002Ffastapi\u002F21.fastapi-errors-middleware",{"title":2642,"path":2643,"stem":2644},"SQLAlchemy 2.0 — ORM, Core та Async Engine","\u002Fpython\u002Ffastapi\u002Fsqlalchemy-orm","05.python\u002Ffastapi\u002F22.sqlalchemy-orm",{"title":2646,"path":2647,"stem":2648},"Alembic — міграції бази даних","\u002Fpython\u002Ffastapi\u002Falembic-migrations","05.python\u002Ffastapi\u002F23.alembic-migrations",{"title":2650,"path":2651,"stem":2652},"Repository Pattern та Clean Architecture у FastAPI","\u002Fpython\u002Ffastapi\u002Ffastapi-repository-clean-arch","05.python\u002Ffastapi\u002F24.fastapi-repository-clean-arch",{"title":2654,"path":2655,"stem":2656},"Автентифікація та авторизація — JWT, OAuth2, RBAC","\u002Fpython\u002Ffastapi\u002Ffastapi-auth-security","05.python\u002Ffastapi\u002F25.fastapi-auth-security",{"title":2658,"path":2659,"stem":2660},"Тестування FastAPI — pytest, httpx, fixtures","\u002Fpython\u002Ffastapi\u002Ffastapi-testing","05.python\u002Ffastapi\u002F26.fastapi-testing",{"title":2662,"path":2663,"stem":2664},"Async на повну — Background Tasks, WebSockets, SSE та Celery","\u002Fpython\u002Ffastapi\u002Ffastapi-async-advanced","05.python\u002Ffastapi\u002F27.fastapi-async-advanced",{"title":2666,"path":2667,"stem":2668},"Deployment — Docker, CI\u002FCD, Monitoring","\u002Fpython\u002Ffastapi\u002Ffastapi-deployment","05.python\u002Ffastapi\u002F28.fastapi-deployment",{"title":2670,"path":2671,"stem":2672},"[object Object]","\u002Fpython\u002Foop-plan","05.python\u002Foop-plan",{"title":2674,"icon":2675,"path":2676,"stem":2677,"children":2678,"page":59},"Бази даних","i-lucide-database","\u002Fdatabases","06.databases",[2679,2709,2732,2769,2798,2816,2850,2862,2871],{"title":2680,"icon":2681,"path":2682,"stem":2683,"children":2684,"page":59},"Intro","i-lucide-play","\u002Fdatabases\u002Fintro","06.databases\u002F01.intro",[2685,2689,2693,2697,2701,2705],{"title":2686,"path":2687,"stem":2688},"Введення в теорію баз даних","\u002Fdatabases\u002Fintro\u002Fintroduction-to-databases","06.databases\u002F01.intro\u002F01.introduction-to-databases",{"title":2690,"path":2691,"stem":2692},"Реляційна модель даних","\u002Fdatabases\u002Fintro\u002Frelational-model-theory","06.databases\u002F01.intro\u002F02.relational-model-theory",{"title":2694,"path":2695,"stem":2696},"ER-моделювання","\u002Fdatabases\u002Fintro\u002Fer-modeling","06.databases\u002F01.intro\u002F03.er-modeling",{"title":2698,"path":2699,"stem":2700},"Логічне проектування БД","\u002Fdatabases\u002Fintro\u002Flogical-schema","06.databases\u002F01.intro\u002F04.logical-schema",{"title":2702,"path":2703,"stem":2704},"Класифікація таблиць","\u002Fdatabases\u002Fintro\u002Ftable-classification","06.databases\u002F01.intro\u002F05.table-classification",{"title":2706,"path":2707,"stem":2708},"PlantUML для баз даних","\u002Fdatabases\u002Fintro\u002Fplantuml-diagrams","06.databases\u002F01.intro\u002F06.plantuml-diagrams",{"title":2710,"icon":2675,"path":2711,"stem":2712,"children":2713,"page":59},"MS SQL Server Start","\u002Fdatabases\u002Fms-sql-server-start","06.databases\u002F02.ms-sql-server-start",[2714,2718,2724,2728],{"title":2715,"path":2716,"stem":2717},"Типи даних у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fdata-types","06.databases\u002F02.ms-sql-server-start\u002F01.data-types",{"title":2719,"path":2720,"stem":2721,"children":2722},"Індекси у MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-indexes","06.databases\u002F02.ms-sql-server-start\u002F02.sql-indexes",[2723],{"title":2719,"path":2720,"stem":2721},{"title":2725,"path":2726,"stem":2727},"Системні бази даних MS SQL Server","\u002Fdatabases\u002Fms-sql-server-start\u002Fsystem-databases","06.databases\u002F02.ms-sql-server-start\u002F03.system-databases",{"title":2729,"path":2730,"stem":2731},"Огляд мови SQL та запитів","\u002Fdatabases\u002Fms-sql-server-start\u002Fsql-queries-overview","06.databases\u002F02.ms-sql-server-start\u002F04.sql-queries-overview",{"title":2733,"icon":2675,"path":2734,"stem":2735,"children":2736,"page":59},"SQL","\u002Fdatabases\u002Fsql","06.databases\u002F03.sql",[2737,2741,2745,2749,2753,2757,2761,2765],{"title":2738,"path":2739,"stem":2740},"Налаштування демонстраційної бази даних","\u002Fdatabases\u002Fsql\u002Fsample-database-setup","06.databases\u002F03.sql\u002F00.sample-database-setup",{"title":2742,"path":2743,"stem":2744},"DDL - Створення таблиць (CREATE TABLE)","\u002Fdatabases\u002Fsql\u002Fddl-create-table","06.databases\u002F03.sql\u002F01.ddl-create-table",{"title":2746,"path":2747,"stem":2748},"DDL - Зміна та видалення таблиць (ALTER, DROP)","\u002Fdatabases\u002Fsql\u002Fddl-alter-drop-table","06.databases\u002F03.sql\u002F02.ddl-alter-drop-table",{"title":2750,"path":2751,"stem":2752},"SELECT запити - Основи","\u002Fdatabases\u002Fsql\u002Fselect-queries-fundamentals","06.databases\u002F03.sql\u002F03.select-queries-fundamentals",{"title":2754,"path":2755,"stem":2756},"SELECT запити - Розширені можливості","\u002Fdatabases\u002Fsql\u002Fselect-queries-advanced","06.databases\u002F03.sql\u002F04.select-queries-advanced",{"title":2758,"path":2759,"stem":2760},"INSERT запити - Додавання даних","\u002Fdatabases\u002Fsql\u002Finsert-queries","06.databases\u002F03.sql\u002F05.insert-queries",{"title":2762,"path":2763,"stem":2764},"UPDATE та DELETE запити","\u002Fdatabases\u002Fsql\u002Fupdate-delete-queries","06.databases\u002F03.sql\u002F06.update-delete-queries",{"title":2766,"path":2767,"stem":2768},"Транзакції в SQL","\u002Fdatabases\u002Fsql\u002Ftransactions","06.databases\u002F03.sql\u002F07.transactions",{"title":2770,"icon":2675,"path":2771,"stem":2772,"children":2773,"page":59},"Multi Table Databases","\u002Fdatabases\u002Fmulti-table-databases","06.databases\u002F04.multi-table-databases",[2774,2778,2782,2786,2790,2794],{"title":2775,"path":2776,"stem":2777},"Зв'язки та нормалізація БД","\u002Fdatabases\u002Fmulti-table-databases\u002Frelationships-and-normalization","06.databases\u002F04.multi-table-databases\u002F00.relationships-and-normalization",{"title":2779,"path":2780,"stem":2781},"INNER JOIN - З'єднання таблиць","\u002Fdatabases\u002Fmulti-table-databases\u002Finner-join","06.databases\u002F04.multi-table-databases\u002F01.inner-join",{"title":2783,"path":2784,"stem":2785},"OUTER JOINs - LEFT, RIGHT, FULL","\u002Fdatabases\u002Fmulti-table-databases\u002Fouter-joins","06.databases\u002F04.multi-table-databases\u002F02.outer-joins",{"title":2787,"path":2788,"stem":2789},"CROSS та SELF JOINs","\u002Fdatabases\u002Fmulti-table-databases\u002Fcross-self-joins","06.databases\u002F04.multi-table-databases\u002F03.cross-self-joins",{"title":2791,"path":2792,"stem":2793},"Підзапити (Subqueries)","\u002Fdatabases\u002Fmulti-table-databases\u002Fsubqueries","06.databases\u002F04.multi-table-databases\u002F04.subqueries",{"title":2795,"path":2796,"stem":2797},"Агрегації з JOIN","\u002Fdatabases\u002Fmulti-table-databases\u002Faggregations-with-joins","06.databases\u002F04.multi-table-databases\u002F05.aggregations-with-joins",{"title":2799,"icon":2800,"path":2801,"stem":2802,"children":2803,"page":59},"Aggregate Functions","i-lucide-calculator","\u002Fdatabases\u002Faggregate-functions","06.databases\u002F05.aggregate-functions",[2804,2808,2812],{"title":2805,"path":2806,"stem":2807},"Функції агрегування в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fintroduction-aggregate-functions","06.databases\u002F05.aggregate-functions\u002F01.introduction-aggregate-functions",{"title":2809,"path":2810,"stem":2811},"Групування даних в MS SQL Server","\u002Fdatabases\u002Faggregate-functions\u002Fgrouping-data","06.databases\u002F05.aggregate-functions\u002F02.grouping-data",{"title":2813,"path":2814,"stem":2815},"Підзапити з агрегатними функціями","\u002Fdatabases\u002Faggregate-functions\u002Fsubqueries-aggregates","06.databases\u002F05.aggregate-functions\u002F03.subqueries-aggregates",{"title":2817,"icon":2818,"path":2819,"stem":2820,"children":2821,"page":59},"Тригери та зберігаємі процедури","i-lucide-database-zap","\u002Fdatabases\u002Ftriggers-stored-procedures","06.databases\u002F07.triggers-stored-procedures",[2822,2826,2830,2834,2838,2842,2846],{"title":2823,"path":2824,"stem":2825},"DML-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fdml-triggers","06.databases\u002F07.triggers-stored-procedures\u002F01.dml-triggers",{"title":2827,"path":2828,"stem":2829},"DDL-тригери","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fddl-triggers","06.databases\u002F07.triggers-stored-procedures\u002F02.ddl-triggers",{"title":2831,"path":2832,"stem":2833},"Transact-SQL розширення","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransact-sql-extensions","06.databases\u002F07.triggers-stored-procedures\u002F03.transact-sql-extensions",{"title":2835,"path":2836,"stem":2837},"Транзакції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Ftransactions","06.databases\u002F07.triggers-stored-procedures\u002F04.transactions",{"title":2839,"path":2840,"stem":2841},"Зберігаємі процедури","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fstored-procedures","06.databases\u002F07.triggers-stored-procedures\u002F05.stored-procedures",{"title":2843,"path":2844,"stem":2845},"Користувацькі функції","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fuser-defined-functions","06.databases\u002F07.triggers-stored-procedures\u002F06.user-defined-functions",{"title":2847,"path":2848,"stem":2849},"Безпека баз даних","\u002Fdatabases\u002Ftriggers-stored-procedures\u002Fsecurity","06.databases\u002F07.triggers-stored-procedures\u002F08.security",{"title":2847,"icon":793,"path":2851,"stem":2852,"children":2853,"page":59},"\u002Fdatabases\u002Fsecurity","06.databases\u002F08.security",[2854,2858],{"title":2855,"path":2856,"stem":2857},"Вступ до безпеки баз даних","\u002Fdatabases\u002Fsecurity\u002Fintroduction","06.databases\u002F08.security\u002F01.introduction",{"title":2859,"path":2860,"stem":2861},"Системні представлення та метадані","\u002Fdatabases\u002Fsecurity\u002Fsystem-views","06.databases\u002F08.security\u002F02.system-views",{"title":2863,"icon":2864,"path":2865,"stem":2866,"children":2867,"page":59},"Резервне копіювання та відновлення","i-lucide-database-backup","\u002Fdatabases\u002Fbackup-recovery","06.databases\u002F09.backup-recovery",[2868],{"title":2863,"path":2869,"stem":2870},"\u002Fdatabases\u002Fbackup-recovery\u002Fbackup-restore","06.databases\u002F09.backup-recovery\u002F01.backup-restore",{"title":2872,"icon":2873,"path":2874,"stem":2875,"children":2876,"page":59},"Повнотекстовий пошук","i-lucide-search","\u002Fdatabases\u002Ffull-text-search","06.databases\u002F10.full-text-search",[2877],{"title":2872,"path":2878,"stem":2879},"\u002Fdatabases\u002Ffull-text-search\u002Ffull-text-search","06.databases\u002F10.full-text-search\u002F01.full-text-search",{"title":2881,"icon":2882,"path":2883,"stem":2884,"children":2885,"page":59},"Tools","i-lucide-wrench","\u002Ftools","07.tools",[2886,2962],{"title":2887,"icon":2888,"path":2889,"stem":2890,"children":2891},"Docker","i-simple-icons-docker","\u002Ftools\u002Fdocker","07.tools\u002F01.docker\u002Findex",[2892,2894,2898,2902,2906,2910,2914,2918,2922,2926,2930,2934,2938,2942,2946,2950,2954,2958],{"title":2893,"path":2889,"stem":2890},"Docker: від нуля до production",{"title":2895,"path":2896,"stem":2897},"Контейнеризація — від проблеми до рішення","\u002Ftools\u002Fdocker\u002Fcontainerization-concept","07.tools\u002F01.docker\u002F01.containerization-concept",{"title":2899,"path":2900,"stem":2901},"Docker — що це і навіщо?","\u002Ftools\u002Fdocker\u002Fdocker-what-and-why","07.tools\u002F01.docker\u002F02.docker-what-and-why",{"title":2903,"path":2904,"stem":2905},"Архітектура Docker Engine","\u002Ftools\u002Fdocker\u002Fdocker-architecture","07.tools\u002F01.docker\u002F03.docker-architecture",{"title":2907,"path":2908,"stem":2909},"Встановлення Docker","\u002Ftools\u002Fdocker\u002Finstallation","07.tools\u002F01.docker\u002F04.installation",{"title":2911,"path":2912,"stem":2913},"Перший контейнер — docker run","\u002Ftools\u002Fdocker\u002Ffirst-container","07.tools\u002F01.docker\u002F05.first-container",{"title":2915,"path":2916,"stem":2917},"Життєвий цикл контейнера","\u002Ftools\u002Fdocker\u002Fcontainer-lifecycle","07.tools\u002F01.docker\u002F06.container-lifecycle",{"title":2919,"path":2920,"stem":2921},"Docker Images — фундаментальні концепції","\u002Ftools\u002Fdocker\u002Fdocker-images-fundamentals","07.tools\u002F01.docker\u002F07.docker-images-fundamentals",{"title":2923,"path":2924,"stem":2925},"Dockerfile — основи","\u002Ftools\u002Fdocker\u002Fdockerfile-basics","07.tools\u002F01.docker\u002F08.dockerfile-basics",{"title":2927,"path":2928,"stem":2929},"Dockerfile — просунуті техніки","\u002Ftools\u002Fdocker\u002Fdockerfile-advanced","07.tools\u002F01.docker\u002F09.dockerfile-advanced",{"title":2931,"path":2932,"stem":2933},"Build Context та кешування шарів","\u002Ftools\u002Fdocker\u002Fbuild-context-and-cache","07.tools\u002F01.docker\u002F10.build-context-and-cache",{"title":2935,"path":2936,"stem":2937},"Реєстри Docker-образів","\u002Ftools\u002Fdocker\u002Fimage-registries","07.tools\u002F01.docker\u002F11.image-registries",{"title":2939,"path":2940,"stem":2941},"Контейнеризація .NET додатків","\u002Ftools\u002Fdocker\u002Fdotnet-containerization","07.tools\u002F01.docker\u002F12.dotnet-containerization",{"title":2943,"path":2944,"stem":2945},"Томи та збереження даних","\u002Ftools\u002Fdocker\u002Fvolumes-and-data","07.tools\u002F01.docker\u002F13.volumes-and-data",{"title":2947,"path":2948,"stem":2949},"Основи мережі в Docker","\u002Ftools\u002Fdocker\u002Fnetworking-basics","07.tools\u002F01.docker\u002F14.networking-basics",{"title":2951,"path":2952,"stem":2953},"Змінні оточення та конфігурація","\u002Ftools\u002Fdocker\u002Fenvironment-and-configuration","07.tools\u002F01.docker\u002F15.environment-and-configuration",{"title":2955,"path":2956,"stem":2957},"Docker Compose — оркестрація контейнерів","\u002Ftools\u002Fdocker\u002Fdocker-compose-basics","07.tools\u002F01.docker\u002F16.docker-compose-basics",{"title":2959,"path":2960,"stem":2961},"Docker Compose — Multi-Service застосунки","\u002Ftools\u002Fdocker\u002Fcompose-multi-service","07.tools\u002F01.docker\u002F17.compose-multi-service",{"title":2963,"icon":2964,"path":2965,"stem":2966,"children":2967},"Kubernetes","simple-icons:kubernetes","\u002Ftools\u002Fkubernetes","07.tools\u002F02.kubernetes\u002Findex",[2968,2970,2974,2978,2982,2986,2990,2994,2998],{"title":2969,"path":2965,"stem":2966},"Kubernetes: від розробки до production",{"title":2971,"path":2972,"stem":2973},"Kubernetes — коли Docker Compose більше не вистачає","\u002Ftools\u002Fkubernetes\u002Fwhy-kubernetes","07.tools\u002F02.kubernetes\u002F01.why-kubernetes",{"title":2975,"path":2976,"stem":2977},"Архітектура Kubernetes — анатомія кластера","\u002Ftools\u002Fkubernetes\u002Fkubernetes-architecture","07.tools\u002F02.kubernetes\u002F02.kubernetes-architecture",{"title":2979,"path":2980,"stem":2981},"Локальне середовище — minikube, kind та k3s","\u002Ftools\u002Fkubernetes\u002Flocal-environment","07.tools\u002F02.kubernetes\u002F03.local-environment",{"title":2983,"path":2984,"stem":2985},"Pod — атомарна одиниця Kubernetes","\u002Ftools\u002Fkubernetes\u002Fpods-and-containers","07.tools\u002F02.kubernetes\u002F04.pods-and-containers",{"title":2987,"path":2988,"stem":2989},"Патерни використання Pod","\u002Ftools\u002Fkubernetes\u002Fpod-patterns","07.tools\u002F02.kubernetes\u002F05.pod-patterns",{"title":2991,"path":2992,"stem":2993},"Deployment — декларативне управління Pod","\u002Ftools\u002Fkubernetes\u002Fdeployment-basics","07.tools\u002F02.kubernetes\u002F06.deployment-basics",{"title":2995,"path":2996,"stem":2997},"Rolling Updates та управління життєвим циклом Deployment","\u002Ftools\u002Fkubernetes\u002Fdeployment-rolling-updates","07.tools\u002F02.kubernetes\u002F07.deployment-rolling-updates",{"title":2999,"path":3000,"stem":3001},"Service — мережева абстракція для Pod","\u002Ftools\u002Fkubernetes\u002Fservices-networking","07.tools\u002F02.kubernetes\u002F08.services-networking",{"title":3003,"icon":3004,"path":3005,"stem":3006,"children":3007,"page":59},"Software Engineering","i-lucide-code-2","\u002Fsoftware-engineering","09.software-engineering",[3008,3012,3016,3020,3024,3028,3032,3036,3040,3044,3048],{"title":3009,"path":3010,"stem":3011},"1. Аналіз предметної області. Експертні знання та складність","\u002Fsoftware-engineering\u002Fintro-subdomains","09.software-engineering\u002F01.intro-subdomains",{"title":3013,"path":3014,"stem":3015},"2. Обмежені контексти. Інтеграція обмежених контекстів","\u002Fsoftware-engineering\u002Fintegrating-limited-contexts","09.software-engineering\u002F02.integrating-limited-contexts",{"title":3017,"path":3018,"stem":3019},"3. Реалізація простої бізнес-логіки","\u002Fsoftware-engineering\u002Fsimple","09.software-engineering\u002F03.simple",{"title":3021,"path":3022,"stem":3023},"4. Опрацювання складної бізнес-логіки","\u002Fsoftware-engineering\u002Fcomplex-business-logic","09.software-engineering\u002F04.complex-business-logic",{"title":3025,"path":3026,"stem":3027},"5. Моделювання фактора часу. Подієво-орієнтована архітектура.","\u002Fsoftware-engineering\u002Fmodelling-the-time-factor","09.software-engineering\u002F05.modelling-the-time-factor",{"title":3029,"path":3030,"stem":3031},"6. Архітектурні патерни","\u002Fsoftware-engineering\u002Farchitectural-patterns","09.software-engineering\u002F06.architectural-patterns",{"title":3033,"path":3034,"stem":3035},"Паттерни взаємодії","\u002Fsoftware-engineering\u002Fpatterns-of-interaction","09.software-engineering\u002F07.patterns-of-interaction",{"title":3037,"path":3038,"stem":3039},"Евристика проєктування","\u002Fsoftware-engineering\u002Fdesign-heuristics","09.software-engineering\u002F08.design-heuristics",{"title":3041,"path":3042,"stem":3043},"Еволюція проєктних рішень","\u002Fsoftware-engineering\u002Fevolution-of-design-solutions","09.software-engineering\u002F09.evolution-of-design-solutions",{"title":3045,"path":3046,"stem":3047},"EventStorming","\u002Fsoftware-engineering\u002Feventstorming","09.software-engineering\u002F10.eventstorming",{"title":3049,"path":3050,"stem":3051},"DDD на практиці","\u002Fsoftware-engineering\u002Fddd-in-practice","09.software-engineering\u002F11.ddd-in-practice",{"title":3053,"icon":943,"path":3054,"stem":3055,"children":3056,"page":59},"DDD","\u002Fddd","10.ddd",[3057,3061,3065,3069,3073,3077,3081,3085,3089,3093,3097,3101,3105],{"title":3058,"path":3059,"stem":3060},"Аналіз предметної області","\u002Fddd\u002Fdomain-analysis","10.ddd\u002F01.domain-analysis",{"title":3062,"path":3063,"stem":3064},"Експертні знання про предметну область","\u002Fddd\u002Fdomain-expert-knowledge","10.ddd\u002F02.domain-expert-knowledge",{"title":3066,"path":3067,"stem":3068},"Як осмислити складність предметної області","\u002Fddd\u002Fmanaging-domain-complexity","10.ddd\u002F03.managing-domain-complexity",{"title":3070,"path":3071,"stem":3072},"Інтеграція обмежених контекстів","\u002Fddd\u002Fbounded-context-integration","10.ddd\u002F04.bounded-context-integration",{"title":3074,"path":3075,"stem":3076},"Реалізація простої бізнес-логіки","\u002Fddd\u002Fsimple-business-logic","10.ddd\u002F05.simple-business-logic",{"title":3078,"path":3079,"stem":3080},"Обробка складної бізнес-логіки","\u002Fddd\u002Fcomplex-business-logic","10.ddd\u002F06.complex-business-logic",{"title":3082,"path":3083,"stem":3084},"Моделювання фактора часу","\u002Fddd\u002Ftime-modeling","10.ddd\u002F07.time-modeling",{"title":3086,"path":3087,"stem":3088},"Глава 8. Архітектурні Патерни","\u002Fddd\u002Farchitectural-patterns","10.ddd\u002F08.architectural-patterns",{"title":3090,"path":3091,"stem":3092},"Глава 9. Патерни Взаємодії","\u002Fddd\u002Finteraction-patterns","10.ddd\u002F09.interaction-patterns",{"title":3094,"path":3095,"stem":3096},"Глава 10. Проектні Евристики","\u002Fddd\u002Fdesign-heuristics","10.ddd\u002F10.design-heuristics",{"title":3098,"path":3099,"stem":3100},"Глава 11. Еволюція Проектних Рішень","\u002Fddd\u002Fevolution-of-design-decisions","10.ddd\u002F11.evolution-of-design-decisions",{"title":3102,"path":3103,"stem":3104},"Глава 12. EventStorming","\u002Fddd\u002Fevent-storming","10.ddd\u002F12.event-storming",{"title":3106,"path":3107,"stem":3108},"Глава 13. DDD на Практиці","\u002Fddd\u002Fddd-in-practice","10.ddd\u002F13.ddd-in-practice",{"title":3110,"icon":3111,"path":3112,"stem":3113,"children":3114,"page":59},"Media Streaming","i-lucide-video","\u002Fmedia-streaming","11.media-streaming",[3115,3119,3123,3127,3131,3135,3139],{"title":3116,"path":3117,"stem":3118},"01. Магія Стрімінгу: Що відбувається, коли ви натискаєте \"Play\"","\u002Fmedia-streaming\u002Fintroduction","11.media-streaming\u002F01.introduction",{"title":3120,"path":3121,"stem":3122},"02. Анатомія Медіа: Кодеки, Контейнери та Стиснення","\u002Fmedia-streaming\u002Faudio-video-anatomy","11.media-streaming\u002F02.audio-video-anatomy",{"title":3124,"path":3125,"stem":3126},"03. The Gym: FFmpeg Deep Dive","\u002Fmedia-streaming\u002Fffmpeg-gym","11.media-streaming\u002F03.ffmpeg-gym",{"title":3128,"path":3129,"stem":3130},"04. HLS Protocol: HTTP Live Streaming у Деталях","\u002Fmedia-streaming\u002Fhls-protocol","11.media-streaming\u002F04.hls-protocol",{"title":3132,"path":3133,"stem":3134},"05. DASH Protocol: Відкритий Стандарт","\u002Fmedia-streaming\u002Fdash-protocol","11.media-streaming\u002F05.dash-protocol",{"title":3136,"path":3137,"stem":3138},"06. Масштабування: CDN та Adaptive Bitrate","\u002Fmedia-streaming\u002Fcdn-and-adaptive-bitrate","11.media-streaming\u002F06.cdn-and-adaptive-bitrate",{"title":3140,"path":3141,"stem":3142},"07. Війна із Затримкою (Latency)","\u002Fmedia-streaming\u002Frealtime-latency","11.media-streaming\u002F07.realtime-latency",{"title":3144,"icon":3145,"path":3146,"stem":3147,"children":3148,"page":59},"HTML & CSS","i-devicon-html5","\u002Fhtml-css","12.html-css",[3149,3153,3157,3161,3165,3169,3173,3177,3181,3185,3189,3193,3197,3201,3205,3209,3213,3217,3221,3225,3229,3233,3237,3241,3245,3249,3253,3257,3261,3265],{"title":3150,"path":3151,"stem":3152},"Вступ до HTML. Структура документа","\u002Fhtml-css\u002Fintro-html-structure","12.html-css\u002F01.intro-html-structure",{"title":3154,"path":3155,"stem":3156},"Форматування тексту в HTML","\u002Fhtml-css\u002Fhtml-text-formatting","12.html-css\u002F02.html-text-formatting",{"title":3158,"path":3159,"stem":3160},"Посилання та зображення в HTML","\u002Fhtml-css\u002Fhtml-links-images","12.html-css\u002F03.html-links-images",{"title":3162,"path":3163,"stem":3164},"Списки та таблиці в HTML","\u002Fhtml-css\u002Fhtml-lists-tables","12.html-css\u002F04.html-lists-tables",{"title":3166,"path":3167,"stem":3168},"Форми в HTML","\u002Fhtml-css\u002Fhtml-forms","12.html-css\u002F05.html-forms",{"title":3170,"path":3171,"stem":3172},"Семантичні елементи HTML5","\u002Fhtml-css\u002Fhtml-semantic-elements","12.html-css\u002F06.html-semantic-elements",{"title":3174,"path":3175,"stem":3176},"Мультимедіа та розширені елементи HTML","\u002Fhtml-css\u002Fhtml-multimedia-advanced","12.html-css\u002F07.html-multimedia-advanced",{"title":3178,"path":3179,"stem":3180},"Мікророзмітка та SEO в HTML","\u002Fhtml-css\u002Fhtml-microdata-seo","12.html-css\u002F08.html-microdata-seo",{"title":3182,"path":3183,"stem":3184},"Вступ до CSS. Селектори та специфічність","\u002Fhtml-css\u002Fcss-intro-selectors","12.html-css\u002F09.css-intro-selectors",{"title":3186,"path":3187,"stem":3188},"Блокова модель CSS. Відступи. Box Sizing","\u002Fhtml-css\u002Fcss-box-model","12.html-css\u002F10.css-box-model",{"title":3190,"path":3191,"stem":3192},"Розміри у CSS: повний довідник одиниць і ключових слів","\u002Fhtml-css\u002F10a.css-sizing","12.html-css\u002F10a.css-sizing",{"title":3194,"path":3195,"stem":3196},"Типографіка в CSS. Шрифти та текст","\u002Fhtml-css\u002Fcss-typography","12.html-css\u002F11.css-typography",{"title":3198,"path":3199,"stem":3200},"Кольори та фони в CSS","\u002Fhtml-css\u002Fcss-colors-backgrounds","12.html-css\u002F12.css-colors-backgrounds",{"title":3202,"path":3203,"stem":3204},"Тіні та фільтри в CSS","\u002Fhtml-css\u002F12b.css-shadows-filters","12.html-css\u002F12b.css-shadows-filters",{"title":3206,"path":3207,"stem":3208},"CSS Flexbox: Фундамент гнучких макетів","\u002Fhtml-css\u002Fcss-flexbox-fundamentals","12.html-css\u002F13.css-flexbox-fundamentals",{"title":3210,"path":3211,"stem":3212},"CSS Flexbox: Вирівнювання та Позиціонування","\u002Fhtml-css\u002Fcss-flexbox-alignment-sizing-and-patterns","12.html-css\u002F14.css-flexbox-alignment-sizing-and-patterns",{"title":3214,"path":3215,"stem":3216},"CSS Grid. Двовимірний макет. Частина 1","\u002Fhtml-css\u002Fcss-layout-grid","12.html-css\u002F15.css-layout-grid",{"title":3218,"path":3219,"stem":3220},"CSS Grid. Двовимірний макет. Частина 2","\u002Fhtml-css\u002Fcss-layout-grid-advanced","12.html-css\u002F16.css-layout-grid-advanced",{"title":3222,"path":3223,"stem":3224},"Позиціонування в CSS. Z-index. Stacking Context","\u002Fhtml-css\u002Fcss-positioning","12.html-css\u002F17.css-positioning",{"title":3226,"path":3227,"stem":3228},"CSS Анімації та Переходи","\u002Fhtml-css\u002Fcss-animations-transitions","12.html-css\u002F18.css-animations-transitions",{"title":3230,"path":3231,"stem":3232},"Адаптивний дизайн. Media Queries. Частина 1","\u002Fhtml-css\u002Fcss-responsive-media-queries","12.html-css\u002F19.css-responsive-media-queries",{"title":3234,"path":3235,"stem":3236},"Адаптивний дизайн. Частина 2: clamp(), Container Queries, @layer","\u002Fhtml-css\u002Fcss-responsive-advanced","12.html-css\u002F20.css-responsive-advanced",{"title":3238,"path":3239,"stem":3240},"CSS Custom Properties. Методології. Сучасний CSS","\u002Fhtml-css\u002Fcss-variables-methodologies","12.html-css\u002F21.css-variables-methodologies",{"title":3242,"path":3243,"stem":3244},"Сучасний CSS 2023–2025: Нові можливості","\u002Fhtml-css\u002Fcss-modern-features","12.html-css\u002F22.css-modern-features",{"title":3246,"path":3247,"stem":3248},"CSS Nesting, @layer, @scope та @property: нативний препроцесор","\u002Fhtml-css\u002F22a.css-nesting-modern-syntax","12.html-css\u002F22a.css-nesting-modern-syntax",{"title":3250,"path":3251,"stem":3252},"CSS для форм та інтерактивних станів","\u002Fhtml-css\u002Fcss-forms-interactive-states","12.html-css\u002F23.css-forms-interactive-states",{"title":3254,"path":3255,"stem":3256},"Доступність у CSS (CSS Accessibility)","\u002Fhtml-css\u002Fcss-accessibility","12.html-css\u002F24.css-accessibility",{"title":3258,"path":3259,"stem":3260},"CSS-функції та сучасні sizing primitives","\u002Fhtml-css\u002Fcss-functions-sizing","12.html-css\u002F25.css-functions-sizing",{"title":3262,"path":3263,"stem":3264},"Rendering Pipeline і CSS Performance","\u002Fhtml-css\u002Fcss-rendering-performance","12.html-css\u002F26.css-rendering-performance",{"title":3266,"path":3267,"stem":3268},"CSS Best Practices: типові ситуації та правильні рішення","\u002Fhtml-css\u002Fcss-best-practices","12.html-css\u002F27.css-best-practices",{"title":3270,"path":3271,"stem":3272,"children":3273,"page":59},"AWS","\u002Faws","13.aws",[3274,3278,3282,3286,3290,3294,3298,3302,3306,3310,3314,3318,3322,3326,3330,3334,3338,3342],{"title":3275,"path":3276,"stem":3277},"Реєстрація AWS акаунту та студентські програми","\u002Faws\u002Faccount-registration","13.aws\u002F00.account-registration",{"title":3279,"path":3280,"stem":3281},"Вступ до хмарних обчислень та AWS","\u002Faws\u002Fintroduction-to-cloud","13.aws\u002F01.introduction-to-cloud",{"title":3283,"path":3284,"stem":3285},"AWS IAM — Identity and Access Management","\u002Faws\u002Fiam","13.aws\u002F02.iam",{"title":3287,"path":3288,"stem":3289},"AWS IAM CLI — Довідник команд","\u002Faws\u002F02a.iam-doc","13.aws\u002F02a.iam-doc",{"title":3291,"path":3292,"stem":3293},"Docker та контейнеризація в AWS — ECR, ECS та Fargate","\u002Faws\u002Fdocker-ecs","13.aws\u002F03.docker-ecs",{"title":3295,"path":3296,"stem":3297},"AWS ECR \u002F ECS CLI — Довідник команд","\u002Faws\u002F03a.docker-ecs-doc","13.aws\u002F03a.docker-ecs-doc",{"title":3299,"path":3300,"stem":3301},"Amazon EC2 — Elastic Compute Cloud","\u002Faws\u002Fec2","13.aws\u002F04.ec2",{"title":3303,"path":3304,"stem":3305},"AWS EC2 CLI — Довідник команд","\u002Faws\u002F04a.ec2-doc","13.aws\u002F04a.ec2-doc",{"title":3307,"path":3308,"stem":3309},"Elastic Load Balancing та Auto Scaling","\u002Faws\u002Falb-asg","13.aws\u002F05.alb-asg",{"title":3311,"path":3312,"stem":3313},"Amazon S3 — Simple Storage Service","\u002Faws\u002Fs3","13.aws\u002F06.s3",{"title":3315,"path":3316,"stem":3317},"Amazon CloudFront — Content Delivery Network","\u002Faws\u002Fcloudfront","13.aws\u002F07.cloudfront",{"title":3319,"path":3320,"stem":3321},"Amazon RDS — Relational Database Service","\u002Faws\u002Frds","13.aws\u002F08.rds",{"title":3323,"path":3324,"stem":3325},"Amazon DynamoDB — NoSQL Database","\u002Faws\u002Fdynamodb","13.aws\u002F09.dynamodb",{"title":3327,"path":3328,"stem":3329},"AWS Lambda та Serverless Compute","\u002Faws\u002Flambda","13.aws\u002F10.lambda",{"title":3331,"path":3332,"stem":3333},"Amazon Bedrock - Foundation Models, RAG та Agents","\u002Faws\u002Fbedrock","13.aws\u002F22.bedrock",{"title":3335,"path":3336,"stem":3337},"Amazon Rekognition - Комп'ютерний зір","\u002Faws\u002Frekognition","13.aws\u002F23.rekognition",{"title":3339,"path":3340,"stem":3341},"Amazon Textract - Інтелектуальний аналіз документів","\u002Faws\u002Ftextract","13.aws\u002F24.textract",{"title":3343,"path":3344,"stem":3345},"Amazon Polly, Transcribe, Comprehend та Translate","\u002Faws\u002Faudio-nlp-services","13.aws\u002F25.audio-nlp-services",{"title":3347,"path":3348,"stem":3349,"children":3350,"page":59},"Ai Development","\u002Fai-development","14.ai-development",[3351],{"title":3352,"path":3353,"stem":3354,"children":3355,"page":59},"Foundations","\u002Fai-development\u002Ffoundations","14.ai-development\u002F00.foundations",[3356],{"title":3357,"path":3358,"stem":3359},"Модуль 0.1. Що таке Large Language Model (LLM)","\u002Fai-development\u002Ffoundations\u002Fwhat-is-llm","14.ai-development\u002F00.foundations\u002F01.what-is-llm",{"title":3361,"path":3362,"stem":3363,"children":3364,"page":59},"React Native","\u002Freact-native","15.react-native",[3365,3386],{"title":3366,"path":3367,"stem":3368,"children":3369,"page":59},"Version1","\u002Freact-native\u002Fversion1","15.react-native\u002Fversion1",[3370,3374,3378,3382],{"title":3371,"path":3372,"stem":3373},"Що таке React Native","\u002Freact-native\u002Fversion1\u002Fwhat-is-react-native","15.react-native\u002Fversion1\u002F01.what-is-react-native",{"title":3375,"path":3376,"stem":3377},"Як влаштований React Native «під капотом»","\u002Freact-native\u002Fversion1\u002Freact-native-architecture","15.react-native\u002Fversion1\u002F02.react-native-architecture",{"title":3379,"path":3380,"stem":3381},"Від React до React Native: ключові відмінності","\u002Freact-native\u002Fversion1\u002Freact-native-vs-react","15.react-native\u002Fversion1\u002F03.react-native-vs-react",{"title":3383,"path":3384,"stem":3385},"View та Text — фундаментальні будівельні блоки","\u002Freact-native\u002Fversion1\u002Fview-and-text","15.react-native\u002Fversion1\u002F04.view-and-text",{"title":3387,"path":3388,"stem":3389,"children":3390,"page":59},"Version2","\u002Freact-native\u002Fversion2","15.react-native\u002Fversion2",[3391,3395,3399,3403,3407,3411,3415,3419,3423,3427,3431,3435,3439,3443,3447,3451,3455,3459,3463,3467,3471,3475,3479,3483,3487,3491],{"title":3392,"path":3393,"stem":3394},"React Native — навіщо він потрібен","\u002Freact-native\u002Fversion2\u002Fwhy-react-native","15.react-native\u002Fversion2\u002F01.why-react-native",{"title":3396,"path":3397,"stem":3398},"Налаштування середовища розробки","\u002Freact-native\u002Fversion2\u002Fenvironment-setup","15.react-native\u002Fversion2\u002F02.environment-setup",{"title":3400,"path":3401,"stem":3402},"Expo і класичний React Native — два шляхи одного фреймворку","\u002Freact-native\u002Fversion2\u002Fexpo-vs-cli-landscape","15.react-native\u002Fversion2\u002F03.expo-vs-cli-landscape",{"title":3404,"path":3405,"stem":3406},"Середовище Expo — перший запуск","\u002Freact-native\u002Fversion2\u002Fexpo-setup-and-tooling","15.react-native\u002Fversion2\u002F04.expo-setup-and-tooling",{"title":3408,"path":3409,"stem":3410},"Структура проєкту та перші UI-примітиви","\u002Freact-native\u002Fversion2\u002Fproject-structure-and-conventions","15.react-native\u002Fversion2\u002F05.project-structure-and-conventions",{"title":3412,"path":3413,"stem":3414},"Базові компоненти React Native","\u002Freact-native\u002Fversion2\u002Fcore-components","15.react-native\u002Fversion2\u002F06.core-components",{"title":3416,"path":3417,"stem":3418},"Flexbox і layout у React Native","\u002Freact-native\u002Fversion2\u002Fflexbox-and-layout","15.react-native\u002Fversion2\u002F07.flexbox-and-layout",{"title":3420,"path":3421,"stem":3422},"StyleSheet і теми (light \u002F dark)","\u002Freact-native\u002Fversion2\u002Fstylesheet-and-theming","15.react-native\u002Fversion2\u002F08.stylesheet-and-theming",{"title":3424,"path":3425,"stem":3426},"Списки та віртуалізація","\u002Freact-native\u002Fversion2\u002Flists-and-virtualization","15.react-native\u002Fversion2\u002F09.lists-and-virtualization",{"title":3428,"path":3429,"stem":3430},"Форми, ввід і валідація","\u002Freact-native\u002Fversion2\u002Fforms-input-validation","15.react-native\u002Fversion2\u002F10.forms-input-validation",{"title":3432,"path":3433,"stem":3434},"Основи Expo Router","\u002Freact-native\u002Fversion2\u002Fexpo-router-basics","15.react-native\u002Fversion2\u002F11.expo-router-basics",{"title":3436,"path":3437,"stem":3438},"Вкладені навігатори та модалки","\u002Freact-native\u002Fversion2\u002Fnested-navigators-and-modals","15.react-native\u002Fversion2\u002F12.nested-navigators-and-modals",{"title":3440,"path":3441,"stem":3442},"Deep linking і параметри маршрутів","\u002Freact-native\u002Fversion2\u002Fdeep-linking-and-params","15.react-native\u002Fversion2\u002F13.deep-linking-and-params",{"title":3444,"path":3445,"stem":3446},"Робота з мережею та життєвий цикл застосунку","\u002Freact-native\u002Fversion2\u002Fnetworking-and-app-lifecycle","15.react-native\u002Fversion2\u002F14.networking-and-app-lifecycle",{"title":3448,"path":3449,"stem":3450},"Redux Toolkit на мобільних платформах","\u002Freact-native\u002Fversion2\u002Fredux-toolkit-on-mobile","15.react-native\u002Fversion2\u002F15.redux-toolkit-on-mobile",{"title":3452,"path":3453,"stem":3454},"RTK Query на мобільних платформах","\u002Freact-native\u002Fversion2\u002Frtk-query-mobile","15.react-native\u002Fversion2\u002F16.rtk-query-mobile",{"title":3456,"path":3457,"stem":3458},"Автентифікація та Безпечне Зберігання","\u002Freact-native\u002Fversion2\u002Fauth-secure-storage","15.react-native\u002Fversion2\u002F18.auth-secure-storage",{"title":3460,"path":3461,"stem":3462},"Локальне сховище — AsyncStorage, MMKV, SQLite","\u002Freact-native\u002Fversion2\u002Flocal-storage-mmkv-sqlite","15.react-native\u002Fversion2\u002F19.local-storage-mmkv-sqlite",{"title":3464,"path":3465,"stem":3466},"Офлайн-First і синхронізація","\u002Freact-native\u002Fversion2\u002Foffline-first-sync","15.react-native\u002Fversion2\u002F20.offline-first-sync",{"title":3468,"path":3469,"stem":3470},"Камера, медіа та файлова система","\u002Freact-native\u002Fversion2\u002Fcamera-media-filesystem","15.react-native\u002Fversion2\u002F21.camera-media-filesystem",{"title":3472,"path":3473,"stem":3474},"Карти та геолокація","\u002Freact-native\u002Fversion2\u002Fmaps-and-location","15.react-native\u002Fversion2\u002F22.maps-and-location",{"title":3476,"path":3477,"stem":3478},"Жести та дотики","\u002Freact-native\u002Fversion2\u002Fgestures-and-touch","15.react-native\u002Fversion2\u002F23.gestures-and-touch",{"title":3480,"path":3481,"stem":3482},"Анімації з Reanimated","\u002Freact-native\u002Fversion2\u002Freanimated-animations","15.react-native\u002Fversion2\u002F24.reanimated-animations",{"title":3484,"path":3485,"stem":3486},"Push і локальні сповіщення","\u002Freact-native\u002Fversion2\u002Fpush-and-local-notifications","15.react-native\u002Fversion2\u002F25.push-and-local-notifications",{"title":3488,"path":3489,"stem":3490},"Доступність та інтернаціоналізація","\u002Freact-native\u002Fversion2\u002Faccessibility-and-i18n","15.react-native\u002Fversion2\u002F26.accessibility-and-i18n",{"title":3492,"path":3493,"stem":3494},"EAS Build та профілі збірки","\u002Freact-native\u002Fversion2\u002Feas-build-and-profiles","15.react-native\u002Fversion2\u002F29.eas-build-and-profiles",{"title":3496,"path":3497,"stem":3498,"children":3499,"page":59},"Ai Python","\u002Fai-python","16.ai-python",[3500,3504,3508],{"title":3501,"path":3502,"stem":3503},"Вступ до штучного інтелекту та машинного навчання","\u002Fai-python\u002Fintro-to-ai","16.ai-python\u002F01.intro-to-ai",{"title":3505,"path":3506,"stem":3507},"Знайомство з Jupyter Notebook та JupyterLab","\u002Fai-python\u002Fjupyter-notebook","16.ai-python\u002F02.jupyter-notebook",{"title":3509,"path":3510,"stem":3511},"Робота з даними з використанням NumPy і pandas","\u002Fai-python\u002Fnumpy-pandas","16.ai-python\u002F03.numpy-pandas",{"title":3513,"icon":658,"path":3514,"stem":3515,"children":3516,"page":59},"Клієнт-серверна архітектура","\u002Fclient-server-architecture","17.client-server-architecture",[3517,3521],{"title":3518,"path":3519,"stem":3520},"Архітектура клієнт-серверних систем та основи Go","\u002Fclient-server-architecture\u002Fclient-server-architecture-and-go","17.client-server-architecture\u002F01.client-server-architecture-and-go",{"title":3522,"path":3523,"stem":3524},"Система типів та модель пам’яті мови Go","\u002Fclient-server-architecture\u002Ftype-system-and-memory-model","17.client-server-architecture\u002F02.type-system-and-memory-model",{"title":3526,"icon":1946,"path":3527,"stem":3528,"children":3529,"page":59},"Розробка WEB-застосувань","\u002Fweb-development","18.web-development",[3530,3575,3613,3642],{"title":3531,"icon":658,"path":3532,"stem":3533,"children":3534,"page":59},"Архітектура комп'ютерних мереж та мережеві протоколи","\u002Fweb-development\u002Fnetwork-architecture-and-protocols","18.web-development\u002F01.network-architecture-and-protocols",[3535,3539,3543,3547,3551,3555,3559,3563,3567,3571],{"title":3536,"path":3537,"stem":3538},"Еволюція веброзробки та модель клієнт-сервер","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fweb-evolution-client-server","18.web-development\u002F01.network-architecture-and-protocols\u002F01.web-evolution-client-server",{"title":3540,"path":3541,"stem":3542},"Еталонна модель OSI","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fosi-model","18.web-development\u002F01.network-architecture-and-protocols\u002F02.osi-model",{"title":3544,"path":3545,"stem":3546},"Стек протоколів TCP\u002FIP","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Ftcp-ip-stack","18.web-development\u002F01.network-architecture-and-protocols\u002F03.tcp-ip-stack",{"title":3548,"path":3549,"stem":3550},"IP-адресація, порти та сокети","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fip-addressing-ports-sockets","18.web-development\u002F01.network-architecture-and-protocols\u002F04.ip-addressing-ports-sockets",{"title":3552,"path":3553,"stem":3554},"Протоколи TCP та UDP","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Ftcp-udp-protocols","18.web-development\u002F01.network-architecture-and-protocols\u002F05.tcp-udp-protocols",{"title":3556,"path":3557,"stem":3558},"Система доменних імен DNS","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fdns-system","18.web-development\u002F01.network-architecture-and-protocols\u002F06.dns-system",{"title":3560,"path":3561,"stem":3562},"Протокол SMTP та поштові протоколи","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fsmtp-email-protocols","18.web-development\u002F01.network-architecture-and-protocols\u002F07.smtp-email-protocols",{"title":3564,"path":3565,"stem":3566},"Протокол WebSocket","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fwebsocket-protocol","18.web-development\u002F01.network-architecture-and-protocols\u002F08.websocket-protocol",{"title":3568,"path":3569,"stem":3570},"Протокол SSH","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fssh-protocol","18.web-development\u002F01.network-architecture-and-protocols\u002F09.ssh-protocol",{"title":3572,"path":3573,"stem":3574},"Огляд сучасних серверних технологій","\u002Fweb-development\u002Fnetwork-architecture-and-protocols\u002Fmodern-backend-technologies","18.web-development\u002F01.network-architecture-and-protocols\u002F10.modern-backend-technologies",{"title":3576,"icon":3577,"path":3578,"stem":3579,"children":3580,"page":59},"Протокол HTTP та захищена передача даних HTTPS","i-lucide-lock","\u002Fweb-development\u002Fhttp-and-https","18.web-development\u002F02.http-and-https",[3581,3585,3589,3593,3597,3601,3605,3609],{"title":3582,"path":3583,"stem":3584},"Вступ до протоколу HTTP та еволюція веб-технологій","\u002Fweb-development\u002Fhttp-and-https\u002Fintroduction-and-evolution","18.web-development\u002F02.http-and-https\u002F01.introduction-and-evolution",{"title":3586,"path":3587,"stem":3588},"Анатомія HTTP-запиту","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-request-structure","18.web-development\u002F02.http-and-https\u002F02.http-request-structure",{"title":3590,"path":3591,"stem":3592},"Анатомія HTTP-відповіді","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-response-structure","18.web-development\u002F02.http-and-https\u002F03.http-response-structure",{"title":3594,"path":3595,"stem":3596},"Методи HTTP та їхня семантика","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-methods","18.web-development\u002F02.http-and-https\u002F04.http-methods",{"title":3598,"path":3599,"stem":3600},"Коди статусу HTTP та їхнє призначення","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-status-codes","18.web-development\u002F02.http-and-https\u002F05.http-status-codes",{"title":3602,"path":3603,"stem":3604},"HTTP-заголовки та їхнє призначення","\u002Fweb-development\u002Fhttp-and-https\u002Fhttp-headers","18.web-development\u002F02.http-and-https\u002F06.http-headers",{"title":3606,"path":3607,"stem":3608},"CORS та механізми безпеки HTTP","\u002Fweb-development\u002Fhttp-and-https\u002Fcors-and-security","18.web-development\u002F02.http-and-https\u002F07.cors-and-security",{"title":3610,"path":3611,"stem":3612},"HTTPS та криптографічні основи TLS","\u002Fweb-development\u002Fhttp-and-https\u002Fhttps-and-tls","18.web-development\u002F02.http-and-https\u002F08.https-and-tls",{"title":3614,"icon":2326,"path":3615,"stem":3616,"children":3617,"page":59},"Система типів мови TypeScript","\u002Fweb-development\u002Ftypescript-type-system","18.web-development\u002F03.typescript-type-system",[3618,3622,3626,3630,3634,3638],{"title":3619,"path":3620,"stem":3621},"Знайомство з TypeScript Compiler","\u002Fweb-development\u002Ftypescript-type-system\u002Fintroduction-compiler-config","18.web-development\u002F03.typescript-type-system\u002F01.introduction-compiler-config",{"title":3623,"path":3624,"stem":3625},"Примітивні типи даних: string, number, boolean","\u002Fweb-development\u002Ftypescript-type-system\u002Fprimitive-special-types","18.web-development\u002F03.typescript-type-system\u002F02.primitive-special-types",{"title":3627,"path":3628,"stem":3629},"Масиви, кортежі та об","\u002Fweb-development\u002Ftypescript-type-system\u002Farrays-tuples-objects","18.web-development\u002F03.typescript-type-system\u002F03.arrays-tuples-objects",{"title":3631,"path":3632,"stem":3633},"Union типи, Intersection типи та літеральні типи","\u002Fweb-development\u002Ftypescript-type-system\u002Funion-intersection-literals","18.web-development\u002F03.typescript-type-system\u002F04.union-intersection-literals",{"title":3635,"path":3636,"stem":3637},"Type Narrowing (звуження типів)","\u002Fweb-development\u002Ftypescript-type-system\u002Ftype-narrowing","18.web-development\u002F03.typescript-type-system\u002F05.type-narrowing",{"title":3639,"path":3640,"stem":3641},"Типізація функцій","\u002Fweb-development\u002Ftypescript-type-system\u002Ffunctions-typing","18.web-development\u002F03.typescript-type-system\u002F06.functions-typing",{"title":3643,"icon":2326,"path":3644,"stem":3645,"children":3646,"page":59},"Розширені засоби мови TypeScript","\u002Fweb-development\u002Ftypescript-advanced","18.web-development\u002F04.typescript-advanced",[3647,3651,3655,3659,3663,3667],{"title":3648,"path":3649,"stem":3650},"Interfaces та Classes","\u002Fweb-development\u002Ftypescript-advanced\u002Finterfaces-classes","18.web-development\u002F04.typescript-advanced\u002F01.interfaces-classes",{"title":3652,"path":3653,"stem":3654},"Основи Generic типів","\u002Fweb-development\u002Ftypescript-advanced\u002Fgenerics-fundamentals","18.web-development\u002F04.typescript-advanced\u002F02.generics-fundamentals",{"title":3656,"path":3657,"stem":3658},"Enums та Decorators","\u002Fweb-development\u002Ftypescript-advanced\u002Fenums-decorators","18.web-development\u002F04.typescript-advanced\u002F03.enums-decorators",{"title":3660,"path":3661,"stem":3662},"Utility Types","\u002Fweb-development\u002Ftypescript-advanced\u002Futility-types","18.web-development\u002F04.typescript-advanced\u002F04.utility-types",{"title":3664,"path":3665,"stem":3666},"Mapped та Conditional Types","\u002Fweb-development\u002Ftypescript-advanced\u002Fmapped-conditional-types","18.web-development\u002F04.typescript-advanced\u002F05.mapped-conditional-types",{"title":3668,"path":3669,"stem":3670},"Модулі та Strict Mode","\u002Fweb-development\u002Ftypescript-advanced\u002Fmodules-strict-mode","18.web-development\u002F04.typescript-advanced\u002F06.modules-strict-mode",{"title":3672,"path":3673,"stem":3674,"children":3675,"page":59},"Tailwind","\u002Ftailwind","21.tailwind",[3676,3680,3684,3688,3692,3696,3700,3704,3708,3712,3716,3720],{"title":3677,"path":3678,"stem":3679},"Що таке Tailwind CSS і навіщо він потрібен","\u002Ftailwind\u002Ftailwind-intro-philosophy","21.tailwind\u002F01.tailwind-intro-philosophy",{"title":3681,"path":3682,"stem":3683},"Встановлення та налаштування Tailwind CSS v4","\u002Ftailwind\u002Ftailwind-installation-setup","21.tailwind\u002F02.tailwind-installation-setup",{"title":3685,"path":3686,"stem":3687},"Utility-класи: основи та система Tailwind","\u002Ftailwind\u002Ftailwind-utility-classes-core","21.tailwind\u002F03.tailwind-utility-classes-core",{"title":3689,"path":3690,"stem":3691},"Layout: Flexbox та Grid через Tailwind","\u002Ftailwind\u002Ftailwind-flexbox-grid","21.tailwind\u002F04.tailwind-flexbox-grid",{"title":3693,"path":3694,"stem":3695},"Кастомізація теми через @theme у Tailwind v4","\u002Ftailwind\u002Ftailwind-theme-customization","21.tailwind\u002F05.tailwind-theme-customization",{"title":3697,"path":3698,"stem":3699},"Варіанти: hover, focus, responsive, dark mode та нові v4","\u002Ftailwind\u002Ftailwind-variants-states","21.tailwind\u002F06.tailwind-variants-states",{"title":3701,"path":3702,"stem":3703},"Типографіка та система кольорів у Tailwind v4","\u002Ftailwind\u002Ftailwind-typography-colors","21.tailwind\u002F07.tailwind-typography-colors",{"title":3705,"path":3706,"stem":3707},"Компоненти та повторюваність: @apply, @utility та патерни","\u002Ftailwind\u002Ftailwind-components-patterns","21.tailwind\u002F08.tailwind-components-patterns",{"title":3709,"path":3710,"stem":3711},"Темна тема та система дизайн-токенів у Tailwind v4","\u002Ftailwind\u002Ftailwind-dark-mode-theming","21.tailwind\u002F09.tailwind-dark-mode-theming",{"title":3713,"path":3714,"stem":3715},"Довільні значення та контейнерні запити у Tailwind v4","\u002Ftailwind\u002Ftailwind-arbitrary-container-queries","21.tailwind\u002F10.tailwind-arbitrary-container-queries",{"title":3717,"path":3718,"stem":3719},"Анімації, трансформації та 3D у Tailwind v4","\u002Ftailwind\u002Ftailwind-animations-transforms","21.tailwind\u002F11.tailwind-animations-transforms",{"title":3721,"path":3722,"stem":3723},"Tailwind CLI, PostCSS та інтеграція з фреймворками","\u002Ftailwind\u002Ftailwind-cli-tooling","21.tailwind\u002F12.tailwind-cli-tooling",{"title":3725,"path":3726,"stem":3727},"Тестування компонентів діаграм","\u002Ftest-components","98.test-components",{"id":3729,"title":3522,"body":3730,"description":70910,"extension":70911,"links":70912,"meta":70913,"navigation":4035,"path":3523,"seo":70914,"stem":3524,"__hash__":70915},"docs\u002F17.client-server-architecture\u002F02.type-system-and-memory-model.md",{"type":3731,"value":3732,"toc":70768},"minimark",[3733,3737,3899,3902,3907,3923,3933,3939,3973,3975,3980,3983,3993,4114,4117,4125,4128,4130,4134,4141,4747,5016,5019,5021,5033,5043,5048,5268,5273,5287,5389,5394,5426,5653,5655,5659,5662,5707,5709,5715,5718,5730,5821,5825,5832,5838,5888,5894,5982,6190,6385,6529,6533,6561,6565,6602,6606,6663,6667,6747,6760,6765,6783,6786,6788,6794,6817,6827,6936,6943,6972,6974,6978,6981,7195,7627,7629,7635,8138,8140,8144,8164,8168,8734,8801,8805,8822,8829,8966,9007,9009,9013,9018,9058,9082,9246,9270,9283,9340,9357,9688,9690,9694,9699,9712,9764,9861,9866,9892,9896,9908,9960,9965,10099,10102,10106,10120,10156,10161,10405,10447,10452,10756,10758,10768,10771,10775,10787,10927,10931,10938,10986,10991,10997,11034,11036,11040,11043,11051,11073,11081,11105,11281,11283,11291,11301,11370,11375,11631,11774,11779,11785,11787,11794,11804,11872,11943,11948,12247,12252,12430,12432,12439,12445,12453,12480,12484,12497,12502,12532,12977,12979,12989,12994,13017,13677,13774,13776,13780,13793,13797,13811,14626,14628,14644,14649,14666,15562,15651,15653,15657,15667,15671,15685,16533,16620,16622,16635,16639,16653,17572,17697,17699,17703,17719,17723,17737,18739,18741,18751,18755,18778,19527,19529,19542,19548,20384,20427,20429,20435,20444,20448,20513,20518,20624,20628,20638,20642,20745,20749,20932,20936,21090,21094,21284,21287,21376,21380,21508,21512,21594,21598,21696,21700,21732,21736,21742,21831,21836,21948,21953,22042,22046,22457,22461,22467,22631,22633,22637,22641,22644,22834,22836,22840,22847,22922,22924,22928,22931,23091,23380,23382,23389,23402,23406,23459,23465,23491,23513,23533,23765,24042,24084,24088,24094,24154,24158,24306,24310,24319,24329,24405,24414,24440,24444,24449,24486,24491,24537,24542,24587,24592,24701,24705,24865,24869,24875,24881,24883,24887,24899,24901,24908,24919,24977,24982,25283,25659,25661,25667,25678,25736,25740,25922,25926,25932,25936,25944,26161,26165,26175,26392,26396,26402,26406,26409,26796,26800,26806,26810,27179,27183,27189,27195,27208,27395,27400,27406,27599,27603,27700,27702,27709,27724,27727,27765,27770,27774,27886,27888,27894,27900,28067,28069,28078,28089,28264,28266,28270,28282,28632,28634,28641,28650,28655,28690,28696,28779,28879,28883,29229,29233,29239,29243,29253,29378,29383,29389,29399,29403,29409,29657,29661,29667,29678,29682,29685,29967,29971,29977,29981,29984,30120,30124,30130,30134,30206,30210,30382,30384,30390,30393,30397,30401,30423,30428,30442,30447,30739,30827,30831,30837,30848,30929,30932,30936,30943,30945,30952,30961,31089,31106,31108,31112,31119,31691,31693,31703,31761,31763,31767,32080,32082,32086,32089,32106,32483,32503,32505,32509,32521,32694,32696,32700,32710,32712,32716,32719,32725,32814,32819,32854,33156,33550,33552,33560,33566,33597,33927,34698,34700,34704,34714,34718,34724,35037,35039,35043,35046,35257,35271,35273,35277,35281,35290,35304,35311,35315,35320,35339,35344,35420,35522,35526,35734,35738,35743,36013,36017,36023,36031,36036,36355,36360,36698,36703,37068,37072,37395,37399,37759,37761,37765,37769,37781,37785,37814,37818,37975,37979,37985,38141,38146,38346,38350,38579,38583,38980,38984,39232,39236,39242,39245,39346,39348,39352,39356,39365,39371,39375,39405,39450,39454,39730,39734,39740,39744,39750,39754,39992,39996,40239,40243,40616,40620,41112,41116,41122,41126,41131,41302,41307,41313,41318,41477,41482,41488,41492,41605,41608,41709,41713,41751,41755,41760,41774,41779,41790,41792,41796,41802,41826,42218,42227,42229,42233,42241,42243,42247,42260,42272,42332,42352,42354,42363,42366,42397,42657,42659,42666,42680,42792,42794,42801,42809,42834,42970,42972,42976,42992,43281,43283,43287,43297,43526,43573,43575,43583,43588,43595,43758,43763,43799,43808,43812,43977,44168,44190,44254,44256,44260,44275,44397,44401,44492,44494,44498,44505,44510,44524,44530,44566,44759,44761,44768,44774,44779,44815,44863,44865,44869,44873,44876,44907,44912,44938,44945,44947,44951,44955,44958,45027,45033,45106,45110,45115,45123,45136,45141,45174,45178,45378,45385,45402,45406,45431,45435,45646,45651,45705,45710,46112,46319,46321,46328,46332,46340,46348,46352,46832,46837,46961,46965,46971,46975,46988,47216,47225,47229,47269,47273,47346,47350,47362,47367,47484,47489,47726,47731,47958,47961,47966,48025,48029,48040,48045,48076,48081,48092,48097,48131,48138,48177,48183,48192,48199,48205,48258,48264,48310,48316,48372,48380,48440,48448,48454,48522,48528,48607,48612,48667,48714,48718,48979,48984,49457,49461,49472,50517,50521,50527,51995,51999,52006,52354,52356,52360,52367,52371,52382,52429,52434,52537,52542,52549,52553,52567,52577,52582,52690,52695,52897,52902,53236,53240,53245,53352,53357,53418,53423,53465,53470,53594,53638,53642,53650,53780,53789,53960,53965,53971,54064,54066,54070,54074,54084,54088,54465,54469,54512,54517,54563,54567,54967,54971,54977,54981,54987,54995,55001,55113,55121,55127,55238,55243,55798,55802,55807,55901,55906,55911,55931,56134,56139,56167,56467,56471,56477,56670,56675,56722,56849,56853,56861,57206,57216,57220,57523,57525,57529,57533,57543,57548,58136,58140,58146,58150,58171,58176,58568,58572,58578,58582,58585,58590,58672,58677,58752,58756,58766,58770,58803,58808,59281,59285,59292,59698,59702,59708,59712,59715,60359,60363,60366,60559,60568,60754,60758,60838,60843,60848,60871,60913,60918,60932,60971,61003,61005,61009,61022,61034,61324,61353,61355,61359,61362,61375,61724,61763,61765,61769,61773,61776,61790,61797,61811,61813,61817,61821,61827,61831,62527,62531,62643,62647,63299,63303,63314,63362,63366,63482,63490,63605,63614,63661,63811,63813,63820,63833,63841,63865,64214,64243,64245,64254,64261,64269,64286,64367,64384,64647,64649,64653,64663,64673,64776,64804,64806,64814,64822,65108,65110,65117,65130,65134,65150,65163,65205,65352,65366,65368,65372,65796,65798,65808,65821,65832,65915,65920,65973,65975,65979,66040,66042,66046,66050,66054,66067,66073,66080,66084,66792,66797,66908,66926,66932,66943,66975,66982,66987,67107,67121,67298,67320,67339,67343,67348,67644,67652,67890,67898,68252,68364,68368,68373,68552,68556,68567,68572,68699,68704,68834,68836,68842,68848,68853,68864,68870,68874,69323,69327,69336,69462,69466,69472,69476,69550,69554,69654,69658,69664,69672,69676,69681,69743,69748,69814,69819,69856,69861,69949,70111,70134,70151,70540,70634,70658,70674,70676,70680,70764],[3734,3735,3522],"h1",{"id":3736},"система-типів-та-модель-памяті-мови-go",[3738,3739,3740,3863],"card-group",{},[3741,3742,3745],"card",{"icon":3743,"title":3744},"i-lucide-graduation-cap","🎯 Навчальні цілі",[3746,3747,3748,3770,3780,3795,3809,3816,3827,3830],"ul",{},[3749,3750,3751,3752,3756,3757,3761,3762,3765,3766,3769],"li",{},"Опанувати синтаксис оголошення змінних, тіньове перекриття ",[3753,3754,3755],"code",{},":=",", сувору статичну типізацію, нульові значення (",[3758,3759,3760],"em",{},"Zero Values",") та різницю ",[3753,3763,3764],{},"make"," vs ",[3753,3767,3768],{},"new",".",[3749,3771,3772,3773,3776,3777,3769],{},"Вивчити всі базові числові типи, wrap-around переповнення, ",[3753,3774,3775],{},"uintptr",", незмінні рядки UTF-8, руни, нетипізовані константи та генератор ",[3753,3778,3779],{},"iota",[3749,3781,3782,3783,3786,3787,3790,3791,3794],{},"Дослідити форматування ",[3753,3784,3785],{},"fmt"," (verb'и ",[3753,3788,3789],{},"%v %#v %T %d %x %f","), всі групи операцій: арифметичні, складені ",[3753,3792,3793],{},"+= &^=",", логічні, побітові та пріоритети з асоціативністю.",[3749,3796,3797,3798,3801,3802,3805,3806,3769],{},"Вивчити керуючі конструкції: ",[3753,3799,3800],{},"if"," з ініціалізацією, ",[3753,3803,3804],{},"switch"," та всі форми ",[3753,3807,3808],{},"for",[3749,3810,3811,3812,3815],{},"Опанувати функції як об'єкти першого класу, анонімні функції, замикання (",[3758,3813,3814],{},"closures",") та рекурсію.",[3749,3817,3818,3819,3822,3823,3826],{},"Зрозуміти безпечну модель покажчиків (",[3758,3820,3821],{},"pointers","), заборону арифметики, організацію пам'яті (Стек, Купа) та механізм аналізу втечі (",[3758,3824,3825],{},"Escape Analysis",").",[3749,3828,3829],{},"Навчитися створювати власні типи, структури з вирівнюванням, анонімні структури, методи на будь-яких типах, застосовувати вкладену vs вбудовану композицію та теги полів.",[3749,3831,3832,3833,3836,3837,3840,3841,3844,3845,3836,3848,3836,3851,3854,3855,3858,3859,3862],{},"Глибоко розібрати зрізи (",[3753,3834,3835],{},"SliceHeader",", ",[3753,3838,3839],{},"growslice"," 2×\u002F1.25×, ",[3753,3842,3843],{},"s[low:high:max]",", 2D), мапи (",[3753,3846,3847],{},"hmap",[3753,3849,3850],{},"bmap",[3753,3852,3853],{},"comparable",") та механізми ",[3753,3856,3857],{},"error","\u002F",[3753,3860,3861],{},"defer"," LIFO.",[3741,3864,3866],{"icon":255,"title":3865},"🛠️ Технологічний стек",[3746,3867,3868,3875,3893],{},[3749,3869,3870,3874],{},[3871,3872,3873],"strong",{},"Мова:"," Go 1.22+",[3749,3876,3877,3880,3881,3836,3884,3836,3887,3836,3890],{},[3871,3878,3879],{},"Інструменти аналізу:"," ",[3753,3882,3883],{},"go build -gcflags=\"-m\"",[3753,3885,3886],{},"go vet -fieldalignment -shadow",[3753,3888,3889],{},"gofmt",[3753,3891,3892],{},"unsafe.Sizeof\u002FAlignof",[3749,3894,3895,3898],{},[3871,3896,3897],{},"Середовище виконання:"," Go Runtime (алокатор пам'яті, Garbage Collector, defer-стек)",[3900,3901],"hr",{},[3903,3904,3906],"h2",{"id":3905},"змінні-ідентифікатори-та-правила-компілятора","Змінні, ідентифікатори та правила компілятора",[3908,3909,3910,3911,3914,3915,3918,3919,3922],"p",{},"У лекції 01 ми детально розглянули, як програма на Go організовується у пакети (",[3753,3912,3913],{},"package main"," — виконуваний бінарний файл, інші пакети — бібліотеки), як ",[3753,3916,3917],{},"import"," підключає залежності та як ",[3753,3920,3921],{},"go.mod"," ізолює версії модулів (див. лекцію 01, розділи «Відмінність між Пакетом та Модулем» та «Еволюція $GOPATH → Go Modules»). Тут ми не повторюємо мережевий стек чи модель сокетів — натомість заглиблюємося в те, як Go зберігає дані всередині процесу.",[3908,3924,3925,3926,3929,3930,3769],{},"Усі обчислювальні процеси сучасного комп'ютера зводяться до маніпуляції даними в оперативній пам'яті (RAM). Для того щоб програміст міг зручно звертатися до потрібної комірки пам'яті без використання шістнадцяткових фізичних адрес (на зразок ",[3753,3927,3928],{},"0x00c000014088","), мови високого рівня надають абстракцію ",[3871,3931,3932],{},"змінної",[3908,3934,3935,3938],{},[3871,3936,3937],{},"Змінна"," — це іменована область пам'яті, яка має фіксований тип даних, розмір у байтах та зберігає певне значення під час роботи програми.",[3940,3941,3942,3945,3946,3949,3950,3953,3954,3957,3958,3960,3961,3836,3964,3836,3966,3969,3970,3972],"note",{},[3871,3943,3944],{},"Місток з лекції 01:"," кожен ",[3753,3947,3948],{},".go"," файл починається з ",[3753,3951,3952],{},"package \u003Cім'я>"," і всі файли в одній папці мають однакове ім'я пакета. Функція ",[3753,3955,3956],{},"func main()"," у ",[3753,3959,3913],{}," — єдина точка входу в програму. Тому всі приклади нижче (",[3753,3962,3963],{},"var",[3753,3965,3755],{},[3753,3967,3968],{},"const",") виконуються або на рівні пакета, або всередині ",[3753,3971,3956],{}," \u002F інших функцій.",[3900,3974],{},[3976,3977,3979],"h3",{"id":3978},"анатомія-оголошення-змінної-чому-тип-пишеться-після-імені","Анатомія оголошення змінної: чому тип пишеться після імені?",[3908,3981,3982],{},"Якщо ви раніше вивчали C, C++, Java або C#, перше, що привертає увагу в Go — це порядок слів при оголошенні змінних:",[3984,3985,3990],"pre",{"className":3986,"code":3988,"language":3989},[3987],"language-text","У C++ \u002F Java :   int      port   =   8080;\n                [ТИП]    [ІМ'Я]     [ЗНАЧЕННЯ]\n\nУ Go         :   var      port       int      =   8080\n               [СЛОВО]   [ІМ'Я]     [ТИП]        [ЗНАЧЕННЯ]\n","text",[3753,3991,3988],{"__ignoreMap":3992},"",[3994,3995,3997],"plant-uml",{"alt":3996},"Анатомія оголошення змінної у Go",[3984,3998,4002],{"className":3999,"code":4000,"language":4001,"meta":3992,"style":3992},"language-plantuml shiki shiki-themes light-plus dark-plus dark-plus","@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 13\n\npackage \"Синтаксична структура повного оголошення змінної\" #F8FAFC {\n    rectangle \"var\\n(Ключове слово)\" as Kw #DBEAFE\n    rectangle \"port\\n(Ідентифікатор \u002F Ім'я)\" as Name #DCFCE7\n    rectangle \"int\\n(Тип даних)\" as Type #FEF3C7\n    rectangle \"=\\n(Оператор присвоєння)\" as Op #E2E8F0\n    rectangle \"8080\\n(Початкове значення)\" as Val #FCE7F3\n}\n\nKw -right-> Name\nName -right-> Type\nType -right-> Op\nOp -right-> Val\n@enduml\n","plantuml",[3753,4003,4004,4012,4018,4024,4030,4037,4043,4049,4055,4061,4067,4073,4079,4084,4090,4096,4102,4108],{"__ignoreMap":3992},[4005,4006,4009],"span",{"class":4007,"line":4008},"line",1,[4005,4010,4011],{},"@startuml\n",[4005,4013,4015],{"class":4007,"line":4014},2,[4005,4016,4017],{},"skinparam style plain\n",[4005,4019,4021],{"class":4007,"line":4020},3,[4005,4022,4023],{},"skinparam backgroundColor #FFFFFF\n",[4005,4025,4027],{"class":4007,"line":4026},4,[4005,4028,4029],{},"skinparam defaultFontSize 13\n",[4005,4031,4033],{"class":4007,"line":4032},5,[4005,4034,4036],{"emptyLinePlaceholder":4035},true,"\n",[4005,4038,4040],{"class":4007,"line":4039},6,[4005,4041,4042],{},"package \"Синтаксична структура повного оголошення змінної\" #F8FAFC {\n",[4005,4044,4046],{"class":4007,"line":4045},7,[4005,4047,4048],{},"    rectangle \"var\\n(Ключове слово)\" as Kw #DBEAFE\n",[4005,4050,4052],{"class":4007,"line":4051},8,[4005,4053,4054],{},"    rectangle \"port\\n(Ідентифікатор \u002F Ім'я)\" as Name #DCFCE7\n",[4005,4056,4058],{"class":4007,"line":4057},9,[4005,4059,4060],{},"    rectangle \"int\\n(Тип даних)\" as Type #FEF3C7\n",[4005,4062,4064],{"class":4007,"line":4063},10,[4005,4065,4066],{},"    rectangle \"=\\n(Оператор присвоєння)\" as Op #E2E8F0\n",[4005,4068,4070],{"class":4007,"line":4069},11,[4005,4071,4072],{},"    rectangle \"8080\\n(Початкове значення)\" as Val #FCE7F3\n",[4005,4074,4076],{"class":4007,"line":4075},12,[4005,4077,4078],{},"}\n",[4005,4080,4082],{"class":4007,"line":4081},13,[4005,4083,4036],{"emptyLinePlaceholder":4035},[4005,4085,4087],{"class":4007,"line":4086},14,[4005,4088,4089],{},"Kw -right-> Name\n",[4005,4091,4093],{"class":4007,"line":4092},15,[4005,4094,4095],{},"Name -right-> Type\n",[4005,4097,4099],{"class":4007,"line":4098},16,[4005,4100,4101],{},"Type -right-> Op\n",[4005,4103,4105],{"class":4007,"line":4104},17,[4005,4106,4107],{},"Op -right-> Val\n",[4005,4109,4111],{"class":4007,"line":4110},18,[4005,4112,4113],{},"@enduml\n",[3908,4115,4116],{},"Творець мови Роб Пайк пояснював цей вибір принципом природного читання зліва направо:",[4118,4119,4120],"blockquote",{},[3908,4121,4122,3769],{},[3758,4123,4124],{},"«Ми кажемо: \"Оголоси змінну з ім'ям port, яка є числом типу int і дорівнює 8080\"»",[3908,4126,4127],{},"Коли типи стають складними (наприклад, покажчик на масив функцій чи мапа зрізів), запис у стилі Go читається набагато легше та позбавлений синтаксичних неоднозначностей C\u002FC++.",[3900,4129],{},[3976,4131,4133],{"id":4132},"усі-способи-створення-змінних-у-go","Усі способи створення змінних у Go",[3908,4135,4136,4137,4140],{},"У практичній розробці на Go використовуються ",[3871,4138,4139],{},"п'ять основних синтаксичних форм"," оголошення змінних:",[4142,4143,4144,4192,4254,4280,4353],"field-group",{},[4145,4146,4149,4160],"field",{"name":4147,"type":4148},"1. Повне оголошення з явним типом та значенням","Синтаксис var",[3908,4150,4151,4152,4155,4156,4159],{},"Найбільш явний спосіб. Використовується, коли потрібно чітко зафіксувати специфічний тип (наприклад, ",[3753,4153,4154],{},"int64"," замість стандартного системного ",[3753,4157,4158],{},"int","):",[3984,4161,4165],{"className":4162,"code":4163,"language":4164,"meta":3992,"style":3992},"language-go shiki shiki-themes light-plus dark-plus dark-plus","var maxPayloadSize int64 = 1048576 \u002F\u002F 1 МБ\n","go",[3753,4166,4167],{"__ignoreMap":3992},[4005,4168,4169,4172,4176,4180,4184,4188],{"class":4007,"line":4008},[4005,4170,3963],{"class":4171},"su1O8",[4005,4173,4175],{"class":4174},"siwwj"," maxPayloadSize",[4005,4177,4179],{"class":4178},"sN1BT"," int64",[4005,4181,4183],{"class":4182},"sHH4Y"," = ",[4005,4185,4187],{"class":4186},"sJj4R","1048576",[4005,4189,4191],{"class":4190},"spJ8K"," \u002F\u002F 1 МБ\n",[4145,4193,4195,4210],{"name":4194,"type":4148},"2. Оголошення без значення (Ініціалізація Zero Value)",[3908,4196,4197,4198,3836,4201,3836,4204,3836,4207,4159],{},"Змінна створюється та гарантовано заповнюється нульовим значенням для свого типу (",[3753,4199,4200],{},"0",[3753,4202,4203],{},"\"\"",[3753,4205,4206],{},"false",[3753,4208,4209],{},"nil",[3984,4211,4213],{"className":4162,"code":4212,"language":4164,"meta":3992,"style":3992},"var retryCount int       \u002F\u002F Автоматично дорівнює 0\nvar clientIP string      \u002F\u002F Автоматично дорівнює \"\"\nvar isConnected bool     \u002F\u002F Автоматично дорівнює false\n",[3753,4214,4215,4228,4241],{"__ignoreMap":3992},[4005,4216,4217,4219,4222,4225],{"class":4007,"line":4008},[4005,4218,3963],{"class":4171},[4005,4220,4221],{"class":4174}," retryCount",[4005,4223,4224],{"class":4178}," int",[4005,4226,4227],{"class":4190},"       \u002F\u002F Автоматично дорівнює 0\n",[4005,4229,4230,4232,4235,4238],{"class":4007,"line":4014},[4005,4231,3963],{"class":4171},[4005,4233,4234],{"class":4174}," clientIP",[4005,4236,4237],{"class":4178}," string",[4005,4239,4240],{"class":4190},"      \u002F\u002F Автоматично дорівнює \"\"\n",[4005,4242,4243,4245,4248,4251],{"class":4007,"line":4020},[4005,4244,3963],{"class":4171},[4005,4246,4247],{"class":4174}," isConnected",[4005,4249,4250],{"class":4178}," bool",[4005,4252,4253],{"class":4190},"     \u002F\u002F Автоматично дорівнює false\n",[4145,4255,4257,4260],{"name":4256,"type":4148},"3. Оголошення з автоматичним виведенням типу (Type Inference)",[3908,4258,4259],{},"Тип не вказується вручну: компілятор автоматично визначає його на основі значення виразу праворуч:",[3984,4261,4263],{"className":4162,"code":4262,"language":4164,"meta":3992,"style":3992},"var defaultTimeout = 30 \u002F\u002F Компілятор автоматично призначить тип int\n",[3753,4264,4265],{"__ignoreMap":3992},[4005,4266,4267,4269,4272,4274,4277],{"class":4007,"line":4008},[4005,4268,3963],{"class":4171},[4005,4270,4271],{"class":4174}," defaultTimeout",[4005,4273,4183],{"class":4182},[4005,4275,4276],{"class":4186},"30",[4005,4278,4279],{"class":4190}," \u002F\u002F Компілятор автоматично призначить тип int\n",[4145,4281,4284,4290,4339],{"name":4282,"type":4283},"4. Коротке оголошення (Short Declaration :=)","Локальний синтаксис",[3908,4285,4286,4287,4289],{},"Найбільш вживаний спосіб у повсякденній розробці всередині функцій. Символ ",[3753,4288,3755],{}," одночасно створює нову змінну та виводить її тип:",[3984,4291,4293],{"className":4162,"code":4292,"language":4164,"meta":3992,"style":3992},"func handleRequest() {\n    statusCode := 200        \u002F\u002F Створюється локальна змінна типу int\n    endpoint := \"\u002Fapi\u002Fusers\" \u002F\u002F Створюється локальна змінна типу string\n}\n",[3753,4294,4295,4307,4321,4335],{"__ignoreMap":3992},[4005,4296,4297,4300,4304],{"class":4007,"line":4008},[4005,4298,4299],{"class":4171},"func",[4005,4301,4303],{"class":4302},"s8Opu"," handleRequest",[4005,4305,4306],{"class":4182},"() {\n",[4005,4308,4309,4312,4315,4318],{"class":4007,"line":4014},[4005,4310,4311],{"class":4174},"    statusCode",[4005,4313,4314],{"class":4182}," := ",[4005,4316,4317],{"class":4186},"200",[4005,4319,4320],{"class":4190},"        \u002F\u002F Створюється локальна змінна типу int\n",[4005,4322,4323,4326,4328,4332],{"class":4007,"line":4020},[4005,4324,4325],{"class":4174},"    endpoint",[4005,4327,4314],{"class":4182},[4005,4329,4331],{"class":4330},"sbdoH","\"\u002Fapi\u002Fusers\"",[4005,4333,4334],{"class":4190}," \u002F\u002F Створюється локальна змінна типу string\n",[4005,4336,4337],{"class":4007,"line":4026},[4005,4338,4078],{"class":4182},[3908,4340,4341,4342,4345,4346,4348,4349,4352],{},"⚠️ ",[3871,4343,4344],{},"Застереження:"," Оператор ",[3753,4347,3755],{}," дозволено використовувати ",[3871,4350,4351],{},"тільки всередині тіла функцій",". На глобальному рівні пакета він заборонений компілятором.",[4145,4354,4357,4360,4483],{"name":4355,"type":4356},"5. Множинне та блокове групове оголошення","Синтаксис var (...)",[3908,4358,4359],{},"Дозволяє компактно оголосити кілька змінних в один рядок або об'єднати конфігураційні змінні пакета в один охайний блок:",[3984,4361,4363],{"className":4162,"code":4362,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Оголошення в один рядок:\nvar a, b, c int = 1, 2, 3\nhost, port := \"127.0.0.1\", 8080\n\n\u002F\u002F Блокове оголошення конфігурації:\nvar (\n    serverHost string = \"0.0.0.0\"\n    serverPort int    = 8080\n    isDebug    bool   = true\n)\n",[3753,4364,4365,4370,4404,4424,4428,4433,4440,4452,4464,4478],{"__ignoreMap":3992},[4005,4366,4367],{"class":4007,"line":4008},[4005,4368,4369],{"class":4190},"\u002F\u002F Оголошення в один рядок:\n",[4005,4371,4372,4374,4377,4379,4382,4384,4387,4389,4391,4394,4396,4399,4401],{"class":4007,"line":4014},[4005,4373,3963],{"class":4171},[4005,4375,4376],{"class":4174}," a",[4005,4378,3836],{"class":4182},[4005,4380,4381],{"class":4174},"b",[4005,4383,3836],{"class":4182},[4005,4385,4386],{"class":4174},"c",[4005,4388,4224],{"class":4178},[4005,4390,4183],{"class":4182},[4005,4392,4393],{"class":4186},"1",[4005,4395,3836],{"class":4182},[4005,4397,4398],{"class":4186},"2",[4005,4400,3836],{"class":4182},[4005,4402,4403],{"class":4186},"3\n",[4005,4405,4406,4409,4411,4414,4416,4419,4421],{"class":4007,"line":4020},[4005,4407,4408],{"class":4174},"host",[4005,4410,3836],{"class":4182},[4005,4412,4413],{"class":4174},"port",[4005,4415,4314],{"class":4182},[4005,4417,4418],{"class":4330},"\"127.0.0.1\"",[4005,4420,3836],{"class":4182},[4005,4422,4423],{"class":4186},"8080\n",[4005,4425,4426],{"class":4007,"line":4026},[4005,4427,4036],{"emptyLinePlaceholder":4035},[4005,4429,4430],{"class":4007,"line":4032},[4005,4431,4432],{"class":4190},"\u002F\u002F Блокове оголошення конфігурації:\n",[4005,4434,4435,4437],{"class":4007,"line":4039},[4005,4436,3963],{"class":4171},[4005,4438,4439],{"class":4182}," (\n",[4005,4441,4442,4445,4447,4449],{"class":4007,"line":4045},[4005,4443,4444],{"class":4174},"    serverHost",[4005,4446,4237],{"class":4178},[4005,4448,4183],{"class":4182},[4005,4450,4451],{"class":4330},"\"0.0.0.0\"\n",[4005,4453,4454,4457,4459,4462],{"class":4007,"line":4051},[4005,4455,4456],{"class":4174},"    serverPort",[4005,4458,4224],{"class":4178},[4005,4460,4461],{"class":4182},"    = ",[4005,4463,4423],{"class":4186},[4005,4465,4466,4469,4472,4475],{"class":4007,"line":4057},[4005,4467,4468],{"class":4174},"    isDebug",[4005,4470,4471],{"class":4178},"    bool",[4005,4473,4474],{"class":4182},"   = ",[4005,4476,4477],{"class":4171},"true\n",[4005,4479,4480],{"class":4007,"line":4063},[4005,4481,4482],{"class":4182},")\n",[4484,4485,4487,4492,4503,4508,4539,4544,4573,4579],"callout",{"icon":4486},"i-lucide-lightbulb",[3908,4488,4489],{},[3871,4490,4491],{},"Коли використовувати множинне оголошення в один рядок?",[3908,4493,4494,4495,4498,4499,4502],{},"Множинне оголошення (",[3753,4496,4497],{},"a, b := 1, 2",") ",[3871,4500,4501],{},"НЕ є антипатерном",", але має конкретні випадки використання:",[3908,4504,4505],{},[3871,4506,4507],{},"✅ Прийнятні випадки:",[3746,4509,4510,4519,4531],{},[3749,4511,4512,3880,4515,4518],{},[3871,4513,4514],{},"Розпакування кортежів з функцій:",[3753,4516,4517],{},"value, err := someFunc()"," — стандартна практика Go!",[3749,4520,4521,3880,4524,4527,4528],{},[3871,4522,4523],{},"Тісно пов'язані змінні:",[3753,4525,4526],{},"x, y := 0, 0"," (координати), ",[3753,4529,4530],{},"width, height := 800, 600",[3749,4532,4533,3880,4536],{},[3871,4534,4535],{},"Swap значень:",[3753,4537,4538],{},"a, b = b, a",[3908,4540,4541],{},[3871,4542,4543],{},"❌ Уникайте у випадках:",[3746,4545,4546,4555,4564],{},[3749,4547,4548,3880,4551,4554],{},[3871,4549,4550],{},"Різні типи без логічного зв'язку:",[3753,4552,4553],{},"name, age, active := \"Bob\", 25, true"," — важко читати",[3749,4556,4557,3880,4560,4563],{},[3871,4558,4559],{},"Багато змінних:",[3753,4561,4562],{},"a, b, c, d, e := 1, 2, 3, 4, 5"," — розбийте на окремі рядки",[3749,4565,4566,3880,4569,4572],{},[3871,4567,4568],{},"Складна ініціалізація:",[3753,4570,4571],{},"user, cfg, db := getUser(), loadConfig(), initDB()"," — краще окремо",[3908,4574,4575,4578],{},[3871,4576,4577],{},"Рекомендація від Go команди:"," якщо змінні не пов'язані семантично або їх більше 2-3, краще оголошувати окремо для читабельності.",[3984,4580,4582],{"className":4162,"code":4581,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ✅ Добре — тісно пов'язані:\nfile, err := os.Open(\"data.txt\")\nx, y := 10, 20\n\n\u002F\u002F ❌ Погано — важко читати:\nname, age, city, active, score := \"Alice\", 30, \"Kyiv\", true, 95.5\n\n\u002F\u002F ✅ Краще:\nname := \"Alice\"\nage := 30\ncity := \"Kyiv\"\nactive := true\nscore := 95.5\n",[3753,4583,4584,4589,4617,4637,4641,4646,4695,4699,4704,4713,4722,4731,4739],{"__ignoreMap":3992},[4005,4585,4586],{"class":4007,"line":4008},[4005,4587,4588],{"class":4190},"\u002F\u002F ✅ Добре — тісно пов'язані:\n",[4005,4590,4591,4594,4596,4599,4601,4604,4606,4609,4612,4615],{"class":4007,"line":4014},[4005,4592,4593],{"class":4174},"file",[4005,4595,3836],{"class":4182},[4005,4597,4598],{"class":4174},"err",[4005,4600,4314],{"class":4182},[4005,4602,4603],{"class":4174},"os",[4005,4605,3769],{"class":4182},[4005,4607,4608],{"class":4302},"Open",[4005,4610,4611],{"class":4182},"(",[4005,4613,4614],{"class":4330},"\"data.txt\"",[4005,4616,4482],{"class":4182},[4005,4618,4619,4622,4624,4627,4629,4632,4634],{"class":4007,"line":4020},[4005,4620,4621],{"class":4174},"x",[4005,4623,3836],{"class":4182},[4005,4625,4626],{"class":4174},"y",[4005,4628,4314],{"class":4182},[4005,4630,4631],{"class":4186},"10",[4005,4633,3836],{"class":4182},[4005,4635,4636],{"class":4186},"20\n",[4005,4638,4639],{"class":4007,"line":4026},[4005,4640,4036],{"emptyLinePlaceholder":4035},[4005,4642,4643],{"class":4007,"line":4032},[4005,4644,4645],{"class":4190},"\u002F\u002F ❌ Погано — важко читати:\n",[4005,4647,4648,4651,4653,4656,4658,4661,4663,4666,4668,4671,4673,4676,4678,4680,4682,4685,4687,4690,4692],{"class":4007,"line":4039},[4005,4649,4650],{"class":4174},"name",[4005,4652,3836],{"class":4182},[4005,4654,4655],{"class":4174},"age",[4005,4657,3836],{"class":4182},[4005,4659,4660],{"class":4174},"city",[4005,4662,3836],{"class":4182},[4005,4664,4665],{"class":4174},"active",[4005,4667,3836],{"class":4182},[4005,4669,4670],{"class":4174},"score",[4005,4672,4314],{"class":4182},[4005,4674,4675],{"class":4330},"\"Alice\"",[4005,4677,3836],{"class":4182},[4005,4679,4276],{"class":4186},[4005,4681,3836],{"class":4182},[4005,4683,4684],{"class":4330},"\"Kyiv\"",[4005,4686,3836],{"class":4182},[4005,4688,4689],{"class":4171},"true",[4005,4691,3836],{"class":4182},[4005,4693,4694],{"class":4186},"95.5\n",[4005,4696,4697],{"class":4007,"line":4045},[4005,4698,4036],{"emptyLinePlaceholder":4035},[4005,4700,4701],{"class":4007,"line":4051},[4005,4702,4703],{"class":4190},"\u002F\u002F ✅ Краще:\n",[4005,4705,4706,4708,4710],{"class":4007,"line":4057},[4005,4707,4650],{"class":4174},[4005,4709,4314],{"class":4182},[4005,4711,4712],{"class":4330},"\"Alice\"\n",[4005,4714,4715,4717,4719],{"class":4007,"line":4063},[4005,4716,4655],{"class":4174},[4005,4718,4314],{"class":4182},[4005,4720,4721],{"class":4186},"30\n",[4005,4723,4724,4726,4728],{"class":4007,"line":4069},[4005,4725,4660],{"class":4174},[4005,4727,4314],{"class":4182},[4005,4729,4730],{"class":4330},"\"Kyiv\"\n",[4005,4732,4733,4735,4737],{"class":4007,"line":4075},[4005,4734,4665],{"class":4174},[4005,4736,4314],{"class":4182},[4005,4738,4477],{"class":4171},[4005,4740,4741,4743,4745],{"class":4007,"line":4081},[4005,4742,4670],{"class":4174},[4005,4744,4314],{"class":4182},[4005,4746,4694],{"class":4186},[4748,4749,4751,4756,4775,4780,4817,4822,4988,4993],"tip",{"icon":4750},"i-lucide-info",[3908,4752,4753],{},[3871,4754,4755],{},"Що таке блокове оголошення?",[3908,4757,4758,4761,4762,3836,4765,3836,4768,3836,4771,4774],{},[3871,4759,4760],{},"Блокове оголошення"," (",[3753,4763,4764],{},"var (...)",[3753,4766,4767],{},"const (...)",[3753,4769,4770],{},"type (...)",[3753,4772,4773],{},"import (...)",") — це спосіб групування кількох оголошень у одному блоці з круглими дужками.",[3908,4776,4777],{},[3871,4778,4779],{},"Правила блокового оголошення:",[4781,4782,4783,4792,4798,4812],"ol",{},[3749,4784,4785,3880,4788,4791],{},[3871,4786,4787],{},"Синтаксис:",[3753,4789,4790],{},"ключове_слово ( ... )"," — після ключового слова йдуть круглі дужки",[3749,4793,4794,4797],{},[3871,4795,4796],{},"Кожне оголошення на новому рядку"," (без крапки з комою)",[3749,4799,4800,3880,4803,3836,4805,3836,4807,3836,4810],{},[3871,4801,4802],{},"Застосовується до:",[3753,4804,3963],{},[3753,4806,3968],{},[3753,4808,4809],{},"type",[3753,4811,3917],{},[3749,4813,4814],{},[3871,4815,4816],{},"Доступне на рівні пакета та всередині функцій",[3908,4818,4819],{},[3871,4820,4821],{},"Приклади:",[3984,4823,4825],{"className":4162,"code":4824,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Блок import (найчастіше використовується):\nimport (\n    \"fmt\"\n    \"net\u002Fhttp\"\n    \"encoding\u002Fjson\"\n)\n\n\u002F\u002F Блок const:\nconst (\n    MaxRetries = 3\n    Timeout    = 30\n)\n\n\u002F\u002F Блок type:\ntype (\n    UserID    int\n    ProductID int\n    Email     string\n)\n\n\u002F\u002F Блок var (як у прикладі вище):\nvar (\n    host string = \"localhost\"\n    port int    = 8080\n)\n",[3753,4826,4827,4832,4839,4844,4849,4854,4858,4862,4867,4873,4883,4892,4896,4900,4905,4911,4919,4927,4935,4940,4945,4951,4958,4971,4983],{"__ignoreMap":3992},[4005,4828,4829],{"class":4007,"line":4008},[4005,4830,4831],{"class":4190},"\u002F\u002F Блок import (найчастіше використовується):\n",[4005,4833,4834,4837],{"class":4007,"line":4014},[4005,4835,3917],{"class":4836},"s8xlr",[4005,4838,4439],{"class":4182},[4005,4840,4841],{"class":4007,"line":4020},[4005,4842,4843],{"class":4330},"    \"fmt\"\n",[4005,4845,4846],{"class":4007,"line":4026},[4005,4847,4848],{"class":4330},"    \"net\u002Fhttp\"\n",[4005,4850,4851],{"class":4007,"line":4032},[4005,4852,4853],{"class":4330},"    \"encoding\u002Fjson\"\n",[4005,4855,4856],{"class":4007,"line":4039},[4005,4857,4482],{"class":4182},[4005,4859,4860],{"class":4007,"line":4045},[4005,4861,4036],{"emptyLinePlaceholder":4035},[4005,4863,4864],{"class":4007,"line":4051},[4005,4865,4866],{"class":4190},"\u002F\u002F Блок const:\n",[4005,4868,4869,4871],{"class":4007,"line":4057},[4005,4870,3968],{"class":4171},[4005,4872,4439],{"class":4182},[4005,4874,4875,4879,4881],{"class":4007,"line":4063},[4005,4876,4878],{"class":4877},"s-QsJ","    MaxRetries",[4005,4880,4183],{"class":4182},[4005,4882,4403],{"class":4186},[4005,4884,4885,4888,4890],{"class":4007,"line":4069},[4005,4886,4887],{"class":4877},"    Timeout",[4005,4889,4461],{"class":4182},[4005,4891,4721],{"class":4186},[4005,4893,4894],{"class":4007,"line":4075},[4005,4895,4482],{"class":4182},[4005,4897,4898],{"class":4007,"line":4081},[4005,4899,4036],{"emptyLinePlaceholder":4035},[4005,4901,4902],{"class":4007,"line":4086},[4005,4903,4904],{"class":4190},"\u002F\u002F Блок type:\n",[4005,4906,4907,4909],{"class":4007,"line":4092},[4005,4908,4809],{"class":4171},[4005,4910,4439],{"class":4182},[4005,4912,4913,4916],{"class":4007,"line":4098},[4005,4914,4915],{"class":4178},"    UserID",[4005,4917,4918],{"class":4178},"    int\n",[4005,4920,4921,4924],{"class":4007,"line":4104},[4005,4922,4923],{"class":4178},"    ProductID",[4005,4925,4926],{"class":4178}," int\n",[4005,4928,4929,4932],{"class":4007,"line":4110},[4005,4930,4931],{"class":4178},"    Email",[4005,4933,4934],{"class":4178},"     string\n",[4005,4936,4938],{"class":4007,"line":4937},19,[4005,4939,4482],{"class":4182},[4005,4941,4943],{"class":4007,"line":4942},20,[4005,4944,4036],{"emptyLinePlaceholder":4035},[4005,4946,4948],{"class":4007,"line":4947},21,[4005,4949,4950],{"class":4190},"\u002F\u002F Блок var (як у прикладі вище):\n",[4005,4952,4954,4956],{"class":4007,"line":4953},22,[4005,4955,3963],{"class":4171},[4005,4957,4439],{"class":4182},[4005,4959,4961,4964,4966,4968],{"class":4007,"line":4960},23,[4005,4962,4963],{"class":4174},"    host",[4005,4965,4237],{"class":4178},[4005,4967,4183],{"class":4182},[4005,4969,4970],{"class":4330},"\"localhost\"\n",[4005,4972,4974,4977,4979,4981],{"class":4007,"line":4973},24,[4005,4975,4976],{"class":4174},"    port",[4005,4978,4224],{"class":4178},[4005,4980,4461],{"class":4182},[4005,4982,4423],{"class":4186},[4005,4984,4986],{"class":4007,"line":4985},25,[4005,4987,4482],{"class":4182},[3908,4989,4990],{},[3871,4991,4992],{},"Навіщо використовувати блоки?",[3746,4994,4995,5002,5009],{},[3749,4996,4997,4998,5001],{},"📦 ",[3871,4999,5000],{},"Організація коду:"," логічно згруповані оголошення",[3749,5003,5004,5005,5008],{},"🧹 ",[3871,5006,5007],{},"Чистота:"," менше повторення ключових слів",[3749,5010,5011,5012,5015],{},"📖 ",[3871,5013,5014],{},"Читабельність:"," швидше зрозуміти структуру модуля",[3908,5017,5018],{},"::",[3908,5020,5018],{},[3908,5022,5023],{},[3871,5024,5025,5026,5028,5029,5032],{},"Тонкощі ",[3753,5027,3755],{},": перевизначення та тіньове перекриття (",[3758,5030,5031],{},"shadowing",")",[3908,5034,5035,5036,5038,5039,5042],{},"Оператор ",[3753,5037,3755],{}," має спеціальну поведінку: він може ",[3871,5040,5041],{},"повторно використовувати"," вже існуючі змінні, якщо хоча б одна змінна зліва є новою.",[3908,5044,5045],{},[3871,5046,5047],{},"Приклад перевизначення (це нормально):",[3984,5049,5051],{"className":4162,"code":5050,"language":4164,"meta":3992,"style":3992},"func processFile(path string) error {\n    f, err := os.Open(path) \u002F\u002F Перше оголошення: f та err — нові змінні\n    if err != nil {\n        return err\n    }\n    defer f.Close()\n\n    data := make([]byte, 1024)\n    n, err := f.Read(data)  \u002F\u002F Друге використання `:=`\n                            \u002F\u002F n — нова змінна\n                            \u002F\u002F err — ПЕРЕВИКОРИСТАНА (оновлює значення існуючої змінної)\n    \n    if err != nil && err != io.EOF {\n        return err\n    }\n    \n    return nil\n}\n",[3753,5052,5053,5074,5100,5115,5123,5128,5144,5148,5170,5200,5205,5210,5215,5242,5248,5252,5256,5264],{"__ignoreMap":3992},[4005,5054,5055,5057,5060,5062,5065,5067,5069,5071],{"class":4007,"line":4008},[4005,5056,4299],{"class":4171},[4005,5058,5059],{"class":4302}," processFile",[4005,5061,4611],{"class":4182},[4005,5063,5064],{"class":4174},"path",[4005,5066,4237],{"class":4178},[4005,5068,4498],{"class":4182},[4005,5070,3857],{"class":4178},[4005,5072,5073],{"class":4182}," {\n",[4005,5075,5076,5079,5081,5083,5085,5087,5089,5091,5093,5095,5097],{"class":4007,"line":4014},[4005,5077,5078],{"class":4174},"    f",[4005,5080,3836],{"class":4182},[4005,5082,4598],{"class":4174},[4005,5084,4314],{"class":4182},[4005,5086,4603],{"class":4174},[4005,5088,3769],{"class":4182},[4005,5090,4608],{"class":4302},[4005,5092,4611],{"class":4182},[4005,5094,5064],{"class":4174},[4005,5096,4498],{"class":4182},[4005,5098,5099],{"class":4190},"\u002F\u002F Перше оголошення: f та err — нові змінні\n",[4005,5101,5102,5105,5108,5111,5113],{"class":4007,"line":4020},[4005,5103,5104],{"class":4836},"    if",[4005,5106,5107],{"class":4174}," err",[4005,5109,5110],{"class":4182}," != ",[4005,5112,4209],{"class":4171},[4005,5114,5073],{"class":4182},[4005,5116,5117,5120],{"class":4007,"line":4026},[4005,5118,5119],{"class":4836},"        return",[4005,5121,5122],{"class":4174}," err\n",[4005,5124,5125],{"class":4007,"line":4032},[4005,5126,5127],{"class":4182},"    }\n",[4005,5129,5130,5133,5136,5138,5141],{"class":4007,"line":4039},[4005,5131,5132],{"class":4836},"    defer",[4005,5134,5135],{"class":4174}," f",[4005,5137,3769],{"class":4182},[4005,5139,5140],{"class":4302},"Close",[4005,5142,5143],{"class":4182},"()\n",[4005,5145,5146],{"class":4007,"line":4045},[4005,5147,4036],{"emptyLinePlaceholder":4035},[4005,5149,5150,5153,5155,5157,5160,5163,5165,5168],{"class":4007,"line":4051},[4005,5151,5152],{"class":4174},"    data",[4005,5154,4314],{"class":4182},[4005,5156,3764],{"class":4302},[4005,5158,5159],{"class":4182},"([]",[4005,5161,5162],{"class":4178},"byte",[4005,5164,3836],{"class":4182},[4005,5166,5167],{"class":4186},"1024",[4005,5169,4482],{"class":4182},[4005,5171,5172,5175,5177,5179,5181,5184,5186,5189,5191,5194,5197],{"class":4007,"line":4057},[4005,5173,5174],{"class":4174},"    n",[4005,5176,3836],{"class":4182},[4005,5178,4598],{"class":4174},[4005,5180,4314],{"class":4182},[4005,5182,5183],{"class":4174},"f",[4005,5185,3769],{"class":4182},[4005,5187,5188],{"class":4302},"Read",[4005,5190,4611],{"class":4182},[4005,5192,5193],{"class":4174},"data",[4005,5195,5196],{"class":4182},")  ",[4005,5198,5199],{"class":4190},"\u002F\u002F Друге використання `:=`\n",[4005,5201,5202],{"class":4007,"line":4063},[4005,5203,5204],{"class":4190},"                            \u002F\u002F n — нова змінна\n",[4005,5206,5207],{"class":4007,"line":4069},[4005,5208,5209],{"class":4190},"                            \u002F\u002F err — ПЕРЕВИКОРИСТАНА (оновлює значення існуючої змінної)\n",[4005,5211,5212],{"class":4007,"line":4075},[4005,5213,5214],{"class":4182},"    \n",[4005,5216,5217,5219,5221,5223,5225,5228,5230,5232,5235,5237,5240],{"class":4007,"line":4081},[4005,5218,5104],{"class":4836},[4005,5220,5107],{"class":4174},[4005,5222,5110],{"class":4182},[4005,5224,4209],{"class":4171},[4005,5226,5227],{"class":4182}," && ",[4005,5229,4598],{"class":4174},[4005,5231,5110],{"class":4182},[4005,5233,5234],{"class":4174},"io",[4005,5236,3769],{"class":4182},[4005,5238,5239],{"class":4174},"EOF",[4005,5241,5073],{"class":4182},[4005,5243,5244,5246],{"class":4007,"line":4086},[4005,5245,5119],{"class":4836},[4005,5247,5122],{"class":4174},[4005,5249,5250],{"class":4007,"line":4092},[4005,5251,5127],{"class":4182},[4005,5253,5254],{"class":4007,"line":4098},[4005,5255,5214],{"class":4182},[4005,5257,5258,5261],{"class":4007,"line":4104},[4005,5259,5260],{"class":4836},"    return",[4005,5262,5263],{"class":4171}," nil\n",[4005,5265,5266],{"class":4007,"line":4110},[4005,5267,4078],{"class":4182},[3908,5269,5270],{},[3871,5271,5272],{},"⚠️ Пастка: тіньове перекриття у вкладених блоках",[3908,5274,5275,5276,5278,5279,5282,5283,5286],{},"Якщо використати ",[3753,5277,3755],{}," у вкладеному блоці ",[3753,5280,5281],{},"{}",", створюються ",[3871,5284,5285],{},"нові локальні змінні",", які \"затінюють\" зовнішні:",[3984,5288,5290],{"className":4162,"code":5289,"language":4164,"meta":3992,"style":3992},"func example() {\n    x := 10          \u002F\u002F Зовнішня змінна x\n    \n    if true {\n        x := 20      \u002F\u002F ❌ Нова змінна x, яка затінює зовнішню!\n        fmt.Println(x)  \u002F\u002F Виведе: 20\n    }\n    \n    fmt.Println(x)   \u002F\u002F Виведе: 10 (зовнішня змінна не змінилась!)\n}\n",[3753,5291,5292,5301,5313,5317,5326,5339,5358,5362,5366,5385],{"__ignoreMap":3992},[4005,5293,5294,5296,5299],{"class":4007,"line":4008},[4005,5295,4299],{"class":4171},[4005,5297,5298],{"class":4302}," example",[4005,5300,4306],{"class":4182},[4005,5302,5303,5306,5308,5310],{"class":4007,"line":4014},[4005,5304,5305],{"class":4174},"    x",[4005,5307,4314],{"class":4182},[4005,5309,4631],{"class":4186},[4005,5311,5312],{"class":4190},"          \u002F\u002F Зовнішня змінна x\n",[4005,5314,5315],{"class":4007,"line":4020},[4005,5316,5214],{"class":4182},[4005,5318,5319,5321,5324],{"class":4007,"line":4026},[4005,5320,5104],{"class":4836},[4005,5322,5323],{"class":4171}," true",[4005,5325,5073],{"class":4182},[4005,5327,5328,5331,5333,5336],{"class":4007,"line":4032},[4005,5329,5330],{"class":4174},"        x",[4005,5332,4314],{"class":4182},[4005,5334,5335],{"class":4186},"20",[4005,5337,5338],{"class":4190},"      \u002F\u002F ❌ Нова змінна x, яка затінює зовнішню!\n",[4005,5340,5341,5344,5346,5349,5351,5353,5355],{"class":4007,"line":4039},[4005,5342,5343],{"class":4174},"        fmt",[4005,5345,3769],{"class":4182},[4005,5347,5348],{"class":4302},"Println",[4005,5350,4611],{"class":4182},[4005,5352,4621],{"class":4174},[4005,5354,5196],{"class":4182},[4005,5356,5357],{"class":4190},"\u002F\u002F Виведе: 20\n",[4005,5359,5360],{"class":4007,"line":4045},[4005,5361,5127],{"class":4182},[4005,5363,5364],{"class":4007,"line":4051},[4005,5365,5214],{"class":4182},[4005,5367,5368,5371,5373,5375,5377,5379,5382],{"class":4007,"line":4057},[4005,5369,5370],{"class":4174},"    fmt",[4005,5372,3769],{"class":4182},[4005,5374,5348],{"class":4302},[4005,5376,4611],{"class":4182},[4005,5378,4621],{"class":4174},[4005,5380,5381],{"class":4182},")   ",[4005,5383,5384],{"class":4190},"\u002F\u002F Виведе: 10 (зовнішня змінна не змінилась!)\n",[4005,5386,5387],{"class":4007,"line":4063},[4005,5388,4078],{"class":4182},[3908,5390,5391],{},[3871,5392,5393],{},"Три ключові правила:",[4781,5395,5396,5408,5417],{},[3749,5397,5398,3880,5401,5404,5405,5032],{},[3871,5399,5400],{},"Потрібна хоча б одна нова змінна:",[3753,5402,5403],{},"x := 1; x := 2"," не працює (помилка ",[3753,5406,5407],{},"no new variables",[3749,5409,5410,5416],{},[3871,5411,5412,5413,5415],{},"Вкладені блоки ",[3753,5414,5281],{}," створюють нову область видимості:"," змінна з таким самим ім'ям затінює зовнішню",[3749,5418,5419,5425],{},[3871,5420,5421,5422],{},"Інструмент ",[3753,5423,5424],{},"go vet -shadow"," допоможе знайти випадкове затініння",[5427,5428,5429,5434],"caution",{},[3908,5430,5431],{},[3871,5432,5433],{},"Класична помилка з витоком ресурсів:",[3984,5435,5437],{"className":4162,"code":5436,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ❌ НЕПРАВИЛЬНО\nif f, err := os.Open(path); err == nil { \n    defer f.Close()  \u002F\u002F defer виконається після закінчення блоку if,\n}                     \u002F\u002F але f існує тільки всередині if!\n\n\u002F\u002F ✅ ПРАВИЛЬНО - варіант 1\nvar f *os.File\nvar err error\nif f, err = os.Open(path); err == nil {\n    defer f.Close()  \u002F\u002F Тепер f доступний у зовнішній області\n}\n\n\u002F\u002F ✅ ПРАВИЛЬНО - варіант 2\nif f, err := os.Open(path); err == nil {\n    defer f.Close()  \u002F\u002F defer всередині блоку if\n    \u002F\u002F робота з файлом тут\n}\n",[3753,5438,5439,5444,5479,5495,5503,5507,5512,5528,5537,5569,5584,5588,5592,5597,5629,5644,5649],{"__ignoreMap":3992},[4005,5440,5441],{"class":4007,"line":4008},[4005,5442,5443],{"class":4190},"\u002F\u002F ❌ НЕПРАВИЛЬНО\n",[4005,5445,5446,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466,5469,5471,5474,5476],{"class":4007,"line":4014},[4005,5447,3800],{"class":4836},[4005,5449,5135],{"class":4174},[4005,5451,3836],{"class":4182},[4005,5453,4598],{"class":4174},[4005,5455,4314],{"class":4182},[4005,5457,4603],{"class":4174},[4005,5459,3769],{"class":4182},[4005,5461,4608],{"class":4302},[4005,5463,4611],{"class":4182},[4005,5465,5064],{"class":4174},[4005,5467,5468],{"class":4182},"); ",[4005,5470,4598],{"class":4174},[4005,5472,5473],{"class":4182}," == ",[4005,5475,4209],{"class":4171},[4005,5477,5478],{"class":4182}," { \n",[4005,5480,5481,5483,5485,5487,5489,5492],{"class":4007,"line":4020},[4005,5482,5132],{"class":4836},[4005,5484,5135],{"class":4174},[4005,5486,3769],{"class":4182},[4005,5488,5140],{"class":4302},[4005,5490,5491],{"class":4182},"()  ",[4005,5493,5494],{"class":4190},"\u002F\u002F defer виконається після закінчення блоку if,\n",[4005,5496,5497,5500],{"class":4007,"line":4026},[4005,5498,5499],{"class":4182},"}                     ",[4005,5501,5502],{"class":4190},"\u002F\u002F але f існує тільки всередині if!\n",[4005,5504,5505],{"class":4007,"line":4032},[4005,5506,4036],{"emptyLinePlaceholder":4035},[4005,5508,5509],{"class":4007,"line":4039},[4005,5510,5511],{"class":4190},"\u002F\u002F ✅ ПРАВИЛЬНО - варіант 1\n",[4005,5513,5514,5516,5518,5521,5523,5525],{"class":4007,"line":4045},[4005,5515,3963],{"class":4171},[4005,5517,5135],{"class":4174},[4005,5519,5520],{"class":4182}," *",[4005,5522,4603],{"class":4178},[4005,5524,3769],{"class":4182},[4005,5526,5527],{"class":4178},"File\n",[4005,5529,5530,5532,5534],{"class":4007,"line":4051},[4005,5531,3963],{"class":4171},[4005,5533,5107],{"class":4174},[4005,5535,5536],{"class":4178}," error\n",[4005,5538,5539,5541,5543,5545,5547,5549,5551,5553,5555,5557,5559,5561,5563,5565,5567],{"class":4007,"line":4057},[4005,5540,3800],{"class":4836},[4005,5542,5135],{"class":4174},[4005,5544,3836],{"class":4182},[4005,5546,4598],{"class":4174},[4005,5548,4183],{"class":4182},[4005,5550,4603],{"class":4174},[4005,5552,3769],{"class":4182},[4005,5554,4608],{"class":4302},[4005,5556,4611],{"class":4182},[4005,5558,5064],{"class":4174},[4005,5560,5468],{"class":4182},[4005,5562,4598],{"class":4174},[4005,5564,5473],{"class":4182},[4005,5566,4209],{"class":4171},[4005,5568,5073],{"class":4182},[4005,5570,5571,5573,5575,5577,5579,5581],{"class":4007,"line":4063},[4005,5572,5132],{"class":4836},[4005,5574,5135],{"class":4174},[4005,5576,3769],{"class":4182},[4005,5578,5140],{"class":4302},[4005,5580,5491],{"class":4182},[4005,5582,5583],{"class":4190},"\u002F\u002F Тепер f доступний у зовнішній області\n",[4005,5585,5586],{"class":4007,"line":4069},[4005,5587,4078],{"class":4182},[4005,5589,5590],{"class":4007,"line":4075},[4005,5591,4036],{"emptyLinePlaceholder":4035},[4005,5593,5594],{"class":4007,"line":4081},[4005,5595,5596],{"class":4190},"\u002F\u002F ✅ ПРАВИЛЬНО - варіант 2\n",[4005,5598,5599,5601,5603,5605,5607,5609,5611,5613,5615,5617,5619,5621,5623,5625,5627],{"class":4007,"line":4086},[4005,5600,3800],{"class":4836},[4005,5602,5135],{"class":4174},[4005,5604,3836],{"class":4182},[4005,5606,4598],{"class":4174},[4005,5608,4314],{"class":4182},[4005,5610,4603],{"class":4174},[4005,5612,3769],{"class":4182},[4005,5614,4608],{"class":4302},[4005,5616,4611],{"class":4182},[4005,5618,5064],{"class":4174},[4005,5620,5468],{"class":4182},[4005,5622,4598],{"class":4174},[4005,5624,5473],{"class":4182},[4005,5626,4209],{"class":4171},[4005,5628,5073],{"class":4182},[4005,5630,5631,5633,5635,5637,5639,5641],{"class":4007,"line":4092},[4005,5632,5132],{"class":4836},[4005,5634,5135],{"class":4174},[4005,5636,3769],{"class":4182},[4005,5638,5140],{"class":4302},[4005,5640,5491],{"class":4182},[4005,5642,5643],{"class":4190},"\u002F\u002F defer всередині блоку if\n",[4005,5645,5646],{"class":4007,"line":4098},[4005,5647,5648],{"class":4190},"    \u002F\u002F робота з файлом тут\n",[4005,5650,5651],{"class":4007,"line":4104},[4005,5652,4078],{"class":4182},[3900,5654],{},[3976,5656,5658],{"id":5657},"суворі-правила-компілятора-щодо-змінних","Суворі правила компілятора щодо змінних",[3908,5660,5661],{},"Компілятор Go спроєктований так, щоб запобігати накопиченню помилок та кодового «сміття»:",[4781,5663,5664,5673],{},[3749,5665,5666,5669,5670,3769],{},[3871,5667,5668],{},"Заборона невикористаних локальних змінних:","\nЯкщо всередині функції ви оголосили змінну, але жодного разу не прочитали її значення, компілятор зупинить збірку з помилкою: ",[3753,5671,5672],{},"declared and not used: myVar",[3749,5674,5675,5682,5683,5685,5686],{},[3871,5676,5677,5678,5681],{},"Порожній ідентифікатор (",[3753,5679,5680],{},"_"," — Blank Identifier):","\nЯкщо функція повертає кілька значень (наприклад, результат і помилку), але одне з них вам не потрібне, використовується символ підкреслення ",[3753,5684,5680],{},". Компілятор ігнорує це значення без виділення зайвої пам'яті:\n",[3984,5687,5689],{"className":4162,"code":5688,"language":4164,"meta":3992,"style":3992},"result, _ := calculateMetrics()\n",[3753,5690,5691],{"__ignoreMap":3992},[4005,5692,5693,5696,5698,5700,5702,5705],{"class":4007,"line":4008},[4005,5694,5695],{"class":4174},"result",[4005,5697,3836],{"class":4182},[4005,5699,5680],{"class":4174},[4005,5701,4314],{"class":4182},[4005,5703,5704],{"class":4302},"calculateMetrics",[4005,5706,5143],{"class":4182},[3900,5708],{},[3903,5710,5712,5713],{"id":5711},"константи-та-генератор-послідовностей-iota","Константи та генератор послідовностей ",[3753,5714,3779],{},[3908,5716,5717],{},"У програмуванні часто виникає потреба зафіксувати незмінні величини: максимальний розмір мережевого пакета, математичні константи, статуси з'єднання або коди помилок.",[3908,5719,5720,5725,5726,5729],{},[3871,5721,5722,5723,5032],{},"Константа (",[3753,5724,3968],{}," — це іменоване значення, яке обчислюється ",[3871,5727,5728],{},"виключно на етапі компіляції"," програми. Після компіляції значення константи «зашивається» в машинний код і фізично не може бути змінене під час виконання.",[3984,5731,5733],{"className":4162,"code":5732,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"time\"\n\nfunc main() {\n    const MaxConnections = 10000 \u002F\u002F Валідно: константа відома компілятору\n    const AppVersion = \"v1.2.4\"  \u002F\u002F Валідно: незмінний рядок\n\n    \u002F\u002F ❌ ПОМИЛКА КОМПІЛЯЦІЇ:\n    \u002F\u002F const CurrentTime = time.Now()\n    \u002F\u002F Помилка: time.Now() обчислюється під час виконання (Runtime), а не компіляції!\n}\n",[3753,5734,5735,5743,5747,5754,5758,5767,5783,5798,5802,5807,5812,5817],{"__ignoreMap":3992},[4005,5736,5737,5740],{"class":4007,"line":4008},[4005,5738,5739],{"class":4171},"package",[4005,5741,5742],{"class":4178}," main\n",[4005,5744,5745],{"class":4007,"line":4014},[4005,5746,4036],{"emptyLinePlaceholder":4035},[4005,5748,5749,5751],{"class":4007,"line":4020},[4005,5750,3917],{"class":4836},[4005,5752,5753],{"class":4330}," \"time\"\n",[4005,5755,5756],{"class":4007,"line":4026},[4005,5757,4036],{"emptyLinePlaceholder":4035},[4005,5759,5760,5762,5765],{"class":4007,"line":4032},[4005,5761,4299],{"class":4171},[4005,5763,5764],{"class":4302}," main",[4005,5766,4306],{"class":4182},[4005,5768,5769,5772,5775,5777,5780],{"class":4007,"line":4039},[4005,5770,5771],{"class":4171},"    const",[4005,5773,5774],{"class":4877}," MaxConnections",[4005,5776,4183],{"class":4182},[4005,5778,5779],{"class":4186},"10000",[4005,5781,5782],{"class":4190}," \u002F\u002F Валідно: константа відома компілятору\n",[4005,5784,5785,5787,5790,5792,5795],{"class":4007,"line":4045},[4005,5786,5771],{"class":4171},[4005,5788,5789],{"class":4877}," AppVersion",[4005,5791,4183],{"class":4182},[4005,5793,5794],{"class":4330},"\"v1.2.4\"",[4005,5796,5797],{"class":4190},"  \u002F\u002F Валідно: незмінний рядок\n",[4005,5799,5800],{"class":4007,"line":4051},[4005,5801,4036],{"emptyLinePlaceholder":4035},[4005,5803,5804],{"class":4007,"line":4057},[4005,5805,5806],{"class":4190},"    \u002F\u002F ❌ ПОМИЛКА КОМПІЛЯЦІЇ:\n",[4005,5808,5809],{"class":4007,"line":4063},[4005,5810,5811],{"class":4190},"    \u002F\u002F const CurrentTime = time.Now()\n",[4005,5813,5814],{"class":4007,"line":4069},[4005,5815,5816],{"class":4190},"    \u002F\u002F Помилка: time.Now() обчислюється під час виконання (Runtime), а не компіляції!\n",[4005,5818,5819],{"class":4007,"line":4075},[4005,5820,4078],{"class":4182},[3976,5822,5824],{"id":5823},"константи-з-типом-та-без-типу","Константи з типом та без типу",[3908,5826,5827,5828,5831],{},"Константи в Go можуть бути ",[3871,5829,5830],{},"двох видів",":",[3908,5833,5834,5837],{},[3871,5835,5836],{},"1. Нетипізовані константи"," (untyped constants) — без явного типу:",[3984,5839,5841],{"className":4162,"code":5840,"language":4164,"meta":3992,"style":3992},"const Pi = 3.14              \u002F\u002F компілятор зберігає як \"ідеальне число\"\nconst MaxRetries = 5         \u002F\u002F компілятор зберігає як \"ідеальне ціле\"\nconst AppName = \"MyApp\"      \u002F\u002F компілятор зберігає як \"ідеальний рядок\"\n",[3753,5842,5843,5858,5873],{"__ignoreMap":3992},[4005,5844,5845,5847,5850,5852,5855],{"class":4007,"line":4008},[4005,5846,3968],{"class":4171},[4005,5848,5849],{"class":4877}," Pi",[4005,5851,4183],{"class":4182},[4005,5853,5854],{"class":4186},"3.14",[4005,5856,5857],{"class":4190},"              \u002F\u002F компілятор зберігає як \"ідеальне число\"\n",[4005,5859,5860,5862,5865,5867,5870],{"class":4007,"line":4014},[4005,5861,3968],{"class":4171},[4005,5863,5864],{"class":4877}," MaxRetries",[4005,5866,4183],{"class":4182},[4005,5868,5869],{"class":4186},"5",[4005,5871,5872],{"class":4190},"         \u002F\u002F компілятор зберігає як \"ідеальне ціле\"\n",[4005,5874,5875,5877,5880,5882,5885],{"class":4007,"line":4020},[4005,5876,3968],{"class":4171},[4005,5878,5879],{"class":4877}," AppName",[4005,5881,4183],{"class":4182},[4005,5883,5884],{"class":4330},"\"MyApp\"",[4005,5886,5887],{"class":4190},"      \u002F\u002F компілятор зберігає як \"ідеальний рядок\"\n",[3908,5889,5890,5893],{},[3871,5891,5892],{},"2. Типізовані константи"," (typed constants) — з явним типом:",[3984,5895,5897],{"className":4162,"code":5896,"language":4164,"meta":3992,"style":3992},"const Pi float64 = 3.14           \u002F\u002F завжди float64\nconst MaxRetries int = 5          \u002F\u002F завжди int\nconst Timeout time.Duration = 30  \u002F\u002F завжди time.Duration\n\ntype RequestStatus uint8\nconst StatusPending RequestStatus = 1  \u002F\u002F завжди RequestStatus\n",[3753,5898,5899,5915,5930,5952,5956,5966],{"__ignoreMap":3992},[4005,5900,5901,5903,5905,5908,5910,5912],{"class":4007,"line":4008},[4005,5902,3968],{"class":4171},[4005,5904,5849],{"class":4877},[4005,5906,5907],{"class":4178}," float64",[4005,5909,4183],{"class":4182},[4005,5911,5854],{"class":4186},[4005,5913,5914],{"class":4190},"           \u002F\u002F завжди float64\n",[4005,5916,5917,5919,5921,5923,5925,5927],{"class":4007,"line":4014},[4005,5918,3968],{"class":4171},[4005,5920,5864],{"class":4877},[4005,5922,4224],{"class":4178},[4005,5924,4183],{"class":4182},[4005,5926,5869],{"class":4186},[4005,5928,5929],{"class":4190},"          \u002F\u002F завжди int\n",[4005,5931,5932,5934,5937,5940,5942,5945,5947,5949],{"class":4007,"line":4020},[4005,5933,3968],{"class":4171},[4005,5935,5936],{"class":4877}," Timeout",[4005,5938,5939],{"class":4178}," time",[4005,5941,3769],{"class":4182},[4005,5943,5944],{"class":4178},"Duration",[4005,5946,4183],{"class":4182},[4005,5948,4276],{"class":4186},[4005,5950,5951],{"class":4190},"  \u002F\u002F завжди time.Duration\n",[4005,5953,5954],{"class":4007,"line":4026},[4005,5955,4036],{"emptyLinePlaceholder":4035},[4005,5957,5958,5960,5963],{"class":4007,"line":4032},[4005,5959,4809],{"class":4171},[4005,5961,5962],{"class":4178}," RequestStatus",[4005,5964,5965],{"class":4178}," uint8\n",[4005,5967,5968,5970,5973,5975,5977,5979],{"class":4007,"line":4039},[4005,5969,3968],{"class":4171},[4005,5971,5972],{"class":4877}," StatusPending",[4005,5974,5962],{"class":4178},[4005,5976,4183],{"class":4182},[4005,5978,4393],{"class":4186},[4005,5980,5981],{"class":4190},"  \u002F\u002F завжди RequestStatus\n",[4484,5983,5985,5990,6043],{"icon":5984},"i-lucide-key",[3908,5986,5987],{},[3871,5988,5989],{},"Ключова різниця:",[5991,5992,5993,6009],"table",{},[5994,5995,5996],"thead",{},[5997,5998,5999,6003,6006],"tr",{},[6000,6001,6002],"th",{},"Тип константи",[6000,6004,6005],{},"Приклад",[6000,6007,6008],{},"Поведінка",[6010,6011,6012,6028],"tbody",{},[5997,6013,6014,6020,6025],{},[6015,6016,6017],"td",{},[3871,6018,6019],{},"Нетипізована",[6015,6021,6022],{},[3753,6023,6024],{},"const X = 10",[6015,6026,6027],{},"Гнучка: підлаштовується під контекст використання",[5997,6029,6030,6035,6040],{},[6015,6031,6032],{},[3871,6033,6034],{},"Типізована",[6015,6036,6037],{},[3753,6038,6039],{},"const X int = 10",[6015,6041,6042],{},"Жорстка: потребує явного перетворення при змішуванні типів",[3984,6044,6046],{"className":4162,"code":6045,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Нетипізована — гнучка:\nconst Flexible = 100\nvar a int = Flexible      \u002F\u002F ✅ OK\nvar b int64 = Flexible    \u002F\u002F ✅ OK\nvar c float64 = Flexible  \u002F\u002F ✅ OK\n\n\u002F\u002F Типізована — жорстка:\nconst Strict int = 100\nvar x int = Strict        \u002F\u002F ✅ OK\nvar y int64 = Strict      \u002F\u002F ❌ Помилка: cannot use Strict (type int) as type int64\nvar z int64 = int64(Strict)  \u002F\u002F ✅ OK: потрібне явне перетворення\n",[3753,6047,6048,6053,6065,6081,6097,6113,6117,6122,6135,6152,6168],{"__ignoreMap":3992},[4005,6049,6050],{"class":4007,"line":4008},[4005,6051,6052],{"class":4190},"\u002F\u002F Нетипізована — гнучка:\n",[4005,6054,6055,6057,6060,6062],{"class":4007,"line":4014},[4005,6056,3968],{"class":4171},[4005,6058,6059],{"class":4877}," Flexible",[4005,6061,4183],{"class":4182},[4005,6063,6064],{"class":4186},"100\n",[4005,6066,6067,6069,6071,6073,6075,6078],{"class":4007,"line":4020},[4005,6068,3963],{"class":4171},[4005,6070,4376],{"class":4174},[4005,6072,4224],{"class":4178},[4005,6074,4183],{"class":4182},[4005,6076,6077],{"class":4174},"Flexible",[4005,6079,6080],{"class":4190},"      \u002F\u002F ✅ OK\n",[4005,6082,6083,6085,6088,6090,6092,6094],{"class":4007,"line":4026},[4005,6084,3963],{"class":4171},[4005,6086,6087],{"class":4174}," b",[4005,6089,4179],{"class":4178},[4005,6091,4183],{"class":4182},[4005,6093,6077],{"class":4174},[4005,6095,6096],{"class":4190},"    \u002F\u002F ✅ OK\n",[4005,6098,6099,6101,6104,6106,6108,6110],{"class":4007,"line":4032},[4005,6100,3963],{"class":4171},[4005,6102,6103],{"class":4174}," c",[4005,6105,5907],{"class":4178},[4005,6107,4183],{"class":4182},[4005,6109,6077],{"class":4174},[4005,6111,6112],{"class":4190},"  \u002F\u002F ✅ OK\n",[4005,6114,6115],{"class":4007,"line":4039},[4005,6116,4036],{"emptyLinePlaceholder":4035},[4005,6118,6119],{"class":4007,"line":4045},[4005,6120,6121],{"class":4190},"\u002F\u002F Типізована — жорстка:\n",[4005,6123,6124,6126,6129,6131,6133],{"class":4007,"line":4051},[4005,6125,3968],{"class":4171},[4005,6127,6128],{"class":4877}," Strict",[4005,6130,4224],{"class":4178},[4005,6132,4183],{"class":4182},[4005,6134,6064],{"class":4186},[4005,6136,6137,6139,6142,6144,6146,6149],{"class":4007,"line":4057},[4005,6138,3963],{"class":4171},[4005,6140,6141],{"class":4174}," x",[4005,6143,4224],{"class":4178},[4005,6145,4183],{"class":4182},[4005,6147,6148],{"class":4174},"Strict",[4005,6150,6151],{"class":4190},"        \u002F\u002F ✅ OK\n",[4005,6153,6154,6156,6159,6161,6163,6165],{"class":4007,"line":4063},[4005,6155,3963],{"class":4171},[4005,6157,6158],{"class":4174}," y",[4005,6160,4179],{"class":4178},[4005,6162,4183],{"class":4182},[4005,6164,6148],{"class":4174},[4005,6166,6167],{"class":4190},"      \u002F\u002F ❌ Помилка: cannot use Strict (type int) as type int64\n",[4005,6169,6170,6172,6175,6177,6179,6181,6183,6185,6187],{"class":4007,"line":4069},[4005,6171,3963],{"class":4171},[4005,6173,6174],{"class":4174}," z",[4005,6176,4179],{"class":4178},[4005,6178,4183],{"class":4182},[4005,6180,4154],{"class":4178},[4005,6182,4611],{"class":4182},[4005,6184,6148],{"class":4174},[4005,6186,5196],{"class":4182},[4005,6188,6189],{"class":4190},"\u002F\u002F ✅ OK: потрібне явне перетворення\n",[4748,6191,6192,6197,6208,6213,6220,6295,6300,6303,6379],{},[3908,6193,6194],{},[3871,6195,6196],{},"Нетипізовані константи: гнучкість без явних перетворень",[3908,6198,6199,6200,6203,6204,6207],{},"Константи в Go можуть існувати в двох формах: ",[3871,6201,6202],{},"з типом"," і ",[3871,6205,6206],{},"без типу",". Нетипізовані константи — це особлива можливість Go, яка робить код зручнішим.",[3908,6209,6210],{},[3871,6211,6212],{},"Як це працює?",[3908,6214,6215,6216,6219],{},"Уявіть, що константа без типу — це ",[3871,6217,6218],{},"значення, яке ще не \"упаковане\" в конкретний тип",". Коли ви її використовуєте, Go автоматично підбирає потрібний тип:",[3984,6221,6223],{"className":4162,"code":6222,"language":4164,"meta":3992,"style":3992},"const Pi = 3.14              \u002F\u002F Константа без типу\n\nvar x float64 = Pi           \u002F\u002F Pi автоматично стає float64\nvar y float32 = Pi           \u002F\u002F Та сама Pi автоматично стає float32\nvar z int = 3 + 2            \u002F\u002F 3 і 2 — нетипізовані, результат стає int\n",[3753,6224,6225,6238,6242,6258,6274],{"__ignoreMap":3992},[4005,6226,6227,6229,6231,6233,6235],{"class":4007,"line":4008},[4005,6228,3968],{"class":4171},[4005,6230,5849],{"class":4877},[4005,6232,4183],{"class":4182},[4005,6234,5854],{"class":4186},[4005,6236,6237],{"class":4190},"              \u002F\u002F Константа без типу\n",[4005,6239,6240],{"class":4007,"line":4014},[4005,6241,4036],{"emptyLinePlaceholder":4035},[4005,6243,6244,6246,6248,6250,6252,6255],{"class":4007,"line":4020},[4005,6245,3963],{"class":4171},[4005,6247,6141],{"class":4174},[4005,6249,5907],{"class":4178},[4005,6251,4183],{"class":4182},[4005,6253,6254],{"class":4174},"Pi",[4005,6256,6257],{"class":4190},"           \u002F\u002F Pi автоматично стає float64\n",[4005,6259,6260,6262,6264,6267,6269,6271],{"class":4007,"line":4026},[4005,6261,3963],{"class":4171},[4005,6263,6158],{"class":4174},[4005,6265,6266],{"class":4178}," float32",[4005,6268,4183],{"class":4182},[4005,6270,6254],{"class":4174},[4005,6272,6273],{"class":4190},"           \u002F\u002F Та сама Pi автоматично стає float32\n",[4005,6275,6276,6278,6280,6282,6284,6287,6290,6292],{"class":4007,"line":4032},[4005,6277,3963],{"class":4171},[4005,6279,6174],{"class":4174},[4005,6281,4224],{"class":4178},[4005,6283,4183],{"class":4182},[4005,6285,6286],{"class":4186},"3",[4005,6288,6289],{"class":4182}," + ",[4005,6291,4398],{"class":4186},[4005,6293,6294],{"class":4190},"            \u002F\u002F 3 і 2 — нетипізовані, результат стає int\n",[3908,6296,6297],{},[3871,6298,6299],{},"Чому це зручно?",[3908,6301,6302],{},"Без нетипізованих констант довелося б писати так:",[3984,6304,6306],{"className":4162,"code":6305,"language":4164,"meta":3992,"style":3992},"const Pi float64 = 3.14      \u002F\u002F Константа з типом float64\n\nvar x float64 = Pi           \u002F\u002F ✅ OK\nvar y float32 = Pi           \u002F\u002F ❌ Помилка! Потрібне float32(Pi)\nvar y float32 = float32(Pi)  \u002F\u002F ✅ Тепер OK, але незручно\n",[3753,6307,6308,6323,6327,6342,6357],{"__ignoreMap":3992},[4005,6309,6310,6312,6314,6316,6318,6320],{"class":4007,"line":4008},[4005,6311,3968],{"class":4171},[4005,6313,5849],{"class":4877},[4005,6315,5907],{"class":4178},[4005,6317,4183],{"class":4182},[4005,6319,5854],{"class":4186},[4005,6321,6322],{"class":4190},"      \u002F\u002F Константа з типом float64\n",[4005,6324,6325],{"class":4007,"line":4014},[4005,6326,4036],{"emptyLinePlaceholder":4035},[4005,6328,6329,6331,6333,6335,6337,6339],{"class":4007,"line":4020},[4005,6330,3963],{"class":4171},[4005,6332,6141],{"class":4174},[4005,6334,5907],{"class":4178},[4005,6336,4183],{"class":4182},[4005,6338,6254],{"class":4174},[4005,6340,6341],{"class":4190},"           \u002F\u002F ✅ OK\n",[4005,6343,6344,6346,6348,6350,6352,6354],{"class":4007,"line":4026},[4005,6345,3963],{"class":4171},[4005,6347,6158],{"class":4174},[4005,6349,6266],{"class":4178},[4005,6351,4183],{"class":4182},[4005,6353,6254],{"class":4174},[4005,6355,6356],{"class":4190},"           \u002F\u002F ❌ Помилка! Потрібне float32(Pi)\n",[4005,6358,6359,6361,6363,6365,6367,6370,6372,6374,6376],{"class":4007,"line":4032},[4005,6360,3963],{"class":4171},[4005,6362,6158],{"class":4174},[4005,6364,6266],{"class":4178},[4005,6366,4183],{"class":4182},[4005,6368,6369],{"class":4178},"float32",[4005,6371,4611],{"class":4182},[4005,6373,6254],{"class":4174},[4005,6375,5196],{"class":4182},[4005,6377,6378],{"class":4190},"\u002F\u002F ✅ Тепер OK, але незручно\n",[3908,6380,6381,6384],{},[3871,6382,6383],{},"Висновок:"," нетипізовані константи економлять час — Go сам визначає потрібний тип залежно від контексту.",[6386,6387,6388],"accordion",{},[6389,6390,6393,6399,6407,6418,6485,6491,6497,6507],"accordion-item",{"icon":6391,"label":6392},"i-lucide-zoom-in","Для допитливих: чому 1\u003C\u003C100 валідна як константа, але не як int64?",[3908,6394,6395,6398],{},[3871,6396,6397],{},"Ключова відмінність Go:"," константи без типу живуть у \"математичному світі\" компілятора з величезною точністю (до 512 біт), а не в обмеженій пам'яті типів.",[3976,6400,6402,6403,6406],{"id":6401},"що-таке-1-100","Що таке ",[3753,6404,6405],{},"1 \u003C\u003C 100","?",[3908,6408,6409,6410,6413,6414,6417],{},"Символ ",[3753,6411,6412],{},"\u003C\u003C"," — це ",[3871,6415,6416],{},"побітовий зсув вліво",". Кожен зсув на 1 позицію = множення на 2:",[3984,6419,6421],{"className":4162,"code":6420,"language":4164,"meta":3992,"style":3992},"1 \u003C\u003C 0  = 1        \u002F\u002F 1 × 2⁰ = 1\n1 \u003C\u003C 1  = 2        \u002F\u002F 1 × 2¹ = 2\n1 \u003C\u003C 10 = 1024     \u002F\u002F 1 × 2¹⁰ = 1024 (1 кілобайт)\n1 \u003C\u003C 100 = ?       \u002F\u002F 1 × 2¹⁰⁰ = 1267650600228229401496703205376\n",[3753,6422,6423,6440,6455,6470],{"__ignoreMap":3992},[4005,6424,6425,6427,6430,6432,6435,6437],{"class":4007,"line":4008},[4005,6426,4393],{"class":4186},[4005,6428,6429],{"class":4182}," \u003C\u003C ",[4005,6431,4200],{"class":4186},[4005,6433,6434],{"class":4182},"  = ",[4005,6436,4393],{"class":4186},[4005,6438,6439],{"class":4190},"        \u002F\u002F 1 × 2⁰ = 1\n",[4005,6441,6442,6444,6446,6448,6450,6452],{"class":4007,"line":4014},[4005,6443,4393],{"class":4186},[4005,6445,6429],{"class":4182},[4005,6447,4393],{"class":4186},[4005,6449,6434],{"class":4182},[4005,6451,4398],{"class":4186},[4005,6453,6454],{"class":4190},"        \u002F\u002F 1 × 2¹ = 2\n",[4005,6456,6457,6459,6461,6463,6465,6467],{"class":4007,"line":4020},[4005,6458,4393],{"class":4186},[4005,6460,6429],{"class":4182},[4005,6462,4631],{"class":4186},[4005,6464,4183],{"class":4182},[4005,6466,5167],{"class":4186},[4005,6468,6469],{"class":4190},"     \u002F\u002F 1 × 2¹⁰ = 1024 (1 кілобайт)\n",[4005,6471,6472,6474,6476,6479,6482],{"class":4007,"line":4026},[4005,6473,4393],{"class":4186},[4005,6475,6429],{"class":4182},[4005,6477,6478],{"class":4186},"100",[4005,6480,6481],{"class":4182}," = ?       ",[4005,6483,6484],{"class":4190},"\u002F\u002F 1 × 2¹⁰⁰ = 1267650600228229401496703205376\n",[3908,6486,6487,6490],{},[3871,6488,6489],{},"Візуалізація в двійковій системі"," (зсув — це додавання нулів справа):",[3984,6492,6495],{"className":6493,"code":6494,"language":3989},[3987],"Десяткове  |  Двійкове           |  Операція\n-----------|---------------------|------------------\n1          |  1                  |  1 \u003C\u003C 0\n2          |  10                 |  1 \u003C\u003C 1 (додали 1 нуль)\n4          |  100                |  1 \u003C\u003C 2 (додали 2 нулі)\n8          |  1000               |  1 \u003C\u003C 3 (додали 3 нулі)\n1024       |  10000000000        |  1 \u003C\u003C 10 (додали 10 нулів)\n",[3753,6496,6494],{"__ignoreMap":3992},[3908,6498,6499,6500,6502,6503,6506],{},"Отже, ",[3753,6501,6405],{}," — це одиниця з ",[3871,6504,6505],{},"100 нулями"," після неї у двійковій системі!",[4748,6508,6510,6511,3880,6514,6517,6518,6520,6521,6524,6525,6528],{"icon":6509},"i-lucide-alert-circle","Число ",[3753,6512,6513],{},"1267650600228229401496703205376",[3871,6515,6516],{},"не вміщується"," в ",[3753,6519,4154],{}," (max: 2⁶³-1) чи ",[3753,6522,6523],{},"uint64"," (max: 2⁶⁴-1), але як ",[3871,6526,6527],{},"нетипізована константа"," воно цілком валідне!",[3976,6530,6532],{"id":6531},"етап-1-константа-без-типу-необмежена-точність","Етап 1: Константа без типу — необмежена точність",[3984,6534,6536],{"className":4162,"code":6535,"language":4164,"meta":3992,"style":3992},"const Big = 1 \u003C\u003C 100 \u002F\u002F 1267650600228229401496703205376\n\u002F\u002F ✅ Компілятор зберігає це як \"математичне число\"\n",[3753,6537,6538,6556],{"__ignoreMap":3992},[4005,6539,6540,6542,6545,6547,6549,6551,6553],{"class":4007,"line":4008},[4005,6541,3968],{"class":4171},[4005,6543,6544],{"class":4877}," Big",[4005,6546,4183],{"class":4182},[4005,6548,4393],{"class":4186},[4005,6550,6429],{"class":4182},[4005,6552,6478],{"class":4186},[4005,6554,6555],{"class":4190}," \u002F\u002F 1267650600228229401496703205376\n",[4005,6557,6558],{"class":4007,"line":4014},[4005,6559,6560],{"class":4190},"\u002F\u002F ✅ Компілятор зберігає це як \"математичне число\"\n",[3976,6562,6564],{"id":6563},"етап-2-присвоєння-змінній-тут-вибирається-тип","Етап 2: Присвоєння змінній — тут вибирається тип",[3984,6566,6568],{"className":4162,"code":6567,"language":4164,"meta":3992,"style":3992},"var f float64 = Big   \u002F\u002F ✅ Конвертується у float64 (з втратою точності)\nvar i int64 = Big     \u002F\u002F ❌ Помилка: число завелике для int64 (максимум 2^63-1)\n",[3753,6569,6570,6586],{"__ignoreMap":3992},[4005,6571,6572,6574,6576,6578,6580,6583],{"class":4007,"line":4008},[4005,6573,3963],{"class":4171},[4005,6575,5135],{"class":4174},[4005,6577,5907],{"class":4178},[4005,6579,4183],{"class":4182},[4005,6581,6582],{"class":4174},"Big",[4005,6584,6585],{"class":4190},"   \u002F\u002F ✅ Конвертується у float64 (з втратою точності)\n",[4005,6587,6588,6590,6593,6595,6597,6599],{"class":4007,"line":4014},[4005,6589,3963],{"class":4171},[4005,6591,6592],{"class":4174}," i",[4005,6594,4179],{"class":4178},[4005,6596,4183],{"class":4182},[4005,6598,6582],{"class":4174},[4005,6600,6601],{"class":4190},"     \u002F\u002F ❌ Помилка: число завелике для int64 (максимум 2^63-1)\n",[3976,6603,6605],{"id":6604},"приклад-з-pi","Приклад з Pi",[3984,6607,6609],{"className":4162,"code":6608,"language":4164,"meta":3992,"style":3992},"const PrecisePi = 3.141592653589793238462643383279 \u002F\u002F 30 знаків після коми\n\nvar p32 float32 = PrecisePi \u002F\u002F 3.1415927 (7 знаків) — втрата точності\nvar p64 float64 = PrecisePi \u002F\u002F 3.141592653589793 (15 знаків) — краще\n",[3753,6610,6611,6626,6630,6647],{"__ignoreMap":3992},[4005,6612,6613,6615,6618,6620,6623],{"class":4007,"line":4008},[4005,6614,3968],{"class":4171},[4005,6616,6617],{"class":4877}," PrecisePi",[4005,6619,4183],{"class":4182},[4005,6621,6622],{"class":4186},"3.141592653589793238462643383279",[4005,6624,6625],{"class":4190}," \u002F\u002F 30 знаків після коми\n",[4005,6627,6628],{"class":4007,"line":4014},[4005,6629,4036],{"emptyLinePlaceholder":4035},[4005,6631,6632,6634,6637,6639,6641,6644],{"class":4007,"line":4020},[4005,6633,3963],{"class":4171},[4005,6635,6636],{"class":4174}," p32",[4005,6638,6266],{"class":4178},[4005,6640,4183],{"class":4182},[4005,6642,6643],{"class":4174},"PrecisePi",[4005,6645,6646],{"class":4190}," \u002F\u002F 3.1415927 (7 знаків) — втрата точності\n",[4005,6648,6649,6651,6654,6656,6658,6660],{"class":4007,"line":4026},[4005,6650,3963],{"class":4171},[4005,6652,6653],{"class":4174}," p64",[4005,6655,5907],{"class":4178},[4005,6657,4183],{"class":4182},[4005,6659,6643],{"class":4174},[4005,6661,6662],{"class":4190}," \u002F\u002F 3.141592653589793 (15 знаків) — краще\n",[3976,6664,6666],{"id":6665},"чому-це-корисно-для-kbmbgb","Чому це корисно для KB\u002FMB\u002FGB?",[3984,6668,6670],{"className":4162,"code":6669,"language":4164,"meta":3992,"style":3992},"const (\n    KB = 1 \u003C\u003C 10  \u002F\u002F 1024 — \"на папері\"\n    MB = 1 \u003C\u003C 20  \u002F\u002F 1048576 — \"на папері\"\n)\n\nvar limit uint64 = 500 * MB \u002F\u002F ✅ Обчислення в \"математичному світі\", \n                            \u002F\u002F результат пакується в uint64\n",[3753,6671,6672,6678,6694,6710,6714,6718,6742],{"__ignoreMap":3992},[4005,6673,6674,6676],{"class":4007,"line":4008},[4005,6675,3968],{"class":4171},[4005,6677,4439],{"class":4182},[4005,6679,6680,6683,6685,6687,6689,6691],{"class":4007,"line":4014},[4005,6681,6682],{"class":4877},"    KB",[4005,6684,4183],{"class":4182},[4005,6686,4393],{"class":4186},[4005,6688,6429],{"class":4182},[4005,6690,4631],{"class":4186},[4005,6692,6693],{"class":4190},"  \u002F\u002F 1024 — \"на папері\"\n",[4005,6695,6696,6699,6701,6703,6705,6707],{"class":4007,"line":4020},[4005,6697,6698],{"class":4877},"    MB",[4005,6700,4183],{"class":4182},[4005,6702,4393],{"class":4186},[4005,6704,6429],{"class":4182},[4005,6706,5335],{"class":4186},[4005,6708,6709],{"class":4190},"  \u002F\u002F 1048576 — \"на папері\"\n",[4005,6711,6712],{"class":4007,"line":4026},[4005,6713,4482],{"class":4182},[4005,6715,6716],{"class":4007,"line":4032},[4005,6717,4036],{"emptyLinePlaceholder":4035},[4005,6719,6720,6722,6725,6728,6730,6733,6736,6739],{"class":4007,"line":4039},[4005,6721,3963],{"class":4171},[4005,6723,6724],{"class":4174}," limit",[4005,6726,6727],{"class":4178}," uint64",[4005,6729,4183],{"class":4182},[4005,6731,6732],{"class":4186},"500",[4005,6734,6735],{"class":4182}," * ",[4005,6737,6738],{"class":4174},"MB",[4005,6740,6741],{"class":4190}," \u002F\u002F ✅ Обчислення в \"математичному світі\", \n",[4005,6743,6744],{"class":4007,"line":4045},[4005,6745,6746],{"class":4190},"                            \u002F\u002F результат пакується в uint64\n",[3908,6748,6749,6750,6752,6753,6755,6756,6759],{},"Якби ",[3753,6751,6738],{}," була типізована як ",[3753,6754,4158],{},", то ",[3753,6757,6758],{},"500 * MB"," могло б спричинити переповнення на 32-бітних системах.",[3908,6761,6762],{},[3871,6763,6764],{},"Правило пам'яті:",[3746,6766,6767,6773],{},[3749,6768,6769,6772],{},[3753,6770,6771],{},"const x = 1e1000"," — ✅ валідна константа (компілятор тримає як \"ідеальне число\")",[3749,6774,6775,6778,6779,6782],{},[3753,6776,6777],{},"var y float64 = 1e1000"," — ❌ помилка ",[3753,6780,6781],{},"overflows float64"," (не вміщається в тип)",[3908,6784,6785],{},"::\n::",[3900,6787],{},[3976,6789,6791,6792],{"id":6790},"принцип-роботи-лічильника-iota","Принцип роботи лічильника ",[3753,6793,3779],{},[3908,6795,6796,6797,6800,6801,6803,6804,6807,6808,6812,6813,3769],{},"У класичних мовах (Java, C#, TypeScript) для створення списку фіксованих варіантів існує спеціальна конструкція ",[3753,6798,6799],{},"enum"," (перелік). У Go творці мови відмовилися від окремого ключового слова ",[3753,6802,6799],{}," на користь простої та гнучкої комбінації: ",[3871,6805,6806],{},"користувацького типу",", блоку ",[3871,6809,6810],{},[3753,6811,3968],{}," та вбудованого автоінкрементного лічильника ",[3871,6814,6815],{},[3753,6816,3779],{},[3908,6818,6819,6820,6824,6825,3769],{},"Слово ",[3871,6821,6822],{},[3753,6823,3779],{}," — це вбудований ідентифікатор, який працює як автоматичний лічильник індексів усередині блоку ",[3753,6826,4767],{},[3994,6828,6830],{"alt":6829},"Принцип роботи лічильника iota",[3984,6831,6833],{"className":3999,"code":6832,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 13\n\npackage \"Блок const (...) з лічильником iota\" #F8FAFC {\n    rectangle \"Рядок 0: StatusUnknown = iota\\n• Значення: 0\" as R0 #DBEAFE\n    rectangle \"Рядок 1: StatusPending\\n• Значення: 1 (автопідстановка)\" as R1 #DCFCE7\n    rectangle \"Рядок 2: StatusProcessing\\n• Значення: 2 (автопідстановка)\" as R2 #FEF3C7\n    rectangle \"Рядок 3: StatusSuccess\\n• Значення: 3 (автопідстановка)\" as R3 #FCE7F3\n}\n\nR0 -down-> R1 : Наступний рядок: iota++\nR1 -down-> R2 : Наступний рядок: iota++\nR2 -down-> R3 : Наступний рядок: iota++\n\nnote right of R3 #FFFFFF\n  При відкритті нового блоку\n  const (...) лічильник iota\n  автоматично скидається в 0!\nend note\n@enduml\n",[3753,6834,6835,6839,6843,6847,6851,6855,6860,6865,6870,6875,6880,6884,6888,6893,6898,6903,6907,6912,6917,6922,6927,6932],{"__ignoreMap":3992},[4005,6836,6837],{"class":4007,"line":4008},[4005,6838,4011],{},[4005,6840,6841],{"class":4007,"line":4014},[4005,6842,4017],{},[4005,6844,6845],{"class":4007,"line":4020},[4005,6846,4023],{},[4005,6848,6849],{"class":4007,"line":4026},[4005,6850,4029],{},[4005,6852,6853],{"class":4007,"line":4032},[4005,6854,4036],{"emptyLinePlaceholder":4035},[4005,6856,6857],{"class":4007,"line":4039},[4005,6858,6859],{},"package \"Блок const (...) з лічильником iota\" #F8FAFC {\n",[4005,6861,6862],{"class":4007,"line":4045},[4005,6863,6864],{},"    rectangle \"Рядок 0: StatusUnknown = iota\\n• Значення: 0\" as R0 #DBEAFE\n",[4005,6866,6867],{"class":4007,"line":4051},[4005,6868,6869],{},"    rectangle \"Рядок 1: StatusPending\\n• Значення: 1 (автопідстановка)\" as R1 #DCFCE7\n",[4005,6871,6872],{"class":4007,"line":4057},[4005,6873,6874],{},"    rectangle \"Рядок 2: StatusProcessing\\n• Значення: 2 (автопідстановка)\" as R2 #FEF3C7\n",[4005,6876,6877],{"class":4007,"line":4063},[4005,6878,6879],{},"    rectangle \"Рядок 3: StatusSuccess\\n• Значення: 3 (автопідстановка)\" as R3 #FCE7F3\n",[4005,6881,6882],{"class":4007,"line":4069},[4005,6883,4078],{},[4005,6885,6886],{"class":4007,"line":4075},[4005,6887,4036],{"emptyLinePlaceholder":4035},[4005,6889,6890],{"class":4007,"line":4081},[4005,6891,6892],{},"R0 -down-> R1 : Наступний рядок: iota++\n",[4005,6894,6895],{"class":4007,"line":4086},[4005,6896,6897],{},"R1 -down-> R2 : Наступний рядок: iota++\n",[4005,6899,6900],{"class":4007,"line":4092},[4005,6901,6902],{},"R2 -down-> R3 : Наступний рядок: iota++\n",[4005,6904,6905],{"class":4007,"line":4098},[4005,6906,4036],{"emptyLinePlaceholder":4035},[4005,6908,6909],{"class":4007,"line":4104},[4005,6910,6911],{},"note right of R3 #FFFFFF\n",[4005,6913,6914],{"class":4007,"line":4110},[4005,6915,6916],{},"  При відкритті нового блоку\n",[4005,6918,6919],{"class":4007,"line":4937},[4005,6920,6921],{},"  const (...) лічильник iota\n",[4005,6923,6924],{"class":4007,"line":4942},[4005,6925,6926],{},"  автоматично скидається в 0!\n",[4005,6928,6929],{"class":4007,"line":4947},[4005,6930,6931],{},"end note\n",[4005,6933,6934],{"class":4007,"line":4953},[4005,6935,4113],{},[3908,6937,6938],{},[3871,6939,6940,6941,5831],{},"Правила роботи ",[3753,6942,3779],{},[4781,6944,6945,6958,6966],{},[3749,6946,6947,6948,6950,6951,3880,6953,3769],{},"У кожному новому блоці ",[3753,6949,4767],{}," лічильник ",[3753,6952,3779],{},[3871,6954,6955,6956,5032],{},"завжди починається з нуля (",[3753,6957,4200],{},[3749,6959,6960,6961,6963,6964,3769],{},"З кожним наступним рядком усередині блоку значення ",[3753,6962,3779],{}," автоматично збільшується на ",[3753,6965,4393],{},[3749,6967,6968,6971],{},[3871,6969,6970],{},"Автоповторення виразу:"," Якщо в наступному рядку константи не вказано тип і значення, Go автоматично дублює формулу попереднього рядка.",[3900,6973],{},[3976,6975,6977],{"id":6976},"покрокове-створення-правильного-enum-у-go","Покрокове створення правильного Enum у Go",[3908,6979,6980],{},"Розглянемо правильний підхід до створення переліку статусів HTTP-запиту:",[4748,6982,6983,6990,7009,7014,7049,7054,7126,7135],{"icon":4750},[3908,6984,6985],{},[3871,6986,6402,6987,6989],{},[3753,6988,4809],{}," у Go?",[3908,6991,6992,6993,6995,6996,6999,7000,3836,7002,3836,7005,7008],{},"Ключове слово ",[3753,6994,4809],{}," дозволяє створювати ",[3871,6997,6998],{},"власні типи даних"," на основі існуючих. Це як створення нової \"коробки\" з унікальною назвою, яка всередині базується на стандартному типі (",[3753,7001,4158],{},[3753,7003,7004],{},"string",[3753,7006,7007],{},"uint8"," тощо).",[3908,7010,7011],{},[3871,7012,7013],{},"Навіщо це потрібно?",[3746,7015,7016,7027,7043],{},[3749,7017,7018,3880,7021,7024,7025],{},[3871,7019,7020],{},"Семантична ясність:",[3753,7022,7023],{},"type UserID int"," зрозуміліше, ніж просто ",[3753,7026,4158],{},[3749,7028,7029,7032,7033,7036,7037,7040,7041],{},[3871,7030,7031],{},"Безпека типів:"," Go не дозволить змішувати ",[3753,7034,7035],{},"UserID"," з ",[3753,7038,7039],{},"ProductID",", хоч обидва базуються на ",[3753,7042,4158],{},[3749,7044,7045,7048],{},[3871,7046,7047],{},"Прив'язка методів:"," до власного типу можна додавати методи",[3908,7050,7051],{},[3871,7052,7053],{},"Базовий синтаксис:",[3984,7055,7057],{"className":4162,"code":7056,"language":4164,"meta":3992,"style":3992},"type ВашаНазва БазовийТип\n\n\u002F\u002F Приклади:\ntype UserID int           \u002F\u002F Новий тип на базі int\ntype Email string         \u002F\u002F Новий тип на базі string\ntype Temperature float64  \u002F\u002F Новий тип на базі float64\ntype RequestStatus uint8  \u002F\u002F Новий тип на базі uint8\n",[3753,7058,7059,7069,7073,7078,7090,7102,7114],{"__ignoreMap":3992},[4005,7060,7061,7063,7066],{"class":4007,"line":4008},[4005,7062,4809],{"class":4171},[4005,7064,7065],{"class":4178}," ВашаНазва",[4005,7067,7068],{"class":4178}," БазовийТип\n",[4005,7070,7071],{"class":4007,"line":4014},[4005,7072,4036],{"emptyLinePlaceholder":4035},[4005,7074,7075],{"class":4007,"line":4020},[4005,7076,7077],{"class":4190},"\u002F\u002F Приклади:\n",[4005,7079,7080,7082,7085,7087],{"class":4007,"line":4026},[4005,7081,4809],{"class":4171},[4005,7083,7084],{"class":4178}," UserID",[4005,7086,4224],{"class":4178},[4005,7088,7089],{"class":4190},"           \u002F\u002F Новий тип на базі int\n",[4005,7091,7092,7094,7097,7099],{"class":4007,"line":4032},[4005,7093,4809],{"class":4171},[4005,7095,7096],{"class":4178}," Email",[4005,7098,4237],{"class":4178},[4005,7100,7101],{"class":4190},"         \u002F\u002F Новий тип на базі string\n",[4005,7103,7104,7106,7109,7111],{"class":4007,"line":4039},[4005,7105,4809],{"class":4171},[4005,7107,7108],{"class":4178}," Temperature",[4005,7110,5907],{"class":4178},[4005,7112,7113],{"class":4190},"  \u002F\u002F Новий тип на базі float64\n",[4005,7115,7116,7118,7120,7123],{"class":4007,"line":4045},[4005,7117,4809],{"class":4171},[4005,7119,5962],{"class":4178},[4005,7121,7122],{"class":4178}," uint8",[4005,7124,7125],{"class":4190},"  \u002F\u002F Новий тип на базі uint8\n",[3908,7127,7128,7129,7131,7132,7134],{},"Після оголошення ",[3753,7130,7023],{},", ви можете використовувати ",[3753,7133,7035],{}," як повноцінний тип:",[3984,7136,7138],{"className":4162,"code":7137,"language":4164,"meta":3992,"style":3992},"var id UserID = 42\nvar count int = 10\n\u002F\u002F id = count  \u002F\u002F ❌ Помилка: різні типи!\nid = UserID(count)  \u002F\u002F ✅ Потрібне явне перетворення\n",[3753,7139,7140,7154,7168,7176],{"__ignoreMap":3992},[4005,7141,7142,7144,7147,7149,7151],{"class":4007,"line":4008},[4005,7143,3963],{"class":4171},[4005,7145,7146],{"class":4174}," id",[4005,7148,7084],{"class":4178},[4005,7150,4183],{"class":4182},[4005,7152,7153],{"class":4186},"42\n",[4005,7155,7156,7158,7161,7163,7165],{"class":4007,"line":4014},[4005,7157,3963],{"class":4171},[4005,7159,7160],{"class":4174}," count",[4005,7162,4224],{"class":4178},[4005,7164,4183],{"class":4182},[4005,7166,7167],{"class":4186},"10\n",[4005,7169,7170,7173],{"class":4007,"line":4020},[4005,7171,7172],{"class":4190},"\u002F\u002F id = count",[4005,7174,7175],{"class":4190},"  \u002F\u002F ❌ Помилка: різні типи!\n",[4005,7177,7178,7181,7183,7185,7187,7190,7192],{"class":4007,"line":4026},[4005,7179,7180],{"class":4174},"id",[4005,7182,4183],{"class":4182},[4005,7184,7035],{"class":4302},[4005,7186,4611],{"class":4182},[4005,7188,7189],{"class":4174},"count",[4005,7191,5196],{"class":4182},[4005,7193,7194],{"class":4190},"\u002F\u002F ✅ Потрібне явне перетворення\n",[7196,7197,7198,7202,7207,7220,7224,7240,7302,7309,7322,7448],"steps",{},[3976,7199,7201],{"id":7200},"крок-1-оголошення-власного-сильного-типу","Крок 1. Оголошення власного сильного типу",[3908,7203,7204,7205,4159],{},"Створюємо новий тип на базі стандартного цілого числа (наприклад, ",[3753,7206,7007],{},[3984,7208,7210],{"className":4162,"code":7209,"language":4164,"meta":3992,"style":3992},"type RequestStatus uint8\n",[3753,7211,7212],{"__ignoreMap":3992},[4005,7213,7214,7216,7218],{"class":4007,"line":4008},[4005,7215,4809],{"class":4171},[4005,7217,5962],{"class":4178},[4005,7219,5965],{"class":4178},[3976,7221,7223],{"id":7222},"крок-2-оголошення-констант-через-iota-із-захистом-zero-value","Крок 2. Оголошення констант через iota із захистом Zero Value",[3908,7225,7226,7227,7229,7230,7233,7234,7237,7238,5831],{},"Найкращою практикою є резервування значення ",[3753,7228,4200],{}," під невідомий або невизначений стан (",[3758,7231,7232],{},"Unknown","), оскільки нульове значення змінної ",[3753,7235,7236],{},"var s RequestStatus"," автоматично дорівнюватиме ",[3753,7239,4200],{},[3984,7241,7243],{"className":4162,"code":7242,"language":4164,"meta":3992,"style":3992},"const (\n    StatusUnknown    RequestStatus = iota \u002F\u002F 0: Стан за замовчуванням (Zero Value)\n    StatusPending                         \u002F\u002F 1: В очікуванні\n    StatusProcessing                      \u002F\u002F 2: Обробляється\n    StatusSuccess                         \u002F\u002F 3: Успішно виконано\n    StatusFailed                          \u002F\u002F 4: Помилка обробки\n)\n",[3753,7244,7245,7251,7266,7274,7282,7290,7298],{"__ignoreMap":3992},[4005,7246,7247,7249],{"class":4007,"line":4008},[4005,7248,3968],{"class":4171},[4005,7250,4439],{"class":4182},[4005,7252,7253,7256,7259,7261,7263],{"class":4007,"line":4014},[4005,7254,7255],{"class":4877},"    StatusUnknown",[4005,7257,7258],{"class":4178},"    RequestStatus",[4005,7260,4183],{"class":4182},[4005,7262,3779],{"class":4171},[4005,7264,7265],{"class":4190}," \u002F\u002F 0: Стан за замовчуванням (Zero Value)\n",[4005,7267,7268,7271],{"class":4007,"line":4020},[4005,7269,7270],{"class":4877},"    StatusPending",[4005,7272,7273],{"class":4190},"                         \u002F\u002F 1: В очікуванні\n",[4005,7275,7276,7279],{"class":4007,"line":4026},[4005,7277,7278],{"class":4877},"    StatusProcessing",[4005,7280,7281],{"class":4190},"                      \u002F\u002F 2: Обробляється\n",[4005,7283,7284,7287],{"class":4007,"line":4032},[4005,7285,7286],{"class":4877},"    StatusSuccess",[4005,7288,7289],{"class":4190},"                         \u002F\u002F 3: Успішно виконано\n",[4005,7291,7292,7295],{"class":4007,"line":4039},[4005,7293,7294],{"class":4877},"    StatusFailed",[4005,7296,7297],{"class":4190},"                          \u002F\u002F 4: Помилка обробки\n",[4005,7299,7300],{"class":4007,"line":4045},[4005,7301,4482],{"class":4182},[3976,7303,7305,7306],{"id":7304},"крок-3-реалізація-інтерфейсу-форматування-fmtstringer","Крок 3. Реалізація інтерфейсу форматування ",[3753,7307,7308],{},"fmt.Stringer",[3908,7310,7311,7312,7314,7315,7318,7319,5831],{},"Щоб при виведенні в логи замість сухого числа ",[3753,7313,4398],{}," друкувався зрозумілий текст ",[3753,7316,7317],{},"\"PROCESSING\"",", додаємо метод ",[3753,7320,7321],{},"String()",[3984,7323,7325],{"className":4162,"code":7324,"language":4164,"meta":3992,"style":3992},"func (s RequestStatus) String() string {\n    switch s {\n    case StatusPending:\n        return \"PENDING\"\n    case StatusProcessing:\n        return \"PROCESSING\"\n    case StatusSuccess:\n        return \"SUCCESS\"\n    case StatusFailed:\n        return \"FAILED\"\n    default:\n        return \"UNKNOWN\"\n    }\n}\n",[3753,7326,7327,7351,7361,7371,7378,7387,7394,7403,7410,7419,7426,7433,7440,7444],{"__ignoreMap":3992},[4005,7328,7329,7331,7333,7336,7339,7341,7344,7347,7349],{"class":4007,"line":4008},[4005,7330,4299],{"class":4171},[4005,7332,4761],{"class":4182},[4005,7334,7335],{"class":4174},"s ",[4005,7337,7338],{"class":4178},"RequestStatus",[4005,7340,4498],{"class":4182},[4005,7342,7343],{"class":4302},"String",[4005,7345,7346],{"class":4182},"() ",[4005,7348,7004],{"class":4178},[4005,7350,5073],{"class":4182},[4005,7352,7353,7356,7359],{"class":4007,"line":4014},[4005,7354,7355],{"class":4836},"    switch",[4005,7357,7358],{"class":4174}," s",[4005,7360,5073],{"class":4182},[4005,7362,7363,7366,7368],{"class":4007,"line":4020},[4005,7364,7365],{"class":4836},"    case",[4005,7367,5972],{"class":4174},[4005,7369,7370],{"class":4182},":\n",[4005,7372,7373,7375],{"class":4007,"line":4026},[4005,7374,5119],{"class":4836},[4005,7376,7377],{"class":4330}," \"PENDING\"\n",[4005,7379,7380,7382,7385],{"class":4007,"line":4032},[4005,7381,7365],{"class":4836},[4005,7383,7384],{"class":4174}," StatusProcessing",[4005,7386,7370],{"class":4182},[4005,7388,7389,7391],{"class":4007,"line":4039},[4005,7390,5119],{"class":4836},[4005,7392,7393],{"class":4330}," \"PROCESSING\"\n",[4005,7395,7396,7398,7401],{"class":4007,"line":4045},[4005,7397,7365],{"class":4836},[4005,7399,7400],{"class":4174}," StatusSuccess",[4005,7402,7370],{"class":4182},[4005,7404,7405,7407],{"class":4007,"line":4051},[4005,7406,5119],{"class":4836},[4005,7408,7409],{"class":4330}," \"SUCCESS\"\n",[4005,7411,7412,7414,7417],{"class":4007,"line":4057},[4005,7413,7365],{"class":4836},[4005,7415,7416],{"class":4174}," StatusFailed",[4005,7418,7370],{"class":4182},[4005,7420,7421,7423],{"class":4007,"line":4063},[4005,7422,5119],{"class":4836},[4005,7424,7425],{"class":4330}," \"FAILED\"\n",[4005,7427,7428,7431],{"class":4007,"line":4069},[4005,7429,7430],{"class":4836},"    default",[4005,7432,7370],{"class":4182},[4005,7434,7435,7437],{"class":4007,"line":4075},[4005,7436,5119],{"class":4836},[4005,7438,7439],{"class":4330}," \"UNKNOWN\"\n",[4005,7441,7442],{"class":4007,"line":4081},[4005,7443,5127],{"class":4182},[4005,7445,7446],{"class":4007,"line":4086},[4005,7447,4078],{"class":4182},[4748,7449,7450,7458,7467,7472,7528,7570,7575,7624],{"icon":4750},[3908,7451,7452],{},[3871,7453,7454,7455,6406],{},"Що означає ",[3753,7456,7457],{},"func (s RequestStatus) String() string",[3908,7459,7460,7461,7464,7465,3769],{},"Це ",[3871,7462,7463],{},"метод"," — функція, прив'язана до типу ",[3753,7466,7338],{},[3908,7468,7469],{},[3871,7470,7471],{},"Розбір синтаксису:",[3984,7473,7475],{"className":4162,"code":7474,"language":4164,"meta":3992,"style":3992},"func (s RequestStatus) String() string\n     └──────┬──────┘   └─┬─┘    └─┬──┘\n          ресівер    назва    повертає\n        (одержувач)  методу    string\n",[3753,7476,7477,7496,7501,7512],{"__ignoreMap":3992},[4005,7478,7479,7481,7483,7485,7487,7489,7491,7493],{"class":4007,"line":4008},[4005,7480,4299],{"class":4171},[4005,7482,4761],{"class":4182},[4005,7484,7335],{"class":4174},[4005,7486,7338],{"class":4178},[4005,7488,4498],{"class":4182},[4005,7490,7343],{"class":4302},[4005,7492,7346],{"class":4182},[4005,7494,7495],{"class":4178},"string\n",[4005,7497,7498],{"class":4007,"line":4014},[4005,7499,7500],{"class":4182},"     └──────┬──────┘   └─┬─┘    └─┬──┘\n",[4005,7502,7503,7506,7509],{"class":4007,"line":4020},[4005,7504,7505],{"class":4174},"          ресівер",[4005,7507,7508],{"class":4174},"    назва",[4005,7510,7511],{"class":4174},"    повертає\n",[4005,7513,7514,7517,7520,7522,7525],{"class":4007,"line":4026},[4005,7515,7516],{"class":4182},"        (",[4005,7518,7519],{"class":4178},"одержувач",[4005,7521,5196],{"class":4182},[4005,7523,7524],{"class":4174},"методу",[4005,7526,7527],{"class":4178},"    string\n",[3746,7529,7530,7544,7556,7563],{},[3749,7531,7532,7537,7538,7541,7542],{},[3871,7533,7534],{},[3753,7535,7536],{},"(s RequestStatus)"," — ",[3871,7539,7540],{},"ресівер"," (receiver): говорить, що цей метод належить типу ",[3753,7543,7338],{},[3749,7545,7546,7551,7552,7555],{},[3871,7547,7548],{},[3753,7549,7550],{},"s"," — змінна, через яку ми звертаємось до значення всередині методу (як ",[3753,7553,7554],{},"this"," в інших мовах)",[3749,7557,7558,7562],{},[3871,7559,7560],{},[3753,7561,7321],{}," — назва методу (без параметрів)",[3749,7564,7565,7569],{},[3871,7566,7567],{},[3753,7568,7004],{}," — тип значення, що повертається",[3908,7571,7572],{},[3871,7573,7574],{},"Як це працює:",[3984,7576,7578],{"className":4162,"code":7577,"language":4164,"meta":3992,"style":3992},"status := StatusProcessing  \u002F\u002F значення: 2\n\n\u002F\u002F Коли ви викликаєте fmt.Println(status),\n\u002F\u002F Go автоматично шукає метод String() і викликає його:\nfmt.Println(status)  \u002F\u002F Виведе: \"PROCESSING\" замість 2\n",[3753,7579,7580,7593,7597,7602,7607],{"__ignoreMap":3992},[4005,7581,7582,7585,7587,7590],{"class":4007,"line":4008},[4005,7583,7584],{"class":4174},"status",[4005,7586,4314],{"class":4182},[4005,7588,7589],{"class":4174},"StatusProcessing",[4005,7591,7592],{"class":4190},"  \u002F\u002F значення: 2\n",[4005,7594,7595],{"class":4007,"line":4014},[4005,7596,4036],{"emptyLinePlaceholder":4035},[4005,7598,7599],{"class":4007,"line":4020},[4005,7600,7601],{"class":4190},"\u002F\u002F Коли ви викликаєте fmt.Println(status),\n",[4005,7603,7604],{"class":4007,"line":4026},[4005,7605,7606],{"class":4190},"\u002F\u002F Go автоматично шукає метод String() і викликає його:\n",[4005,7608,7609,7611,7613,7615,7617,7619,7621],{"class":4007,"line":4032},[4005,7610,3785],{"class":4174},[4005,7612,3769],{"class":4182},[4005,7614,5348],{"class":4302},[4005,7616,4611],{"class":4182},[4005,7618,7584],{"class":4174},[4005,7620,5196],{"class":4182},[4005,7622,7623],{"class":4190},"\u002F\u002F Виведе: \"PROCESSING\" замість 2\n",[3908,7625,7626],{},"Детальніше про функції та методи — у наступних розділах.",[3900,7628],{},[3976,7630,7632,7633],{"id":7631},"розширені-інженерні-патерни-застосування-iota","Розширені інженерні патерни застосування ",[3753,7634,3779],{},[3984,7636,7638],{"className":4162,"code":7637,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Патерн 1: Пропуск нульового значення через Blank Identifier (_)\ntype Priority int\n\nconst (\n    _ Priority = iota \u002F\u002F Пропускаємо індекс 0\n    LowPriority       \u002F\u002F 1\n    MediumPriority    \u002F\u002F 2\n    HighPriority      \u002F\u002F 3\n)\n\n\u002F\u002F Патерн 2: Побітовий зсув (1 \u003C\u003C iota) для створення бітових масок (Bitmask Flags)\n\u002F\u002F Ідеально підходить для прав доступу в клієнт-серверних API:\ntype UserRole uint8\n\nconst (\n    RoleGuest     UserRole = 1 \u003C\u003C iota \u002F\u002F 1 \u003C\u003C 0 = 0001 (1 в десятковій)\n    RoleUser                            \u002F\u002F 1 \u003C\u003C 1 = 0010 (2 в десятковій)\n    RoleModerator                       \u002F\u002F 1 \u003C\u003C 2 = 0100 (4 в десятковій)\n    RoleAdmin                           \u002F\u002F 1 \u003C\u003C 3 = 1000 (8 в десятковій)\n)\n\n\u002F\u002F Патерн 3: Множники одиниць пам'яті через ступінь двійки\nconst (\n    _           = iota             \u002F\u002F Пропускаємо 1 \u003C\u003C (10 * 0)\n    KB uint64 = 1 \u003C\u003C (10 * iota) \u002F\u002F 1 \u003C\u003C 10 = 1024 байтів\n    MB                             \u002F\u002F 1 \u003C\u003C 20 = 1048576 байтів\n    GB                             \u002F\u002F 1 \u003C\u003C 30 = 1073741824 байтів\n    TB                             \u002F\u002F 1 \u003C\u003C 40 = 1099511627776 байтів\n)\n\nfunc main() {\n    \u002F\u002F Демонстрація бітових прапорців:\n    \u002F\u002F Надаємо користувачу права звичайного користувача ТА модератора одночасно:\n    activeRoles := RoleUser | RoleModerator\n    fmt.Printf(\"Бітова маска ролей: %04b (десяткове: %d)\\n\", activeRoles, activeRoles)\n\n    \u002F\u002F Перевірка наявності ролі адміністратора через побітове І (&):\n    isAdmin := (activeRoles & RoleAdmin) != 0\n    isModerator := (activeRoles & RoleModerator) != 0\n    fmt.Printf(\"Користувач є Admin? %t\\n\", isAdmin)\n    fmt.Printf(\"Користувач є Moderator? %t\\n\", isModerator)\n\n    \u002F\u002F Константи пам'яті:\n    fmt.Printf(\"Ліміт файлу: 500 MB = %d байтів\\n\", 500*MB)\n}\n",[3753,7639,7640,7646,7650,7657,7661,7666,7675,7679,7685,7699,7707,7715,7723,7727,7731,7736,7741,7750,7754,7760,7779,7787,7795,7803,7807,7811,7817,7824,7837,7862,7870,7879,7888,7893,7898,7907,7913,7919,7936,7980,7985,7991,8014,8033,8061,8088,8093,8099,8133],{"__ignoreMap":3992},[4005,7641,7642,7644],{"class":4007,"line":4008},[4005,7643,5739],{"class":4171},[4005,7645,5742],{"class":4178},[4005,7647,7648],{"class":4007,"line":4014},[4005,7649,4036],{"emptyLinePlaceholder":4035},[4005,7651,7652,7654],{"class":4007,"line":4020},[4005,7653,3917],{"class":4836},[4005,7655,7656],{"class":4330}," \"fmt\"\n",[4005,7658,7659],{"class":4007,"line":4026},[4005,7660,4036],{"emptyLinePlaceholder":4035},[4005,7662,7663],{"class":4007,"line":4032},[4005,7664,7665],{"class":4190},"\u002F\u002F Патерн 1: Пропуск нульового значення через Blank Identifier (_)\n",[4005,7667,7668,7670,7673],{"class":4007,"line":4039},[4005,7669,4809],{"class":4171},[4005,7671,7672],{"class":4178}," Priority",[4005,7674,4926],{"class":4178},[4005,7676,7677],{"class":4007,"line":4045},[4005,7678,4036],{"emptyLinePlaceholder":4035},[4005,7680,7681,7683],{"class":4007,"line":4051},[4005,7682,3968],{"class":4171},[4005,7684,4439],{"class":4182},[4005,7686,7687,7690,7692,7694,7696],{"class":4007,"line":4057},[4005,7688,7689],{"class":4877},"    _",[4005,7691,7672],{"class":4178},[4005,7693,4183],{"class":4182},[4005,7695,3779],{"class":4171},[4005,7697,7698],{"class":4190}," \u002F\u002F Пропускаємо індекс 0\n",[4005,7700,7701,7704],{"class":4007,"line":4063},[4005,7702,7703],{"class":4877},"    LowPriority",[4005,7705,7706],{"class":4190},"       \u002F\u002F 1\n",[4005,7708,7709,7712],{"class":4007,"line":4069},[4005,7710,7711],{"class":4877},"    MediumPriority",[4005,7713,7714],{"class":4190},"    \u002F\u002F 2\n",[4005,7716,7717,7720],{"class":4007,"line":4075},[4005,7718,7719],{"class":4877},"    HighPriority",[4005,7721,7722],{"class":4190},"      \u002F\u002F 3\n",[4005,7724,7725],{"class":4007,"line":4081},[4005,7726,4482],{"class":4182},[4005,7728,7729],{"class":4007,"line":4086},[4005,7730,4036],{"emptyLinePlaceholder":4035},[4005,7732,7733],{"class":4007,"line":4092},[4005,7734,7735],{"class":4190},"\u002F\u002F Патерн 2: Побітовий зсув (1 \u003C\u003C iota) для створення бітових масок (Bitmask Flags)\n",[4005,7737,7738],{"class":4007,"line":4098},[4005,7739,7740],{"class":4190},"\u002F\u002F Ідеально підходить для прав доступу в клієнт-серверних API:\n",[4005,7742,7743,7745,7748],{"class":4007,"line":4104},[4005,7744,4809],{"class":4171},[4005,7746,7747],{"class":4178}," UserRole",[4005,7749,5965],{"class":4178},[4005,7751,7752],{"class":4007,"line":4110},[4005,7753,4036],{"emptyLinePlaceholder":4035},[4005,7755,7756,7758],{"class":4007,"line":4937},[4005,7757,3968],{"class":4171},[4005,7759,4439],{"class":4182},[4005,7761,7762,7765,7768,7770,7772,7774,7776],{"class":4007,"line":4942},[4005,7763,7764],{"class":4877},"    RoleGuest",[4005,7766,7767],{"class":4178},"     UserRole",[4005,7769,4183],{"class":4182},[4005,7771,4393],{"class":4186},[4005,7773,6429],{"class":4182},[4005,7775,3779],{"class":4171},[4005,7777,7778],{"class":4190}," \u002F\u002F 1 \u003C\u003C 0 = 0001 (1 в десятковій)\n",[4005,7780,7781,7784],{"class":4007,"line":4947},[4005,7782,7783],{"class":4877},"    RoleUser",[4005,7785,7786],{"class":4190},"                            \u002F\u002F 1 \u003C\u003C 1 = 0010 (2 в десятковій)\n",[4005,7788,7789,7792],{"class":4007,"line":4953},[4005,7790,7791],{"class":4877},"    RoleModerator",[4005,7793,7794],{"class":4190},"                       \u002F\u002F 1 \u003C\u003C 2 = 0100 (4 в десятковій)\n",[4005,7796,7797,7800],{"class":4007,"line":4960},[4005,7798,7799],{"class":4877},"    RoleAdmin",[4005,7801,7802],{"class":4190},"                           \u002F\u002F 1 \u003C\u003C 3 = 1000 (8 в десятковій)\n",[4005,7804,7805],{"class":4007,"line":4973},[4005,7806,4482],{"class":4182},[4005,7808,7809],{"class":4007,"line":4985},[4005,7810,4036],{"emptyLinePlaceholder":4035},[4005,7812,7814],{"class":4007,"line":7813},26,[4005,7815,7816],{"class":4190},"\u002F\u002F Патерн 3: Множники одиниць пам'яті через ступінь двійки\n",[4005,7818,7820,7822],{"class":4007,"line":7819},27,[4005,7821,3968],{"class":4171},[4005,7823,4439],{"class":4182},[4005,7825,7827,7829,7832,7834],{"class":4007,"line":7826},28,[4005,7828,7689],{"class":4877},[4005,7830,7831],{"class":4182},"           = ",[4005,7833,3779],{"class":4171},[4005,7835,7836],{"class":4190},"             \u002F\u002F Пропускаємо 1 \u003C\u003C (10 * 0)\n",[4005,7838,7840,7842,7844,7846,7848,7851,7853,7855,7857,7859],{"class":4007,"line":7839},29,[4005,7841,6682],{"class":4877},[4005,7843,6727],{"class":4178},[4005,7845,4183],{"class":4182},[4005,7847,4393],{"class":4186},[4005,7849,7850],{"class":4182}," \u003C\u003C (",[4005,7852,4631],{"class":4186},[4005,7854,6735],{"class":4182},[4005,7856,3779],{"class":4171},[4005,7858,4498],{"class":4182},[4005,7860,7861],{"class":4190},"\u002F\u002F 1 \u003C\u003C 10 = 1024 байтів\n",[4005,7863,7865,7867],{"class":4007,"line":7864},30,[4005,7866,6698],{"class":4877},[4005,7868,7869],{"class":4190},"                             \u002F\u002F 1 \u003C\u003C 20 = 1048576 байтів\n",[4005,7871,7873,7876],{"class":4007,"line":7872},31,[4005,7874,7875],{"class":4877},"    GB",[4005,7877,7878],{"class":4190},"                             \u002F\u002F 1 \u003C\u003C 30 = 1073741824 байтів\n",[4005,7880,7882,7885],{"class":4007,"line":7881},32,[4005,7883,7884],{"class":4877},"    TB",[4005,7886,7887],{"class":4190},"                             \u002F\u002F 1 \u003C\u003C 40 = 1099511627776 байтів\n",[4005,7889,7891],{"class":4007,"line":7890},33,[4005,7892,4482],{"class":4182},[4005,7894,7896],{"class":4007,"line":7895},34,[4005,7897,4036],{"emptyLinePlaceholder":4035},[4005,7899,7901,7903,7905],{"class":4007,"line":7900},35,[4005,7902,4299],{"class":4171},[4005,7904,5764],{"class":4302},[4005,7906,4306],{"class":4182},[4005,7908,7910],{"class":4007,"line":7909},36,[4005,7911,7912],{"class":4190},"    \u002F\u002F Демонстрація бітових прапорців:\n",[4005,7914,7916],{"class":4007,"line":7915},37,[4005,7917,7918],{"class":4190},"    \u002F\u002F Надаємо користувачу права звичайного користувача ТА модератора одночасно:\n",[4005,7920,7922,7925,7927,7930,7933],{"class":4007,"line":7921},38,[4005,7923,7924],{"class":4174},"    activeRoles",[4005,7926,4314],{"class":4182},[4005,7928,7929],{"class":4174},"RoleUser",[4005,7931,7932],{"class":4182}," | ",[4005,7934,7935],{"class":4174},"RoleModerator\n",[4005,7937,7939,7941,7943,7946,7948,7951,7954,7957,7960,7962,7966,7969,7971,7974,7976,7978],{"class":4007,"line":7938},39,[4005,7940,5370],{"class":4174},[4005,7942,3769],{"class":4182},[4005,7944,7945],{"class":4302},"Printf",[4005,7947,4611],{"class":4182},[4005,7949,7950],{"class":4330},"\"Бітова маска ролей: ",[4005,7952,7953],{"class":4174},"%04b",[4005,7955,7956],{"class":4330}," (десяткове: ",[4005,7958,7959],{"class":4174},"%d",[4005,7961,5032],{"class":4330},[4005,7963,7965],{"class":7964},"sjcCO","\\n",[4005,7967,7968],{"class":4330},"\"",[4005,7970,3836],{"class":4182},[4005,7972,7973],{"class":4174},"activeRoles",[4005,7975,3836],{"class":4182},[4005,7977,7973],{"class":4174},[4005,7979,4482],{"class":4182},[4005,7981,7983],{"class":4007,"line":7982},40,[4005,7984,4036],{"emptyLinePlaceholder":4035},[4005,7986,7988],{"class":4007,"line":7987},41,[4005,7989,7990],{"class":4190},"    \u002F\u002F Перевірка наявності ролі адміністратора через побітове І (&):\n",[4005,7992,7994,7997,8000,8002,8005,8008,8011],{"class":4007,"line":7993},42,[4005,7995,7996],{"class":4174},"    isAdmin",[4005,7998,7999],{"class":4182}," := (",[4005,8001,7973],{"class":4174},[4005,8003,8004],{"class":4182}," & ",[4005,8006,8007],{"class":4174},"RoleAdmin",[4005,8009,8010],{"class":4182},") != ",[4005,8012,8013],{"class":4186},"0\n",[4005,8015,8017,8020,8022,8024,8026,8029,8031],{"class":4007,"line":8016},43,[4005,8018,8019],{"class":4174},"    isModerator",[4005,8021,7999],{"class":4182},[4005,8023,7973],{"class":4174},[4005,8025,8004],{"class":4182},[4005,8027,8028],{"class":4174},"RoleModerator",[4005,8030,8010],{"class":4182},[4005,8032,8013],{"class":4186},[4005,8034,8036,8038,8040,8042,8044,8047,8050,8052,8054,8056,8059],{"class":4007,"line":8035},44,[4005,8037,5370],{"class":4174},[4005,8039,3769],{"class":4182},[4005,8041,7945],{"class":4302},[4005,8043,4611],{"class":4182},[4005,8045,8046],{"class":4330},"\"Користувач є Admin? ",[4005,8048,8049],{"class":4174},"%t",[4005,8051,7965],{"class":7964},[4005,8053,7968],{"class":4330},[4005,8055,3836],{"class":4182},[4005,8057,8058],{"class":4174},"isAdmin",[4005,8060,4482],{"class":4182},[4005,8062,8064,8066,8068,8070,8072,8075,8077,8079,8081,8083,8086],{"class":4007,"line":8063},45,[4005,8065,5370],{"class":4174},[4005,8067,3769],{"class":4182},[4005,8069,7945],{"class":4302},[4005,8071,4611],{"class":4182},[4005,8073,8074],{"class":4330},"\"Користувач є Moderator? ",[4005,8076,8049],{"class":4174},[4005,8078,7965],{"class":7964},[4005,8080,7968],{"class":4330},[4005,8082,3836],{"class":4182},[4005,8084,8085],{"class":4174},"isModerator",[4005,8087,4482],{"class":4182},[4005,8089,8091],{"class":4007,"line":8090},46,[4005,8092,4036],{"emptyLinePlaceholder":4035},[4005,8094,8096],{"class":4007,"line":8095},47,[4005,8097,8098],{"class":4190},"    \u002F\u002F Константи пам'яті:\n",[4005,8100,8102,8104,8106,8108,8110,8113,8115,8118,8120,8122,8124,8126,8129,8131],{"class":4007,"line":8101},48,[4005,8103,5370],{"class":4174},[4005,8105,3769],{"class":4182},[4005,8107,7945],{"class":4302},[4005,8109,4611],{"class":4182},[4005,8111,8112],{"class":4330},"\"Ліміт файлу: 500 MB = ",[4005,8114,7959],{"class":4174},[4005,8116,8117],{"class":4330}," байтів",[4005,8119,7965],{"class":7964},[4005,8121,7968],{"class":4330},[4005,8123,3836],{"class":4182},[4005,8125,6732],{"class":4186},[4005,8127,8128],{"class":4182},"*",[4005,8130,6738],{"class":4174},[4005,8132,4482],{"class":4182},[4005,8134,8136],{"class":4007,"line":8135},49,[4005,8137,4078],{"class":4182},[3900,8139],{},[3903,8141,8143],{"id":8142},"базові-типи-даних-та-концепція-zero-values","Базові типи даних та концепція Zero Values",[3908,8145,8146,8147,4761,8150,8153,8154,8157,8158,8160,8161,3769],{},"Go — це мова із ",[3871,8148,8149],{},"суворою статичною типізацією",[3758,8151,8152],{},"statically and strongly typed","). Компілятор ніколи не робить прихованих перетворень: складання ",[3753,8155,8156],{},"int32"," та ",[3753,8159,4154],{}," вимагає обов'язкового явного приведення ",[3753,8162,8163],{},"int64(val32)",[3976,8165,8167],{"id":8166},"повний-список-базових-типів-даних-у-go","Повний список базових типів даних у Go",[5991,8169,8170,8188],{},[5994,8171,8172],{},[5997,8173,8174,8177,8180,8183,8186],{},[6000,8175,8176],{},"Категорія",[6000,8178,8179],{},"Тип",[6000,8181,8182],{},"Розмір (байт)",[6000,8184,8185],{},"Діапазон \u002F Опис",[6000,8187,6005],{},[6010,8189,8190,8212,8231,8254,8273,8292,8315,8334,8353,8371,8389,8408,8429,8448,8473,8494,8520,8541,8566,8589,8618,8640,8663,8687,8712],{},[5997,8191,8192,8197,8202,8204,8207],{},[6015,8193,8194],{},[3871,8195,8196],{},"Цілі зі знаком",[6015,8198,8199],{},[3753,8200,8201],{},"int8",[6015,8203,4393],{},[6015,8205,8206],{},"-128 до 127",[6015,8208,8209],{},[3753,8210,8211],{},"var temp int8 = -15",[5997,8213,8214,8216,8221,8223,8226],{},[6015,8215],{},[6015,8217,8218],{},[3753,8219,8220],{},"int16",[6015,8222,4398],{},[6015,8224,8225],{},"-32,768 до 32,767",[6015,8227,8228],{},[3753,8229,8230],{},"var offset int16 = -3000",[5997,8232,8233,8235,8243,8246,8249],{},[6015,8234],{},[6015,8236,8237,8239,8240,5032],{},[3753,8238,8156],{}," (він же ",[3753,8241,8242],{},"rune",[6015,8244,8245],{},"4",[6015,8247,8248],{},"-2,147,483,648 до 2,147,483,647",[6015,8250,8251],{},[3753,8252,8253],{},"var count int32 = 150000",[5997,8255,8256,8258,8262,8265,8268],{},[6015,8257],{},[6015,8259,8260],{},[3753,8261,4154],{},[6015,8263,8264],{},"8",[6015,8266,8267],{},"-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807",[6015,8269,8270],{},[3753,8271,8272],{},"var timestamp int64 = 1719584000",[5997,8274,8275,8277,8281,8284,8287],{},[6015,8276],{},[6015,8278,8279],{},[3753,8280,4158],{},[6015,8282,8283],{},"4 або 8",[6015,8285,8286],{},"Залежить від архітектури (32\u002F64 біт)",[6015,8288,8289],{},[3753,8290,8291],{},"var users int = 1000",[5997,8293,8294,8299,8305,8307,8310],{},[6015,8295,8296],{},[3871,8297,8298],{},"Цілі без знаку",[6015,8300,8301,8239,8303,5032],{},[3753,8302,7007],{},[3753,8304,5162],{},[6015,8306,4393],{},[6015,8308,8309],{},"0 до 255",[6015,8311,8312],{},[3753,8313,8314],{},"var rawByte byte = 0xFF",[5997,8316,8317,8319,8324,8326,8329],{},[6015,8318],{},[6015,8320,8321],{},[3753,8322,8323],{},"uint16",[6015,8325,4398],{},[6015,8327,8328],{},"0 до 65,535",[6015,8330,8331],{},[3753,8332,8333],{},"var port uint16 = 8080",[5997,8335,8336,8338,8343,8345,8348],{},[6015,8337],{},[6015,8339,8340],{},[3753,8341,8342],{},"uint32",[6015,8344,8245],{},[6015,8346,8347],{},"0 до 4,294,967,295",[6015,8349,8350],{},[3753,8351,8352],{},"var maxConns uint32 = 100000",[5997,8354,8355,8357,8361,8363,8366],{},[6015,8356],{},[6015,8358,8359],{},[3753,8360,6523],{},[6015,8362,8264],{},[6015,8364,8365],{},"0 до 18,446,744,073,709,551,615",[6015,8367,8368],{},[3753,8369,8370],{},"var fileSize uint64 = 10737418240",[5997,8372,8373,8375,8380,8382,8384],{},[6015,8374],{},[6015,8376,8377],{},[3753,8378,8379],{},"uint",[6015,8381,8283],{},[6015,8383,8286],{},[6015,8385,8386],{},[3753,8387,8388],{},"var index uint = 42",[5997,8390,8391,8393,8397,8399,8402],{},[6015,8392],{},[6015,8394,8395],{},[3753,8396,3775],{},[6015,8398,8283],{},[6015,8400,8401],{},"Достатній для зберігання адреси пам'яті",[6015,8403,8404,8405],{},"Використовується з ",[3753,8406,8407],{},"unsafe.Pointer",[5997,8409,8410,8415,8419,8421,8424],{},[6015,8411,8412],{},[3871,8413,8414],{},"Дійсні числа",[6015,8416,8417],{},[3753,8418,6369],{},[6015,8420,8245],{},[6015,8422,8423],{},"IEEE-754, ~7 знаків точності",[6015,8425,8426],{},[3753,8427,8428],{},"var cpuUsage float32 = 0.452",[5997,8430,8431,8433,8438,8440,8443],{},[6015,8432],{},[6015,8434,8435],{},[3753,8436,8437],{},"float64",[6015,8439,8264],{},[6015,8441,8442],{},"IEEE-754, ~15 знаків точності (рекомендовано)",[6015,8444,8445],{},[3753,8446,8447],{},"var latency float64 = 12.84752",[5997,8449,8450,8455,8460,8462,8468],{},[6015,8451,8452],{},[3871,8453,8454],{},"Комплексні числа",[6015,8456,8457],{},[3753,8458,8459],{},"complex64",[6015,8461,8264],{},[6015,8463,8464,8465,8467],{},"Пара ",[3753,8466,6369],{}," (real + imag)",[6015,8469,8470],{},[3753,8471,8472],{},"var z complex64 = 1 + 2i",[5997,8474,8475,8477,8482,8485,8489],{},[6015,8476],{},[6015,8478,8479],{},[3753,8480,8481],{},"complex128",[6015,8483,8484],{},"16",[6015,8486,8464,8487,8467],{},[3753,8488,8437],{},[6015,8490,8491],{},[3753,8492,8493],{},"var z complex128 = 3 + 4i",[5997,8495,8496,8501,8506,8508,8515],{},[6015,8497,8498],{},[3871,8499,8500],{},"Булевий",[6015,8502,8503],{},[3753,8504,8505],{},"bool",[6015,8507,4393],{},[6015,8509,8510,8512,8513],{},[3753,8511,4689],{}," або ",[3753,8514,4206],{},[6015,8516,8517],{},[3753,8518,8519],{},"var isActive bool = true",[5997,8521,8522,8527,8531,8533,8536],{},[6015,8523,8524],{},[3871,8525,8526],{},"Рядковий",[6015,8528,8529],{},[3753,8530,7004],{},[6015,8532,8484],{},[6015,8534,8535],{},"UTF-8 послідовність (дескриптор: ptr + len)",[6015,8537,8538],{},[3753,8539,8540],{},"var name string = \"Kostyl\"",[5997,8542,8543,8548,8553,8555,8561],{},[6015,8544,8545],{},[3871,8546,8547],{},"Покажчик",[6015,8549,8550],{},[3753,8551,8552],{},"*T",[6015,8554,8283],{},[6015,8556,8557,8558],{},"Адреса пам'яті для типу ",[3753,8559,8560],{},"T",[6015,8562,8563],{},[3753,8564,8565],{},"var ptr *int = &x",[5997,8567,8568,8573,8578,8581,8584],{},[6015,8569,8570],{},[3871,8571,8572],{},"Зріз",[6015,8574,8575],{},[3753,8576,8577],{},"[]T",[6015,8579,8580],{},"24",[6015,8582,8583],{},"Динамічний масив (дескриптор: ptr + len + cap)",[6015,8585,8586],{},[3753,8587,8588],{},"var nums []int = []int{1, 2, 3}",[5997,8590,8591,8596,8601,8604,8613],{},[6015,8592,8593],{},[3871,8594,8595],{},"Масив",[6015,8597,8598],{},[3753,8599,8600],{},"[N]T",[6015,8602,8603],{},"N × sizeof(T)",[6015,8605,8606,8607,8610,8611],{},"Фіксована послідовність ",[3753,8608,8609],{},"N"," елементів типу ",[3753,8612,8560],{},[6015,8614,8615],{},[3753,8616,8617],{},"var arr [5]int",[5997,8619,8620,8625,8630,8632,8635],{},[6015,8621,8622],{},[3871,8623,8624],{},"Карта",[6015,8626,8627],{},[3753,8628,8629],{},"map[K]V",[6015,8631,8264],{},[6015,8633,8634],{},"Асоціативний масив (хеш-таблиця)",[6015,8636,8637],{},[3753,8638,8639],{},"var users map[string]int",[5997,8641,8642,8647,8652,8655,8658],{},[6015,8643,8644],{},[3871,8645,8646],{},"Структура",[6015,8648,8649],{},[3753,8650,8651],{},"struct{}",[6015,8653,8654],{},"Сума розмірів полів + вирівнювання",[6015,8656,8657],{},"Композитний тип з іменованими полями",[6015,8659,8660],{},[3753,8661,8662],{},"type User struct { Name string }",[5997,8664,8665,8670,8675,8677,8682],{},[6015,8666,8667],{},[3871,8668,8669],{},"Канал",[6015,8671,8672],{},[3753,8673,8674],{},"chan T",[6015,8676,8264],{},[6015,8678,8679,8680],{},"Канал для передачі значень типу ",[3753,8681,8560],{},[6015,8683,8684],{},[3753,8685,8686],{},"var ch chan int = make(chan int)",[5997,8688,8689,8694,8702,8704,8707],{},[6015,8690,8691],{},[3871,8692,8693],{},"Інтерфейс",[6015,8695,8696,8239,8699,5032],{},[3753,8697,8698],{},"interface{}",[3753,8700,8701],{},"any",[6015,8703,8484],{},[6015,8705,8706],{},"Два покажчики: type + value",[6015,8708,8709],{},[3753,8710,8711],{},"var x any = 42",[5997,8713,8714,8719,8724,8726,8729],{},[6015,8715,8716],{},[3871,8717,8718],{},"Функція",[6015,8720,8721],{},[3753,8722,8723],{},"func(...)",[6015,8725,8264],{},[6015,8727,8728],{},"Покажчик на функцію",[6015,8730,8731],{},[3753,8732,8733],{},"var fn func(int) int",[4484,8735,8736,8741],{"icon":4750},[3908,8737,8738],{},[3871,8739,8740],{},"Важливі нюанси:",[4781,8742,8743,8760,8772,8782],{},[3749,8744,8745,3880,8748,4183,8750,3836,8752,4183,8754,3836,8756,4183,8758],{},[3871,8746,8747],{},"Типи-аліаси:",[3753,8749,5162],{},[3753,8751,7007],{},[3753,8753,8242],{},[3753,8755,8156],{},[3753,8757,8701],{},[3753,8759,8698],{},[3749,8761,8762,3880,8765,3836,8767,3836,8769,8771],{},[3871,8763,8764],{},"Архітектурно-залежні:",[3753,8766,4158],{},[3753,8768,8379],{},[3753,8770,3775],{}," мають розмір 32 біти на 32-бітних системах і 64 біти на 64-бітних",[3749,8773,8774,8777,8778,8781],{},[3871,8775,8776],{},"Розмір структури:"," залежить від вирівнювання (",[3758,8779,8780],{},"alignment",") — детальніше в розділі про memory layout",[3749,8783,8784,3880,8787,3836,8789,3836,8791,3836,8794,3836,8797,8800],{},[3871,8785,8786],{},"Дескриптори:",[3753,8788,7004],{},[3753,8790,8577],{},[3753,8792,8793],{},"map",[3753,8795,8796],{},"chan",[3753,8798,8799],{},"interface"," — це \"розумні вказівники\" з метаданими, а не прямі дані",[3976,8802,8804],{"id":8803},"концепція-нульових-значень-zero-values","Концепція нульових значень (Zero Values)",[3908,8806,8807,8810,8811,8814,8815,8818,8819,8821],{},[3871,8808,8809],{},"Проста аналогія:"," уявіть готель. У C вам видають номер після попереднього гостя без прибирання — у шухлядах «сміття» (випадкові байти). У Go покоївка (компілятор + runtime) ",[3871,8812,8813],{},"завжди прибирає номер перед заселенням"," — усі шухляди порожні. Тому ",[3753,8816,8817],{},"var s string"," — це чистий порожній рядок ",[3753,8820,4203],{},", а не випадкові символи.",[3908,8823,8824,8825,8828],{},"На відміну від C\u002FC++, де неініціалізована змінна містить залишкове «сміття» пам'яті, у Go виділена пам'ять ",[3871,8826,8827],{},"завжди гарантовано занулюється компілятором",". Це не «зручність», а гарантія безпеки:",[5991,8830,8831,8848],{},[5994,8832,8833],{},[5997,8834,8835,8839,8845],{},[6000,8836,8838],{"align":8837},"left","Тип даних",[6000,8840,8841,8842,5032],{"align":8837},"Нульове значення (",[3758,8843,8844],{},"Zero Value",[6000,8846,8847],{"align":8837},"Фізичний стан у пам'яті",[6010,8849,8850,8874,8890,8909,8926,8950],{},[5997,8851,8852,8861,8868],{},[6015,8853,8854,8855,3836,8857,3836,8859,5032],{"align":8837},"Числові типи (",[3753,8856,4158],{},[3753,8858,8379],{},[3753,8860,8437],{},[6015,8862,8863,8512,8865],{"align":8837},[3753,8864,4200],{},[3753,8866,8867],{},"0.0",[6015,8869,8870,8871],{"align":8837},"Усі байти заповнені ",[3753,8872,8873],{},"0x00",[5997,8875,8876,8881,8885],{},[6015,8877,8878,8879,5032],{"align":8837},"Булевий тип (",[3753,8880,8505],{},[6015,8882,8883],{"align":8837},[3753,8884,4206],{},[6015,8886,8887,8888],{"align":8837},"Байт значення ",[3753,8889,8873],{},[5997,8891,8892,8897,8902],{},[6015,8893,8894,8895,5032],{"align":8837},"Рядки (",[3753,8896,7004],{},[6015,8898,8899,8901],{"align":8837},[3753,8900,4203],{}," (порожній рядок)",[6015,8903,8904,8905,8908],{"align":8837},"Порожній рядок (деталі ",[3753,8906,8907],{},"StringHeader"," — див. розділ про рядки нижче)",[5997,8910,8911,8919,8923],{},[6015,8912,8913,8914,8916,8917,5032],{"align":8837},"Покажчики (",[3753,8915,8552],{},"), Інтерфейси (",[3753,8918,8701],{},[6015,8920,8921],{"align":8837},[3753,8922,4209],{},[6015,8924,8925],{"align":8837},"Відсутня адреса (деталі — див. розділ про покажчики)",[5997,8927,8928,8939,8943],{},[6015,8929,8930,8931,8933,8934,8936,8937,5032],{"align":8837},"Зрізи (",[3753,8932,8577],{},"), Мапи (",[3753,8935,8629],{},"), Канали (",[3753,8938,8674],{},[6015,8940,8941],{"align":8837},[3753,8942,4209],{},[6015,8944,8945,8946,8949],{"align":8837},"Відсутній дескриптор (деталі — див. ",[3753,8947,8948],{},"make vs new"," та розділи про зрізи\u002Fмапи)",[5997,8951,8952,8958,8963],{},[6015,8953,8954,8955,5032],{"align":8837},"Структури (",[3753,8956,8957],{},"struct",[6015,8959,8960,8961],{"align":8837},"Усі поля містять свої ",[3758,8962,3760],{},[6015,8964,8965],{"align":8837},"Повний блок пам'яті структури занулено",[3908,8967,8968,8971,8972,8974,8975,8978,8979,8981,8982,8985,8986,8989,8990,8992,8993,8996,8997,9000,9001,9003,9004,9006],{},[3871,8969,8970],{},"Наслідок для бекенду:"," завдяки Zero Value ",[3753,8973,8817],{}," можна одразу робити ",[3753,8976,8977],{},"s += \"hello\""," без перевірки на ",[3753,8980,4209],{},", а ",[3753,8983,8984],{},"var m map[string]int"," — ні: читати ",[3753,8987,8988],{},"m[\"k\"]"," дасть ",[3753,8991,4200],{},", але ",[3753,8994,8995],{},"m[\"k\"]=1"," → ",[3753,8998,8999],{},"panic",". Тому мапи та зрізи вимагають ",[3753,9002,3764],{}," — деталі в розділі ",[3753,9005,8948],{}," пізніше, поки достатньо запам'ятати правило з таблиці.",[3900,9008],{},[3976,9010,9012],{"id":9011},"детальний-огляд-числових-типів","Детальний огляд числових типів",[9014,9015,9017],"h4",{"id":9016},"цілі-числа-зі-знаком-та-без-знаку","Цілі числа зі знаком та без знаку",[3908,9019,9020,9023,9024,9027,9028,9031,9032,9034,9035,8996,9038,9040,9041,9043,9044,9047,9048,9051,9052,9054,9055,9057],{},[3871,9021,9022],{},"Контекст вибору типу:"," у клієнт-серверних системах тип — це не лише діапазон, а й контракт. Система зберігає ",[3753,9025,9026],{},"userID"," в PostgreSQL як ",[3753,9029,9030],{},"BIGINT"," → у Go це ",[3753,9033,4154],{},", а мережевий порт за RFC — ",[3753,9036,9037],{},"0..65535",[3753,9039,8323],{},". Використання ",[3753,9042,4158],{}," для порту дозволить передати ",[3753,9045,9046],{},"-1"," і зламати ",[3753,9049,9050],{},"net.Listen"," (функція ",[3753,9053,9050],{}," очікує валідний порт, але з типом ",[3753,9056,4158],{}," компілятор не зловить помилку, і в runtime отримаємо panic або невизначену поведінку замість помилки компіляції).",[3908,9059,9060,3880,9063,8157,9065,9067,9068,9071,9072,9074,9075,9077,9078,9081],{},[3871,9061,9062],{},"Внутрішній механізм:",[3753,9064,4158],{},[3753,9066,8379],{}," — це типи розміру машинного слова: 4 байти на 32-бітній ОС і 8 байтів на 64-бітній. Вони найшвидші (одна інструкція CPU), але ",[3871,9069,9070],{},"непереносні для бінарних протоколів та файлів",": якщо програма на 64-бітній системі записує ",[3753,9073,4158],{}," (8 байт) у файл, а програма на 32-бітній системі читає цей файл очікуючи ",[3753,9076,4158],{}," (4 байти), дані будуть прочитані невірно. Фіксовані ",[3753,9079,9080],{},"int32\u002Fint64"," гарантують однаковий розмір на всіх платформах — завжди 4 та 8 байтів відповідно, незалежно від архітектури.",[4748,9083,9085,9090,9195,9200,9243],{"icon":9084},"i-lucide-alert-triangle",[3908,9086,9087],{},[3871,9088,9089],{},"Приклад проблеми переносності:",[3984,9091,9093],{"className":4162,"code":9092,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Програма A (64-біт система) записує дані:\nvar count int = 1000  \u002F\u002F Займає 8 байт\nfile.Write(binary.LittleEndian, count)  \u002F\u002F Записано 8 байт\n\n\u002F\u002F Програма B (32-біт система) читає:\nvar count int  \u002F\u002F Очікує 4 байти\nfile.Read(binary.LittleEndian, &count)  \u002F\u002F Читає 4 байти замість 8!\n\u002F\u002F Результат: неправильне значення або помилка читання\n",[3753,9094,9095,9100,9116,9144,9148,9153,9164,9190],{"__ignoreMap":3992},[4005,9096,9097],{"class":4007,"line":4008},[4005,9098,9099],{"class":4190},"\u002F\u002F Програма A (64-біт система) записує дані:\n",[4005,9101,9102,9104,9106,9108,9110,9113],{"class":4007,"line":4014},[4005,9103,3963],{"class":4171},[4005,9105,7160],{"class":4174},[4005,9107,4224],{"class":4178},[4005,9109,4183],{"class":4182},[4005,9111,9112],{"class":4186},"1000",[4005,9114,9115],{"class":4190},"  \u002F\u002F Займає 8 байт\n",[4005,9117,9118,9120,9122,9125,9127,9130,9132,9135,9137,9139,9141],{"class":4007,"line":4020},[4005,9119,4593],{"class":4174},[4005,9121,3769],{"class":4182},[4005,9123,9124],{"class":4302},"Write",[4005,9126,4611],{"class":4182},[4005,9128,9129],{"class":4174},"binary",[4005,9131,3769],{"class":4182},[4005,9133,9134],{"class":4174},"LittleEndian",[4005,9136,3836],{"class":4182},[4005,9138,7189],{"class":4174},[4005,9140,5196],{"class":4182},[4005,9142,9143],{"class":4190},"\u002F\u002F Записано 8 байт\n",[4005,9145,9146],{"class":4007,"line":4026},[4005,9147,4036],{"emptyLinePlaceholder":4035},[4005,9149,9150],{"class":4007,"line":4032},[4005,9151,9152],{"class":4190},"\u002F\u002F Програма B (32-біт система) читає:\n",[4005,9154,9155,9157,9159,9161],{"class":4007,"line":4039},[4005,9156,3963],{"class":4171},[4005,9158,7160],{"class":4174},[4005,9160,4224],{"class":4178},[4005,9162,9163],{"class":4190},"  \u002F\u002F Очікує 4 байти\n",[4005,9165,9166,9168,9170,9172,9174,9176,9178,9180,9183,9185,9187],{"class":4007,"line":4045},[4005,9167,4593],{"class":4174},[4005,9169,3769],{"class":4182},[4005,9171,5188],{"class":4302},[4005,9173,4611],{"class":4182},[4005,9175,9129],{"class":4174},[4005,9177,3769],{"class":4182},[4005,9179,9134],{"class":4174},[4005,9181,9182],{"class":4182},", &",[4005,9184,7189],{"class":4174},[4005,9186,5196],{"class":4182},[4005,9188,9189],{"class":4190},"\u002F\u002F Читає 4 байти замість 8!\n",[4005,9191,9192],{"class":4007,"line":4051},[4005,9193,9194],{"class":4190},"\u002F\u002F Результат: неправильне значення або помилка читання\n",[3908,9196,9197],{},[3871,9198,9199],{},"Рішення для переносності:",[3984,9201,9203],{"className":4162,"code":9202,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Завжди використовуйте фіксовані типи для бінарних даних:\nvar count int32 = 1000  \u002F\u002F Завжди 4 байти на будь-якій системі\nvar timestamp int64 = 1719584000  \u002F\u002F Завжди 8 байт на будь-якій системі\n",[3753,9204,9205,9210,9226],{"__ignoreMap":3992},[4005,9206,9207],{"class":4007,"line":4008},[4005,9208,9209],{"class":4190},"\u002F\u002F Завжди використовуйте фіксовані типи для бінарних даних:\n",[4005,9211,9212,9214,9216,9219,9221,9223],{"class":4007,"line":4014},[4005,9213,3963],{"class":4171},[4005,9215,7160],{"class":4174},[4005,9217,9218],{"class":4178}," int32",[4005,9220,4183],{"class":4182},[4005,9222,9112],{"class":4186},[4005,9224,9225],{"class":4190},"  \u002F\u002F Завжди 4 байти на будь-якій системі\n",[4005,9227,9228,9230,9233,9235,9237,9240],{"class":4007,"line":4020},[4005,9229,3963],{"class":4171},[4005,9231,9232],{"class":4174}," timestamp",[4005,9234,4179],{"class":4178},[4005,9236,4183],{"class":4182},[4005,9238,9239],{"class":4186},"1719584000",[4005,9241,9242],{"class":4190},"  \u002F\u002F Завжди 8 байт на будь-якій системі\n",[3908,9244,9245],{},"Те саме стосується мережевих протоколів: клієнт на 64-біт машині та сервер на 32-біт машині повинні \"говорити однією мовою\" — використовувати типи фіксованого розміру.",[3908,9247,9248,9249,8157,9252,9255,9256,9259,9260,8157,9263,9266,9267,3769],{},"Псевдоніми ",[3753,9250,9251],{},"byte = uint8",[3753,9253,9254],{},"rune = int32"," (оголошені як ",[3753,9257,9258],{},"type byte = uint8",") не створюють нового типу — тому ",[3753,9261,9262],{},"byte(255)",[3753,9264,9265],{},"uint8(255)"," взаємозамінні без приведення, на відміну від ",[3753,9268,9269],{},"type UserID int64",[3908,9271,9272,9278,9279,9282],{},[3871,9273,9274,9275,4159],{},"Що буде якщо інакше — переповнення (",[3758,9276,9277],{},"wrap-around"," Go не панікує при переповненні цілих — значення циклічно обертається за модулем $2^N$, як у C з ",[3753,9280,9281],{},"-fwrapv",". Це джерело багів безпеки:",[3984,9284,9286],{"className":4162,"code":9285,"language":4164,"meta":3992,"style":3992},"var a int8 = 127\na++ \u002F\u002F 127 + 1 == -128 (0b01111111 -> 0b10000000)\nvar b uint8 = 255\nb++ \u002F\u002F 255 + 1 == 0\n\u002F\u002F Для мережевих лічильників це означає що 10 ГБ файл + 1 байт може стати 0!\n",[3753,9287,9288,9302,9313,9326,9335],{"__ignoreMap":3992},[4005,9289,9290,9292,9294,9297,9299],{"class":4007,"line":4008},[4005,9291,3963],{"class":4171},[4005,9293,4376],{"class":4174},[4005,9295,9296],{"class":4178}," int8",[4005,9298,4183],{"class":4182},[4005,9300,9301],{"class":4186},"127\n",[4005,9303,9304,9307,9310],{"class":4007,"line":4014},[4005,9305,9306],{"class":4174},"a",[4005,9308,9309],{"class":4182},"++ ",[4005,9311,9312],{"class":4190},"\u002F\u002F 127 + 1 == -128 (0b01111111 -> 0b10000000)\n",[4005,9314,9315,9317,9319,9321,9323],{"class":4007,"line":4020},[4005,9316,3963],{"class":4171},[4005,9318,6087],{"class":4174},[4005,9320,7122],{"class":4178},[4005,9322,4183],{"class":4182},[4005,9324,9325],{"class":4186},"255\n",[4005,9327,9328,9330,9332],{"class":4007,"line":4026},[4005,9329,4381],{"class":4174},[4005,9331,9309],{"class":4182},[4005,9333,9334],{"class":4190},"\u002F\u002F 255 + 1 == 0\n",[4005,9336,9337],{"class":4007,"line":4032},[4005,9338,9339],{"class":4190},"\u002F\u002F Для мережевих лічильників це означає що 10 ГБ файл + 1 байт може стати 0!\n",[3908,9341,9342,9343,9346,9347,9350,9351,9353,9354,9356],{},"Компілятор ловить лише константне переповнення (",[3753,9344,9345],{},"const x int8 = 128"," — помилка), але не динамічне. Для безпечної арифметики перевіряйте межі вручну або використовуйте ",[3753,9348,9349],{},"math\u002Fbits.Add64"," з прапорцем переносу. Тип ",[3753,9352,3775],{}," — ціле достатнє для зберігання адреси, потрібне лише для ",[3753,9355,8407],{}," та системних викликів, ніколи не використовуйте його як звичайний лічильник.",[3984,9358,9360],{"className":4162,"code":9359,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"math\"\n)\n\nfunc main() {\n    \u002F\u002F Системні цілі типи (розмір 32 або 64 біти залежно від архітектури ОС)\n    var totalUsers int = 1_000_000 \u002F\u002F Символ _ підвищує читабельність\n    var userIndex uint = 42        \u002F\u002F Тільки невід'ємні числа\n\n    \u002F\u002F Цілі типи фіксованої розрядності зі знаком\n    var tempSensor int8 = -15          \u002F\u002F Від -128 до 127 (1 байт)\n    var clientOffset int16 = -3000     \u002F\u002F Від -32768 до 32767 (2 байти)\n    var metricCount int32 = 150000     \u002F\u002F 4 байти (аліас rune)\n    var unixTimestamp int64 = 1719584000 \u002F\u002F 8 байтів (мітки часу)\n\n    \u002F\u002F Беззнакові типи (ідеальні для мережевих пакетів)\n    var rawByte byte = 0xFF            \u002F\u002F byte — це аліас для uint8 (0..255)\n    var networkPort uint16 = 8080      \u002F\u002F Мережевий TCP\u002FUDP порт (0..65535)\n    var maxConns uint32 = 100_000      \u002F\u002F 4 байти (0..4294967295)\n    var fileSize uint64 = 10 \u003C\u003C 30     \u002F\u002F 10 ГБ (8 байтів)\n\n    \u002F\u002F Явне перетворення типів\n    sum := int64(networkPort) + unixTimestamp\n    fmt.Printf(\"Порт: %d, Загальний час: %d, MaxInt64: %d\\n\", networkPort, sum, math.MaxInt64)\n}\n",[3753,9361,9362,9368,9372,9378,9382,9387,9391,9395,9403,9408,9426,9444,9448,9453,9471,9489,9506,9522,9526,9531,9549,9567,9585,9605,9609,9614,9634,9684],{"__ignoreMap":3992},[4005,9363,9364,9366],{"class":4007,"line":4008},[4005,9365,5739],{"class":4171},[4005,9367,5742],{"class":4178},[4005,9369,9370],{"class":4007,"line":4014},[4005,9371,4036],{"emptyLinePlaceholder":4035},[4005,9373,9374,9376],{"class":4007,"line":4020},[4005,9375,3917],{"class":4836},[4005,9377,4439],{"class":4182},[4005,9379,9380],{"class":4007,"line":4026},[4005,9381,4843],{"class":4330},[4005,9383,9384],{"class":4007,"line":4032},[4005,9385,9386],{"class":4330},"    \"math\"\n",[4005,9388,9389],{"class":4007,"line":4039},[4005,9390,4482],{"class":4182},[4005,9392,9393],{"class":4007,"line":4045},[4005,9394,4036],{"emptyLinePlaceholder":4035},[4005,9396,9397,9399,9401],{"class":4007,"line":4051},[4005,9398,4299],{"class":4171},[4005,9400,5764],{"class":4302},[4005,9402,4306],{"class":4182},[4005,9404,9405],{"class":4007,"line":4057},[4005,9406,9407],{"class":4190},"    \u002F\u002F Системні цілі типи (розмір 32 або 64 біти залежно від архітектури ОС)\n",[4005,9409,9410,9413,9416,9418,9420,9423],{"class":4007,"line":4063},[4005,9411,9412],{"class":4171},"    var",[4005,9414,9415],{"class":4174}," totalUsers",[4005,9417,4224],{"class":4178},[4005,9419,4183],{"class":4182},[4005,9421,9422],{"class":4186},"1_000_000",[4005,9424,9425],{"class":4190}," \u002F\u002F Символ _ підвищує читабельність\n",[4005,9427,9428,9430,9433,9436,9438,9441],{"class":4007,"line":4069},[4005,9429,9412],{"class":4171},[4005,9431,9432],{"class":4174}," userIndex",[4005,9434,9435],{"class":4178}," uint",[4005,9437,4183],{"class":4182},[4005,9439,9440],{"class":4186},"42",[4005,9442,9443],{"class":4190},"        \u002F\u002F Тільки невід'ємні числа\n",[4005,9445,9446],{"class":4007,"line":4075},[4005,9447,4036],{"emptyLinePlaceholder":4035},[4005,9449,9450],{"class":4007,"line":4081},[4005,9451,9452],{"class":4190},"    \u002F\u002F Цілі типи фіксованої розрядності зі знаком\n",[4005,9454,9455,9457,9460,9462,9465,9468],{"class":4007,"line":4086},[4005,9456,9412],{"class":4171},[4005,9458,9459],{"class":4174}," tempSensor",[4005,9461,9296],{"class":4178},[4005,9463,9464],{"class":4182}," = -",[4005,9466,9467],{"class":4186},"15",[4005,9469,9470],{"class":4190},"          \u002F\u002F Від -128 до 127 (1 байт)\n",[4005,9472,9473,9475,9478,9481,9483,9486],{"class":4007,"line":4092},[4005,9474,9412],{"class":4171},[4005,9476,9477],{"class":4174}," clientOffset",[4005,9479,9480],{"class":4178}," int16",[4005,9482,9464],{"class":4182},[4005,9484,9485],{"class":4186},"3000",[4005,9487,9488],{"class":4190},"     \u002F\u002F Від -32768 до 32767 (2 байти)\n",[4005,9490,9491,9493,9496,9498,9500,9503],{"class":4007,"line":4098},[4005,9492,9412],{"class":4171},[4005,9494,9495],{"class":4174}," metricCount",[4005,9497,9218],{"class":4178},[4005,9499,4183],{"class":4182},[4005,9501,9502],{"class":4186},"150000",[4005,9504,9505],{"class":4190},"     \u002F\u002F 4 байти (аліас rune)\n",[4005,9507,9508,9510,9513,9515,9517,9519],{"class":4007,"line":4104},[4005,9509,9412],{"class":4171},[4005,9511,9512],{"class":4174}," unixTimestamp",[4005,9514,4179],{"class":4178},[4005,9516,4183],{"class":4182},[4005,9518,9239],{"class":4186},[4005,9520,9521],{"class":4190}," \u002F\u002F 8 байтів (мітки часу)\n",[4005,9523,9524],{"class":4007,"line":4110},[4005,9525,4036],{"emptyLinePlaceholder":4035},[4005,9527,9528],{"class":4007,"line":4937},[4005,9529,9530],{"class":4190},"    \u002F\u002F Беззнакові типи (ідеальні для мережевих пакетів)\n",[4005,9532,9533,9535,9538,9541,9543,9546],{"class":4007,"line":4942},[4005,9534,9412],{"class":4171},[4005,9536,9537],{"class":4174}," rawByte",[4005,9539,9540],{"class":4178}," byte",[4005,9542,4183],{"class":4182},[4005,9544,9545],{"class":4186},"0xFF",[4005,9547,9548],{"class":4190},"            \u002F\u002F byte — це аліас для uint8 (0..255)\n",[4005,9550,9551,9553,9556,9559,9561,9564],{"class":4007,"line":4947},[4005,9552,9412],{"class":4171},[4005,9554,9555],{"class":4174}," networkPort",[4005,9557,9558],{"class":4178}," uint16",[4005,9560,4183],{"class":4182},[4005,9562,9563],{"class":4186},"8080",[4005,9565,9566],{"class":4190},"      \u002F\u002F Мережевий TCP\u002FUDP порт (0..65535)\n",[4005,9568,9569,9571,9574,9577,9579,9582],{"class":4007,"line":4953},[4005,9570,9412],{"class":4171},[4005,9572,9573],{"class":4174}," maxConns",[4005,9575,9576],{"class":4178}," uint32",[4005,9578,4183],{"class":4182},[4005,9580,9581],{"class":4186},"100_000",[4005,9583,9584],{"class":4190},"      \u002F\u002F 4 байти (0..4294967295)\n",[4005,9586,9587,9589,9592,9594,9596,9598,9600,9602],{"class":4007,"line":4960},[4005,9588,9412],{"class":4171},[4005,9590,9591],{"class":4174}," fileSize",[4005,9593,6727],{"class":4178},[4005,9595,4183],{"class":4182},[4005,9597,4631],{"class":4186},[4005,9599,6429],{"class":4182},[4005,9601,4276],{"class":4186},[4005,9603,9604],{"class":4190},"     \u002F\u002F 10 ГБ (8 байтів)\n",[4005,9606,9607],{"class":4007,"line":4973},[4005,9608,4036],{"emptyLinePlaceholder":4035},[4005,9610,9611],{"class":4007,"line":4985},[4005,9612,9613],{"class":4190},"    \u002F\u002F Явне перетворення типів\n",[4005,9615,9616,9619,9621,9623,9625,9628,9631],{"class":4007,"line":7813},[4005,9617,9618],{"class":4174},"    sum",[4005,9620,4314],{"class":4182},[4005,9622,4154],{"class":4178},[4005,9624,4611],{"class":4182},[4005,9626,9627],{"class":4174},"networkPort",[4005,9629,9630],{"class":4182},") + ",[4005,9632,9633],{"class":4174},"unixTimestamp\n",[4005,9635,9636,9638,9640,9642,9644,9647,9649,9652,9654,9657,9659,9661,9663,9665,9667,9669,9672,9674,9677,9679,9682],{"class":4007,"line":7819},[4005,9637,5370],{"class":4174},[4005,9639,3769],{"class":4182},[4005,9641,7945],{"class":4302},[4005,9643,4611],{"class":4182},[4005,9645,9646],{"class":4330},"\"Порт: ",[4005,9648,7959],{"class":4174},[4005,9650,9651],{"class":4330},", Загальний час: ",[4005,9653,7959],{"class":4174},[4005,9655,9656],{"class":4330},", MaxInt64: ",[4005,9658,7959],{"class":4174},[4005,9660,7965],{"class":7964},[4005,9662,7968],{"class":4330},[4005,9664,3836],{"class":4182},[4005,9666,9627],{"class":4174},[4005,9668,3836],{"class":4182},[4005,9670,9671],{"class":4174},"sum",[4005,9673,3836],{"class":4182},[4005,9675,9676],{"class":4174},"math",[4005,9678,3769],{"class":4182},[4005,9680,9681],{"class":4174},"MaxInt64",[4005,9683,4482],{"class":4182},[4005,9685,9686],{"class":4007,"line":7826},[4005,9687,4078],{"class":4182},[3900,9689],{},[9014,9691,9693],{"id":9692},"дійсні-числа-комплексні-числа-та-булевий-тип","Дійсні числа, комплексні числа та булевий тип",[9695,9696,9698],"h5",{"id":9697},"дійсні-числа-float","Дійсні числа (Float)",[3908,9700,9701,9708,9709,3769],{},[3871,9702,9703,9704,8157,9706,5032],{},"Дійсні числа в Go (",[3753,9705,6369],{},[3753,9707,8437],{}," представляють числа з плаваючою комою за стандартом ",[3871,9710,9711],{},"IEEE-754",[5991,9713,9714,9729],{},[5994,9715,9716],{},[5997,9717,9718,9720,9723,9726],{},[6000,9719,8179],{},[6000,9721,9722],{},"Розмір",[6000,9724,9725],{},"Точність",[6000,9727,9728],{},"Типове використання",[6010,9730,9731,9746],{},[5997,9732,9733,9737,9740,9743],{},[6015,9734,9735],{},[3753,9736,6369],{},[6015,9738,9739],{},"4 байти",[6015,9741,9742],{},"~7 десяткових знаків",[6015,9744,9745],{},"Графіка, ігри, коли потрібна економія пам'яті",[5997,9747,9748,9752,9755,9758],{},[6015,9749,9750],{},[3753,9751,8437],{},[6015,9753,9754],{},"8 байтів",[6015,9756,9757],{},"~15 десяткових знаків",[6015,9759,9760,9763],{},[3871,9761,9762],{},"Стандартний вибір"," для наукових обчислень, фінансів (з обережністю)",[4484,9765,9766,9771,9777],{"icon":9084},[3908,9767,9768],{},[3871,9769,9770],{},"Важливо про точність:",[3908,9772,9773,9774,5831],{},"Дійсні числа ",[3871,9775,9776],{},"не можуть точно представити всі десяткові дроби",[3984,9778,9780],{"className":4162,"code":9779,"language":4164,"meta":3992,"style":3992},"var x float64 = 0.1 + 0.2\nfmt.Println(x)  \u002F\u002F Виведе: 0.30000000000000004 (не 0.3!)\nfmt.Println(x == 0.3)  \u002F\u002F false\n\n\u002F\u002F Для фінансових розрахунків використовуйте:\n\u002F\u002F - Цілі числа (копійки замість гривень): var cents int64 = 1050 \u002F\u002F 10.50 грн\n\u002F\u002F - Спеціальні бібліотеки: github.com\u002Fshopspring\u002Fdecimal\n",[3753,9781,9782,9800,9817,9839,9843,9848,9856],{"__ignoreMap":3992},[4005,9783,9784,9786,9788,9790,9792,9795,9797],{"class":4007,"line":4008},[4005,9785,3963],{"class":4171},[4005,9787,6141],{"class":4174},[4005,9789,5907],{"class":4178},[4005,9791,4183],{"class":4182},[4005,9793,9794],{"class":4186},"0.1",[4005,9796,6289],{"class":4182},[4005,9798,9799],{"class":4186},"0.2\n",[4005,9801,9802,9804,9806,9808,9810,9812,9814],{"class":4007,"line":4014},[4005,9803,3785],{"class":4174},[4005,9805,3769],{"class":4182},[4005,9807,5348],{"class":4302},[4005,9809,4611],{"class":4182},[4005,9811,4621],{"class":4174},[4005,9813,5196],{"class":4182},[4005,9815,9816],{"class":4190},"\u002F\u002F Виведе: 0.30000000000000004 (не 0.3!)\n",[4005,9818,9819,9821,9823,9825,9827,9829,9831,9834,9836],{"class":4007,"line":4020},[4005,9820,3785],{"class":4174},[4005,9822,3769],{"class":4182},[4005,9824,5348],{"class":4302},[4005,9826,4611],{"class":4182},[4005,9828,4621],{"class":4174},[4005,9830,5473],{"class":4182},[4005,9832,9833],{"class":4186},"0.3",[4005,9835,5196],{"class":4182},[4005,9837,9838],{"class":4190},"\u002F\u002F false\n",[4005,9840,9841],{"class":4007,"line":4026},[4005,9842,4036],{"emptyLinePlaceholder":4035},[4005,9844,9845],{"class":4007,"line":4032},[4005,9846,9847],{"class":4190},"\u002F\u002F Для фінансових розрахунків використовуйте:\n",[4005,9849,9850,9853],{"class":4007,"line":4039},[4005,9851,9852],{"class":4190},"\u002F\u002F - Цілі числа (копійки замість гривень): var cents int64 = 1050",[4005,9854,9855],{"class":4190}," \u002F\u002F 10.50 грн\n",[4005,9857,9858],{"class":4007,"line":4045},[4005,9859,9860],{"class":4190},"\u002F\u002F - Спеціальні бібліотеки: github.com\u002Fshopspring\u002Fdecimal\n",[3908,9862,9863],{},[3871,9864,9865],{},"Спеціальні значення:",[3746,9867,9868,9880],{},[3749,9869,9870,3836,9873,9876,9877],{},[3753,9871,9872],{},"+Inf",[3753,9874,9875],{},"-Inf"," (нескінченність): ",[3753,9878,9879],{},"1.0 \u002F 0.0",[3749,9881,9882,9885,9886,8512,9889],{},[3753,9883,9884],{},"NaN"," (Not a Number): ",[3753,9887,9888],{},"0.0 \u002F 0.0",[3753,9890,9891],{},"math.Sqrt(-1)",[9695,9893,9895],{"id":9894},"комплексні-числа-complex","Комплексні числа (Complex)",[3908,9897,9898,9900,9901,9904,9905,3769],{},[3871,9899,8454],{}," складаються з дійсної та уявної частин: ",[3753,9902,9903],{},"a + bi",", де ",[3753,9906,9907],{},"i = √-1",[5991,9909,9910,9924],{},[5994,9911,9912],{},[5997,9913,9914,9916,9918,9921],{},[6000,9915,8179],{},[6000,9917,9722],{},[6000,9919,9920],{},"Складові",[6000,9922,9923],{},"Використання",[6010,9925,9926,9942],{},[5997,9927,9928,9932,9934,9939],{},[6015,9929,9930],{},[3753,9931,8459],{},[6015,9933,9754],{},[6015,9935,9936,9937,8467],{},"Два ",[3753,9938,6369],{},[6015,9940,9941],{},"Наукові обчислення, DSP",[5997,9943,9944,9948,9951,9955],{},[6015,9945,9946],{},[3753,9947,8481],{},[6015,9949,9950],{},"16 байтів",[6015,9952,9936,9953,8467],{},[3753,9954,8437],{},[6015,9956,9957,9959],{},[3871,9958,9762],{}," для точних розрахунків",[3908,9961,9962],{},[3871,9963,9964],{},"Операції з комплексними числами:",[3984,9966,9968],{"className":4162,"code":9967,"language":4164,"meta":3992,"style":3992},"z1 := 1 + 2i              \u002F\u002F Літерал комплексного числа\nz2 := complex(3, 4)       \u002F\u002F Конструктор: complex(real, imag)\n\n\u002F\u002F Отримання частин:\nrealPart := real(z1)      \u002F\u002F 1.0\nimagPart := imag(z1)      \u002F\u002F 2.0\n\n\u002F\u002F Арифметика:\nsum := z1 + z2            \u002F\u002F (4+6i)\nproduct := z1 * z2        \u002F\u002F (-5+10i)\n",[3753,9969,9970,9987,10011,10015,10020,10040,10059,10063,10068,10083],{"__ignoreMap":3992},[4005,9971,9972,9975,9977,9979,9981,9984],{"class":4007,"line":4008},[4005,9973,9974],{"class":4174},"z1",[4005,9976,4314],{"class":4182},[4005,9978,4393],{"class":4186},[4005,9980,6289],{"class":4182},[4005,9982,9983],{"class":4186},"2i",[4005,9985,9986],{"class":4190},"              \u002F\u002F Літерал комплексного числа\n",[4005,9988,9989,9992,9994,9997,9999,10001,10003,10005,10008],{"class":4007,"line":4014},[4005,9990,9991],{"class":4174},"z2",[4005,9993,4314],{"class":4182},[4005,9995,9996],{"class":4302},"complex",[4005,9998,4611],{"class":4182},[4005,10000,6286],{"class":4186},[4005,10002,3836],{"class":4182},[4005,10004,8245],{"class":4186},[4005,10006,10007],{"class":4182},")       ",[4005,10009,10010],{"class":4190},"\u002F\u002F Конструктор: complex(real, imag)\n",[4005,10012,10013],{"class":4007,"line":4020},[4005,10014,4036],{"emptyLinePlaceholder":4035},[4005,10016,10017],{"class":4007,"line":4026},[4005,10018,10019],{"class":4190},"\u002F\u002F Отримання частин:\n",[4005,10021,10022,10025,10027,10030,10032,10034,10037],{"class":4007,"line":4032},[4005,10023,10024],{"class":4174},"realPart",[4005,10026,4314],{"class":4182},[4005,10028,10029],{"class":4302},"real",[4005,10031,4611],{"class":4182},[4005,10033,9974],{"class":4174},[4005,10035,10036],{"class":4182},")      ",[4005,10038,10039],{"class":4190},"\u002F\u002F 1.0\n",[4005,10041,10042,10045,10047,10050,10052,10054,10056],{"class":4007,"line":4039},[4005,10043,10044],{"class":4174},"imagPart",[4005,10046,4314],{"class":4182},[4005,10048,10049],{"class":4302},"imag",[4005,10051,4611],{"class":4182},[4005,10053,9974],{"class":4174},[4005,10055,10036],{"class":4182},[4005,10057,10058],{"class":4190},"\u002F\u002F 2.0\n",[4005,10060,10061],{"class":4007,"line":4045},[4005,10062,4036],{"emptyLinePlaceholder":4035},[4005,10064,10065],{"class":4007,"line":4051},[4005,10066,10067],{"class":4190},"\u002F\u002F Арифметика:\n",[4005,10069,10070,10072,10074,10076,10078,10080],{"class":4007,"line":4057},[4005,10071,9671],{"class":4174},[4005,10073,4314],{"class":4182},[4005,10075,9974],{"class":4174},[4005,10077,6289],{"class":4182},[4005,10079,9991],{"class":4174},[4005,10081,10082],{"class":4190},"            \u002F\u002F (4+6i)\n",[4005,10084,10085,10088,10090,10092,10094,10096],{"class":4007,"line":4063},[4005,10086,10087],{"class":4174},"product",[4005,10089,4314],{"class":4182},[4005,10091,9974],{"class":4174},[4005,10093,6735],{"class":4182},[4005,10095,9991],{"class":4174},[4005,10097,10098],{"class":4190},"        \u002F\u002F (-5+10i)\n",[4748,10100,10101],{"icon":4750},"У більшості бізнес-застосунків комплексні числа не використовуються. Вони потрібні для наукових обчислень, обробки сигналів, квантових алгоритмів.",[9695,10103,10105],{"id":10104},"булевий-тип-boolean","Булевий тип (Boolean)",[3908,10107,10108,10113,10114,10116,10117,10119],{},[3871,10109,10110,10111],{},"Булевий тип ",[3753,10112,8505],{}," має лише два значення: ",[3753,10115,4689],{}," (істина) та ",[3753,10118,4206],{}," (хибність).",[5991,10121,10122,10135],{},[5994,10123,10124],{},[5997,10125,10126,10128,10130,10133],{},[6000,10127,8179],{},[6000,10129,9722],{},[6000,10131,10132],{},"Значення",[6000,10134,8844],{},[6010,10136,10137],{},[5997,10138,10139,10143,10146,10152],{},[6015,10140,10141],{},[3753,10142,8505],{},[6015,10144,10145],{},"1 байт",[6015,10147,10148,8512,10150],{},[3753,10149,4689],{},[3753,10151,4206],{},[6015,10153,10154],{},[3753,10155,4206],{},[3908,10157,10158],{},[3871,10159,10160],{},"Логічні операції:",[3984,10162,10164],{"className":4162,"code":10163,"language":4164,"meta":3992,"style":3992},"var isActive bool = true\nvar isAdmin bool = false\n\n\u002F\u002F Логічні оператори:\nresult1 := isActive && isAdmin  \u002F\u002F false (логічне І - AND)\nresult2 := isActive || isAdmin  \u002F\u002F true  (логічне АБО - OR)\nresult3 := !isActive            \u002F\u002F false (логічне НЕ - NOT)\n\n\u002F\u002F Порівняння (повертають bool):\nx := 5\ny := 10\nfmt.Println(x == y)  \u002F\u002F false (дорівнює)\nfmt.Println(x != y)  \u002F\u002F true  (не дорівнює)\nfmt.Println(x \u003C y)   \u002F\u002F true  (менше)\nfmt.Println(x > y)   \u002F\u002F false (більше)\nfmt.Println(x \u003C= y)  \u002F\u002F true  (менше або дорівнює)\nfmt.Println(x >= y)  \u002F\u002F false (більше або дорівнює)\n",[3753,10165,10166,10179,10193,10197,10202,10219,10236,10249,10253,10258,10267,10275,10296,10317,10339,10361,10383],{"__ignoreMap":3992},[4005,10167,10168,10170,10173,10175,10177],{"class":4007,"line":4008},[4005,10169,3963],{"class":4171},[4005,10171,10172],{"class":4174}," isActive",[4005,10174,4250],{"class":4178},[4005,10176,4183],{"class":4182},[4005,10178,4477],{"class":4171},[4005,10180,10181,10183,10186,10188,10190],{"class":4007,"line":4014},[4005,10182,3963],{"class":4171},[4005,10184,10185],{"class":4174}," isAdmin",[4005,10187,4250],{"class":4178},[4005,10189,4183],{"class":4182},[4005,10191,10192],{"class":4171},"false\n",[4005,10194,10195],{"class":4007,"line":4020},[4005,10196,4036],{"emptyLinePlaceholder":4035},[4005,10198,10199],{"class":4007,"line":4026},[4005,10200,10201],{"class":4190},"\u002F\u002F Логічні оператори:\n",[4005,10203,10204,10207,10209,10212,10214,10216],{"class":4007,"line":4032},[4005,10205,10206],{"class":4174},"result1",[4005,10208,4314],{"class":4182},[4005,10210,10211],{"class":4174},"isActive",[4005,10213,5227],{"class":4182},[4005,10215,8058],{"class":4174},[4005,10217,10218],{"class":4190},"  \u002F\u002F false (логічне І - AND)\n",[4005,10220,10221,10224,10226,10228,10231,10233],{"class":4007,"line":4039},[4005,10222,10223],{"class":4174},"result2",[4005,10225,4314],{"class":4182},[4005,10227,10211],{"class":4174},[4005,10229,10230],{"class":4182}," || ",[4005,10232,8058],{"class":4174},[4005,10234,10235],{"class":4190},"  \u002F\u002F true  (логічне АБО - OR)\n",[4005,10237,10238,10241,10244,10246],{"class":4007,"line":4045},[4005,10239,10240],{"class":4174},"result3",[4005,10242,10243],{"class":4182}," := !",[4005,10245,10211],{"class":4174},[4005,10247,10248],{"class":4190},"            \u002F\u002F false (логічне НЕ - NOT)\n",[4005,10250,10251],{"class":4007,"line":4051},[4005,10252,4036],{"emptyLinePlaceholder":4035},[4005,10254,10255],{"class":4007,"line":4057},[4005,10256,10257],{"class":4190},"\u002F\u002F Порівняння (повертають bool):\n",[4005,10259,10260,10262,10264],{"class":4007,"line":4063},[4005,10261,4621],{"class":4174},[4005,10263,4314],{"class":4182},[4005,10265,10266],{"class":4186},"5\n",[4005,10268,10269,10271,10273],{"class":4007,"line":4069},[4005,10270,4626],{"class":4174},[4005,10272,4314],{"class":4182},[4005,10274,7167],{"class":4186},[4005,10276,10277,10279,10281,10283,10285,10287,10289,10291,10293],{"class":4007,"line":4075},[4005,10278,3785],{"class":4174},[4005,10280,3769],{"class":4182},[4005,10282,5348],{"class":4302},[4005,10284,4611],{"class":4182},[4005,10286,4621],{"class":4174},[4005,10288,5473],{"class":4182},[4005,10290,4626],{"class":4174},[4005,10292,5196],{"class":4182},[4005,10294,10295],{"class":4190},"\u002F\u002F false (дорівнює)\n",[4005,10297,10298,10300,10302,10304,10306,10308,10310,10312,10314],{"class":4007,"line":4081},[4005,10299,3785],{"class":4174},[4005,10301,3769],{"class":4182},[4005,10303,5348],{"class":4302},[4005,10305,4611],{"class":4182},[4005,10307,4621],{"class":4174},[4005,10309,5110],{"class":4182},[4005,10311,4626],{"class":4174},[4005,10313,5196],{"class":4182},[4005,10315,10316],{"class":4190},"\u002F\u002F true  (не дорівнює)\n",[4005,10318,10319,10321,10323,10325,10327,10329,10332,10334,10336],{"class":4007,"line":4086},[4005,10320,3785],{"class":4174},[4005,10322,3769],{"class":4182},[4005,10324,5348],{"class":4302},[4005,10326,4611],{"class":4182},[4005,10328,4621],{"class":4174},[4005,10330,10331],{"class":4182}," \u003C ",[4005,10333,4626],{"class":4174},[4005,10335,5381],{"class":4182},[4005,10337,10338],{"class":4190},"\u002F\u002F true  (менше)\n",[4005,10340,10341,10343,10345,10347,10349,10351,10354,10356,10358],{"class":4007,"line":4092},[4005,10342,3785],{"class":4174},[4005,10344,3769],{"class":4182},[4005,10346,5348],{"class":4302},[4005,10348,4611],{"class":4182},[4005,10350,4621],{"class":4174},[4005,10352,10353],{"class":4182}," > ",[4005,10355,4626],{"class":4174},[4005,10357,5381],{"class":4182},[4005,10359,10360],{"class":4190},"\u002F\u002F false (більше)\n",[4005,10362,10363,10365,10367,10369,10371,10373,10376,10378,10380],{"class":4007,"line":4098},[4005,10364,3785],{"class":4174},[4005,10366,3769],{"class":4182},[4005,10368,5348],{"class":4302},[4005,10370,4611],{"class":4182},[4005,10372,4621],{"class":4174},[4005,10374,10375],{"class":4182}," \u003C= ",[4005,10377,4626],{"class":4174},[4005,10379,5196],{"class":4182},[4005,10381,10382],{"class":4190},"\u002F\u002F true  (менше або дорівнює)\n",[4005,10384,10385,10387,10389,10391,10393,10395,10398,10400,10402],{"class":4007,"line":4104},[4005,10386,3785],{"class":4174},[4005,10388,3769],{"class":4182},[4005,10390,5348],{"class":4302},[4005,10392,4611],{"class":4182},[4005,10394,4621],{"class":4174},[4005,10396,10397],{"class":4182}," >= ",[4005,10399,4626],{"class":4174},[4005,10401,5196],{"class":4182},[4005,10403,10404],{"class":4190},"\u002F\u002F false (більше або дорівнює)\n",[4484,10406,10407,10412],{"icon":92},[3908,10408,10409],{},[3871,10410,10411],{},"На відміну від C\u002FC++\u002FJavaScript:",[3746,10413,10414,10423,10432],{},[3749,10415,10416,10417,10420,10421],{},"У Go ",[3871,10418,10419],{},"немає автоматичного перетворення"," числа в ",[3753,10422,8505],{},[3749,10424,10425,10428,10429,5032],{},[3753,10426,10427],{},"if 1 { ... }"," — помилка компіляції (потрібно ",[3753,10430,10431],{},"if true",[3749,10433,10434,10437,10438,10440,10441,10443,10444,5032],{},[3753,10435,10436],{},"if x { ... }"," — помилка, якщо ",[3753,10439,4621],{}," не ",[3753,10442,8505],{}," (потрібно ",[3753,10445,10446],{},"if x != 0",[3908,10448,10449],{},[3871,10450,10451],{},"Повний приклад використання:",[3984,10453,10455],{"className":4162,"code":10454,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"math\"\n)\n\nfunc main() {\n    \u002F\u002F Дійсні числа за стандартом IEEE-754\n    var cpuUsage float32 = 0.452     \u002F\u002F 4 байти\n    var latencyMs float64 = 12.84752 \u002F\u002F 8 байтів (стандартний вибір)\n\n    \u002F\u002F Комплексні числа\n    var z1 complex64 = 1 + 2i\n    var z2 complex128 = complex(3, 4)\n\n    \u002F\u002F Булевий тип\n    var isTLS bool = true\n    var isClosed = false\n\n    if isTLS && !isClosed {\n        fmt.Printf(\"Затримка: %.2f мс, CPU: %.1f%%, Z1: %v\\n\", latencyMs, cpuUsage*100, z1)\n    }\n\n    \u002F\u002F Перевірка на нечисло (NaN) та нескінченність\n    if math.IsNaN(math.Sqrt(-1)) {\n        fmt.Println(\"Математична помилка: отримано NaN\")\n    }\n}\n",[3753,10456,10457,10463,10467,10473,10477,10481,10485,10489,10497,10502,10519,10536,10540,10545,10564,10588,10592,10597,10610,10621,10625,10639,10691,10695,10699,10704,10733,10748,10752],{"__ignoreMap":3992},[4005,10458,10459,10461],{"class":4007,"line":4008},[4005,10460,5739],{"class":4171},[4005,10462,5742],{"class":4178},[4005,10464,10465],{"class":4007,"line":4014},[4005,10466,4036],{"emptyLinePlaceholder":4035},[4005,10468,10469,10471],{"class":4007,"line":4020},[4005,10470,3917],{"class":4836},[4005,10472,4439],{"class":4182},[4005,10474,10475],{"class":4007,"line":4026},[4005,10476,4843],{"class":4330},[4005,10478,10479],{"class":4007,"line":4032},[4005,10480,9386],{"class":4330},[4005,10482,10483],{"class":4007,"line":4039},[4005,10484,4482],{"class":4182},[4005,10486,10487],{"class":4007,"line":4045},[4005,10488,4036],{"emptyLinePlaceholder":4035},[4005,10490,10491,10493,10495],{"class":4007,"line":4051},[4005,10492,4299],{"class":4171},[4005,10494,5764],{"class":4302},[4005,10496,4306],{"class":4182},[4005,10498,10499],{"class":4007,"line":4057},[4005,10500,10501],{"class":4190},"    \u002F\u002F Дійсні числа за стандартом IEEE-754\n",[4005,10503,10504,10506,10509,10511,10513,10516],{"class":4007,"line":4063},[4005,10505,9412],{"class":4171},[4005,10507,10508],{"class":4174}," cpuUsage",[4005,10510,6266],{"class":4178},[4005,10512,4183],{"class":4182},[4005,10514,10515],{"class":4186},"0.452",[4005,10517,10518],{"class":4190},"     \u002F\u002F 4 байти\n",[4005,10520,10521,10523,10526,10528,10530,10533],{"class":4007,"line":4069},[4005,10522,9412],{"class":4171},[4005,10524,10525],{"class":4174}," latencyMs",[4005,10527,5907],{"class":4178},[4005,10529,4183],{"class":4182},[4005,10531,10532],{"class":4186},"12.84752",[4005,10534,10535],{"class":4190}," \u002F\u002F 8 байтів (стандартний вибір)\n",[4005,10537,10538],{"class":4007,"line":4075},[4005,10539,4036],{"emptyLinePlaceholder":4035},[4005,10541,10542],{"class":4007,"line":4081},[4005,10543,10544],{"class":4190},"    \u002F\u002F Комплексні числа\n",[4005,10546,10547,10549,10552,10555,10557,10559,10561],{"class":4007,"line":4086},[4005,10548,9412],{"class":4171},[4005,10550,10551],{"class":4174}," z1",[4005,10553,10554],{"class":4178}," complex64",[4005,10556,4183],{"class":4182},[4005,10558,4393],{"class":4186},[4005,10560,6289],{"class":4182},[4005,10562,10563],{"class":4186},"2i\n",[4005,10565,10566,10568,10571,10574,10576,10578,10580,10582,10584,10586],{"class":4007,"line":4092},[4005,10567,9412],{"class":4171},[4005,10569,10570],{"class":4174}," z2",[4005,10572,10573],{"class":4178}," complex128",[4005,10575,4183],{"class":4182},[4005,10577,9996],{"class":4302},[4005,10579,4611],{"class":4182},[4005,10581,6286],{"class":4186},[4005,10583,3836],{"class":4182},[4005,10585,8245],{"class":4186},[4005,10587,4482],{"class":4182},[4005,10589,10590],{"class":4007,"line":4098},[4005,10591,4036],{"emptyLinePlaceholder":4035},[4005,10593,10594],{"class":4007,"line":4104},[4005,10595,10596],{"class":4190},"    \u002F\u002F Булевий тип\n",[4005,10598,10599,10601,10604,10606,10608],{"class":4007,"line":4110},[4005,10600,9412],{"class":4171},[4005,10602,10603],{"class":4174}," isTLS",[4005,10605,4250],{"class":4178},[4005,10607,4183],{"class":4182},[4005,10609,4477],{"class":4171},[4005,10611,10612,10614,10617,10619],{"class":4007,"line":4937},[4005,10613,9412],{"class":4171},[4005,10615,10616],{"class":4174}," isClosed",[4005,10618,4183],{"class":4182},[4005,10620,10192],{"class":4171},[4005,10622,10623],{"class":4007,"line":4942},[4005,10624,4036],{"emptyLinePlaceholder":4035},[4005,10626,10627,10629,10631,10634,10637],{"class":4007,"line":4947},[4005,10628,5104],{"class":4836},[4005,10630,10603],{"class":4174},[4005,10632,10633],{"class":4182}," && !",[4005,10635,10636],{"class":4174},"isClosed",[4005,10638,5073],{"class":4182},[4005,10640,10641,10643,10645,10647,10649,10652,10655,10658,10661,10664,10667,10669,10671,10673,10676,10678,10681,10683,10685,10687,10689],{"class":4007,"line":4953},[4005,10642,5343],{"class":4174},[4005,10644,3769],{"class":4182},[4005,10646,7945],{"class":4302},[4005,10648,4611],{"class":4182},[4005,10650,10651],{"class":4330},"\"Затримка: ",[4005,10653,10654],{"class":4174},"%.2f",[4005,10656,10657],{"class":4330}," мс, CPU: ",[4005,10659,10660],{"class":4174},"%.1f%%",[4005,10662,10663],{"class":4330},", Z1: ",[4005,10665,10666],{"class":4174},"%v",[4005,10668,7965],{"class":7964},[4005,10670,7968],{"class":4330},[4005,10672,3836],{"class":4182},[4005,10674,10675],{"class":4174},"latencyMs",[4005,10677,3836],{"class":4182},[4005,10679,10680],{"class":4174},"cpuUsage",[4005,10682,8128],{"class":4182},[4005,10684,6478],{"class":4186},[4005,10686,3836],{"class":4182},[4005,10688,9974],{"class":4174},[4005,10690,4482],{"class":4182},[4005,10692,10693],{"class":4007,"line":4960},[4005,10694,5127],{"class":4182},[4005,10696,10697],{"class":4007,"line":4973},[4005,10698,4036],{"emptyLinePlaceholder":4035},[4005,10700,10701],{"class":4007,"line":4985},[4005,10702,10703],{"class":4190},"    \u002F\u002F Перевірка на нечисло (NaN) та нескінченність\n",[4005,10705,10706,10708,10711,10713,10716,10718,10720,10722,10725,10728,10730],{"class":4007,"line":7813},[4005,10707,5104],{"class":4836},[4005,10709,10710],{"class":4174}," math",[4005,10712,3769],{"class":4182},[4005,10714,10715],{"class":4302},"IsNaN",[4005,10717,4611],{"class":4182},[4005,10719,9676],{"class":4174},[4005,10721,3769],{"class":4182},[4005,10723,10724],{"class":4302},"Sqrt",[4005,10726,10727],{"class":4182},"(-",[4005,10729,4393],{"class":4186},[4005,10731,10732],{"class":4182},")) {\n",[4005,10734,10735,10737,10739,10741,10743,10746],{"class":4007,"line":7819},[4005,10736,5343],{"class":4174},[4005,10738,3769],{"class":4182},[4005,10740,5348],{"class":4302},[4005,10742,4611],{"class":4182},[4005,10744,10745],{"class":4330},"\"Математична помилка: отримано NaN\"",[4005,10747,4482],{"class":4182},[4005,10749,10750],{"class":4007,"line":7826},[4005,10751,5127],{"class":4182},[4005,10753,10754],{"class":4007,"line":7839},[4005,10755,4078],{"class":4182},[3900,10757],{},[9014,10759,10761,10762,3836,10764,3836,10766,5032],{"id":10760},"рядки-байти-та-робота-з-unicode-string-byte-rune","Рядки, байти та робота з Unicode (",[3753,10763,7004],{},[3753,10765,5162],{},[3753,10767,8242],{},[3908,10769,10770],{},"У сучасних клієнт-серверних архітектурах обробка тексту (парсинг JSON, читання HTTP-заголовків, запити до баз даних, валідація користувацьких даних) становить левову частку роботи бекенда. Мова Go має одну з найбільш продуманих та ефективних систем роботи з текстом, спроєктовану авторами стандарту UTF-8 — Кеном Томпсоном та Робом Пайком.",[9695,10772,10774],{"id":10773},"що-таке-рядок-у-go","Що таке рядок у Go?",[3908,10776,10777],{},[3871,10778,10779,10780,10782,10783,10786],{},"Рядок (",[3753,10781,7004],{},") у Go — це незмінна (",[3758,10784,10785],{},"immutable",") послідовність байтів.",[4484,10788,10789,10794,10827,10832],{"icon":4750},[3908,10790,10791],{},[3871,10792,10793],{},"Ключові факти:",[4781,10795,10796,10806,10812,10818],{},[3749,10797,10798,10801,10802,10805],{},[3871,10799,10800],{},"Незмінність:"," не можна змінити окремий символ (",[3753,10803,10804],{},"msg[0] = 'A'"," — помилка компіляції)",[3749,10807,10808,10811],{},[3871,10809,10810],{},"UTF-8 за замовчуванням:"," всі рядкові літерали в Go автоматично кодуються в UTF-8",[3749,10813,10814,10817],{},[3871,10815,10816],{},"Розмір дескриптора:"," рядок займає 16 байтів (на 64-біт системі) незалежно від довжини тексту",[3749,10819,10820,3880,10823,10826],{},[3871,10821,10822],{},"Ефективне зрізання:",[3753,10824,10825],{},"sub := str[0:5]"," створює новий рядок без копіювання байтів",[3908,10828,10829],{},[3871,10830,10831],{},"Порівняння з Java:",[5991,10833,10834,10851],{},[5994,10835,10836],{},[5997,10837,10838,10841,10846],{},[6000,10839,10840],{},"Аспект",[6000,10842,10843,10844],{},"Go ",[3753,10845,7004],{},[6000,10847,10848,10849],{},"Java ",[3753,10850,7343],{},[6010,10852,10853,10870,10880,10895,10910],{},[5997,10854,10855,10858,10864],{},[6015,10856,10857],{},"Кодування",[6015,10859,10860,10863],{},[3871,10861,10862],{},"UTF-8"," (змінна кількість байтів)",[6015,10865,10866,10869],{},[3871,10867,10868],{},"UTF-16"," (2 або 4 байти на символ)",[5997,10871,10872,10875,10878],{},[6015,10873,10874],{},"Незмінність",[6015,10876,10877],{},"✅ Так",[6015,10879,10877],{},[5997,10881,10882,10885,10888],{},[6015,10883,10884],{},"Внутрішня структура",[6015,10886,10887],{},"Покажчик + довжина (16 байт)",[6015,10889,10890,10891,10894],{},"Масив ",[3753,10892,10893],{},"char[]"," + offset + length",[5997,10896,10897,10900,10903],{},[6015,10898,10899],{},"Зрізання",[6015,10901,10902],{},"Без копіювання (новий дескриптор)",[6015,10904,10905,10906,10909],{},"З копіюванням (",[3753,10907,10908],{},"substring"," до Java 7)",[5997,10911,10912,10915,10921],{},[6015,10913,10914],{},"Ітерація",[6015,10916,10917,10920],{},[3753,10918,10919],{},"for range"," автодекодує UTF-8",[6015,10922,10923,10926],{},[3753,10924,10925],{},"charAt()"," працює з UTF-16 code units",[9695,10928,10930],{"id":10929},"внутрішня-будова-рядка","Внутрішня будова рядка",[3908,10932,10933,10934,5831],{},"На рівні середовища виконання Go рядок описується структурою ",[3871,10935,10936],{},[3753,10937,8907],{},[3984,10939,10941],{"className":4162,"code":10940,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Внутрішнє представлення (не використовуйте напряму!)\ntype StringHeader struct {\n    Data uintptr  \u002F\u002F Адреса першого байта в пам'яті\n    Len  int      \u002F\u002F Довжина в байтах\n}\n",[3753,10942,10943,10948,10960,10971,10982],{"__ignoreMap":3992},[4005,10944,10945],{"class":4007,"line":4008},[4005,10946,10947],{"class":4190},"\u002F\u002F Внутрішнє представлення (не використовуйте напряму!)\n",[4005,10949,10950,10952,10955,10958],{"class":4007,"line":4014},[4005,10951,4809],{"class":4171},[4005,10953,10954],{"class":4178}," StringHeader",[4005,10956,10957],{"class":4171}," struct",[4005,10959,5073],{"class":4182},[4005,10961,10962,10965,10968],{"class":4007,"line":4020},[4005,10963,10964],{"class":4174},"    Data",[4005,10966,10967],{"class":4178}," uintptr",[4005,10969,10970],{"class":4190},"  \u002F\u002F Адреса першого байта в пам'яті\n",[4005,10972,10973,10976,10979],{"class":4007,"line":4026},[4005,10974,10975],{"class":4174},"    Len",[4005,10977,10978],{"class":4178},"  int",[4005,10980,10981],{"class":4190},"      \u002F\u002F Довжина в байтах\n",[4005,10983,10984],{"class":4007,"line":4032},[4005,10985,4078],{"class":4182},[3908,10987,10988],{},[3871,10989,10990],{},"Візуалізація:",[3984,10992,10995],{"className":10993,"code":10994,"language":3989},[3987],"msg := \"Go\"\n\n┌─── StringHeader (16 байт на стеку) ───┐\n│ Data: 0x10A0  (покажчик на байти)     │\n│ Len:  2       (довжина в байтах)      │\n└────────────────────────────────────────┘\n         │\n         └──→ [0x47, 0x6F]  ← Незмінні байти в пам'яті\n              ('G')  ('o')\n",[3753,10996,10994],{"__ignoreMap":3992},[4748,10998,10999,11004],{"icon":3577},[3908,11000,11001],{},[3871,11002,11003],{},"Чому рядки незмінні?",[4781,11005,11006,11012,11022,11028],{},[3749,11007,11008,11011],{},[3871,11009,11010],{},"Безпека багатопоточності:"," багато горутин можуть читати той самий рядок без блокувань",[3749,11013,11014,11017,11018,11021],{},[3871,11015,11016],{},"Ефективність:"," зрізання рядка (",[3753,11019,11020],{},"str[0:5]",") створює новий дескриптор без копіювання даних",[3749,11023,11024,11027],{},[3871,11025,11026],{},"Оптимізація пам'яті:"," однакові рядкові літерали можуть ділити один блок пам'яті",[3749,11029,11030,11033],{},[3871,11031,11032],{},"Захист від помилок:"," неможливо випадково змінити рядок, переданий в функцію",[3900,11035],{},[9695,11037,11039],{"id":11038},"два-види-рядкових-літералів","Два види рядкових літералів",[3908,11041,11042],{},"Go підтримує два способи оголошення рядків у коді:",[3908,11044,11045],{},[3871,11046,11047,11048,4159],{},"1. Інтерпретовані рядки у подвійних лапках (",[3753,11049,11050],{},"\"...\"",[3746,11052,11053,11070],{},[3749,11054,11055,11056,3836,11058,3836,11061,3836,11064,3836,11067],{},"Обробляють escape-послідовності: ",[3753,11057,7965],{},[3753,11059,11060],{},"\\t",[3753,11062,11063],{},"\\\"",[3753,11065,11066],{},"\\\\",[3753,11068,11069],{},"\\uXXXX",[3749,11071,11072],{},"Не можуть містити фізичні переноси рядків",[3908,11074,11075],{},[3871,11076,11077,11078,4159],{},"2. Сирі рядкові літерали у зворотних лапках (",[3753,11079,11080],{},"`...`",[3746,11082,11083,11090,11102],{},[3749,11084,11085,11086,11089],{},"Зберігають текст ",[3871,11087,11088],{},"без змін",": пробіли, переноси, лапки — все як є",[3749,11091,11092,11093,11095,11096,8157,11099,5032],{},"Escape-послідовності не працюють (",[3753,11094,7965],{}," = два символи ",[3753,11097,11098],{},"\\",[3753,11100,11101],{},"n",[3749,11103,11104],{},"Ідеально для SQL, JSON, HTML, регулярних виразів",[3984,11106,11108],{"className":4162,"code":11107,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Інтерпретований рядок з escape-символами:\n    jsonSnippet := \"{\\n\\t\\\"status\\\": 200,\\n\\t\\\"message\\\": \\\"OK\\\"\\n}\"\n\n    \u002F\u002F Сирий рядковий літерал (читабельний код):\n    sqlQuery := `\n        SELECT id, username, email\n        FROM users\n        WHERE is_active = true\n          AND role = 'admin'\n        ORDER BY created_at DESC;\n    `\n\n    fmt.Println(\"JSON:\", jsonSnippet)\n    fmt.Println(\"SQL:\", sqlQuery)\n}\n",[3753,11109,11110,11116,11120,11126,11130,11138,11143,11184,11188,11193,11203,11208,11213,11218,11223,11228,11233,11237,11257,11277],{"__ignoreMap":3992},[4005,11111,11112,11114],{"class":4007,"line":4008},[4005,11113,5739],{"class":4171},[4005,11115,5742],{"class":4178},[4005,11117,11118],{"class":4007,"line":4014},[4005,11119,4036],{"emptyLinePlaceholder":4035},[4005,11121,11122,11124],{"class":4007,"line":4020},[4005,11123,3917],{"class":4836},[4005,11125,7656],{"class":4330},[4005,11127,11128],{"class":4007,"line":4026},[4005,11129,4036],{"emptyLinePlaceholder":4035},[4005,11131,11132,11134,11136],{"class":4007,"line":4032},[4005,11133,4299],{"class":4171},[4005,11135,5764],{"class":4302},[4005,11137,4306],{"class":4182},[4005,11139,11140],{"class":4007,"line":4039},[4005,11141,11142],{"class":4190},"    \u002F\u002F Інтерпретований рядок з escape-символами:\n",[4005,11144,11145,11148,11150,11153,11156,11158,11160,11163,11165,11168,11170,11173,11175,11178,11181],{"class":4007,"line":4045},[4005,11146,11147],{"class":4174},"    jsonSnippet",[4005,11149,4314],{"class":4182},[4005,11151,11152],{"class":4330},"\"{",[4005,11154,11155],{"class":7964},"\\n\\t\\\"",[4005,11157,7584],{"class":4330},[4005,11159,11063],{"class":7964},[4005,11161,11162],{"class":4330},": 200,",[4005,11164,11155],{"class":7964},[4005,11166,11167],{"class":4330},"message",[4005,11169,11063],{"class":7964},[4005,11171,11172],{"class":4330},": ",[4005,11174,11063],{"class":7964},[4005,11176,11177],{"class":4330},"OK",[4005,11179,11180],{"class":7964},"\\\"\\n",[4005,11182,11183],{"class":4330},"}\"\n",[4005,11185,11186],{"class":4007,"line":4051},[4005,11187,4036],{"emptyLinePlaceholder":4035},[4005,11189,11190],{"class":4007,"line":4057},[4005,11191,11192],{"class":4190},"    \u002F\u002F Сирий рядковий літерал (читабельний код):\n",[4005,11194,11195,11198,11200],{"class":4007,"line":4063},[4005,11196,11197],{"class":4174},"    sqlQuery",[4005,11199,4314],{"class":4182},[4005,11201,11202],{"class":4330},"`\n",[4005,11204,11205],{"class":4007,"line":4069},[4005,11206,11207],{"class":4330},"        SELECT id, username, email\n",[4005,11209,11210],{"class":4007,"line":4075},[4005,11211,11212],{"class":4330},"        FROM users\n",[4005,11214,11215],{"class":4007,"line":4081},[4005,11216,11217],{"class":4330},"        WHERE is_active = true\n",[4005,11219,11220],{"class":4007,"line":4086},[4005,11221,11222],{"class":4330},"          AND role = 'admin'\n",[4005,11224,11225],{"class":4007,"line":4092},[4005,11226,11227],{"class":4330},"        ORDER BY created_at DESC;\n",[4005,11229,11230],{"class":4007,"line":4098},[4005,11231,11232],{"class":4330},"    `\n",[4005,11234,11235],{"class":4007,"line":4104},[4005,11236,4036],{"emptyLinePlaceholder":4035},[4005,11238,11239,11241,11243,11245,11247,11250,11252,11255],{"class":4007,"line":4110},[4005,11240,5370],{"class":4174},[4005,11242,3769],{"class":4182},[4005,11244,5348],{"class":4302},[4005,11246,4611],{"class":4182},[4005,11248,11249],{"class":4330},"\"JSON:\"",[4005,11251,3836],{"class":4182},[4005,11253,11254],{"class":4174},"jsonSnippet",[4005,11256,4482],{"class":4182},[4005,11258,11259,11261,11263,11265,11267,11270,11272,11275],{"class":4007,"line":4937},[4005,11260,5370],{"class":4174},[4005,11262,3769],{"class":4182},[4005,11264,5348],{"class":4302},[4005,11266,4611],{"class":4182},[4005,11268,11269],{"class":4330},"\"SQL:\"",[4005,11271,3836],{"class":4182},[4005,11273,11274],{"class":4174},"sqlQuery",[4005,11276,4482],{"class":4182},[4005,11278,11279],{"class":4007,"line":4942},[4005,11280,4078],{"class":4182},[3900,11282],{},[9695,11284,11286,11287,11290],{"id":11285},"utf-8-чому-len-не-рахує-символи","UTF-8: Чому ",[3753,11288,11289],{},"len()"," не рахує символи?",[3908,11292,11293,11294,11296,11297,11300],{},"Стандарт кодування ",[3871,11295,10862],{}," використовує ",[3871,11298,11299],{},"змінну кількість байтів"," для символів:",[5991,11302,11303,11316],{},[5994,11304,11305],{},[5997,11306,11307,11310,11313],{},[6000,11308,11309],{},"Символи",[6000,11311,11312],{},"Байтів",[6000,11314,11315],{},"Приклади",[6010,11317,11318,11331,11344,11357],{},[5997,11319,11320,11323,11325],{},[6015,11321,11322],{},"ASCII (A-Z, 0-9)",[6015,11324,4393],{},[6015,11326,11327,11330],{},[3753,11328,11329],{},"\"Hello\""," = 5 байтів",[5997,11332,11333,11336,11338],{},[6015,11334,11335],{},"Кирилиця, грецький",[6015,11337,4398],{},[6015,11339,11340,11343],{},[3753,11341,11342],{},"\"Київ\""," = 8 байтів (4 літери × 2)",[5997,11345,11346,11349,11351],{},[6015,11347,11348],{},"Китайські ієрогліфи",[6015,11350,6286],{},[6015,11352,11353,11356],{},[3753,11354,11355],{},"\"中国\""," = 6 байтів (2 ієрогліфи × 3)",[5997,11358,11359,11362,11364],{},[6015,11360,11361],{},"Емодзі",[6015,11363,8245],{},[6015,11365,11366,11369],{},[3753,11367,11368],{},"\"🚀\""," = 4 байти",[3908,11371,11372],{},[3871,11373,11374],{},"Найпоширеніша помилка початківців:",[3984,11376,11378],{"className":4162,"code":11377,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"unicode\u002Futf8\"\n)\n\nfunc main() {\n    text := \"Київ 🇺🇦\"\n\n    \u002F\u002F ❌ ПОМИЛКА: len() повертає БАЙТИ, а не символи!\n    fmt.Printf(\"len(text): %d байтів\\n\", len(text))  \u002F\u002F 17 байтів\n    \n    \u002F\u002F ✅ ПРАВИЛЬНО: utf8.RuneCountInString() рахує символи\n    fmt.Printf(\"Символів: %d\\n\", utf8.RuneCountInString(text))  \u002F\u002F 6 символів\n\n    \u002F\u002F ❌ ПОМИЛКА: text[0] повертає перший БАЙТ (не літеру!)\n    fmt.Printf(\"text[0]: 0x%X (половина літери 'К'!)\\n\", text[0])\n    \n    \u002F\u002F ✅ ПРАВИЛЬНО: використовуйте []rune() або for-range\n    runes := []rune(text)\n    fmt.Printf(\"Перша літера: %c\\n\", runes[0])  \u002F\u002F 'К'\n}\n",[3753,11379,11380,11386,11390,11396,11400,11405,11409,11413,11421,11431,11435,11440,11476,11480,11485,11523,11527,11532,11567,11571,11576,11592,11627],{"__ignoreMap":3992},[4005,11381,11382,11384],{"class":4007,"line":4008},[4005,11383,5739],{"class":4171},[4005,11385,5742],{"class":4178},[4005,11387,11388],{"class":4007,"line":4014},[4005,11389,4036],{"emptyLinePlaceholder":4035},[4005,11391,11392,11394],{"class":4007,"line":4020},[4005,11393,3917],{"class":4836},[4005,11395,4439],{"class":4182},[4005,11397,11398],{"class":4007,"line":4026},[4005,11399,4843],{"class":4330},[4005,11401,11402],{"class":4007,"line":4032},[4005,11403,11404],{"class":4330},"    \"unicode\u002Futf8\"\n",[4005,11406,11407],{"class":4007,"line":4039},[4005,11408,4482],{"class":4182},[4005,11410,11411],{"class":4007,"line":4045},[4005,11412,4036],{"emptyLinePlaceholder":4035},[4005,11414,11415,11417,11419],{"class":4007,"line":4051},[4005,11416,4299],{"class":4171},[4005,11418,5764],{"class":4302},[4005,11420,4306],{"class":4182},[4005,11422,11423,11426,11428],{"class":4007,"line":4057},[4005,11424,11425],{"class":4174},"    text",[4005,11427,4314],{"class":4182},[4005,11429,11430],{"class":4330},"\"Київ 🇺🇦\"\n",[4005,11432,11433],{"class":4007,"line":4063},[4005,11434,4036],{"emptyLinePlaceholder":4035},[4005,11436,11437],{"class":4007,"line":4069},[4005,11438,11439],{"class":4190},"    \u002F\u002F ❌ ПОМИЛКА: len() повертає БАЙТИ, а не символи!\n",[4005,11441,11442,11444,11446,11448,11450,11453,11455,11457,11459,11461,11463,11466,11468,11470,11473],{"class":4007,"line":4075},[4005,11443,5370],{"class":4174},[4005,11445,3769],{"class":4182},[4005,11447,7945],{"class":4302},[4005,11449,4611],{"class":4182},[4005,11451,11452],{"class":4330},"\"len(text): ",[4005,11454,7959],{"class":4174},[4005,11456,8117],{"class":4330},[4005,11458,7965],{"class":7964},[4005,11460,7968],{"class":4330},[4005,11462,3836],{"class":4182},[4005,11464,11465],{"class":4302},"len",[4005,11467,4611],{"class":4182},[4005,11469,3989],{"class":4174},[4005,11471,11472],{"class":4182},"))  ",[4005,11474,11475],{"class":4190},"\u002F\u002F 17 байтів\n",[4005,11477,11478],{"class":4007,"line":4081},[4005,11479,5214],{"class":4182},[4005,11481,11482],{"class":4007,"line":4086},[4005,11483,11484],{"class":4190},"    \u002F\u002F ✅ ПРАВИЛЬНО: utf8.RuneCountInString() рахує символи\n",[4005,11486,11487,11489,11491,11493,11495,11498,11500,11502,11504,11506,11509,11511,11514,11516,11518,11520],{"class":4007,"line":4092},[4005,11488,5370],{"class":4174},[4005,11490,3769],{"class":4182},[4005,11492,7945],{"class":4302},[4005,11494,4611],{"class":4182},[4005,11496,11497],{"class":4330},"\"Символів: ",[4005,11499,7959],{"class":4174},[4005,11501,7965],{"class":7964},[4005,11503,7968],{"class":4330},[4005,11505,3836],{"class":4182},[4005,11507,11508],{"class":4174},"utf8",[4005,11510,3769],{"class":4182},[4005,11512,11513],{"class":4302},"RuneCountInString",[4005,11515,4611],{"class":4182},[4005,11517,3989],{"class":4174},[4005,11519,11472],{"class":4182},[4005,11521,11522],{"class":4190},"\u002F\u002F 6 символів\n",[4005,11524,11525],{"class":4007,"line":4098},[4005,11526,4036],{"emptyLinePlaceholder":4035},[4005,11528,11529],{"class":4007,"line":4104},[4005,11530,11531],{"class":4190},"    \u002F\u002F ❌ ПОМИЛКА: text[0] повертає перший БАЙТ (не літеру!)\n",[4005,11533,11534,11536,11538,11540,11542,11545,11548,11551,11553,11555,11557,11559,11562,11564],{"class":4007,"line":4110},[4005,11535,5370],{"class":4174},[4005,11537,3769],{"class":4182},[4005,11539,7945],{"class":4302},[4005,11541,4611],{"class":4182},[4005,11543,11544],{"class":4330},"\"text[0]: 0x",[4005,11546,11547],{"class":4174},"%X",[4005,11549,11550],{"class":4330}," (половина літери 'К'!)",[4005,11552,7965],{"class":7964},[4005,11554,7968],{"class":4330},[4005,11556,3836],{"class":4182},[4005,11558,3989],{"class":4174},[4005,11560,11561],{"class":4182},"[",[4005,11563,4200],{"class":4186},[4005,11565,11566],{"class":4182},"])\n",[4005,11568,11569],{"class":4007,"line":4937},[4005,11570,5214],{"class":4182},[4005,11572,11573],{"class":4007,"line":4942},[4005,11574,11575],{"class":4190},"    \u002F\u002F ✅ ПРАВИЛЬНО: використовуйте []rune() або for-range\n",[4005,11577,11578,11581,11584,11586,11588,11590],{"class":4007,"line":4947},[4005,11579,11580],{"class":4174},"    runes",[4005,11582,11583],{"class":4182}," := []",[4005,11585,8242],{"class":4178},[4005,11587,4611],{"class":4182},[4005,11589,3989],{"class":4174},[4005,11591,4482],{"class":4182},[4005,11593,11594,11596,11598,11600,11602,11605,11608,11610,11612,11614,11617,11619,11621,11624],{"class":4007,"line":4953},[4005,11595,5370],{"class":4174},[4005,11597,3769],{"class":4182},[4005,11599,7945],{"class":4302},[4005,11601,4611],{"class":4182},[4005,11603,11604],{"class":4330},"\"Перша літера: ",[4005,11606,11607],{"class":4174},"%c",[4005,11609,7965],{"class":7964},[4005,11611,7968],{"class":4330},[4005,11613,3836],{"class":4182},[4005,11615,11616],{"class":4174},"runes",[4005,11618,11561],{"class":4182},[4005,11620,4200],{"class":4186},[4005,11622,11623],{"class":4182},"])  ",[4005,11625,11626],{"class":4190},"\u002F\u002F 'К'\n",[4005,11628,11629],{"class":4007,"line":4960},[4005,11630,4078],{"class":4182},[4748,11632,11633,11639,11650,11679,11688,11697],{"icon":4750},[3908,11634,11635],{},[3871,11636,6402,11637,6406],{},[3753,11638,11289],{},[3908,11640,11641,6413,11643,4761,11646,11649],{},[3753,11642,11289],{},[3871,11644,11645],{},"вбудована функція",[3758,11647,11648],{},"built-in function",") Go, яка повертає:",[3746,11651,11652,11662,11667,11674],{},[3749,11653,11654,11655,11657,11658,11661],{},"Для ",[3753,11656,7004],{},": кількість ",[3871,11659,11660],{},"байтів"," (не символів!)",[3749,11663,11654,11664,11666],{},[3753,11665,8577],{}," (зріз): кількість елементів",[3749,11668,11654,11669,11671,11672,5032],{},[3753,11670,8600],{}," (масив): кількість елементів (завжди ",[3753,11673,8609],{},[3749,11675,11654,11676,11678],{},[3753,11677,8629],{},": кількість ключів",[3908,11680,11681],{},[3871,11682,11683,11684,11687],{},"Чому ",[3753,11685,11686],{},"len(string)"," повертає байти?",[3908,11689,11690,11691,8512,11694,3769],{},"Тому що рядок в Go — це послідовність байтів UTF-8, а не масив символів. Для підрахунку символів використовуйте ",[3753,11692,11693],{},"utf8.RuneCountInString()",[3753,11695,11696],{},"len([]rune(text))",[3984,11698,11700],{"className":4162,"code":11699,"language":4164,"meta":3992,"style":3992},"text := \"Go\"         \u002F\u002F ASCII: 2 символи × 1 байт = 2 байти\nlen(text)            \u002F\u002F 2\n\ntext = \"Го\"          \u002F\u002F Кирилиця: 2 символи × 2 байти = 4 байти\nlen(text)            \u002F\u002F 4 (не 2!)\nutf8.RuneCountInString(text)  \u002F\u002F 2 символи\n",[3753,11701,11702,11714,11728,11732,11744,11757],{"__ignoreMap":3992},[4005,11703,11704,11706,11708,11711],{"class":4007,"line":4008},[4005,11705,3989],{"class":4174},[4005,11707,4314],{"class":4182},[4005,11709,11710],{"class":4330},"\"Go\"",[4005,11712,11713],{"class":4190},"         \u002F\u002F ASCII: 2 символи × 1 байт = 2 байти\n",[4005,11715,11716,11718,11720,11722,11725],{"class":4007,"line":4014},[4005,11717,11465],{"class":4302},[4005,11719,4611],{"class":4182},[4005,11721,3989],{"class":4174},[4005,11723,11724],{"class":4182},")            ",[4005,11726,11727],{"class":4190},"\u002F\u002F 2\n",[4005,11729,11730],{"class":4007,"line":4020},[4005,11731,4036],{"emptyLinePlaceholder":4035},[4005,11733,11734,11736,11738,11741],{"class":4007,"line":4026},[4005,11735,3989],{"class":4174},[4005,11737,4183],{"class":4182},[4005,11739,11740],{"class":4330},"\"Го\"",[4005,11742,11743],{"class":4190},"          \u002F\u002F Кирилиця: 2 символи × 2 байти = 4 байти\n",[4005,11745,11746,11748,11750,11752,11754],{"class":4007,"line":4032},[4005,11747,11465],{"class":4302},[4005,11749,4611],{"class":4182},[4005,11751,3989],{"class":4174},[4005,11753,11724],{"class":4182},[4005,11755,11756],{"class":4190},"\u002F\u002F 4 (не 2!)\n",[4005,11758,11759,11761,11763,11765,11767,11769,11771],{"class":4007,"line":4039},[4005,11760,11508],{"class":4174},[4005,11762,3769],{"class":4182},[4005,11764,11513],{"class":4302},[4005,11766,4611],{"class":4182},[4005,11768,3989],{"class":4174},[4005,11770,5196],{"class":4182},[4005,11772,11773],{"class":4190},"\u002F\u002F 2 символи\n",[3908,11775,11776],{},[3871,11777,11778],{},"Вивід:",[3984,11780,11783],{"className":11781,"code":11782,"language":3989},[3987],"len(text): 17 байтів\nСимволів: 6\ntext[0]: 0xD0 (половина літери 'К'!)\nПерша літера: К\n",[3753,11784,11782],{"__ignoreMap":3992},[3900,11786],{},[9695,11788,11790,11791,11793],{"id":11789},"тип-rune-робота-з-окремими-символами","Тип ",[3753,11792,8242],{},": робота з окремими символами",[3908,11795,11796,11803],{},[3871,11797,11798,11800,11801],{},[3753,11799,8242],{}," — це аліас для ",[3753,11802,8156],{}," (4 байти), що зберігає Unicode code point (номер символу в таблиці Unicode).",[5991,11805,11806,11819],{},[5994,11807,11808],{},[5997,11809,11810,11812,11815,11817],{},[6000,11811,8179],{},[6000,11813,11814],{},"Призначення",[6000,11816,9722],{},[6000,11818,6005],{},[6010,11820,11821,11838,11855],{},[5997,11822,11823,11827,11830,11832],{},[6015,11824,11825],{},[3753,11826,5162],{},[6015,11828,11829],{},"Один байт даних",[6015,11831,10145],{},[6015,11833,11834,11837],{},[3753,11835,11836],{},"byte('A')"," = 65",[5997,11839,11840,11844,11847,11849],{},[6015,11841,11842],{},[3753,11843,8242],{},[6015,11845,11846],{},"Один символ Unicode",[6015,11848,9739],{},[6015,11850,11851,11854],{},[3753,11852,11853],{},"rune('Ї')"," = 1031",[5997,11856,11857,11861,11864,11867],{},[6015,11858,11859],{},[3753,11860,7004],{},[6015,11862,11863],{},"Послідовність байтів UTF-8",[6015,11865,11866],{},"16 байт (дескриптор)",[6015,11868,11869],{},[3753,11870,11871],{},"\"Привіт\"",[4484,11873,11874,11879,11905,11914,11918],{"icon":4486},[3908,11875,11876],{},[3871,11877,11878],{},"Аналогія:",[3746,11880,11881,11889,11897],{},[3749,11882,11883,6413,11885,11888],{},[3753,11884,5162],{},[3871,11886,11887],{},"цеглина"," (1 байт)",[3749,11890,11891,6413,11893,11896],{},[3753,11892,8242],{},[3871,11894,11895],{},"літера"," (може складатися з 1-4 цеглин)",[3749,11898,11899,6413,11901,11904],{},[3753,11900,7004],{},[3871,11902,11903],{},"текст"," (незмінна послідовність цеглин)",[3908,11906,11907,11910,11911,11913],{},[3753,11908,11909],{},"len(\"Київ\")"," рахує цеглини (8), ",[3753,11912,11693],{}," — літери (4).",[3908,11915,11916],{},[3871,11917,10831],{},[3746,11919,11920,11928,11935],{},[3749,11921,10843,11922,11924,11925,11927],{},[3753,11923,8242],{}," = Java ",[3753,11926,4158],{}," (Unicode code point)",[3749,11929,10843,11930,11924,11932,11934],{},[3753,11931,5162],{},[3753,11933,5162],{}," (8 біт)",[3749,11936,10843,11937,11939,11940,11942],{},[3753,11938,7004],{}," ≈ Java ",[3753,11941,7343],{},", але Go використовує UTF-8, а Java — UTF-16",[3908,11944,11945],{},[3871,11946,11947],{},"Перетворення між типами:",[3984,11949,11951],{"className":4162,"code":11950,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    str := \"Слава Україні!\"\n\n    \u002F\u002F 1. Перетворення рядка на зріз рун (доступ до літер за індексом):\n    runes := []rune(str)\n    fmt.Printf(\"Перша літера: %c, Третя літера: %c\\n\", runes[0], runes[2])\n    \u002F\u002F Вивід: Перша літера: С, Третя літера: а\n\n    \u002F\u002F 2. Модифікація тексту через зріз рун:\n    runes[0] = 'Ж'\n    modifiedStr := string(runes)\n    fmt.Println(\"Модифікований:\", modifiedStr)\n    \u002F\u002F Вивід: Модифікований: Жлава Україні!\n\n    \u002F\u002F 3. Ітерація for-range автоматично декодує UTF-8:\n    for byteIndex, r := range \"Go Го\" {\n        fmt.Printf(\"Байт %d: '%c' (U+%04X)\\n\", byteIndex, r, r)\n    }\n    \u002F* Вивід:\n    Байт 0: 'G' (U+0047)\n    Байт 1: 'o' (U+006F)\n    Байт 2: ' ' (U+0020)\n    Байт 3: 'Г' (U+0413)  ← byteIndex стрибає на 3, бо кирилиця = 2 байти\n    Байт 5: 'о' (U+043E)\n    *\u002F\n}\n",[3753,11952,11953,11959,11963,11969,11973,11981,11991,11995,12000,12015,12057,12062,12066,12071,12085,12100,12120,12125,12129,12134,12157,12204,12208,12213,12218,12223,12228,12233,12238,12243],{"__ignoreMap":3992},[4005,11954,11955,11957],{"class":4007,"line":4008},[4005,11956,5739],{"class":4171},[4005,11958,5742],{"class":4178},[4005,11960,11961],{"class":4007,"line":4014},[4005,11962,4036],{"emptyLinePlaceholder":4035},[4005,11964,11965,11967],{"class":4007,"line":4020},[4005,11966,3917],{"class":4836},[4005,11968,7656],{"class":4330},[4005,11970,11971],{"class":4007,"line":4026},[4005,11972,4036],{"emptyLinePlaceholder":4035},[4005,11974,11975,11977,11979],{"class":4007,"line":4032},[4005,11976,4299],{"class":4171},[4005,11978,5764],{"class":4302},[4005,11980,4306],{"class":4182},[4005,11982,11983,11986,11988],{"class":4007,"line":4039},[4005,11984,11985],{"class":4174},"    str",[4005,11987,4314],{"class":4182},[4005,11989,11990],{"class":4330},"\"Слава Україні!\"\n",[4005,11992,11993],{"class":4007,"line":4045},[4005,11994,4036],{"emptyLinePlaceholder":4035},[4005,11996,11997],{"class":4007,"line":4051},[4005,11998,11999],{"class":4190},"    \u002F\u002F 1. Перетворення рядка на зріз рун (доступ до літер за індексом):\n",[4005,12001,12002,12004,12006,12008,12010,12013],{"class":4007,"line":4057},[4005,12003,11580],{"class":4174},[4005,12005,11583],{"class":4182},[4005,12007,8242],{"class":4178},[4005,12009,4611],{"class":4182},[4005,12011,12012],{"class":4174},"str",[4005,12014,4482],{"class":4182},[4005,12016,12017,12019,12021,12023,12025,12027,12029,12032,12034,12036,12038,12040,12042,12044,12046,12049,12051,12053,12055],{"class":4007,"line":4063},[4005,12018,5370],{"class":4174},[4005,12020,3769],{"class":4182},[4005,12022,7945],{"class":4302},[4005,12024,4611],{"class":4182},[4005,12026,11604],{"class":4330},[4005,12028,11607],{"class":4174},[4005,12030,12031],{"class":4330},", Третя літера: ",[4005,12033,11607],{"class":4174},[4005,12035,7965],{"class":7964},[4005,12037,7968],{"class":4330},[4005,12039,3836],{"class":4182},[4005,12041,11616],{"class":4174},[4005,12043,11561],{"class":4182},[4005,12045,4200],{"class":4186},[4005,12047,12048],{"class":4182},"], ",[4005,12050,11616],{"class":4174},[4005,12052,11561],{"class":4182},[4005,12054,4398],{"class":4186},[4005,12056,11566],{"class":4182},[4005,12058,12059],{"class":4007,"line":4069},[4005,12060,12061],{"class":4190},"    \u002F\u002F Вивід: Перша літера: С, Третя літера: а\n",[4005,12063,12064],{"class":4007,"line":4075},[4005,12065,4036],{"emptyLinePlaceholder":4035},[4005,12067,12068],{"class":4007,"line":4081},[4005,12069,12070],{"class":4190},"    \u002F\u002F 2. Модифікація тексту через зріз рун:\n",[4005,12072,12073,12075,12077,12079,12082],{"class":4007,"line":4086},[4005,12074,11580],{"class":4174},[4005,12076,11561],{"class":4182},[4005,12078,4200],{"class":4186},[4005,12080,12081],{"class":4182},"] = ",[4005,12083,12084],{"class":4330},"'Ж'\n",[4005,12086,12087,12090,12092,12094,12096,12098],{"class":4007,"line":4092},[4005,12088,12089],{"class":4174},"    modifiedStr",[4005,12091,4314],{"class":4182},[4005,12093,7004],{"class":4178},[4005,12095,4611],{"class":4182},[4005,12097,11616],{"class":4174},[4005,12099,4482],{"class":4182},[4005,12101,12102,12104,12106,12108,12110,12113,12115,12118],{"class":4007,"line":4098},[4005,12103,5370],{"class":4174},[4005,12105,3769],{"class":4182},[4005,12107,5348],{"class":4302},[4005,12109,4611],{"class":4182},[4005,12111,12112],{"class":4330},"\"Модифікований:\"",[4005,12114,3836],{"class":4182},[4005,12116,12117],{"class":4174},"modifiedStr",[4005,12119,4482],{"class":4182},[4005,12121,12122],{"class":4007,"line":4104},[4005,12123,12124],{"class":4190},"    \u002F\u002F Вивід: Модифікований: Жлава Україні!\n",[4005,12126,12127],{"class":4007,"line":4110},[4005,12128,4036],{"emptyLinePlaceholder":4035},[4005,12130,12131],{"class":4007,"line":4937},[4005,12132,12133],{"class":4190},"    \u002F\u002F 3. Ітерація for-range автоматично декодує UTF-8:\n",[4005,12135,12136,12139,12142,12144,12147,12149,12152,12155],{"class":4007,"line":4942},[4005,12137,12138],{"class":4836},"    for",[4005,12140,12141],{"class":4174}," byteIndex",[4005,12143,3836],{"class":4182},[4005,12145,12146],{"class":4174},"r",[4005,12148,4314],{"class":4182},[4005,12150,12151],{"class":4836},"range",[4005,12153,12154],{"class":4330}," \"Go Го\"",[4005,12156,5073],{"class":4182},[4005,12158,12159,12161,12163,12165,12167,12170,12172,12175,12177,12180,12183,12185,12187,12189,12191,12194,12196,12198,12200,12202],{"class":4007,"line":4947},[4005,12160,5343],{"class":4174},[4005,12162,3769],{"class":4182},[4005,12164,7945],{"class":4302},[4005,12166,4611],{"class":4182},[4005,12168,12169],{"class":4330},"\"Байт ",[4005,12171,7959],{"class":4174},[4005,12173,12174],{"class":4330},": '",[4005,12176,11607],{"class":4174},[4005,12178,12179],{"class":4330},"' (U+",[4005,12181,12182],{"class":4174},"%04X",[4005,12184,5032],{"class":4330},[4005,12186,7965],{"class":7964},[4005,12188,7968],{"class":4330},[4005,12190,3836],{"class":4182},[4005,12192,12193],{"class":4174},"byteIndex",[4005,12195,3836],{"class":4182},[4005,12197,12146],{"class":4174},[4005,12199,3836],{"class":4182},[4005,12201,12146],{"class":4174},[4005,12203,4482],{"class":4182},[4005,12205,12206],{"class":4007,"line":4953},[4005,12207,5127],{"class":4182},[4005,12209,12210],{"class":4007,"line":4960},[4005,12211,12212],{"class":4190},"    \u002F* Вивід:\n",[4005,12214,12215],{"class":4007,"line":4973},[4005,12216,12217],{"class":4190},"    Байт 0: 'G' (U+0047)\n",[4005,12219,12220],{"class":4007,"line":4985},[4005,12221,12222],{"class":4190},"    Байт 1: 'o' (U+006F)\n",[4005,12224,12225],{"class":4007,"line":7813},[4005,12226,12227],{"class":4190},"    Байт 2: ' ' (U+0020)\n",[4005,12229,12230],{"class":4007,"line":7819},[4005,12231,12232],{"class":4190},"    Байт 3: 'Г' (U+0413)  ← byteIndex стрибає на 3, бо кирилиця = 2 байти\n",[4005,12234,12235],{"class":4007,"line":7826},[4005,12236,12237],{"class":4190},"    Байт 5: 'о' (U+043E)\n",[4005,12239,12240],{"class":4007,"line":7839},[4005,12241,12242],{"class":4190},"    *\u002F\n",[4005,12244,12245],{"class":4007,"line":7864},[4005,12246,4078],{"class":4182},[3908,12248,12249],{},[3871,12250,12251],{},"Основні операції:",[3984,12253,12255],{"className":4162,"code":12254,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Перетворення:\n[]rune(str)      \u002F\u002F string → []rune (масив символів)\n[]byte(str)      \u002F\u002F string → []byte (масив байтів)\nstring(runes)    \u002F\u002F []rune → string\nstring(bytes)    \u002F\u002F []byte → string\n\n\u002F\u002F Літерали:\nvar ch rune = 'Ї'           \u002F\u002F Одинарні лапки для рун\nvar text string = \"Привіт\"  \u002F\u002F Подвійні лапки для рядків\n\n\u002F\u002F Безпечна ітерація:\nfor index, runeValue := range text {\n    fmt.Printf(\"%d: %c\\n\", index, runeValue)\n}\n",[3753,12256,12257,12262,12278,12293,12307,12321,12325,12330,12348,12364,12368,12373,12393,12426],{"__ignoreMap":3992},[4005,12258,12259],{"class":4007,"line":4008},[4005,12260,12261],{"class":4190},"\u002F\u002F Перетворення:\n",[4005,12263,12264,12267,12269,12271,12273,12275],{"class":4007,"line":4014},[4005,12265,12266],{"class":4182},"[]",[4005,12268,8242],{"class":4178},[4005,12270,4611],{"class":4182},[4005,12272,12012],{"class":4174},[4005,12274,10036],{"class":4182},[4005,12276,12277],{"class":4190},"\u002F\u002F string → []rune (масив символів)\n",[4005,12279,12280,12282,12284,12286,12288,12290],{"class":4007,"line":4020},[4005,12281,12266],{"class":4182},[4005,12283,5162],{"class":4178},[4005,12285,4611],{"class":4182},[4005,12287,12012],{"class":4174},[4005,12289,10036],{"class":4182},[4005,12291,12292],{"class":4190},"\u002F\u002F string → []byte (масив байтів)\n",[4005,12294,12295,12297,12299,12301,12304],{"class":4007,"line":4026},[4005,12296,7004],{"class":4178},[4005,12298,4611],{"class":4182},[4005,12300,11616],{"class":4174},[4005,12302,12303],{"class":4182},")    ",[4005,12305,12306],{"class":4190},"\u002F\u002F []rune → string\n",[4005,12308,12309,12311,12313,12316,12318],{"class":4007,"line":4032},[4005,12310,7004],{"class":4178},[4005,12312,4611],{"class":4182},[4005,12314,12315],{"class":4174},"bytes",[4005,12317,12303],{"class":4182},[4005,12319,12320],{"class":4190},"\u002F\u002F []byte → string\n",[4005,12322,12323],{"class":4007,"line":4039},[4005,12324,4036],{"emptyLinePlaceholder":4035},[4005,12326,12327],{"class":4007,"line":4045},[4005,12328,12329],{"class":4190},"\u002F\u002F Літерали:\n",[4005,12331,12332,12334,12337,12340,12342,12345],{"class":4007,"line":4051},[4005,12333,3963],{"class":4171},[4005,12335,12336],{"class":4174}," ch",[4005,12338,12339],{"class":4178}," rune",[4005,12341,4183],{"class":4182},[4005,12343,12344],{"class":4330},"'Ї'",[4005,12346,12347],{"class":4190},"           \u002F\u002F Одинарні лапки для рун\n",[4005,12349,12350,12352,12355,12357,12359,12361],{"class":4007,"line":4057},[4005,12351,3963],{"class":4171},[4005,12353,12354],{"class":4174}," text",[4005,12356,4237],{"class":4178},[4005,12358,4183],{"class":4182},[4005,12360,11871],{"class":4330},[4005,12362,12363],{"class":4190},"  \u002F\u002F Подвійні лапки для рядків\n",[4005,12365,12366],{"class":4007,"line":4063},[4005,12367,4036],{"emptyLinePlaceholder":4035},[4005,12369,12370],{"class":4007,"line":4069},[4005,12371,12372],{"class":4190},"\u002F\u002F Безпечна ітерація:\n",[4005,12374,12375,12377,12380,12382,12385,12387,12389,12391],{"class":4007,"line":4075},[4005,12376,3808],{"class":4836},[4005,12378,12379],{"class":4174}," index",[4005,12381,3836],{"class":4182},[4005,12383,12384],{"class":4174},"runeValue",[4005,12386,4314],{"class":4182},[4005,12388,12151],{"class":4836},[4005,12390,12354],{"class":4174},[4005,12392,5073],{"class":4182},[4005,12394,12395,12397,12399,12401,12403,12405,12407,12409,12411,12413,12415,12417,12420,12422,12424],{"class":4007,"line":4081},[4005,12396,5370],{"class":4174},[4005,12398,3769],{"class":4182},[4005,12400,7945],{"class":4302},[4005,12402,4611],{"class":4182},[4005,12404,7968],{"class":4330},[4005,12406,7959],{"class":4174},[4005,12408,11172],{"class":4330},[4005,12410,11607],{"class":4174},[4005,12412,7965],{"class":7964},[4005,12414,7968],{"class":4330},[4005,12416,3836],{"class":4182},[4005,12418,12419],{"class":4174},"index",[4005,12421,3836],{"class":4182},[4005,12423,12384],{"class":4174},[4005,12425,4482],{"class":4182},[4005,12427,12428],{"class":4007,"line":4086},[4005,12429,4078],{"class":4182},[3900,12431],{},[3903,12433,12435,12436],{"id":12434},"робота-з-рядками-пакет-strings","Робота з рядками: пакет ",[3753,12437,12438],{},"strings",[3908,12440,12441,12442,12444],{},"У попередньому розділі ми розглянули внутрішню будову рядків, UTF-8 кодування та тип ",[3753,12443,8242],{},". Тепер перейдемо до практичних операцій з текстом, які потрібні в реальних проєктах: пошук підрядків, заміна тексту, розбиття на частини, видалення пробілів та інше.",[3908,12446,12447,12448,12452],{},"Для цього Go надає пакет ",[3871,12449,12450],{},[3753,12451,12438],{}," зі стандартної бібліотеки — набір функцій для роботи з UTF-8 рядками без необхідності писати низькорівневі алгоритми.",[4484,12454,12456,12463],{"icon":12455},"i-lucide-package",[3908,12457,12458],{},[3871,12459,12460,12461,5831],{},"Коли використовувати ",[3753,12462,12438],{},[3746,12464,12465,12468,12471,12474,12477],{},[3749,12466,12467],{},"Валідація вхідних даних (перевірка префіксів, суфіксів, наявності символів)",[3749,12469,12470],{},"Парсинг конфігураційних файлів (розбиття на рядки, видалення коментарів)",[3749,12472,12473],{},"Обробка HTTP-заголовків (перетворення регістру, пошук токенів)",[3749,12475,12476],{},"Формування SQL-запитів (об'єднання частин, підстановка параметрів)",[3749,12478,12479],{},"Логування (підготовка повідомлень, очищення від небажаних символів)",[3976,12481,12483],{"id":12482},"частина-1-перетворення-регістру-та-перевірка-префіксівсуфіксів","Частина 1: Перетворення регістру та перевірка префіксів\u002Fсуфіксів",[9014,12485,12487,12488,3836,12491,3836,12494],{"id":12486},"зміна-регістру-toupper-tolower-title","Зміна регістру: ",[3753,12489,12490],{},"ToUpper",[3753,12492,12493],{},"ToLower",[3753,12495,12496],{},"Title",[3908,12498,12499],{},[3871,12500,12501],{},"Функції:",[3746,12503,12504,12510,12516],{},[3749,12505,12506,12509],{},[3753,12507,12508],{},"strings.ToUpper(s)"," — всі літери у верхній регістр",[3749,12511,12512,12515],{},[3753,12513,12514],{},"strings.ToLower(s)"," — всі літери у нижній регістр",[3749,12517,12518,7537,12521,12524,12525,12528,12529],{},[3753,12519,12520],{},"strings.Title(s)",[3871,12522,12523],{},"Застаріла!"," Використовуйте ",[3753,12526,12527],{},"cases.Title()"," з пакету ",[3753,12530,12531],{},"golang.org\u002Fx\u002Ftext\u002Fcases",[12533,12534,12535,12741],"tabs",{},[12536,12537,12540,12717,12722],"tabs-item",{"icon":12538,"label":12539},"i-simple-icons-go","Go",[3984,12541,12543],{"className":4162,"code":12542,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n)\n\nfunc main() {\n    header := \"Content-Type\"\n    \n    fmt.Println(strings.ToUpper(header))  \u002F\u002F CONTENT-TYPE\n    fmt.Println(strings.ToLower(header))  \u002F\u002F content-type\n    \n    \u002F\u002F Приклад: нормалізація HTTP-заголовків для порівняння\n    userAgent := \"Mozilla\u002F5.0\"\n    if strings.ToLower(userAgent) == \"mozilla\u002F5.0\" {\n        fmt.Println(\"Браузер розпізнано\")\n    }\n}\n",[3753,12544,12545,12551,12555,12561,12565,12570,12574,12578,12586,12596,12600,12626,12651,12655,12660,12670,12694,12709,12713],{"__ignoreMap":3992},[4005,12546,12547,12549],{"class":4007,"line":4008},[4005,12548,5739],{"class":4171},[4005,12550,5742],{"class":4178},[4005,12552,12553],{"class":4007,"line":4014},[4005,12554,4036],{"emptyLinePlaceholder":4035},[4005,12556,12557,12559],{"class":4007,"line":4020},[4005,12558,3917],{"class":4836},[4005,12560,4439],{"class":4182},[4005,12562,12563],{"class":4007,"line":4026},[4005,12564,4843],{"class":4330},[4005,12566,12567],{"class":4007,"line":4032},[4005,12568,12569],{"class":4330},"    \"strings\"\n",[4005,12571,12572],{"class":4007,"line":4039},[4005,12573,4482],{"class":4182},[4005,12575,12576],{"class":4007,"line":4045},[4005,12577,4036],{"emptyLinePlaceholder":4035},[4005,12579,12580,12582,12584],{"class":4007,"line":4051},[4005,12581,4299],{"class":4171},[4005,12583,5764],{"class":4302},[4005,12585,4306],{"class":4182},[4005,12587,12588,12591,12593],{"class":4007,"line":4057},[4005,12589,12590],{"class":4174},"    header",[4005,12592,4314],{"class":4182},[4005,12594,12595],{"class":4330},"\"Content-Type\"\n",[4005,12597,12598],{"class":4007,"line":4063},[4005,12599,5214],{"class":4182},[4005,12601,12602,12604,12606,12608,12610,12612,12614,12616,12618,12621,12623],{"class":4007,"line":4069},[4005,12603,5370],{"class":4174},[4005,12605,3769],{"class":4182},[4005,12607,5348],{"class":4302},[4005,12609,4611],{"class":4182},[4005,12611,12438],{"class":4174},[4005,12613,3769],{"class":4182},[4005,12615,12490],{"class":4302},[4005,12617,4611],{"class":4182},[4005,12619,12620],{"class":4174},"header",[4005,12622,11472],{"class":4182},[4005,12624,12625],{"class":4190},"\u002F\u002F CONTENT-TYPE\n",[4005,12627,12628,12630,12632,12634,12636,12638,12640,12642,12644,12646,12648],{"class":4007,"line":4075},[4005,12629,5370],{"class":4174},[4005,12631,3769],{"class":4182},[4005,12633,5348],{"class":4302},[4005,12635,4611],{"class":4182},[4005,12637,12438],{"class":4174},[4005,12639,3769],{"class":4182},[4005,12641,12493],{"class":4302},[4005,12643,4611],{"class":4182},[4005,12645,12620],{"class":4174},[4005,12647,11472],{"class":4182},[4005,12649,12650],{"class":4190},"\u002F\u002F content-type\n",[4005,12652,12653],{"class":4007,"line":4081},[4005,12654,5214],{"class":4182},[4005,12656,12657],{"class":4007,"line":4086},[4005,12658,12659],{"class":4190},"    \u002F\u002F Приклад: нормалізація HTTP-заголовків для порівняння\n",[4005,12661,12662,12665,12667],{"class":4007,"line":4092},[4005,12663,12664],{"class":4174},"    userAgent",[4005,12666,4314],{"class":4182},[4005,12668,12669],{"class":4330},"\"Mozilla\u002F5.0\"\n",[4005,12671,12672,12674,12677,12679,12681,12683,12686,12689,12692],{"class":4007,"line":4098},[4005,12673,5104],{"class":4836},[4005,12675,12676],{"class":4174}," strings",[4005,12678,3769],{"class":4182},[4005,12680,12493],{"class":4302},[4005,12682,4611],{"class":4182},[4005,12684,12685],{"class":4174},"userAgent",[4005,12687,12688],{"class":4182},") == ",[4005,12690,12691],{"class":4330},"\"mozilla\u002F5.0\"",[4005,12693,5073],{"class":4182},[4005,12695,12696,12698,12700,12702,12704,12707],{"class":4007,"line":4104},[4005,12697,5343],{"class":4174},[4005,12699,3769],{"class":4182},[4005,12701,5348],{"class":4302},[4005,12703,4611],{"class":4182},[4005,12705,12706],{"class":4330},"\"Браузер розпізнано\"",[4005,12708,4482],{"class":4182},[4005,12710,12711],{"class":4007,"line":4110},[4005,12712,5127],{"class":4182},[4005,12714,12715],{"class":4007,"line":4937},[4005,12716,4078],{"class":4182},[3908,12718,12719],{},[3871,12720,12721],{},"Особливості:",[3746,12723,12724,12731,12738],{},[3749,12725,12726,12727,12730],{},"Обробляють ",[3871,12728,12729],{},"всі Unicode символи"," (не тільки ASCII)",[3749,12732,12733,12734,12737],{},"Повертають ",[3871,12735,12736],{},"новий рядок"," (рядки незмінні!)",[3749,12739,12740],{},"Працюють з будь-якою довжиною рядка без обмежень",[12536,12742,12744,12946,12951],{"icon":12743,"label":2367},"i-simple-icons-openjdk",[3984,12745,12749],{"className":12746,"code":12747,"language":12748,"meta":3992,"style":3992},"language-java shiki shiki-themes light-plus dark-plus dark-plus","public class StringExample {\n    public static void main(String[] args) {\n        String header = \"Content-Type\";\n        \n        System.out.println(header.toUpperCase());  \u002F\u002F CONTENT-TYPE\n        System.out.println(header.toLowerCase());  \u002F\u002F content-type\n        \n        \u002F\u002F Приклад: нормалізація HTTP-заголовків\n        String userAgent = \"Mozilla\u002F5.0\";\n        if (userAgent.toLowerCase().equals(\"mozilla\u002F5.0\")) {\n            System.out.println(\"Браузер розпізнано\");\n        }\n    }\n}\n","java",[3753,12750,12751,12764,12790,12806,12811,12840,12865,12869,12874,12888,12913,12933,12938,12942],{"__ignoreMap":3992},[4005,12752,12753,12756,12759,12762],{"class":4007,"line":4008},[4005,12754,12755],{"class":4171},"public",[4005,12757,12758],{"class":4171}," class",[4005,12760,12761],{"class":4178}," StringExample",[4005,12763,5073],{"class":4182},[4005,12765,12766,12769,12772,12775,12777,12779,12781,12784,12787],{"class":4007,"line":4014},[4005,12767,12768],{"class":4171},"    public",[4005,12770,12771],{"class":4171}," static",[4005,12773,12774],{"class":4178}," void",[4005,12776,5764],{"class":4302},[4005,12778,4611],{"class":4182},[4005,12780,7343],{"class":4178},[4005,12782,12783],{"class":4182},"[] ",[4005,12785,12786],{"class":4174},"args",[4005,12788,12789],{"class":4182},") {\n",[4005,12791,12792,12795,12798,12800,12803],{"class":4007,"line":4020},[4005,12793,12794],{"class":4178},"        String",[4005,12796,12797],{"class":4174}," header",[4005,12799,4183],{"class":4182},[4005,12801,12802],{"class":4330},"\"Content-Type\"",[4005,12804,12805],{"class":4182},";\n",[4005,12807,12808],{"class":4007,"line":4026},[4005,12809,12810],{"class":4182},"        \n",[4005,12812,12813,12816,12818,12821,12823,12826,12828,12830,12832,12835,12838],{"class":4007,"line":4032},[4005,12814,12815],{"class":4174},"        System",[4005,12817,3769],{"class":4182},[4005,12819,12820],{"class":4174},"out",[4005,12822,3769],{"class":4182},[4005,12824,12825],{"class":4302},"println",[4005,12827,4611],{"class":4182},[4005,12829,12620],{"class":4174},[4005,12831,3769],{"class":4182},[4005,12833,12834],{"class":4302},"toUpperCase",[4005,12836,12837],{"class":4182},"());  ",[4005,12839,12625],{"class":4190},[4005,12841,12842,12844,12846,12848,12850,12852,12854,12856,12858,12861,12863],{"class":4007,"line":4039},[4005,12843,12815],{"class":4174},[4005,12845,3769],{"class":4182},[4005,12847,12820],{"class":4174},[4005,12849,3769],{"class":4182},[4005,12851,12825],{"class":4302},[4005,12853,4611],{"class":4182},[4005,12855,12620],{"class":4174},[4005,12857,3769],{"class":4182},[4005,12859,12860],{"class":4302},"toLowerCase",[4005,12862,12837],{"class":4182},[4005,12864,12650],{"class":4190},[4005,12866,12867],{"class":4007,"line":4045},[4005,12868,12810],{"class":4182},[4005,12870,12871],{"class":4007,"line":4051},[4005,12872,12873],{"class":4190},"        \u002F\u002F Приклад: нормалізація HTTP-заголовків\n",[4005,12875,12876,12878,12881,12883,12886],{"class":4007,"line":4057},[4005,12877,12794],{"class":4178},[4005,12879,12880],{"class":4174}," userAgent",[4005,12882,4183],{"class":4182},[4005,12884,12885],{"class":4330},"\"Mozilla\u002F5.0\"",[4005,12887,12805],{"class":4182},[4005,12889,12890,12893,12895,12897,12899,12901,12904,12907,12909,12911],{"class":4007,"line":4063},[4005,12891,12892],{"class":4836},"        if",[4005,12894,4761],{"class":4182},[4005,12896,12685],{"class":4174},[4005,12898,3769],{"class":4182},[4005,12900,12860],{"class":4302},[4005,12902,12903],{"class":4182},"().",[4005,12905,12906],{"class":4302},"equals",[4005,12908,4611],{"class":4182},[4005,12910,12691],{"class":4330},[4005,12912,10732],{"class":4182},[4005,12914,12915,12918,12920,12922,12924,12926,12928,12930],{"class":4007,"line":4069},[4005,12916,12917],{"class":4174},"            System",[4005,12919,3769],{"class":4182},[4005,12921,12820],{"class":4174},[4005,12923,3769],{"class":4182},[4005,12925,12825],{"class":4302},[4005,12927,4611],{"class":4182},[4005,12929,12706],{"class":4330},[4005,12931,12932],{"class":4182},");\n",[4005,12934,12935],{"class":4007,"line":4075},[4005,12936,12937],{"class":4182},"        }\n",[4005,12939,12940],{"class":4007,"line":4081},[4005,12941,5127],{"class":4182},[4005,12943,12944],{"class":4007,"line":4086},[4005,12945,4078],{"class":4182},[3908,12947,12948],{},[3871,12949,12950],{},"Відмінності від Go:",[3746,12952,12953,12965,12968],{},[3749,12954,12955,4761,12958,12961,12962,5032],{},[3871,12956,12957],{},"Методи об'єкта",[3753,12959,12960],{},"header.toUpperCase()","), а не функції (",[3753,12963,12964],{},"strings.ToUpper(header)",[3749,12966,12967],{},"Використовують UTF-16 всередині, Go — UTF-8",[3749,12969,12970,12973,12974],{},[3753,12971,12972],{},"equals()"," для порівняння, Go — ",[3753,12975,12976],{},"==",[3900,12978],{},[9014,12980,12982,12983,3836,12986],{"id":12981},"перевірка-префіксів-та-суфіксів-hasprefix-hassuffix","Перевірка префіксів та суфіксів: ",[3753,12984,12985],{},"HasPrefix",[3753,12987,12988],{},"HasSuffix",[3908,12990,12991],{},[3871,12992,12993],{},"Типові задачі:",[3746,12995,12996,13002,13011],{},[3749,12997,12998,12999,5032],{},"Перевірка протоколу URL (",[3753,13000,13001],{},"https:\u002F\u002F...",[3749,13003,13004,13005,3836,13008,5032],{},"Фільтрація файлів за розширенням (",[3753,13006,13007],{},".json",[3753,13009,13010],{},".yaml",[3749,13012,13013,13014,5032],{},"Валідація токенів (",[3753,13015,13016],{},"Bearer ...",[12533,13018,13019,13377],{},[12536,13020,13021,13293,13298,13348,13353],{"icon":12538,"label":12539},[3984,13022,13024],{"className":4162,"code":13023,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n)\n\nfunc main() {\n    url := \"https:\u002F\u002Fapi.example.com\u002Fusers\"\n    filename := \"config.yaml\"\n    authHeader := \"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\"\n    \n    \u002F\u002F Перевірка префіксу\n    if strings.HasPrefix(url, \"https:\u002F\u002F\") {\n        fmt.Println(\"✅ Безпечне з'єднання\")\n    }\n    \n    \u002F\u002F Перевірка суфіксу\n    if strings.HasSuffix(filename, \".yaml\") || strings.HasSuffix(filename, \".yml\") {\n        fmt.Println(\"✅ YAML конфігурація\")\n    }\n    \n    \u002F\u002F Валідація токену\n    if strings.HasPrefix(authHeader, \"Bearer \") {\n        token := authHeader[7:]  \u002F\u002F Видаляємо \"Bearer \"\n        fmt.Println(\"Токен:\", token)\n    }\n}\n",[3753,13025,13026,13032,13036,13042,13046,13050,13054,13058,13066,13076,13086,13096,13100,13105,13127,13142,13146,13150,13155,13195,13210,13214,13218,13223,13245,13265,13285,13289],{"__ignoreMap":3992},[4005,13027,13028,13030],{"class":4007,"line":4008},[4005,13029,5739],{"class":4171},[4005,13031,5742],{"class":4178},[4005,13033,13034],{"class":4007,"line":4014},[4005,13035,4036],{"emptyLinePlaceholder":4035},[4005,13037,13038,13040],{"class":4007,"line":4020},[4005,13039,3917],{"class":4836},[4005,13041,4439],{"class":4182},[4005,13043,13044],{"class":4007,"line":4026},[4005,13045,4843],{"class":4330},[4005,13047,13048],{"class":4007,"line":4032},[4005,13049,12569],{"class":4330},[4005,13051,13052],{"class":4007,"line":4039},[4005,13053,4482],{"class":4182},[4005,13055,13056],{"class":4007,"line":4045},[4005,13057,4036],{"emptyLinePlaceholder":4035},[4005,13059,13060,13062,13064],{"class":4007,"line":4051},[4005,13061,4299],{"class":4171},[4005,13063,5764],{"class":4302},[4005,13065,4306],{"class":4182},[4005,13067,13068,13071,13073],{"class":4007,"line":4057},[4005,13069,13070],{"class":4174},"    url",[4005,13072,4314],{"class":4182},[4005,13074,13075],{"class":4330},"\"https:\u002F\u002Fapi.example.com\u002Fusers\"\n",[4005,13077,13078,13081,13083],{"class":4007,"line":4063},[4005,13079,13080],{"class":4174},"    filename",[4005,13082,4314],{"class":4182},[4005,13084,13085],{"class":4330},"\"config.yaml\"\n",[4005,13087,13088,13091,13093],{"class":4007,"line":4069},[4005,13089,13090],{"class":4174},"    authHeader",[4005,13092,4314],{"class":4182},[4005,13094,13095],{"class":4330},"\"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\"\n",[4005,13097,13098],{"class":4007,"line":4075},[4005,13099,5214],{"class":4182},[4005,13101,13102],{"class":4007,"line":4081},[4005,13103,13104],{"class":4190},"    \u002F\u002F Перевірка префіксу\n",[4005,13106,13107,13109,13111,13113,13115,13117,13120,13122,13125],{"class":4007,"line":4086},[4005,13108,5104],{"class":4836},[4005,13110,12676],{"class":4174},[4005,13112,3769],{"class":4182},[4005,13114,12985],{"class":4302},[4005,13116,4611],{"class":4182},[4005,13118,13119],{"class":4174},"url",[4005,13121,3836],{"class":4182},[4005,13123,13124],{"class":4330},"\"https:\u002F\u002F\"",[4005,13126,12789],{"class":4182},[4005,13128,13129,13131,13133,13135,13137,13140],{"class":4007,"line":4092},[4005,13130,5343],{"class":4174},[4005,13132,3769],{"class":4182},[4005,13134,5348],{"class":4302},[4005,13136,4611],{"class":4182},[4005,13138,13139],{"class":4330},"\"✅ Безпечне з'єднання\"",[4005,13141,4482],{"class":4182},[4005,13143,13144],{"class":4007,"line":4098},[4005,13145,5127],{"class":4182},[4005,13147,13148],{"class":4007,"line":4104},[4005,13149,5214],{"class":4182},[4005,13151,13152],{"class":4007,"line":4110},[4005,13153,13154],{"class":4190},"    \u002F\u002F Перевірка суфіксу\n",[4005,13156,13157,13159,13161,13163,13165,13167,13170,13172,13175,13178,13180,13182,13184,13186,13188,13190,13193],{"class":4007,"line":4937},[4005,13158,5104],{"class":4836},[4005,13160,12676],{"class":4174},[4005,13162,3769],{"class":4182},[4005,13164,12988],{"class":4302},[4005,13166,4611],{"class":4182},[4005,13168,13169],{"class":4174},"filename",[4005,13171,3836],{"class":4182},[4005,13173,13174],{"class":4330},"\".yaml\"",[4005,13176,13177],{"class":4182},") || ",[4005,13179,12438],{"class":4174},[4005,13181,3769],{"class":4182},[4005,13183,12988],{"class":4302},[4005,13185,4611],{"class":4182},[4005,13187,13169],{"class":4174},[4005,13189,3836],{"class":4182},[4005,13191,13192],{"class":4330},"\".yml\"",[4005,13194,12789],{"class":4182},[4005,13196,13197,13199,13201,13203,13205,13208],{"class":4007,"line":4942},[4005,13198,5343],{"class":4174},[4005,13200,3769],{"class":4182},[4005,13202,5348],{"class":4302},[4005,13204,4611],{"class":4182},[4005,13206,13207],{"class":4330},"\"✅ YAML конфігурація\"",[4005,13209,4482],{"class":4182},[4005,13211,13212],{"class":4007,"line":4947},[4005,13213,5127],{"class":4182},[4005,13215,13216],{"class":4007,"line":4953},[4005,13217,5214],{"class":4182},[4005,13219,13220],{"class":4007,"line":4960},[4005,13221,13222],{"class":4190},"    \u002F\u002F Валідація токену\n",[4005,13224,13225,13227,13229,13231,13233,13235,13238,13240,13243],{"class":4007,"line":4973},[4005,13226,5104],{"class":4836},[4005,13228,12676],{"class":4174},[4005,13230,3769],{"class":4182},[4005,13232,12985],{"class":4302},[4005,13234,4611],{"class":4182},[4005,13236,13237],{"class":4174},"authHeader",[4005,13239,3836],{"class":4182},[4005,13241,13242],{"class":4330},"\"Bearer \"",[4005,13244,12789],{"class":4182},[4005,13246,13247,13250,13252,13254,13256,13259,13262],{"class":4007,"line":4985},[4005,13248,13249],{"class":4174},"        token",[4005,13251,4314],{"class":4182},[4005,13253,13237],{"class":4174},[4005,13255,11561],{"class":4182},[4005,13257,13258],{"class":4186},"7",[4005,13260,13261],{"class":4182},":]  ",[4005,13263,13264],{"class":4190},"\u002F\u002F Видаляємо \"Bearer \"\n",[4005,13266,13267,13269,13271,13273,13275,13278,13280,13283],{"class":4007,"line":7813},[4005,13268,5343],{"class":4174},[4005,13270,3769],{"class":4182},[4005,13272,5348],{"class":4302},[4005,13274,4611],{"class":4182},[4005,13276,13277],{"class":4330},"\"Токен:\"",[4005,13279,3836],{"class":4182},[4005,13281,13282],{"class":4174},"token",[4005,13284,4482],{"class":4182},[4005,13286,13287],{"class":4007,"line":7819},[4005,13288,5127],{"class":4182},[4005,13290,13291],{"class":4007,"line":7826},[4005,13292,4078],{"class":4182},[3908,13294,13295],{},[3871,13296,13297],{},"Сигнатури:",[3984,13299,13301],{"className":4162,"code":13300,"language":4164,"meta":3992,"style":3992},"func HasPrefix(s, prefix string) bool\nfunc HasSuffix(s, suffix string) bool\n",[3753,13302,13303,13326],{"__ignoreMap":3992},[4005,13304,13305,13307,13310,13312,13314,13316,13319,13321,13323],{"class":4007,"line":4008},[4005,13306,4299],{"class":4171},[4005,13308,13309],{"class":4302}," HasPrefix",[4005,13311,4611],{"class":4182},[4005,13313,7550],{"class":4174},[4005,13315,3836],{"class":4182},[4005,13317,13318],{"class":4174},"prefix",[4005,13320,4237],{"class":4178},[4005,13322,4498],{"class":4182},[4005,13324,13325],{"class":4178},"bool\n",[4005,13327,13328,13330,13333,13335,13337,13339,13342,13344,13346],{"class":4007,"line":4014},[4005,13329,4299],{"class":4171},[4005,13331,13332],{"class":4302}," HasSuffix",[4005,13334,4611],{"class":4182},[4005,13336,7550],{"class":4174},[4005,13338,3836],{"class":4182},[4005,13340,13341],{"class":4174},"suffix",[4005,13343,4237],{"class":4178},[4005,13345,4498],{"class":4182},[4005,13347,13325],{"class":4178},[3908,13349,13350],{},[3871,13351,13352],{},"Переваги:",[3746,13354,13355,13365,13371],{},[3749,13356,13357,3880,13360,8996,13363],{},[3871,13358,13359],{},"Регістрозалежні:",[3753,13361,13362],{},"HasPrefix(\"Hello\", \"he\")",[3753,13364,4206],{},[3749,13366,13367,13370],{},[3871,13368,13369],{},"Ефективні:"," не створюють підрядки, просто порівнюють байти",[3749,13372,13373,13376],{},[3871,13374,13375],{},"UTF-8 безпечні:"," коректно працюють з багатобайтовими символами",[12536,13378,13379,13650,13654],{"icon":12743,"label":2367},[3984,13380,13382],{"className":12746,"code":13381,"language":12748,"meta":3992,"style":3992},"public class UrlValidator {\n    public static void main(String[] args) {\n        String url = \"https:\u002F\u002Fapi.example.com\u002Fusers\";\n        String filename = \"config.yaml\";\n        String authHeader = \"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\";\n        \n        \u002F\u002F Перевірка префіксу\n        if (url.startsWith(\"https:\u002F\u002F\")) {\n            System.out.println(\"✅ Безпечне з'єднання\");\n        }\n        \n        \u002F\u002F Перевірка суфіксу\n        if (filename.endsWith(\".yaml\") || filename.endsWith(\".yml\")) {\n            System.out.println(\"✅ YAML конфігурація\");\n        }\n        \n        \u002F\u002F Валідація токену\n        if (authHeader.startsWith(\"Bearer \")) {\n            String token = authHeader.substring(7);\n            System.out.println(\"Токен: \" + token);\n        }\n    }\n}\n",[3753,13383,13384,13395,13415,13429,13443,13457,13461,13466,13485,13503,13507,13511,13516,13547,13565,13569,13573,13578,13596,13618,13638,13642,13646],{"__ignoreMap":3992},[4005,13385,13386,13388,13390,13393],{"class":4007,"line":4008},[4005,13387,12755],{"class":4171},[4005,13389,12758],{"class":4171},[4005,13391,13392],{"class":4178}," UrlValidator",[4005,13394,5073],{"class":4182},[4005,13396,13397,13399,13401,13403,13405,13407,13409,13411,13413],{"class":4007,"line":4014},[4005,13398,12768],{"class":4171},[4005,13400,12771],{"class":4171},[4005,13402,12774],{"class":4178},[4005,13404,5764],{"class":4302},[4005,13406,4611],{"class":4182},[4005,13408,7343],{"class":4178},[4005,13410,12783],{"class":4182},[4005,13412,12786],{"class":4174},[4005,13414,12789],{"class":4182},[4005,13416,13417,13419,13422,13424,13427],{"class":4007,"line":4020},[4005,13418,12794],{"class":4178},[4005,13420,13421],{"class":4174}," url",[4005,13423,4183],{"class":4182},[4005,13425,13426],{"class":4330},"\"https:\u002F\u002Fapi.example.com\u002Fusers\"",[4005,13428,12805],{"class":4182},[4005,13430,13431,13433,13436,13438,13441],{"class":4007,"line":4026},[4005,13432,12794],{"class":4178},[4005,13434,13435],{"class":4174}," filename",[4005,13437,4183],{"class":4182},[4005,13439,13440],{"class":4330},"\"config.yaml\"",[4005,13442,12805],{"class":4182},[4005,13444,13445,13447,13450,13452,13455],{"class":4007,"line":4032},[4005,13446,12794],{"class":4178},[4005,13448,13449],{"class":4174}," authHeader",[4005,13451,4183],{"class":4182},[4005,13453,13454],{"class":4330},"\"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9\"",[4005,13456,12805],{"class":4182},[4005,13458,13459],{"class":4007,"line":4039},[4005,13460,12810],{"class":4182},[4005,13462,13463],{"class":4007,"line":4045},[4005,13464,13465],{"class":4190},"        \u002F\u002F Перевірка префіксу\n",[4005,13467,13468,13470,13472,13474,13476,13479,13481,13483],{"class":4007,"line":4051},[4005,13469,12892],{"class":4836},[4005,13471,4761],{"class":4182},[4005,13473,13119],{"class":4174},[4005,13475,3769],{"class":4182},[4005,13477,13478],{"class":4302},"startsWith",[4005,13480,4611],{"class":4182},[4005,13482,13124],{"class":4330},[4005,13484,10732],{"class":4182},[4005,13486,13487,13489,13491,13493,13495,13497,13499,13501],{"class":4007,"line":4057},[4005,13488,12917],{"class":4174},[4005,13490,3769],{"class":4182},[4005,13492,12820],{"class":4174},[4005,13494,3769],{"class":4182},[4005,13496,12825],{"class":4302},[4005,13498,4611],{"class":4182},[4005,13500,13139],{"class":4330},[4005,13502,12932],{"class":4182},[4005,13504,13505],{"class":4007,"line":4063},[4005,13506,12937],{"class":4182},[4005,13508,13509],{"class":4007,"line":4069},[4005,13510,12810],{"class":4182},[4005,13512,13513],{"class":4007,"line":4075},[4005,13514,13515],{"class":4190},"        \u002F\u002F Перевірка суфіксу\n",[4005,13517,13518,13520,13522,13524,13526,13529,13531,13533,13535,13537,13539,13541,13543,13545],{"class":4007,"line":4081},[4005,13519,12892],{"class":4836},[4005,13521,4761],{"class":4182},[4005,13523,13169],{"class":4174},[4005,13525,3769],{"class":4182},[4005,13527,13528],{"class":4302},"endsWith",[4005,13530,4611],{"class":4182},[4005,13532,13174],{"class":4330},[4005,13534,13177],{"class":4182},[4005,13536,13169],{"class":4174},[4005,13538,3769],{"class":4182},[4005,13540,13528],{"class":4302},[4005,13542,4611],{"class":4182},[4005,13544,13192],{"class":4330},[4005,13546,10732],{"class":4182},[4005,13548,13549,13551,13553,13555,13557,13559,13561,13563],{"class":4007,"line":4086},[4005,13550,12917],{"class":4174},[4005,13552,3769],{"class":4182},[4005,13554,12820],{"class":4174},[4005,13556,3769],{"class":4182},[4005,13558,12825],{"class":4302},[4005,13560,4611],{"class":4182},[4005,13562,13207],{"class":4330},[4005,13564,12932],{"class":4182},[4005,13566,13567],{"class":4007,"line":4092},[4005,13568,12937],{"class":4182},[4005,13570,13571],{"class":4007,"line":4098},[4005,13572,12810],{"class":4182},[4005,13574,13575],{"class":4007,"line":4104},[4005,13576,13577],{"class":4190},"        \u002F\u002F Валідація токену\n",[4005,13579,13580,13582,13584,13586,13588,13590,13592,13594],{"class":4007,"line":4110},[4005,13581,12892],{"class":4836},[4005,13583,4761],{"class":4182},[4005,13585,13237],{"class":4174},[4005,13587,3769],{"class":4182},[4005,13589,13478],{"class":4302},[4005,13591,4611],{"class":4182},[4005,13593,13242],{"class":4330},[4005,13595,10732],{"class":4182},[4005,13597,13598,13601,13604,13606,13608,13610,13612,13614,13616],{"class":4007,"line":4937},[4005,13599,13600],{"class":4178},"            String",[4005,13602,13603],{"class":4174}," token",[4005,13605,4183],{"class":4182},[4005,13607,13237],{"class":4174},[4005,13609,3769],{"class":4182},[4005,13611,10908],{"class":4302},[4005,13613,4611],{"class":4182},[4005,13615,13258],{"class":4186},[4005,13617,12932],{"class":4182},[4005,13619,13620,13622,13624,13626,13628,13630,13632,13635],{"class":4007,"line":4942},[4005,13621,12917],{"class":4174},[4005,13623,3769],{"class":4182},[4005,13625,12820],{"class":4174},[4005,13627,3769],{"class":4182},[4005,13629,12825],{"class":4302},[4005,13631,4611],{"class":4182},[4005,13633,13634],{"class":4330},"\"Токен: \"",[4005,13636,13637],{"class":4182}," + token);\n",[4005,13639,13640],{"class":4007,"line":4947},[4005,13641,12937],{"class":4182},[4005,13643,13644],{"class":4007,"line":4953},[4005,13645,5127],{"class":4182},[4005,13647,13648],{"class":4007,"line":4960},[4005,13649,4078],{"class":4182},[3908,13651,13652],{},[3871,13653,12950],{},[3746,13655,13656,13667],{},[3749,13657,13658,3880,13661,3836,13664],{},[3871,13659,13660],{},"Методи об'єкта:",[3753,13662,13663],{},"url.startsWith()",[3753,13665,13666],{},"filename.endsWith()",[3749,13668,13669,13672,13673,13676],{},[3871,13670,13671],{},"substring()"," створює новий рядок, Go ",[3753,13674,13675],{},"[7:]"," — теж, але синтаксис простіший",[4748,13678,13679,13687,13769],{"icon":4486},[3908,13680,13681],{},[3871,13682,13683,13684,13686],{},"Чому не використовувати ",[3753,13685,12976],{}," для перевірки префіксів?",[3984,13688,13690],{"className":4162,"code":13689,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ❌ ПОГАНО\nif url[:8] == \"https:\u002F\u002F\" {  \u002F\u002F Паніка якщо url коротший за 8 символів!\n    \u002F\u002F ...\n}\n\n\u002F\u002F ✅ ДОБРЕ\nif strings.HasPrefix(url, \"https:\u002F\u002F\") {  \u002F\u002F Безпечно для будь-якої довжини\n    \u002F\u002F ...\n}\n",[3753,13691,13692,13697,13719,13724,13728,13732,13737,13761,13765],{"__ignoreMap":3992},[4005,13693,13694],{"class":4007,"line":4008},[4005,13695,13696],{"class":4190},"\u002F\u002F ❌ ПОГАНО\n",[4005,13698,13699,13701,13703,13706,13708,13711,13713,13716],{"class":4007,"line":4014},[4005,13700,3800],{"class":4836},[4005,13702,13421],{"class":4174},[4005,13704,13705],{"class":4182},"[:",[4005,13707,8264],{"class":4186},[4005,13709,13710],{"class":4182},"] == ",[4005,13712,13124],{"class":4330},[4005,13714,13715],{"class":4182}," {  ",[4005,13717,13718],{"class":4190},"\u002F\u002F Паніка якщо url коротший за 8 символів!\n",[4005,13720,13721],{"class":4007,"line":4020},[4005,13722,13723],{"class":4190},"    \u002F\u002F ...\n",[4005,13725,13726],{"class":4007,"line":4026},[4005,13727,4078],{"class":4182},[4005,13729,13730],{"class":4007,"line":4032},[4005,13731,4036],{"emptyLinePlaceholder":4035},[4005,13733,13734],{"class":4007,"line":4039},[4005,13735,13736],{"class":4190},"\u002F\u002F ✅ ДОБРЕ\n",[4005,13738,13739,13741,13743,13745,13747,13749,13751,13753,13755,13758],{"class":4007,"line":4045},[4005,13740,3800],{"class":4836},[4005,13742,12676],{"class":4174},[4005,13744,3769],{"class":4182},[4005,13746,12985],{"class":4302},[4005,13748,4611],{"class":4182},[4005,13750,13119],{"class":4174},[4005,13752,3836],{"class":4182},[4005,13754,13124],{"class":4330},[4005,13756,13757],{"class":4182},") {  ",[4005,13759,13760],{"class":4190},"\u002F\u002F Безпечно для будь-якої довжини\n",[4005,13762,13763],{"class":4007,"line":4051},[4005,13764,13723],{"class":4190},[4005,13766,13767],{"class":4007,"line":4057},[4005,13768,4078],{"class":4182},[3908,13770,13771,13773],{},[3753,13772,12985],{}," автоматично перевіряє довжину рядка і не викликає паніку.",[3900,13775],{},[3976,13777,13779],{"id":13778},"частина-2-пошук-підрядків-та-підрахунок-входжень","Частина 2: Пошук підрядків та підрахунок входжень",[9014,13781,13783,13784,3836,13787,3836,13790],{"id":13782},"перевірка-наявності-contains-containsany-containsrune","Перевірка наявності: ",[3753,13785,13786],{},"Contains",[3753,13788,13789],{},"ContainsAny",[3753,13791,13792],{},"ContainsRune",[3908,13794,13795],{},[3871,13796,12993],{},[3746,13798,13799,13805,13808],{},[3749,13800,13801,13802],{},"Перевірка чи містить email символ ",[3753,13803,13804],{},"@",[3749,13806,13807],{},"Фільтрація SQL-запитів на небезпечні символи",[3749,13809,13810],{},"Пошук ключових слів у лог-файлах",[12533,13812,13813,14225],{},[12536,13814,13815,14127,14131],{"icon":12538,"label":12539},[3984,13816,13818],{"className":4162,"code":13817,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n)\n\nfunc main() {\n    email := \"user@example.com\"\n    query := \"SELECT * FROM users\"\n    logLine := \"[ERROR] Database connection failed\"\n    \n    \u002F\u002F 1. Contains — чи містить підрядок\n    if strings.Contains(email, \"@\") {\n        fmt.Println(\"✅ Email валідний (містить @)\")\n    }\n    \n    \u002F\u002F 2. ContainsAny — чи містить ХОЧА Б ОДИН символ зі списку\n    dangerousChars := \"';--\"\n    if strings.ContainsAny(query, dangerousChars) {\n        fmt.Println(\"⚠️  Підозра на SQL-ін'єкцію!\")\n    }\n    \n    \u002F\u002F 3. ContainsRune — чи містить конкретну руну (символ Unicode)\n    if strings.ContainsRune(logLine, '🔥') {\n        fmt.Println(\"Критична помилка!\")\n    }\n    \n    \u002F\u002F 4. Count — скільки разів зустрічається підрядок\n    text := \"Go Go Go!\"\n    count := strings.Count(text, \"Go\")\n    fmt.Printf(\"Слово 'Go' зустрічається %d рази\\n\", count)  \u002F\u002F 3\n}\n",[3753,13819,13820,13826,13830,13836,13840,13844,13848,13852,13860,13870,13880,13890,13894,13899,13921,13936,13940,13944,13949,13959,13981,13996,14000,14004,14009,14031,14046,14050,14054,14059,14068,14092,14123],{"__ignoreMap":3992},[4005,13821,13822,13824],{"class":4007,"line":4008},[4005,13823,5739],{"class":4171},[4005,13825,5742],{"class":4178},[4005,13827,13828],{"class":4007,"line":4014},[4005,13829,4036],{"emptyLinePlaceholder":4035},[4005,13831,13832,13834],{"class":4007,"line":4020},[4005,13833,3917],{"class":4836},[4005,13835,4439],{"class":4182},[4005,13837,13838],{"class":4007,"line":4026},[4005,13839,4843],{"class":4330},[4005,13841,13842],{"class":4007,"line":4032},[4005,13843,12569],{"class":4330},[4005,13845,13846],{"class":4007,"line":4039},[4005,13847,4482],{"class":4182},[4005,13849,13850],{"class":4007,"line":4045},[4005,13851,4036],{"emptyLinePlaceholder":4035},[4005,13853,13854,13856,13858],{"class":4007,"line":4051},[4005,13855,4299],{"class":4171},[4005,13857,5764],{"class":4302},[4005,13859,4306],{"class":4182},[4005,13861,13862,13865,13867],{"class":4007,"line":4057},[4005,13863,13864],{"class":4174},"    email",[4005,13866,4314],{"class":4182},[4005,13868,13869],{"class":4330},"\"user@example.com\"\n",[4005,13871,13872,13875,13877],{"class":4007,"line":4063},[4005,13873,13874],{"class":4174},"    query",[4005,13876,4314],{"class":4182},[4005,13878,13879],{"class":4330},"\"SELECT * FROM users\"\n",[4005,13881,13882,13885,13887],{"class":4007,"line":4069},[4005,13883,13884],{"class":4174},"    logLine",[4005,13886,4314],{"class":4182},[4005,13888,13889],{"class":4330},"\"[ERROR] Database connection failed\"\n",[4005,13891,13892],{"class":4007,"line":4075},[4005,13893,5214],{"class":4182},[4005,13895,13896],{"class":4007,"line":4081},[4005,13897,13898],{"class":4190},"    \u002F\u002F 1. Contains — чи містить підрядок\n",[4005,13900,13901,13903,13905,13907,13909,13911,13914,13916,13919],{"class":4007,"line":4086},[4005,13902,5104],{"class":4836},[4005,13904,12676],{"class":4174},[4005,13906,3769],{"class":4182},[4005,13908,13786],{"class":4302},[4005,13910,4611],{"class":4182},[4005,13912,13913],{"class":4174},"email",[4005,13915,3836],{"class":4182},[4005,13917,13918],{"class":4330},"\"@\"",[4005,13920,12789],{"class":4182},[4005,13922,13923,13925,13927,13929,13931,13934],{"class":4007,"line":4092},[4005,13924,5343],{"class":4174},[4005,13926,3769],{"class":4182},[4005,13928,5348],{"class":4302},[4005,13930,4611],{"class":4182},[4005,13932,13933],{"class":4330},"\"✅ Email валідний (містить @)\"",[4005,13935,4482],{"class":4182},[4005,13937,13938],{"class":4007,"line":4098},[4005,13939,5127],{"class":4182},[4005,13941,13942],{"class":4007,"line":4104},[4005,13943,5214],{"class":4182},[4005,13945,13946],{"class":4007,"line":4110},[4005,13947,13948],{"class":4190},"    \u002F\u002F 2. ContainsAny — чи містить ХОЧА Б ОДИН символ зі списку\n",[4005,13950,13951,13954,13956],{"class":4007,"line":4937},[4005,13952,13953],{"class":4174},"    dangerousChars",[4005,13955,4314],{"class":4182},[4005,13957,13958],{"class":4330},"\"';--\"\n",[4005,13960,13961,13963,13965,13967,13969,13971,13974,13976,13979],{"class":4007,"line":4942},[4005,13962,5104],{"class":4836},[4005,13964,12676],{"class":4174},[4005,13966,3769],{"class":4182},[4005,13968,13789],{"class":4302},[4005,13970,4611],{"class":4182},[4005,13972,13973],{"class":4174},"query",[4005,13975,3836],{"class":4182},[4005,13977,13978],{"class":4174},"dangerousChars",[4005,13980,12789],{"class":4182},[4005,13982,13983,13985,13987,13989,13991,13994],{"class":4007,"line":4947},[4005,13984,5343],{"class":4174},[4005,13986,3769],{"class":4182},[4005,13988,5348],{"class":4302},[4005,13990,4611],{"class":4182},[4005,13992,13993],{"class":4330},"\"⚠️  Підозра на SQL-ін'єкцію!\"",[4005,13995,4482],{"class":4182},[4005,13997,13998],{"class":4007,"line":4953},[4005,13999,5127],{"class":4182},[4005,14001,14002],{"class":4007,"line":4960},[4005,14003,5214],{"class":4182},[4005,14005,14006],{"class":4007,"line":4973},[4005,14007,14008],{"class":4190},"    \u002F\u002F 3. ContainsRune — чи містить конкретну руну (символ Unicode)\n",[4005,14010,14011,14013,14015,14017,14019,14021,14024,14026,14029],{"class":4007,"line":4985},[4005,14012,5104],{"class":4836},[4005,14014,12676],{"class":4174},[4005,14016,3769],{"class":4182},[4005,14018,13792],{"class":4302},[4005,14020,4611],{"class":4182},[4005,14022,14023],{"class":4174},"logLine",[4005,14025,3836],{"class":4182},[4005,14027,14028],{"class":4330},"'🔥'",[4005,14030,12789],{"class":4182},[4005,14032,14033,14035,14037,14039,14041,14044],{"class":4007,"line":7813},[4005,14034,5343],{"class":4174},[4005,14036,3769],{"class":4182},[4005,14038,5348],{"class":4302},[4005,14040,4611],{"class":4182},[4005,14042,14043],{"class":4330},"\"Критична помилка!\"",[4005,14045,4482],{"class":4182},[4005,14047,14048],{"class":4007,"line":7819},[4005,14049,5127],{"class":4182},[4005,14051,14052],{"class":4007,"line":7826},[4005,14053,5214],{"class":4182},[4005,14055,14056],{"class":4007,"line":7839},[4005,14057,14058],{"class":4190},"    \u002F\u002F 4. Count — скільки разів зустрічається підрядок\n",[4005,14060,14061,14063,14065],{"class":4007,"line":7864},[4005,14062,11425],{"class":4174},[4005,14064,4314],{"class":4182},[4005,14066,14067],{"class":4330},"\"Go Go Go!\"\n",[4005,14069,14070,14073,14075,14077,14079,14082,14084,14086,14088,14090],{"class":4007,"line":7872},[4005,14071,14072],{"class":4174},"    count",[4005,14074,4314],{"class":4182},[4005,14076,12438],{"class":4174},[4005,14078,3769],{"class":4182},[4005,14080,14081],{"class":4302},"Count",[4005,14083,4611],{"class":4182},[4005,14085,3989],{"class":4174},[4005,14087,3836],{"class":4182},[4005,14089,11710],{"class":4330},[4005,14091,4482],{"class":4182},[4005,14093,14094,14096,14098,14100,14102,14105,14107,14110,14112,14114,14116,14118,14120],{"class":4007,"line":7881},[4005,14095,5370],{"class":4174},[4005,14097,3769],{"class":4182},[4005,14099,7945],{"class":4302},[4005,14101,4611],{"class":4182},[4005,14103,14104],{"class":4330},"\"Слово 'Go' зустрічається ",[4005,14106,7959],{"class":4174},[4005,14108,14109],{"class":4330}," рази",[4005,14111,7965],{"class":7964},[4005,14113,7968],{"class":4330},[4005,14115,3836],{"class":4182},[4005,14117,7189],{"class":4174},[4005,14119,5196],{"class":4182},[4005,14121,14122],{"class":4190},"\u002F\u002F 3\n",[4005,14124,14125],{"class":4007,"line":7890},[4005,14126,4078],{"class":4182},[3908,14128,14129],{},[3871,14130,13297],{},[3984,14132,14134],{"className":4162,"code":14133,"language":4164,"meta":3992,"style":3992},"func Contains(s, substr string) bool\nfunc ContainsAny(s, chars string) bool\nfunc ContainsRune(s string, r rune) bool\nfunc Count(s, substr string) int\n",[3753,14135,14136,14158,14180,14203],{"__ignoreMap":3992},[4005,14137,14138,14140,14143,14145,14147,14149,14152,14154,14156],{"class":4007,"line":4008},[4005,14139,4299],{"class":4171},[4005,14141,14142],{"class":4302}," Contains",[4005,14144,4611],{"class":4182},[4005,14146,7550],{"class":4174},[4005,14148,3836],{"class":4182},[4005,14150,14151],{"class":4174},"substr",[4005,14153,4237],{"class":4178},[4005,14155,4498],{"class":4182},[4005,14157,13325],{"class":4178},[4005,14159,14160,14162,14165,14167,14169,14171,14174,14176,14178],{"class":4007,"line":4014},[4005,14161,4299],{"class":4171},[4005,14163,14164],{"class":4302}," ContainsAny",[4005,14166,4611],{"class":4182},[4005,14168,7550],{"class":4174},[4005,14170,3836],{"class":4182},[4005,14172,14173],{"class":4174},"chars",[4005,14175,4237],{"class":4178},[4005,14177,4498],{"class":4182},[4005,14179,13325],{"class":4178},[4005,14181,14182,14184,14187,14189,14191,14193,14195,14197,14199,14201],{"class":4007,"line":4020},[4005,14183,4299],{"class":4171},[4005,14185,14186],{"class":4302}," ContainsRune",[4005,14188,4611],{"class":4182},[4005,14190,7550],{"class":4174},[4005,14192,4237],{"class":4178},[4005,14194,3836],{"class":4182},[4005,14196,12146],{"class":4174},[4005,14198,12339],{"class":4178},[4005,14200,4498],{"class":4182},[4005,14202,13325],{"class":4178},[4005,14204,14205,14207,14210,14212,14214,14216,14218,14220,14222],{"class":4007,"line":4026},[4005,14206,4299],{"class":4171},[4005,14208,14209],{"class":4302}," Count",[4005,14211,4611],{"class":4182},[4005,14213,7550],{"class":4174},[4005,14215,3836],{"class":4182},[4005,14217,14151],{"class":4174},[4005,14219,4237],{"class":4178},[4005,14221,4498],{"class":4182},[4005,14223,14224],{"class":4178},"int\n",[12536,14226,14227,14586,14590],{"icon":12743,"label":2367},[3984,14228,14230],{"className":12746,"code":14229,"language":12748,"meta":3992,"style":3992},"public class StringSearch {\n    public static void main(String[] args) {\n        String email = \"user@example.com\";\n        String query = \"SELECT * FROM users\";\n        String logLine = \"[ERROR] Database connection failed\";\n        \n        \u002F\u002F 1. contains — чи містить підрядок\n        if (email.contains(\"@\")) {\n            System.out.println(\"✅ Email валідний (містить @)\");\n        }\n        \n        \u002F\u002F 2. Немає ContainsAny — треба писати вручну\n        String dangerousChars = \"';--\";\n        boolean hasDangerous = false;\n        for (char c : dangerousChars.toCharArray()) {\n            if (query.indexOf(c) != -1) {\n                hasDangerous = true;\n                break;\n            }\n        }\n        if (hasDangerous) {\n            System.out.println(\"⚠️  Підозра на SQL-ін'єкцію!\");\n        }\n        \n        \u002F\u002F 3. Пошук частоти входження — вручну або Apache Commons\n        String text = \"Go Go Go!\";\n        int count = text.split(\"Go\", -1).length - 1;\n        System.out.printf(\"Слово 'Go' зустрічається %d рази\\n\", count);  \u002F\u002F 3\n    }\n}\n",[3753,14231,14232,14243,14263,14277,14291,14305,14309,14314,14333,14351,14355,14359,14364,14378,14392,14417,14438,14447,14454,14459,14463,14470,14488,14492,14496,14501,14514,14551,14578,14582],{"__ignoreMap":3992},[4005,14233,14234,14236,14238,14241],{"class":4007,"line":4008},[4005,14235,12755],{"class":4171},[4005,14237,12758],{"class":4171},[4005,14239,14240],{"class":4178}," StringSearch",[4005,14242,5073],{"class":4182},[4005,14244,14245,14247,14249,14251,14253,14255,14257,14259,14261],{"class":4007,"line":4014},[4005,14246,12768],{"class":4171},[4005,14248,12771],{"class":4171},[4005,14250,12774],{"class":4178},[4005,14252,5764],{"class":4302},[4005,14254,4611],{"class":4182},[4005,14256,7343],{"class":4178},[4005,14258,12783],{"class":4182},[4005,14260,12786],{"class":4174},[4005,14262,12789],{"class":4182},[4005,14264,14265,14267,14270,14272,14275],{"class":4007,"line":4020},[4005,14266,12794],{"class":4178},[4005,14268,14269],{"class":4174}," email",[4005,14271,4183],{"class":4182},[4005,14273,14274],{"class":4330},"\"user@example.com\"",[4005,14276,12805],{"class":4182},[4005,14278,14279,14281,14284,14286,14289],{"class":4007,"line":4026},[4005,14280,12794],{"class":4178},[4005,14282,14283],{"class":4174}," query",[4005,14285,4183],{"class":4182},[4005,14287,14288],{"class":4330},"\"SELECT * FROM users\"",[4005,14290,12805],{"class":4182},[4005,14292,14293,14295,14298,14300,14303],{"class":4007,"line":4032},[4005,14294,12794],{"class":4178},[4005,14296,14297],{"class":4174}," logLine",[4005,14299,4183],{"class":4182},[4005,14301,14302],{"class":4330},"\"[ERROR] Database connection failed\"",[4005,14304,12805],{"class":4182},[4005,14306,14307],{"class":4007,"line":4039},[4005,14308,12810],{"class":4182},[4005,14310,14311],{"class":4007,"line":4045},[4005,14312,14313],{"class":4190},"        \u002F\u002F 1. contains — чи містить підрядок\n",[4005,14315,14316,14318,14320,14322,14324,14327,14329,14331],{"class":4007,"line":4051},[4005,14317,12892],{"class":4836},[4005,14319,4761],{"class":4182},[4005,14321,13913],{"class":4174},[4005,14323,3769],{"class":4182},[4005,14325,14326],{"class":4302},"contains",[4005,14328,4611],{"class":4182},[4005,14330,13918],{"class":4330},[4005,14332,10732],{"class":4182},[4005,14334,14335,14337,14339,14341,14343,14345,14347,14349],{"class":4007,"line":4057},[4005,14336,12917],{"class":4174},[4005,14338,3769],{"class":4182},[4005,14340,12820],{"class":4174},[4005,14342,3769],{"class":4182},[4005,14344,12825],{"class":4302},[4005,14346,4611],{"class":4182},[4005,14348,13933],{"class":4330},[4005,14350,12932],{"class":4182},[4005,14352,14353],{"class":4007,"line":4063},[4005,14354,12937],{"class":4182},[4005,14356,14357],{"class":4007,"line":4069},[4005,14358,12810],{"class":4182},[4005,14360,14361],{"class":4007,"line":4075},[4005,14362,14363],{"class":4190},"        \u002F\u002F 2. Немає ContainsAny — треба писати вручну\n",[4005,14365,14366,14368,14371,14373,14376],{"class":4007,"line":4081},[4005,14367,12794],{"class":4178},[4005,14369,14370],{"class":4174}," dangerousChars",[4005,14372,4183],{"class":4182},[4005,14374,14375],{"class":4330},"\"';--\"",[4005,14377,12805],{"class":4182},[4005,14379,14380,14383,14386,14388,14390],{"class":4007,"line":4086},[4005,14381,14382],{"class":4178},"        boolean",[4005,14384,14385],{"class":4174}," hasDangerous",[4005,14387,4183],{"class":4182},[4005,14389,4206],{"class":4171},[4005,14391,12805],{"class":4182},[4005,14393,14394,14397,14399,14402,14404,14407,14409,14411,14414],{"class":4007,"line":4092},[4005,14395,14396],{"class":4836},"        for",[4005,14398,4761],{"class":4182},[4005,14400,14401],{"class":4178},"char",[4005,14403,6103],{"class":4174},[4005,14405,14406],{"class":4836}," :",[4005,14408,14370],{"class":4174},[4005,14410,3769],{"class":4182},[4005,14412,14413],{"class":4302},"toCharArray",[4005,14415,14416],{"class":4182},"()) {\n",[4005,14418,14419,14422,14424,14426,14428,14431,14434,14436],{"class":4007,"line":4098},[4005,14420,14421],{"class":4836},"            if",[4005,14423,4761],{"class":4182},[4005,14425,13973],{"class":4174},[4005,14427,3769],{"class":4182},[4005,14429,14430],{"class":4302},"indexOf",[4005,14432,14433],{"class":4182},"(c) != -",[4005,14435,4393],{"class":4186},[4005,14437,12789],{"class":4182},[4005,14439,14440,14443,14445],{"class":4007,"line":4104},[4005,14441,14442],{"class":4182},"                hasDangerous = ",[4005,14444,4689],{"class":4171},[4005,14446,12805],{"class":4182},[4005,14448,14449,14452],{"class":4007,"line":4110},[4005,14450,14451],{"class":4836},"                break",[4005,14453,12805],{"class":4182},[4005,14455,14456],{"class":4007,"line":4937},[4005,14457,14458],{"class":4182},"            }\n",[4005,14460,14461],{"class":4007,"line":4942},[4005,14462,12937],{"class":4182},[4005,14464,14465,14467],{"class":4007,"line":4947},[4005,14466,12892],{"class":4836},[4005,14468,14469],{"class":4182}," (hasDangerous) {\n",[4005,14471,14472,14474,14476,14478,14480,14482,14484,14486],{"class":4007,"line":4953},[4005,14473,12917],{"class":4174},[4005,14475,3769],{"class":4182},[4005,14477,12820],{"class":4174},[4005,14479,3769],{"class":4182},[4005,14481,12825],{"class":4302},[4005,14483,4611],{"class":4182},[4005,14485,13993],{"class":4330},[4005,14487,12932],{"class":4182},[4005,14489,14490],{"class":4007,"line":4960},[4005,14491,12937],{"class":4182},[4005,14493,14494],{"class":4007,"line":4973},[4005,14495,12810],{"class":4182},[4005,14497,14498],{"class":4007,"line":4985},[4005,14499,14500],{"class":4190},"        \u002F\u002F 3. Пошук частоти входження — вручну або Apache Commons\n",[4005,14502,14503,14505,14507,14509,14512],{"class":4007,"line":7813},[4005,14504,12794],{"class":4178},[4005,14506,12354],{"class":4174},[4005,14508,4183],{"class":4182},[4005,14510,14511],{"class":4330},"\"Go Go Go!\"",[4005,14513,12805],{"class":4182},[4005,14515,14516,14519,14521,14523,14525,14527,14530,14532,14534,14537,14539,14541,14544,14547,14549],{"class":4007,"line":7819},[4005,14517,14518],{"class":4178},"        int",[4005,14520,7160],{"class":4174},[4005,14522,4183],{"class":4182},[4005,14524,3989],{"class":4174},[4005,14526,3769],{"class":4182},[4005,14528,14529],{"class":4302},"split",[4005,14531,4611],{"class":4182},[4005,14533,11710],{"class":4330},[4005,14535,14536],{"class":4182},", -",[4005,14538,4393],{"class":4186},[4005,14540,3826],{"class":4182},[4005,14542,14543],{"class":4174},"length",[4005,14545,14546],{"class":4182}," - ",[4005,14548,4393],{"class":4186},[4005,14550,12805],{"class":4182},[4005,14552,14553,14555,14557,14559,14561,14564,14566,14569,14571,14573,14576],{"class":4007,"line":7826},[4005,14554,12815],{"class":4174},[4005,14556,3769],{"class":4182},[4005,14558,12820],{"class":4174},[4005,14560,3769],{"class":4182},[4005,14562,14563],{"class":4302},"printf",[4005,14565,4611],{"class":4182},[4005,14567,14568],{"class":4330},"\"Слово 'Go' зустрічається %d рази",[4005,14570,7965],{"class":7964},[4005,14572,7968],{"class":4330},[4005,14574,14575],{"class":4182},", count);  ",[4005,14577,14122],{"class":4190},[4005,14579,14580],{"class":4007,"line":7839},[4005,14581,5127],{"class":4182},[4005,14583,14584],{"class":4007,"line":7864},[4005,14585,4078],{"class":4182},[3908,14587,14588],{},[3871,14589,12950],{},[3746,14591,14592,14600,14614],{},[3749,14593,14594,14599],{},[3871,14595,14596,14597],{},"Немає ",[3753,14598,13789],{}," — треба писати цикл або використовувати regex",[3749,14601,14602,14606,14607,14610,14611],{},[3871,14603,14596,14604],{},[3753,14605,14081],{}," — треба ",[3753,14608,14609],{},"split()"," або Apache Commons ",[3753,14612,14613],{},"StringUtils.countMatches()",[3749,14615,14616,3836,14622,14625],{},[3871,14617,14618,14621],{},[3753,14619,14620],{},"contains()"," — метод",[3753,14623,14624],{},"strings.Contains()"," — функція",[3900,14627],{},[9014,14629,14631,14632,3836,14635,3836,14638,3836,14641],{"id":14630},"пошук-індексу-index-lastindex-indexany-lastindexany","Пошук індексу: ",[3753,14633,14634],{},"Index",[3753,14636,14637],{},"LastIndex",[3753,14639,14640],{},"IndexAny",[3753,14642,14643],{},"LastIndexAny",[3908,14645,14646],{},[3871,14647,14648],{},"Для чого:",[3746,14650,14651,14656,14661],{},[3749,14652,14653,14654,5032],{},"Знайти позицію першого входження (",[3753,14655,14634],{},[3749,14657,14658,14659,5032],{},"Знайти позицію останнього входження (",[3753,14660,14637],{},[3749,14662,14663,14664,5032],{},"Знайти будь-який символ зі списку (",[3753,14665,14640],{},[12533,14667,14668,15144],{},[12536,14669,14670,15046,15051],{"icon":12538,"label":12539},[3984,14671,14673],{"className":4162,"code":14672,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n)\n\nfunc main() {\n    path := \"\u002Fhome\u002Fuser\u002Fdocuments\u002Ffile.txt\"\n    url := \"https:\u002F\u002Fapi.example.com\u002Fv1\u002Fusers?page=2&limit=10\"\n    \n    \u002F\u002F 1. Index — індекс першого входження\n    atIndex := strings.Index(\"user@example.com\", \"@\")\n    fmt.Println(\"Позиція @:\", atIndex)  \u002F\u002F 4\n    \n    \u002F\u002F 2. LastIndex — індекс останнього входження\n    lastSlash := strings.LastIndex(path, \"\u002F\")\n    filename := path[lastSlash+1:]\n    fmt.Println(\"Ім'я файлу:\", filename)  \u002F\u002F file.txt\n    \n    \u002F\u002F 3. IndexAny — індекс ПЕРШОГО з будь-якого символу\n    firstSpecial := strings.IndexAny(url, \"?&\")\n    fmt.Println(\"Перший спецсимвол на позиції:\", firstSpecial)  \u002F\u002F 35 (позиція '?')\n    \n    \u002F\u002F 4. LastIndexAny — індекс ОСТАННЬОГО з будь-якого символу\n    lastSpecial := strings.LastIndexAny(url, \"?&\")\n    fmt.Println(\"Останній спецсимвол на позиції:\", lastSpecial)  \u002F\u002F 42 (позиція '&')\n    \n    \u002F\u002F 5. Якщо не знайдено — повертається -1\n    notFound := strings.Index(\"Hello\", \"xyz\")\n    if notFound == -1 {\n        fmt.Println(\"Підрядок не знайдено\")\n    }\n}\n",[3753,14674,14675,14681,14685,14691,14695,14699,14703,14707,14715,14725,14734,14738,14743,14766,14789,14793,14798,14822,14843,14865,14869,14874,14898,14921,14925,14930,14953,14976,14980,14985,15009,15023,15038,15042],{"__ignoreMap":3992},[4005,14676,14677,14679],{"class":4007,"line":4008},[4005,14678,5739],{"class":4171},[4005,14680,5742],{"class":4178},[4005,14682,14683],{"class":4007,"line":4014},[4005,14684,4036],{"emptyLinePlaceholder":4035},[4005,14686,14687,14689],{"class":4007,"line":4020},[4005,14688,3917],{"class":4836},[4005,14690,4439],{"class":4182},[4005,14692,14693],{"class":4007,"line":4026},[4005,14694,4843],{"class":4330},[4005,14696,14697],{"class":4007,"line":4032},[4005,14698,12569],{"class":4330},[4005,14700,14701],{"class":4007,"line":4039},[4005,14702,4482],{"class":4182},[4005,14704,14705],{"class":4007,"line":4045},[4005,14706,4036],{"emptyLinePlaceholder":4035},[4005,14708,14709,14711,14713],{"class":4007,"line":4051},[4005,14710,4299],{"class":4171},[4005,14712,5764],{"class":4302},[4005,14714,4306],{"class":4182},[4005,14716,14717,14720,14722],{"class":4007,"line":4057},[4005,14718,14719],{"class":4174},"    path",[4005,14721,4314],{"class":4182},[4005,14723,14724],{"class":4330},"\"\u002Fhome\u002Fuser\u002Fdocuments\u002Ffile.txt\"\n",[4005,14726,14727,14729,14731],{"class":4007,"line":4063},[4005,14728,13070],{"class":4174},[4005,14730,4314],{"class":4182},[4005,14732,14733],{"class":4330},"\"https:\u002F\u002Fapi.example.com\u002Fv1\u002Fusers?page=2&limit=10\"\n",[4005,14735,14736],{"class":4007,"line":4069},[4005,14737,5214],{"class":4182},[4005,14739,14740],{"class":4007,"line":4075},[4005,14741,14742],{"class":4190},"    \u002F\u002F 1. Index — індекс першого входження\n",[4005,14744,14745,14748,14750,14752,14754,14756,14758,14760,14762,14764],{"class":4007,"line":4081},[4005,14746,14747],{"class":4174},"    atIndex",[4005,14749,4314],{"class":4182},[4005,14751,12438],{"class":4174},[4005,14753,3769],{"class":4182},[4005,14755,14634],{"class":4302},[4005,14757,4611],{"class":4182},[4005,14759,14274],{"class":4330},[4005,14761,3836],{"class":4182},[4005,14763,13918],{"class":4330},[4005,14765,4482],{"class":4182},[4005,14767,14768,14770,14772,14774,14776,14779,14781,14784,14786],{"class":4007,"line":4086},[4005,14769,5370],{"class":4174},[4005,14771,3769],{"class":4182},[4005,14773,5348],{"class":4302},[4005,14775,4611],{"class":4182},[4005,14777,14778],{"class":4330},"\"Позиція @:\"",[4005,14780,3836],{"class":4182},[4005,14782,14783],{"class":4174},"atIndex",[4005,14785,5196],{"class":4182},[4005,14787,14788],{"class":4190},"\u002F\u002F 4\n",[4005,14790,14791],{"class":4007,"line":4092},[4005,14792,5214],{"class":4182},[4005,14794,14795],{"class":4007,"line":4098},[4005,14796,14797],{"class":4190},"    \u002F\u002F 2. LastIndex — індекс останнього входження\n",[4005,14799,14800,14803,14805,14807,14809,14811,14813,14815,14817,14820],{"class":4007,"line":4104},[4005,14801,14802],{"class":4174},"    lastSlash",[4005,14804,4314],{"class":4182},[4005,14806,12438],{"class":4174},[4005,14808,3769],{"class":4182},[4005,14810,14637],{"class":4302},[4005,14812,4611],{"class":4182},[4005,14814,5064],{"class":4174},[4005,14816,3836],{"class":4182},[4005,14818,14819],{"class":4330},"\"\u002F\"",[4005,14821,4482],{"class":4182},[4005,14823,14824,14826,14828,14830,14832,14835,14838,14840],{"class":4007,"line":4110},[4005,14825,13080],{"class":4174},[4005,14827,4314],{"class":4182},[4005,14829,5064],{"class":4174},[4005,14831,11561],{"class":4182},[4005,14833,14834],{"class":4174},"lastSlash",[4005,14836,14837],{"class":4182},"+",[4005,14839,4393],{"class":4186},[4005,14841,14842],{"class":4182},":]\n",[4005,14844,14845,14847,14849,14851,14853,14856,14858,14860,14862],{"class":4007,"line":4937},[4005,14846,5370],{"class":4174},[4005,14848,3769],{"class":4182},[4005,14850,5348],{"class":4302},[4005,14852,4611],{"class":4182},[4005,14854,14855],{"class":4330},"\"Ім'я файлу:\"",[4005,14857,3836],{"class":4182},[4005,14859,13169],{"class":4174},[4005,14861,5196],{"class":4182},[4005,14863,14864],{"class":4190},"\u002F\u002F file.txt\n",[4005,14866,14867],{"class":4007,"line":4942},[4005,14868,5214],{"class":4182},[4005,14870,14871],{"class":4007,"line":4947},[4005,14872,14873],{"class":4190},"    \u002F\u002F 3. IndexAny — індекс ПЕРШОГО з будь-якого символу\n",[4005,14875,14876,14879,14881,14883,14885,14887,14889,14891,14893,14896],{"class":4007,"line":4953},[4005,14877,14878],{"class":4174},"    firstSpecial",[4005,14880,4314],{"class":4182},[4005,14882,12438],{"class":4174},[4005,14884,3769],{"class":4182},[4005,14886,14640],{"class":4302},[4005,14888,4611],{"class":4182},[4005,14890,13119],{"class":4174},[4005,14892,3836],{"class":4182},[4005,14894,14895],{"class":4330},"\"?&\"",[4005,14897,4482],{"class":4182},[4005,14899,14900,14902,14904,14906,14908,14911,14913,14916,14918],{"class":4007,"line":4960},[4005,14901,5370],{"class":4174},[4005,14903,3769],{"class":4182},[4005,14905,5348],{"class":4302},[4005,14907,4611],{"class":4182},[4005,14909,14910],{"class":4330},"\"Перший спецсимвол на позиції:\"",[4005,14912,3836],{"class":4182},[4005,14914,14915],{"class":4174},"firstSpecial",[4005,14917,5196],{"class":4182},[4005,14919,14920],{"class":4190},"\u002F\u002F 35 (позиція '?')\n",[4005,14922,14923],{"class":4007,"line":4973},[4005,14924,5214],{"class":4182},[4005,14926,14927],{"class":4007,"line":4985},[4005,14928,14929],{"class":4190},"    \u002F\u002F 4. LastIndexAny — індекс ОСТАННЬОГО з будь-якого символу\n",[4005,14931,14932,14935,14937,14939,14941,14943,14945,14947,14949,14951],{"class":4007,"line":7813},[4005,14933,14934],{"class":4174},"    lastSpecial",[4005,14936,4314],{"class":4182},[4005,14938,12438],{"class":4174},[4005,14940,3769],{"class":4182},[4005,14942,14643],{"class":4302},[4005,14944,4611],{"class":4182},[4005,14946,13119],{"class":4174},[4005,14948,3836],{"class":4182},[4005,14950,14895],{"class":4330},[4005,14952,4482],{"class":4182},[4005,14954,14955,14957,14959,14961,14963,14966,14968,14971,14973],{"class":4007,"line":7819},[4005,14956,5370],{"class":4174},[4005,14958,3769],{"class":4182},[4005,14960,5348],{"class":4302},[4005,14962,4611],{"class":4182},[4005,14964,14965],{"class":4330},"\"Останній спецсимвол на позиції:\"",[4005,14967,3836],{"class":4182},[4005,14969,14970],{"class":4174},"lastSpecial",[4005,14972,5196],{"class":4182},[4005,14974,14975],{"class":4190},"\u002F\u002F 42 (позиція '&')\n",[4005,14977,14978],{"class":4007,"line":7826},[4005,14979,5214],{"class":4182},[4005,14981,14982],{"class":4007,"line":7839},[4005,14983,14984],{"class":4190},"    \u002F\u002F 5. Якщо не знайдено — повертається -1\n",[4005,14986,14987,14990,14992,14994,14996,14998,15000,15002,15004,15007],{"class":4007,"line":7864},[4005,14988,14989],{"class":4174},"    notFound",[4005,14991,4314],{"class":4182},[4005,14993,12438],{"class":4174},[4005,14995,3769],{"class":4182},[4005,14997,14634],{"class":4302},[4005,14999,4611],{"class":4182},[4005,15001,11329],{"class":4330},[4005,15003,3836],{"class":4182},[4005,15005,15006],{"class":4330},"\"xyz\"",[4005,15008,4482],{"class":4182},[4005,15010,15011,15013,15016,15019,15021],{"class":4007,"line":7872},[4005,15012,5104],{"class":4836},[4005,15014,15015],{"class":4174}," notFound",[4005,15017,15018],{"class":4182}," == -",[4005,15020,4393],{"class":4186},[4005,15022,5073],{"class":4182},[4005,15024,15025,15027,15029,15031,15033,15036],{"class":4007,"line":7881},[4005,15026,5343],{"class":4174},[4005,15028,3769],{"class":4182},[4005,15030,5348],{"class":4302},[4005,15032,4611],{"class":4182},[4005,15034,15035],{"class":4330},"\"Підрядок не знайдено\"",[4005,15037,4482],{"class":4182},[4005,15039,15040],{"class":4007,"line":7890},[4005,15041,5127],{"class":4182},[4005,15043,15044],{"class":4007,"line":7895},[4005,15045,4078],{"class":4182},[3908,15047,15048],{},[3871,15049,15050],{},"Таблиця функцій:",[5991,15052,15053,15068],{},[5994,15054,15055],{},[5997,15056,15057,15059,15062,15065],{},[6000,15058,8718],{},[6000,15060,15061],{},"Шукає",[6000,15063,15064],{},"Повертає",[6000,15066,15067],{},"Якщо не знайдено",[6010,15069,15070,15089,15107,15126],{},[5997,15071,15072,15077,15082,15085],{},[6015,15073,15074],{},[3753,15075,15076],{},"Index(s, substr)",[6015,15078,15079,15080],{},"Перше входження ",[3753,15081,14151],{},[6015,15083,15084],{},"Індекс першого байта",[6015,15086,15087],{},[3753,15088,9046],{},[5997,15090,15091,15096,15101,15103],{},[6015,15092,15093],{},[3753,15094,15095],{},"LastIndex(s, substr)",[6015,15097,15098,15099],{},"Останнє входження ",[3753,15100,14151],{},[6015,15102,15084],{},[6015,15104,15105],{},[3753,15106,9046],{},[5997,15108,15109,15114,15119,15122],{},[6015,15110,15111],{},[3753,15112,15113],{},"IndexAny(s, chars)",[6015,15115,15116,15117],{},"Перший символ зі ",[3753,15118,14173],{},[6015,15120,15121],{},"Індекс символу",[6015,15123,15124],{},[3753,15125,9046],{},[5997,15127,15128,15133,15138,15140],{},[6015,15129,15130],{},[3753,15131,15132],{},"LastIndexAny(s, chars)",[6015,15134,15135,15136],{},"Останній символ зі ",[3753,15137,14173],{},[6015,15139,15121],{},[6015,15141,15142],{},[3753,15143,9046],{},[12536,15145,15146,15526,15530],{"icon":12743,"label":2367},[3984,15147,15149],{"className":12746,"code":15148,"language":12748,"meta":3992,"style":3992},"public class StringIndexing {\n    public static void main(String[] args) {\n        String path = \"\u002Fhome\u002Fuser\u002Fdocuments\u002Ffile.txt\";\n        String url = \"https:\u002F\u002Fapi.example.com\u002Fv1\u002Fusers?page=2&limit=10\";\n        \n        \u002F\u002F 1. indexOf — індекс першого входження\n        int atIndex = \"user@example.com\".indexOf(\"@\");\n        System.out.println(\"Позиція @: \" + atIndex);  \u002F\u002F 4\n        \n        \u002F\u002F 2. lastIndexOf — індекс останнього входження\n        int lastSlash = path.lastIndexOf(\"\u002F\");\n        String filename = path.substring(lastSlash + 1);\n        System.out.println(\"Ім'я файлу: \" + filename);  \u002F\u002F file.txt\n        \n        \u002F\u002F 3. Немає IndexAny — треба regex або цикл\n        int firstSpecial = -1;\n        for (int i = 0; i \u003C url.length(); i++) {\n            if (url.charAt(i) == '?' || url.charAt(i) == '&') {\n                firstSpecial = i;\n                break;\n            }\n        }\n        System.out.println(\"Перший спецсимвол на позиції: \" + firstSpecial);\n        \n        \u002F\u002F 4. Якщо не знайдено — повертається -1\n        int notFound = \"Hello\".indexOf(\"xyz\");\n        if (notFound == -1) {\n            System.out.println(\"Підрядок не знайдено\");\n        }\n    }\n}\n",[3753,15150,15151,15162,15182,15196,15209,15213,15218,15239,15261,15265,15270,15292,15313,15335,15339,15344,15357,15383,15417,15422,15428,15432,15436,15456,15460,15465,15485,15496,15514,15518,15522],{"__ignoreMap":3992},[4005,15152,15153,15155,15157,15160],{"class":4007,"line":4008},[4005,15154,12755],{"class":4171},[4005,15156,12758],{"class":4171},[4005,15158,15159],{"class":4178}," StringIndexing",[4005,15161,5073],{"class":4182},[4005,15163,15164,15166,15168,15170,15172,15174,15176,15178,15180],{"class":4007,"line":4014},[4005,15165,12768],{"class":4171},[4005,15167,12771],{"class":4171},[4005,15169,12774],{"class":4178},[4005,15171,5764],{"class":4302},[4005,15173,4611],{"class":4182},[4005,15175,7343],{"class":4178},[4005,15177,12783],{"class":4182},[4005,15179,12786],{"class":4174},[4005,15181,12789],{"class":4182},[4005,15183,15184,15186,15189,15191,15194],{"class":4007,"line":4020},[4005,15185,12794],{"class":4178},[4005,15187,15188],{"class":4174}," path",[4005,15190,4183],{"class":4182},[4005,15192,15193],{"class":4330},"\"\u002Fhome\u002Fuser\u002Fdocuments\u002Ffile.txt\"",[4005,15195,12805],{"class":4182},[4005,15197,15198,15200,15202,15204,15207],{"class":4007,"line":4026},[4005,15199,12794],{"class":4178},[4005,15201,13421],{"class":4174},[4005,15203,4183],{"class":4182},[4005,15205,15206],{"class":4330},"\"https:\u002F\u002Fapi.example.com\u002Fv1\u002Fusers?page=2&limit=10\"",[4005,15208,12805],{"class":4182},[4005,15210,15211],{"class":4007,"line":4032},[4005,15212,12810],{"class":4182},[4005,15214,15215],{"class":4007,"line":4039},[4005,15216,15217],{"class":4190},"        \u002F\u002F 1. indexOf — індекс першого входження\n",[4005,15219,15220,15222,15225,15227,15229,15231,15233,15235,15237],{"class":4007,"line":4045},[4005,15221,14518],{"class":4178},[4005,15223,15224],{"class":4174}," atIndex",[4005,15226,4183],{"class":4182},[4005,15228,14274],{"class":4330},[4005,15230,3769],{"class":4182},[4005,15232,14430],{"class":4302},[4005,15234,4611],{"class":4182},[4005,15236,13918],{"class":4330},[4005,15238,12932],{"class":4182},[4005,15240,15241,15243,15245,15247,15249,15251,15253,15256,15259],{"class":4007,"line":4051},[4005,15242,12815],{"class":4174},[4005,15244,3769],{"class":4182},[4005,15246,12820],{"class":4174},[4005,15248,3769],{"class":4182},[4005,15250,12825],{"class":4302},[4005,15252,4611],{"class":4182},[4005,15254,15255],{"class":4330},"\"Позиція @: \"",[4005,15257,15258],{"class":4182}," + atIndex);  ",[4005,15260,14788],{"class":4190},[4005,15262,15263],{"class":4007,"line":4057},[4005,15264,12810],{"class":4182},[4005,15266,15267],{"class":4007,"line":4063},[4005,15268,15269],{"class":4190},"        \u002F\u002F 2. lastIndexOf — індекс останнього входження\n",[4005,15271,15272,15274,15277,15279,15281,15283,15286,15288,15290],{"class":4007,"line":4069},[4005,15273,14518],{"class":4178},[4005,15275,15276],{"class":4174}," lastSlash",[4005,15278,4183],{"class":4182},[4005,15280,5064],{"class":4174},[4005,15282,3769],{"class":4182},[4005,15284,15285],{"class":4302},"lastIndexOf",[4005,15287,4611],{"class":4182},[4005,15289,14819],{"class":4330},[4005,15291,12932],{"class":4182},[4005,15293,15294,15296,15298,15300,15302,15304,15306,15309,15311],{"class":4007,"line":4075},[4005,15295,12794],{"class":4178},[4005,15297,13435],{"class":4174},[4005,15299,4183],{"class":4182},[4005,15301,5064],{"class":4174},[4005,15303,3769],{"class":4182},[4005,15305,10908],{"class":4302},[4005,15307,15308],{"class":4182},"(lastSlash + ",[4005,15310,4393],{"class":4186},[4005,15312,12932],{"class":4182},[4005,15314,15315,15317,15319,15321,15323,15325,15327,15330,15333],{"class":4007,"line":4081},[4005,15316,12815],{"class":4174},[4005,15318,3769],{"class":4182},[4005,15320,12820],{"class":4174},[4005,15322,3769],{"class":4182},[4005,15324,12825],{"class":4302},[4005,15326,4611],{"class":4182},[4005,15328,15329],{"class":4330},"\"Ім'я файлу: \"",[4005,15331,15332],{"class":4182}," + filename);  ",[4005,15334,14864],{"class":4190},[4005,15336,15337],{"class":4007,"line":4086},[4005,15338,12810],{"class":4182},[4005,15340,15341],{"class":4007,"line":4092},[4005,15342,15343],{"class":4190},"        \u002F\u002F 3. Немає IndexAny — треба regex або цикл\n",[4005,15345,15346,15348,15351,15353,15355],{"class":4007,"line":4098},[4005,15347,14518],{"class":4178},[4005,15349,15350],{"class":4174}," firstSpecial",[4005,15352,9464],{"class":4182},[4005,15354,4393],{"class":4186},[4005,15356,12805],{"class":4182},[4005,15358,15359,15361,15363,15365,15367,15369,15371,15374,15376,15378,15380],{"class":4007,"line":4104},[4005,15360,14396],{"class":4836},[4005,15362,4761],{"class":4182},[4005,15364,4158],{"class":4178},[4005,15366,6592],{"class":4174},[4005,15368,4183],{"class":4182},[4005,15370,4200],{"class":4186},[4005,15372,15373],{"class":4182},"; i \u003C ",[4005,15375,13119],{"class":4174},[4005,15377,3769],{"class":4182},[4005,15379,14543],{"class":4302},[4005,15381,15382],{"class":4182},"(); i++) {\n",[4005,15384,15385,15387,15389,15391,15393,15396,15399,15402,15404,15406,15408,15410,15412,15415],{"class":4007,"line":4110},[4005,15386,14421],{"class":4836},[4005,15388,4761],{"class":4182},[4005,15390,13119],{"class":4174},[4005,15392,3769],{"class":4182},[4005,15394,15395],{"class":4302},"charAt",[4005,15397,15398],{"class":4182},"(i) == ",[4005,15400,15401],{"class":4330},"'?'",[4005,15403,10230],{"class":4182},[4005,15405,13119],{"class":4174},[4005,15407,3769],{"class":4182},[4005,15409,15395],{"class":4302},[4005,15411,15398],{"class":4182},[4005,15413,15414],{"class":4330},"'&'",[4005,15416,12789],{"class":4182},[4005,15418,15419],{"class":4007,"line":4937},[4005,15420,15421],{"class":4182},"                firstSpecial = i;\n",[4005,15423,15424,15426],{"class":4007,"line":4942},[4005,15425,14451],{"class":4836},[4005,15427,12805],{"class":4182},[4005,15429,15430],{"class":4007,"line":4947},[4005,15431,14458],{"class":4182},[4005,15433,15434],{"class":4007,"line":4953},[4005,15435,12937],{"class":4182},[4005,15437,15438,15440,15442,15444,15446,15448,15450,15453],{"class":4007,"line":4960},[4005,15439,12815],{"class":4174},[4005,15441,3769],{"class":4182},[4005,15443,12820],{"class":4174},[4005,15445,3769],{"class":4182},[4005,15447,12825],{"class":4302},[4005,15449,4611],{"class":4182},[4005,15451,15452],{"class":4330},"\"Перший спецсимвол на позиції: \"",[4005,15454,15455],{"class":4182}," + firstSpecial);\n",[4005,15457,15458],{"class":4007,"line":4973},[4005,15459,12810],{"class":4182},[4005,15461,15462],{"class":4007,"line":4985},[4005,15463,15464],{"class":4190},"        \u002F\u002F 4. Якщо не знайдено — повертається -1\n",[4005,15466,15467,15469,15471,15473,15475,15477,15479,15481,15483],{"class":4007,"line":7813},[4005,15468,14518],{"class":4178},[4005,15470,15015],{"class":4174},[4005,15472,4183],{"class":4182},[4005,15474,11329],{"class":4330},[4005,15476,3769],{"class":4182},[4005,15478,14430],{"class":4302},[4005,15480,4611],{"class":4182},[4005,15482,15006],{"class":4330},[4005,15484,12932],{"class":4182},[4005,15486,15487,15489,15492,15494],{"class":4007,"line":7819},[4005,15488,12892],{"class":4836},[4005,15490,15491],{"class":4182}," (notFound == -",[4005,15493,4393],{"class":4186},[4005,15495,12789],{"class":4182},[4005,15497,15498,15500,15502,15504,15506,15508,15510,15512],{"class":4007,"line":7826},[4005,15499,12917],{"class":4174},[4005,15501,3769],{"class":4182},[4005,15503,12820],{"class":4174},[4005,15505,3769],{"class":4182},[4005,15507,12825],{"class":4302},[4005,15509,4611],{"class":4182},[4005,15511,15035],{"class":4330},[4005,15513,12932],{"class":4182},[4005,15515,15516],{"class":4007,"line":7839},[4005,15517,12937],{"class":4182},[4005,15519,15520],{"class":4007,"line":7864},[4005,15521,5127],{"class":4182},[4005,15523,15524],{"class":4007,"line":7872},[4005,15525,4078],{"class":4182},[3908,15527,15528],{},[3871,15529,12950],{},[3746,15531,15532,15543,15552],{},[3749,15533,15534,15542],{},[3871,15535,15536,3836,15539],{},[3753,15537,15538],{},"indexOf()",[3753,15540,15541],{},"lastIndexOf()"," — методи, а не окремі функції",[3749,15544,15545,14599],{},[3871,15546,14596,15547,15549,15550],{},[3753,15548,14640],{}," \u002F ",[3753,15551,14643],{},[3749,15553,15554,15558,15559],{},[3871,15555,15556],{},[3753,15557,13671],{}," для вирізання, Go — синтаксис ",[3753,15560,15561],{},"[start:end]",[5427,15563,15564,15569],{},[3908,15565,15566],{},[3871,15567,15568],{},"Важливо: індекси — це байти, не символи!",[3984,15570,15572],{"className":4162,"code":15571,"language":4164,"meta":3992,"style":3992},"text := \"Привіт\"\nindex := strings.Index(text, \"і\")\nfmt.Println(index)  \u002F\u002F 4 (не 2!), бо кирилиця = 2 байти на літеру\n\n\u002F\u002F Щоб працювати з індексами символів, використовуйте []rune:\nrunes := []rune(text)\n\u002F\u002F Тепер runes[2] == 'и'\n",[3753,15573,15574,15583,15606,15623,15627,15632,15646],{"__ignoreMap":3992},[4005,15575,15576,15578,15580],{"class":4007,"line":4008},[4005,15577,3989],{"class":4174},[4005,15579,4314],{"class":4182},[4005,15581,15582],{"class":4330},"\"Привіт\"\n",[4005,15584,15585,15587,15589,15591,15593,15595,15597,15599,15601,15604],{"class":4007,"line":4014},[4005,15586,12419],{"class":4174},[4005,15588,4314],{"class":4182},[4005,15590,12438],{"class":4174},[4005,15592,3769],{"class":4182},[4005,15594,14634],{"class":4302},[4005,15596,4611],{"class":4182},[4005,15598,3989],{"class":4174},[4005,15600,3836],{"class":4182},[4005,15602,15603],{"class":4330},"\"і\"",[4005,15605,4482],{"class":4182},[4005,15607,15608,15610,15612,15614,15616,15618,15620],{"class":4007,"line":4020},[4005,15609,3785],{"class":4174},[4005,15611,3769],{"class":4182},[4005,15613,5348],{"class":4302},[4005,15615,4611],{"class":4182},[4005,15617,12419],{"class":4174},[4005,15619,5196],{"class":4182},[4005,15621,15622],{"class":4190},"\u002F\u002F 4 (не 2!), бо кирилиця = 2 байти на літеру\n",[4005,15624,15625],{"class":4007,"line":4026},[4005,15626,4036],{"emptyLinePlaceholder":4035},[4005,15628,15629],{"class":4007,"line":4032},[4005,15630,15631],{"class":4190},"\u002F\u002F Щоб працювати з індексами символів, використовуйте []rune:\n",[4005,15633,15634,15636,15638,15640,15642,15644],{"class":4007,"line":4039},[4005,15635,11616],{"class":4174},[4005,15637,11583],{"class":4182},[4005,15639,8242],{"class":4178},[4005,15641,4611],{"class":4182},[4005,15643,3989],{"class":4174},[4005,15645,4482],{"class":4182},[4005,15647,15648],{"class":4007,"line":4045},[4005,15649,15650],{"class":4190},"\u002F\u002F Тепер runes[2] == 'и'\n",[3900,15652],{},[3976,15654,15656],{"id":15655},"частина-3-заміна-підрядків-та-розбиття-на-частини","Частина 3: Заміна підрядків та розбиття на частини",[9014,15658,15660,15661,3836,15664],{"id":15659},"заміна-тексту-replace-replaceall","Заміна тексту: ",[3753,15662,15663],{},"Replace",[3753,15665,15666],{},"ReplaceAll",[3908,15668,15669],{},[3871,15670,12993],{},[3746,15672,15673,15676,15679,15682],{},[3749,15674,15675],{},"Санітизація користувацького вводу",[3749,15677,15678],{},"Підготовка SQL-параметрів",[3749,15680,15681],{},"Формування URL з параметрами",[3749,15683,15684],{},"Заміна плейсхолдерів у шаблонах",[12533,15686,15687,16183],{},[12536,15688,15689,16087,16091,16153,16158],{"icon":12538,"label":12539},[3984,15690,15692],{"className":4162,"code":15691,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n)\n\nfunc main() {\n    template := \"Hello, {{name}}! Welcome to {{service}}.\"\n    \n    \u002F\u002F 1. ReplaceAll — заміняє ВСІ входження\n    result := strings.ReplaceAll(template, \"{{name}}\", \"Олег\")\n    result = strings.ReplaceAll(result, \"{{service}}\", \"Go Backend\")\n    fmt.Println(result)\n    \u002F\u002F Вивід: Hello, Олег! Welcome to Go Backend.\n    \n    \u002F\u002F 2. Replace — заміняє ПЕРШІ N входжень\n    text := \"Go Go Go!\"\n    onlyFirst := strings.Replace(text, \"Go\", \"Java\", 1)\n    fmt.Println(onlyFirst)  \u002F\u002F Java Go Go!\n    \n    firstTwo := strings.Replace(text, \"Go\", \"Rust\", 2)\n    fmt.Println(firstTwo)   \u002F\u002F Rust Rust Go!\n    \n    \u002F\u002F 3. Replace з n = -1 працює як ReplaceAll\n    all := strings.Replace(text, \"Go\", \"Python\", -1)\n    fmt.Println(all)        \u002F\u002F Python Python Python!\n    \n    \u002F\u002F 4. Приклад: санітизація SQL (НЕ РОБІТЬ ТАК!)\n    userInput := \"admin' OR '1'='1\"\n    \u002F\u002F ⚠️ ПОГАНО! Використовуйте параметризовані запити!\n    sanitized := strings.ReplaceAll(userInput, \"'\", \"''\")\n    fmt.Println(sanitized)  \u002F\u002F admin'' OR ''1''=''1\n}\n",[3753,15693,15694,15700,15704,15710,15714,15718,15722,15726,15734,15744,15748,15753,15783,15811,15825,15830,15834,15839,15847,15879,15897,15901,15933,15951,15955,15960,15992,16011,16015,16020,16030,16035,16065,16083],{"__ignoreMap":3992},[4005,15695,15696,15698],{"class":4007,"line":4008},[4005,15697,5739],{"class":4171},[4005,15699,5742],{"class":4178},[4005,15701,15702],{"class":4007,"line":4014},[4005,15703,4036],{"emptyLinePlaceholder":4035},[4005,15705,15706,15708],{"class":4007,"line":4020},[4005,15707,3917],{"class":4836},[4005,15709,4439],{"class":4182},[4005,15711,15712],{"class":4007,"line":4026},[4005,15713,4843],{"class":4330},[4005,15715,15716],{"class":4007,"line":4032},[4005,15717,12569],{"class":4330},[4005,15719,15720],{"class":4007,"line":4039},[4005,15721,4482],{"class":4182},[4005,15723,15724],{"class":4007,"line":4045},[4005,15725,4036],{"emptyLinePlaceholder":4035},[4005,15727,15728,15730,15732],{"class":4007,"line":4051},[4005,15729,4299],{"class":4171},[4005,15731,5764],{"class":4302},[4005,15733,4306],{"class":4182},[4005,15735,15736,15739,15741],{"class":4007,"line":4057},[4005,15737,15738],{"class":4174},"    template",[4005,15740,4314],{"class":4182},[4005,15742,15743],{"class":4330},"\"Hello, {{name}}! Welcome to {{service}}.\"\n",[4005,15745,15746],{"class":4007,"line":4063},[4005,15747,5214],{"class":4182},[4005,15749,15750],{"class":4007,"line":4069},[4005,15751,15752],{"class":4190},"    \u002F\u002F 1. ReplaceAll — заміняє ВСІ входження\n",[4005,15754,15755,15758,15760,15762,15764,15766,15768,15771,15773,15776,15778,15781],{"class":4007,"line":4075},[4005,15756,15757],{"class":4174},"    result",[4005,15759,4314],{"class":4182},[4005,15761,12438],{"class":4174},[4005,15763,3769],{"class":4182},[4005,15765,15666],{"class":4302},[4005,15767,4611],{"class":4182},[4005,15769,15770],{"class":4174},"template",[4005,15772,3836],{"class":4182},[4005,15774,15775],{"class":4330},"\"{{name}}\"",[4005,15777,3836],{"class":4182},[4005,15779,15780],{"class":4330},"\"Олег\"",[4005,15782,4482],{"class":4182},[4005,15784,15785,15787,15789,15791,15793,15795,15797,15799,15801,15804,15806,15809],{"class":4007,"line":4081},[4005,15786,15757],{"class":4174},[4005,15788,4183],{"class":4182},[4005,15790,12438],{"class":4174},[4005,15792,3769],{"class":4182},[4005,15794,15666],{"class":4302},[4005,15796,4611],{"class":4182},[4005,15798,5695],{"class":4174},[4005,15800,3836],{"class":4182},[4005,15802,15803],{"class":4330},"\"{{service}}\"",[4005,15805,3836],{"class":4182},[4005,15807,15808],{"class":4330},"\"Go Backend\"",[4005,15810,4482],{"class":4182},[4005,15812,15813,15815,15817,15819,15821,15823],{"class":4007,"line":4086},[4005,15814,5370],{"class":4174},[4005,15816,3769],{"class":4182},[4005,15818,5348],{"class":4302},[4005,15820,4611],{"class":4182},[4005,15822,5695],{"class":4174},[4005,15824,4482],{"class":4182},[4005,15826,15827],{"class":4007,"line":4092},[4005,15828,15829],{"class":4190},"    \u002F\u002F Вивід: Hello, Олег! Welcome to Go Backend.\n",[4005,15831,15832],{"class":4007,"line":4098},[4005,15833,5214],{"class":4182},[4005,15835,15836],{"class":4007,"line":4104},[4005,15837,15838],{"class":4190},"    \u002F\u002F 2. Replace — заміняє ПЕРШІ N входжень\n",[4005,15840,15841,15843,15845],{"class":4007,"line":4110},[4005,15842,11425],{"class":4174},[4005,15844,4314],{"class":4182},[4005,15846,14067],{"class":4330},[4005,15848,15849,15852,15854,15856,15858,15860,15862,15864,15866,15868,15870,15873,15875,15877],{"class":4007,"line":4937},[4005,15850,15851],{"class":4174},"    onlyFirst",[4005,15853,4314],{"class":4182},[4005,15855,12438],{"class":4174},[4005,15857,3769],{"class":4182},[4005,15859,15663],{"class":4302},[4005,15861,4611],{"class":4182},[4005,15863,3989],{"class":4174},[4005,15865,3836],{"class":4182},[4005,15867,11710],{"class":4330},[4005,15869,3836],{"class":4182},[4005,15871,15872],{"class":4330},"\"Java\"",[4005,15874,3836],{"class":4182},[4005,15876,4393],{"class":4186},[4005,15878,4482],{"class":4182},[4005,15880,15881,15883,15885,15887,15889,15892,15894],{"class":4007,"line":4942},[4005,15882,5370],{"class":4174},[4005,15884,3769],{"class":4182},[4005,15886,5348],{"class":4302},[4005,15888,4611],{"class":4182},[4005,15890,15891],{"class":4174},"onlyFirst",[4005,15893,5196],{"class":4182},[4005,15895,15896],{"class":4190},"\u002F\u002F Java Go Go!\n",[4005,15898,15899],{"class":4007,"line":4947},[4005,15900,5214],{"class":4182},[4005,15902,15903,15906,15908,15910,15912,15914,15916,15918,15920,15922,15924,15927,15929,15931],{"class":4007,"line":4953},[4005,15904,15905],{"class":4174},"    firstTwo",[4005,15907,4314],{"class":4182},[4005,15909,12438],{"class":4174},[4005,15911,3769],{"class":4182},[4005,15913,15663],{"class":4302},[4005,15915,4611],{"class":4182},[4005,15917,3989],{"class":4174},[4005,15919,3836],{"class":4182},[4005,15921,11710],{"class":4330},[4005,15923,3836],{"class":4182},[4005,15925,15926],{"class":4330},"\"Rust\"",[4005,15928,3836],{"class":4182},[4005,15930,4398],{"class":4186},[4005,15932,4482],{"class":4182},[4005,15934,15935,15937,15939,15941,15943,15946,15948],{"class":4007,"line":4960},[4005,15936,5370],{"class":4174},[4005,15938,3769],{"class":4182},[4005,15940,5348],{"class":4302},[4005,15942,4611],{"class":4182},[4005,15944,15945],{"class":4174},"firstTwo",[4005,15947,5381],{"class":4182},[4005,15949,15950],{"class":4190},"\u002F\u002F Rust Rust Go!\n",[4005,15952,15953],{"class":4007,"line":4973},[4005,15954,5214],{"class":4182},[4005,15956,15957],{"class":4007,"line":4985},[4005,15958,15959],{"class":4190},"    \u002F\u002F 3. Replace з n = -1 працює як ReplaceAll\n",[4005,15961,15962,15965,15967,15969,15971,15973,15975,15977,15979,15981,15983,15986,15988,15990],{"class":4007,"line":7813},[4005,15963,15964],{"class":4174},"    all",[4005,15966,4314],{"class":4182},[4005,15968,12438],{"class":4174},[4005,15970,3769],{"class":4182},[4005,15972,15663],{"class":4302},[4005,15974,4611],{"class":4182},[4005,15976,3989],{"class":4174},[4005,15978,3836],{"class":4182},[4005,15980,11710],{"class":4330},[4005,15982,3836],{"class":4182},[4005,15984,15985],{"class":4330},"\"Python\"",[4005,15987,14536],{"class":4182},[4005,15989,4393],{"class":4186},[4005,15991,4482],{"class":4182},[4005,15993,15994,15996,15998,16000,16002,16005,16008],{"class":4007,"line":7819},[4005,15995,5370],{"class":4174},[4005,15997,3769],{"class":4182},[4005,15999,5348],{"class":4302},[4005,16001,4611],{"class":4182},[4005,16003,16004],{"class":4174},"all",[4005,16006,16007],{"class":4182},")        ",[4005,16009,16010],{"class":4190},"\u002F\u002F Python Python Python!\n",[4005,16012,16013],{"class":4007,"line":7826},[4005,16014,5214],{"class":4182},[4005,16016,16017],{"class":4007,"line":7839},[4005,16018,16019],{"class":4190},"    \u002F\u002F 4. Приклад: санітизація SQL (НЕ РОБІТЬ ТАК!)\n",[4005,16021,16022,16025,16027],{"class":4007,"line":7864},[4005,16023,16024],{"class":4174},"    userInput",[4005,16026,4314],{"class":4182},[4005,16028,16029],{"class":4330},"\"admin' OR '1'='1\"\n",[4005,16031,16032],{"class":4007,"line":7872},[4005,16033,16034],{"class":4190},"    \u002F\u002F ⚠️ ПОГАНО! Використовуйте параметризовані запити!\n",[4005,16036,16037,16040,16042,16044,16046,16048,16050,16053,16055,16058,16060,16063],{"class":4007,"line":7881},[4005,16038,16039],{"class":4174},"    sanitized",[4005,16041,4314],{"class":4182},[4005,16043,12438],{"class":4174},[4005,16045,3769],{"class":4182},[4005,16047,15666],{"class":4302},[4005,16049,4611],{"class":4182},[4005,16051,16052],{"class":4174},"userInput",[4005,16054,3836],{"class":4182},[4005,16056,16057],{"class":4330},"\"'\"",[4005,16059,3836],{"class":4182},[4005,16061,16062],{"class":4330},"\"''\"",[4005,16064,4482],{"class":4182},[4005,16066,16067,16069,16071,16073,16075,16078,16080],{"class":4007,"line":7890},[4005,16068,5370],{"class":4174},[4005,16070,3769],{"class":4182},[4005,16072,5348],{"class":4302},[4005,16074,4611],{"class":4182},[4005,16076,16077],{"class":4174},"sanitized",[4005,16079,5196],{"class":4182},[4005,16081,16082],{"class":4190},"\u002F\u002F admin'' OR ''1''=''1\n",[4005,16084,16085],{"class":4007,"line":7895},[4005,16086,4078],{"class":4182},[3908,16088,16089],{},[3871,16090,13297],{},[3984,16092,16094],{"className":4162,"code":16093,"language":4164,"meta":3992,"style":3992},"func Replace(s, old, new string, n int) string\nfunc ReplaceAll(s, old, new string) string\n",[3753,16095,16096,16128],{"__ignoreMap":3992},[4005,16097,16098,16100,16103,16105,16107,16109,16112,16114,16116,16118,16120,16122,16124,16126],{"class":4007,"line":4008},[4005,16099,4299],{"class":4171},[4005,16101,16102],{"class":4302}," Replace",[4005,16104,4611],{"class":4182},[4005,16106,7550],{"class":4174},[4005,16108,3836],{"class":4182},[4005,16110,16111],{"class":4174},"old",[4005,16113,3836],{"class":4182},[4005,16115,3768],{"class":4174},[4005,16117,4237],{"class":4178},[4005,16119,3836],{"class":4182},[4005,16121,11101],{"class":4174},[4005,16123,4224],{"class":4178},[4005,16125,4498],{"class":4182},[4005,16127,7495],{"class":4178},[4005,16129,16130,16132,16135,16137,16139,16141,16143,16145,16147,16149,16151],{"class":4007,"line":4014},[4005,16131,4299],{"class":4171},[4005,16133,16134],{"class":4302}," ReplaceAll",[4005,16136,4611],{"class":4182},[4005,16138,7550],{"class":4174},[4005,16140,3836],{"class":4182},[4005,16142,16111],{"class":4174},[4005,16144,3836],{"class":4182},[4005,16146,3768],{"class":4174},[4005,16148,4237],{"class":4178},[4005,16150,4498],{"class":4182},[4005,16152,7495],{"class":4178},[3908,16154,16155],{},[3871,16156,16157],{},"Параметри:",[3746,16159,16160,16165,16170,16175],{},[3749,16161,16162,16164],{},[3753,16163,7550],{}," — вихідний рядок",[3749,16166,16167,16169],{},[3753,16168,16111],{}," — що шукаємо",[3749,16171,16172,16174],{},[3753,16173,3768],{}," — на що заміняємо",[3749,16176,16177,16179,16180,16182],{},[3753,16178,11101],{}," — кількість замін (",[3753,16181,9046],{}," = всі)",[12536,16184,16185,16495,16499],{"icon":12743,"label":2367},[3984,16186,16188],{"className":12746,"code":16187,"language":12748,"meta":3992,"style":3992},"public class StringReplace {\n    public static void main(String[] args) {\n        String template = \"Hello, {{name}}! Welcome to {{service}}.\";\n        \n        \u002F\u002F 1. replaceAll — заміняє ВСІ входження\n        String result = template.replaceAll(\"\\\\{\\\\{name\\\\}\\\\}\", \"Олег\");\n        result = result.replaceAll(\"\\\\{\\\\{service\\\\}\\\\}\", \"Go Backend\");\n        System.out.println(result);\n        \u002F\u002F Вивід: Hello, Олег! Welcome to Go Backend.\n        \n        \u002F\u002F 2. replaceFirst — заміняє ПЕРШЕ входження\n        String text = \"Go Go Go!\";\n        String onlyFirst = text.replaceFirst(\"Go\", \"Java\");\n        System.out.println(onlyFirst);  \u002F\u002F Java Go Go!\n        \n        \u002F\u002F 3. Немає Replace з лічильником — треба regex або цикл\n        \n        \u002F\u002F 4. replace (без All) — літеральна заміна\n        String userInput = \"admin' OR '1'='1\";\n        String sanitized = userInput.replace(\"'\", \"''\");\n        System.out.println(sanitized);  \u002F\u002F admin'' OR ''1''=''1\n    }\n}\n",[3753,16189,16190,16201,16221,16235,16239,16244,16290,16328,16343,16348,16352,16357,16369,16395,16412,16416,16421,16425,16430,16444,16470,16487,16491],{"__ignoreMap":3992},[4005,16191,16192,16194,16196,16199],{"class":4007,"line":4008},[4005,16193,12755],{"class":4171},[4005,16195,12758],{"class":4171},[4005,16197,16198],{"class":4178}," StringReplace",[4005,16200,5073],{"class":4182},[4005,16202,16203,16205,16207,16209,16211,16213,16215,16217,16219],{"class":4007,"line":4014},[4005,16204,12768],{"class":4171},[4005,16206,12771],{"class":4171},[4005,16208,12774],{"class":4178},[4005,16210,5764],{"class":4302},[4005,16212,4611],{"class":4182},[4005,16214,7343],{"class":4178},[4005,16216,12783],{"class":4182},[4005,16218,12786],{"class":4174},[4005,16220,12789],{"class":4182},[4005,16222,16223,16225,16228,16230,16233],{"class":4007,"line":4020},[4005,16224,12794],{"class":4178},[4005,16226,16227],{"class":4174}," template",[4005,16229,4183],{"class":4182},[4005,16231,16232],{"class":4330},"\"Hello, {{name}}! Welcome to {{service}}.\"",[4005,16234,12805],{"class":4182},[4005,16236,16237],{"class":4007,"line":4026},[4005,16238,12810],{"class":4182},[4005,16240,16241],{"class":4007,"line":4032},[4005,16242,16243],{"class":4190},"        \u002F\u002F 1. replaceAll — заміняє ВСІ входження\n",[4005,16245,16246,16248,16251,16253,16255,16257,16260,16262,16264,16266,16269,16271,16274,16276,16279,16281,16284,16286,16288],{"class":4007,"line":4039},[4005,16247,12794],{"class":4178},[4005,16249,16250],{"class":4174}," result",[4005,16252,4183],{"class":4182},[4005,16254,15770],{"class":4174},[4005,16256,3769],{"class":4182},[4005,16258,16259],{"class":4302},"replaceAll",[4005,16261,4611],{"class":4182},[4005,16263,7968],{"class":4330},[4005,16265,11066],{"class":7964},[4005,16267,16268],{"class":4330},"{",[4005,16270,11066],{"class":7964},[4005,16272,16273],{"class":4330},"{name",[4005,16275,11066],{"class":7964},[4005,16277,16278],{"class":4330},"}",[4005,16280,11066],{"class":7964},[4005,16282,16283],{"class":4330},"}\"",[4005,16285,3836],{"class":4182},[4005,16287,15780],{"class":4330},[4005,16289,12932],{"class":4182},[4005,16291,16292,16295,16297,16299,16301,16303,16305,16307,16309,16311,16314,16316,16318,16320,16322,16324,16326],{"class":4007,"line":4045},[4005,16293,16294],{"class":4182},"        result = ",[4005,16296,5695],{"class":4174},[4005,16298,3769],{"class":4182},[4005,16300,16259],{"class":4302},[4005,16302,4611],{"class":4182},[4005,16304,7968],{"class":4330},[4005,16306,11066],{"class":7964},[4005,16308,16268],{"class":4330},[4005,16310,11066],{"class":7964},[4005,16312,16313],{"class":4330},"{service",[4005,16315,11066],{"class":7964},[4005,16317,16278],{"class":4330},[4005,16319,11066],{"class":7964},[4005,16321,16283],{"class":4330},[4005,16323,3836],{"class":4182},[4005,16325,15808],{"class":4330},[4005,16327,12932],{"class":4182},[4005,16329,16330,16332,16334,16336,16338,16340],{"class":4007,"line":4051},[4005,16331,12815],{"class":4174},[4005,16333,3769],{"class":4182},[4005,16335,12820],{"class":4174},[4005,16337,3769],{"class":4182},[4005,16339,12825],{"class":4302},[4005,16341,16342],{"class":4182},"(result);\n",[4005,16344,16345],{"class":4007,"line":4057},[4005,16346,16347],{"class":4190},"        \u002F\u002F Вивід: Hello, Олег! Welcome to Go Backend.\n",[4005,16349,16350],{"class":4007,"line":4063},[4005,16351,12810],{"class":4182},[4005,16353,16354],{"class":4007,"line":4069},[4005,16355,16356],{"class":4190},"        \u002F\u002F 2. replaceFirst — заміняє ПЕРШЕ входження\n",[4005,16358,16359,16361,16363,16365,16367],{"class":4007,"line":4075},[4005,16360,12794],{"class":4178},[4005,16362,12354],{"class":4174},[4005,16364,4183],{"class":4182},[4005,16366,14511],{"class":4330},[4005,16368,12805],{"class":4182},[4005,16370,16371,16373,16376,16378,16380,16382,16385,16387,16389,16391,16393],{"class":4007,"line":4081},[4005,16372,12794],{"class":4178},[4005,16374,16375],{"class":4174}," onlyFirst",[4005,16377,4183],{"class":4182},[4005,16379,3989],{"class":4174},[4005,16381,3769],{"class":4182},[4005,16383,16384],{"class":4302},"replaceFirst",[4005,16386,4611],{"class":4182},[4005,16388,11710],{"class":4330},[4005,16390,3836],{"class":4182},[4005,16392,15872],{"class":4330},[4005,16394,12932],{"class":4182},[4005,16396,16397,16399,16401,16403,16405,16407,16410],{"class":4007,"line":4086},[4005,16398,12815],{"class":4174},[4005,16400,3769],{"class":4182},[4005,16402,12820],{"class":4174},[4005,16404,3769],{"class":4182},[4005,16406,12825],{"class":4302},[4005,16408,16409],{"class":4182},"(onlyFirst);  ",[4005,16411,15896],{"class":4190},[4005,16413,16414],{"class":4007,"line":4092},[4005,16415,12810],{"class":4182},[4005,16417,16418],{"class":4007,"line":4098},[4005,16419,16420],{"class":4190},"        \u002F\u002F 3. Немає Replace з лічильником — треба regex або цикл\n",[4005,16422,16423],{"class":4007,"line":4104},[4005,16424,12810],{"class":4182},[4005,16426,16427],{"class":4007,"line":4110},[4005,16428,16429],{"class":4190},"        \u002F\u002F 4. replace (без All) — літеральна заміна\n",[4005,16431,16432,16434,16437,16439,16442],{"class":4007,"line":4937},[4005,16433,12794],{"class":4178},[4005,16435,16436],{"class":4174}," userInput",[4005,16438,4183],{"class":4182},[4005,16440,16441],{"class":4330},"\"admin' OR '1'='1\"",[4005,16443,12805],{"class":4182},[4005,16445,16446,16448,16451,16453,16455,16457,16460,16462,16464,16466,16468],{"class":4007,"line":4942},[4005,16447,12794],{"class":4178},[4005,16449,16450],{"class":4174}," sanitized",[4005,16452,4183],{"class":4182},[4005,16454,16052],{"class":4174},[4005,16456,3769],{"class":4182},[4005,16458,16459],{"class":4302},"replace",[4005,16461,4611],{"class":4182},[4005,16463,16057],{"class":4330},[4005,16465,3836],{"class":4182},[4005,16467,16062],{"class":4330},[4005,16469,12932],{"class":4182},[4005,16471,16472,16474,16476,16478,16480,16482,16485],{"class":4007,"line":4947},[4005,16473,12815],{"class":4174},[4005,16475,3769],{"class":4182},[4005,16477,12820],{"class":4174},[4005,16479,3769],{"class":4182},[4005,16481,12825],{"class":4302},[4005,16483,16484],{"class":4182},"(sanitized);  ",[4005,16486,16082],{"class":4190},[4005,16488,16489],{"class":4007,"line":4953},[4005,16490,5127],{"class":4182},[4005,16492,16493],{"class":4007,"line":4960},[4005,16494,4078],{"class":4182},[3908,16496,16497],{},[3871,16498,12950],{},[3746,16500,16501,16514,16525],{},[3749,16502,16503,16509,16510,16513],{},[3871,16504,16505,16508],{},[3753,16506,16507],{},"replaceAll()"," приймає regex",", Go ",[3753,16511,16512],{},"ReplaceAll()"," — літеральний текст",[3749,16515,16516,16521,16522,16524],{},[3871,16517,16518],{},[3753,16519,16520],{},"replace()"," в Java = ",[3753,16523,16512],{}," в Go (всі входження)",[3749,16526,16527,16532],{},[3871,16528,14596,16529],{},[3753,16530,16531],{},"Replace(s, old, new, n)"," з лічильником",[4748,16534,16536,16541,16612],{"icon":16535},"i-lucide-shield-alert",[3908,16537,16538],{},[3871,16539,16540],{},"Безпека: чому не використовувати Replace для SQL?",[3984,16542,16544],{"className":4162,"code":16543,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ❌ ДУЖЕ НЕБЕЗПЕЧНО!\nuserInput := \"admin' OR '1'='1\"\nquery := \"SELECT * FROM users WHERE username = '\" + userInput + \"'\"\n\u002F\u002F SQL: SELECT * FROM users WHERE username = 'admin' OR '1'='1'\n\n\u002F\u002F ✅ ПРАВИЛЬНО: параметризовані запити\ndb.Query(\"SELECT * FROM users WHERE username = ?\", userInput)\n",[3753,16545,16546,16551,16559,16577,16582,16586,16591],{"__ignoreMap":3992},[4005,16547,16548],{"class":4007,"line":4008},[4005,16549,16550],{"class":4190},"\u002F\u002F ❌ ДУЖЕ НЕБЕЗПЕЧНО!\n",[4005,16552,16553,16555,16557],{"class":4007,"line":4014},[4005,16554,16052],{"class":4174},[4005,16556,4314],{"class":4182},[4005,16558,16029],{"class":4330},[4005,16560,16561,16563,16565,16568,16570,16572,16574],{"class":4007,"line":4020},[4005,16562,13973],{"class":4174},[4005,16564,4314],{"class":4182},[4005,16566,16567],{"class":4330},"\"SELECT * FROM users WHERE username = '\"",[4005,16569,6289],{"class":4182},[4005,16571,16052],{"class":4174},[4005,16573,6289],{"class":4182},[4005,16575,16576],{"class":4330},"\"'\"\n",[4005,16578,16579],{"class":4007,"line":4026},[4005,16580,16581],{"class":4190},"\u002F\u002F SQL: SELECT * FROM users WHERE username = 'admin' OR '1'='1'\n",[4005,16583,16584],{"class":4007,"line":4032},[4005,16585,4036],{"emptyLinePlaceholder":4035},[4005,16587,16588],{"class":4007,"line":4039},[4005,16589,16590],{"class":4190},"\u002F\u002F ✅ ПРАВИЛЬНО: параметризовані запити\n",[4005,16592,16593,16596,16598,16601,16603,16606,16608,16610],{"class":4007,"line":4045},[4005,16594,16595],{"class":4174},"db",[4005,16597,3769],{"class":4182},[4005,16599,16600],{"class":4302},"Query",[4005,16602,4611],{"class":4182},[4005,16604,16605],{"class":4330},"\"SELECT * FROM users WHERE username = ?\"",[4005,16607,3836],{"class":4182},[4005,16609,16052],{"class":4174},[4005,16611,4482],{"class":4182},[3908,16613,16614,16615,8512,16617,3826],{},"Replace не захищає від SQL-ін'єкції! Використовуйте параметризовані запити (",[3753,16616,6406],{},[3753,16618,16619],{},"$1",[3900,16621],{},[9014,16623,16625,16626,3836,16629,3836,16632],{"id":16624},"розбиття-на-частини-split-splitn-fields","Розбиття на частини: ",[3753,16627,16628],{},"Split",[3753,16630,16631],{},"SplitN",[3753,16633,16634],{},"Fields",[3908,16636,16637],{},[3871,16638,12993],{},[3746,16640,16641,16644,16647,16650],{},[3749,16642,16643],{},"Парсинг CSV",[3749,16645,16646],{},"Розбір командних прапорців",[3749,16648,16649],{},"Обробка шляхів файлів",[3749,16651,16652],{},"Парсинг HTTP-заголовків",[12533,16654,16655,17149],{},[12536,16656,16657,17063,17067],{"icon":12538,"label":12539},[3984,16658,16660],{"className":4162,"code":16659,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n)\n\nfunc main() {\n    \u002F\u002F 1. Split — розбиває на ВСІ частини\n    csv := \"John,Doe,30,Engineer\"\n    parts := strings.Split(csv, \",\")\n    fmt.Println(parts)  \u002F\u002F [John Doe 30 Engineer]\n    fmt.Printf(\"Ім'я: %s, Прізвище: %s\\n\", parts[0], parts[1])\n    \n    \u002F\u002F 2. SplitN — розбиває на ПЕРШІ N частин\n    path := \"\u002Fhome\u002Fuser\u002Fdocuments\u002Ffile.txt\"\n    components := strings.SplitN(path, \"\u002F\", 3)\n    fmt.Println(components)  \u002F\u002F [ home user\u002Fdocuments\u002Ffile.txt]\n    \u002F\u002F Перші 2 слеші розділили, решта — як є\n    \n    \u002F\u002F 3. Fields — розбиває по пробілах\u002Fтабах\u002Fпереносах\n    logLine := \"  2024-01-15  10:30:45   ERROR   Connection timeout  \"\n    fields := strings.Fields(logLine)\n    fmt.Println(fields)  \u002F\u002F [2024-01-15 10:30:45 ERROR Connection timeout]\n    \u002F\u002F Зайві пробіли автоматично видалені!\n    \n    \u002F\u002F 4. Обробка порожніх рядків\n    emptyTest := strings.Split(\"a,,c\", \",\")\n    fmt.Println(emptyTest)  \u002F\u002F [a  c] — порожній елемент залишається\n    \n    \u002F\u002F 5. Join — зворотна операція (склеювання)\n    words := []string{\"Go\", \"is\", \"awesome\"}\n    sentence := strings.Join(words, \" \")\n    fmt.Println(sentence)  \u002F\u002F Go is awesome\n}\n",[3753,16661,16662,16668,16672,16678,16682,16686,16690,16694,16702,16707,16717,16742,16760,16803,16807,16812,16820,16847,16865,16870,16874,16879,16888,16907,16925,16930,16934,16939,16963,16981,16985,16990,17015,17041,17059],{"__ignoreMap":3992},[4005,16663,16664,16666],{"class":4007,"line":4008},[4005,16665,5739],{"class":4171},[4005,16667,5742],{"class":4178},[4005,16669,16670],{"class":4007,"line":4014},[4005,16671,4036],{"emptyLinePlaceholder":4035},[4005,16673,16674,16676],{"class":4007,"line":4020},[4005,16675,3917],{"class":4836},[4005,16677,4439],{"class":4182},[4005,16679,16680],{"class":4007,"line":4026},[4005,16681,4843],{"class":4330},[4005,16683,16684],{"class":4007,"line":4032},[4005,16685,12569],{"class":4330},[4005,16687,16688],{"class":4007,"line":4039},[4005,16689,4482],{"class":4182},[4005,16691,16692],{"class":4007,"line":4045},[4005,16693,4036],{"emptyLinePlaceholder":4035},[4005,16695,16696,16698,16700],{"class":4007,"line":4051},[4005,16697,4299],{"class":4171},[4005,16699,5764],{"class":4302},[4005,16701,4306],{"class":4182},[4005,16703,16704],{"class":4007,"line":4057},[4005,16705,16706],{"class":4190},"    \u002F\u002F 1. Split — розбиває на ВСІ частини\n",[4005,16708,16709,16712,16714],{"class":4007,"line":4063},[4005,16710,16711],{"class":4174},"    csv",[4005,16713,4314],{"class":4182},[4005,16715,16716],{"class":4330},"\"John,Doe,30,Engineer\"\n",[4005,16718,16719,16722,16724,16726,16728,16730,16732,16735,16737,16740],{"class":4007,"line":4069},[4005,16720,16721],{"class":4174},"    parts",[4005,16723,4314],{"class":4182},[4005,16725,12438],{"class":4174},[4005,16727,3769],{"class":4182},[4005,16729,16628],{"class":4302},[4005,16731,4611],{"class":4182},[4005,16733,16734],{"class":4174},"csv",[4005,16736,3836],{"class":4182},[4005,16738,16739],{"class":4330},"\",\"",[4005,16741,4482],{"class":4182},[4005,16743,16744,16746,16748,16750,16752,16755,16757],{"class":4007,"line":4075},[4005,16745,5370],{"class":4174},[4005,16747,3769],{"class":4182},[4005,16749,5348],{"class":4302},[4005,16751,4611],{"class":4182},[4005,16753,16754],{"class":4174},"parts",[4005,16756,5196],{"class":4182},[4005,16758,16759],{"class":4190},"\u002F\u002F [John Doe 30 Engineer]\n",[4005,16761,16762,16764,16766,16768,16770,16773,16776,16779,16781,16783,16785,16787,16789,16791,16793,16795,16797,16799,16801],{"class":4007,"line":4081},[4005,16763,5370],{"class":4174},[4005,16765,3769],{"class":4182},[4005,16767,7945],{"class":4302},[4005,16769,4611],{"class":4182},[4005,16771,16772],{"class":4330},"\"Ім'я: ",[4005,16774,16775],{"class":4174},"%s",[4005,16777,16778],{"class":4330},", Прізвище: ",[4005,16780,16775],{"class":4174},[4005,16782,7965],{"class":7964},[4005,16784,7968],{"class":4330},[4005,16786,3836],{"class":4182},[4005,16788,16754],{"class":4174},[4005,16790,11561],{"class":4182},[4005,16792,4200],{"class":4186},[4005,16794,12048],{"class":4182},[4005,16796,16754],{"class":4174},[4005,16798,11561],{"class":4182},[4005,16800,4393],{"class":4186},[4005,16802,11566],{"class":4182},[4005,16804,16805],{"class":4007,"line":4086},[4005,16806,5214],{"class":4182},[4005,16808,16809],{"class":4007,"line":4092},[4005,16810,16811],{"class":4190},"    \u002F\u002F 2. SplitN — розбиває на ПЕРШІ N частин\n",[4005,16813,16814,16816,16818],{"class":4007,"line":4098},[4005,16815,14719],{"class":4174},[4005,16817,4314],{"class":4182},[4005,16819,14724],{"class":4330},[4005,16821,16822,16825,16827,16829,16831,16833,16835,16837,16839,16841,16843,16845],{"class":4007,"line":4104},[4005,16823,16824],{"class":4174},"    components",[4005,16826,4314],{"class":4182},[4005,16828,12438],{"class":4174},[4005,16830,3769],{"class":4182},[4005,16832,16631],{"class":4302},[4005,16834,4611],{"class":4182},[4005,16836,5064],{"class":4174},[4005,16838,3836],{"class":4182},[4005,16840,14819],{"class":4330},[4005,16842,3836],{"class":4182},[4005,16844,6286],{"class":4186},[4005,16846,4482],{"class":4182},[4005,16848,16849,16851,16853,16855,16857,16860,16862],{"class":4007,"line":4110},[4005,16850,5370],{"class":4174},[4005,16852,3769],{"class":4182},[4005,16854,5348],{"class":4302},[4005,16856,4611],{"class":4182},[4005,16858,16859],{"class":4174},"components",[4005,16861,5196],{"class":4182},[4005,16863,16864],{"class":4190},"\u002F\u002F [ home user\u002Fdocuments\u002Ffile.txt]\n",[4005,16866,16867],{"class":4007,"line":4937},[4005,16868,16869],{"class":4190},"    \u002F\u002F Перші 2 слеші розділили, решта — як є\n",[4005,16871,16872],{"class":4007,"line":4942},[4005,16873,5214],{"class":4182},[4005,16875,16876],{"class":4007,"line":4947},[4005,16877,16878],{"class":4190},"    \u002F\u002F 3. Fields — розбиває по пробілах\u002Fтабах\u002Fпереносах\n",[4005,16880,16881,16883,16885],{"class":4007,"line":4953},[4005,16882,13884],{"class":4174},[4005,16884,4314],{"class":4182},[4005,16886,16887],{"class":4330},"\"  2024-01-15  10:30:45   ERROR   Connection timeout  \"\n",[4005,16889,16890,16893,16895,16897,16899,16901,16903,16905],{"class":4007,"line":4960},[4005,16891,16892],{"class":4174},"    fields",[4005,16894,4314],{"class":4182},[4005,16896,12438],{"class":4174},[4005,16898,3769],{"class":4182},[4005,16900,16634],{"class":4302},[4005,16902,4611],{"class":4182},[4005,16904,14023],{"class":4174},[4005,16906,4482],{"class":4182},[4005,16908,16909,16911,16913,16915,16917,16920,16922],{"class":4007,"line":4973},[4005,16910,5370],{"class":4174},[4005,16912,3769],{"class":4182},[4005,16914,5348],{"class":4302},[4005,16916,4611],{"class":4182},[4005,16918,16919],{"class":4174},"fields",[4005,16921,5196],{"class":4182},[4005,16923,16924],{"class":4190},"\u002F\u002F [2024-01-15 10:30:45 ERROR Connection timeout]\n",[4005,16926,16927],{"class":4007,"line":4985},[4005,16928,16929],{"class":4190},"    \u002F\u002F Зайві пробіли автоматично видалені!\n",[4005,16931,16932],{"class":4007,"line":7813},[4005,16933,5214],{"class":4182},[4005,16935,16936],{"class":4007,"line":7819},[4005,16937,16938],{"class":4190},"    \u002F\u002F 4. Обробка порожніх рядків\n",[4005,16940,16941,16944,16946,16948,16950,16952,16954,16957,16959,16961],{"class":4007,"line":7826},[4005,16942,16943],{"class":4174},"    emptyTest",[4005,16945,4314],{"class":4182},[4005,16947,12438],{"class":4174},[4005,16949,3769],{"class":4182},[4005,16951,16628],{"class":4302},[4005,16953,4611],{"class":4182},[4005,16955,16956],{"class":4330},"\"a,,c\"",[4005,16958,3836],{"class":4182},[4005,16960,16739],{"class":4330},[4005,16962,4482],{"class":4182},[4005,16964,16965,16967,16969,16971,16973,16976,16978],{"class":4007,"line":7839},[4005,16966,5370],{"class":4174},[4005,16968,3769],{"class":4182},[4005,16970,5348],{"class":4302},[4005,16972,4611],{"class":4182},[4005,16974,16975],{"class":4174},"emptyTest",[4005,16977,5196],{"class":4182},[4005,16979,16980],{"class":4190},"\u002F\u002F [a  c] — порожній елемент залишається\n",[4005,16982,16983],{"class":4007,"line":7864},[4005,16984,5214],{"class":4182},[4005,16986,16987],{"class":4007,"line":7872},[4005,16988,16989],{"class":4190},"    \u002F\u002F 5. Join — зворотна операція (склеювання)\n",[4005,16991,16992,16995,16997,16999,17001,17003,17005,17008,17010,17013],{"class":4007,"line":7881},[4005,16993,16994],{"class":4174},"    words",[4005,16996,11583],{"class":4182},[4005,16998,7004],{"class":4178},[4005,17000,16268],{"class":4182},[4005,17002,11710],{"class":4330},[4005,17004,3836],{"class":4182},[4005,17006,17007],{"class":4330},"\"is\"",[4005,17009,3836],{"class":4182},[4005,17011,17012],{"class":4330},"\"awesome\"",[4005,17014,4078],{"class":4182},[4005,17016,17017,17020,17022,17024,17026,17029,17031,17034,17036,17039],{"class":4007,"line":7890},[4005,17018,17019],{"class":4174},"    sentence",[4005,17021,4314],{"class":4182},[4005,17023,12438],{"class":4174},[4005,17025,3769],{"class":4182},[4005,17027,17028],{"class":4302},"Join",[4005,17030,4611],{"class":4182},[4005,17032,17033],{"class":4174},"words",[4005,17035,3836],{"class":4182},[4005,17037,17038],{"class":4330},"\" \"",[4005,17040,4482],{"class":4182},[4005,17042,17043,17045,17047,17049,17051,17054,17056],{"class":4007,"line":7895},[4005,17044,5370],{"class":4174},[4005,17046,3769],{"class":4182},[4005,17048,5348],{"class":4302},[4005,17050,4611],{"class":4182},[4005,17052,17053],{"class":4174},"sentence",[4005,17055,5196],{"class":4182},[4005,17057,17058],{"class":4190},"\u002F\u002F Go is awesome\n",[4005,17060,17061],{"class":4007,"line":7900},[4005,17062,4078],{"class":4182},[3908,17064,17065],{},[3871,17066,15050],{},[5991,17068,17069,17084],{},[5994,17070,17071],{},[5997,17072,17073,17075,17078,17081],{},[6000,17074,8718],{},[6000,17076,17077],{},"Роздільник",[6000,17079,17080],{},"Кількість частин",[6000,17082,17083],{},"Особливості",[6010,17085,17086,17102,17119,17134],{},[5997,17087,17088,17093,17096,17099],{},[6015,17089,17090],{},[3753,17091,17092],{},"Split(s, sep)",[6015,17094,17095],{},"Будь-який рядок",[6015,17097,17098],{},"Всі",[6015,17100,17101],{},"Зберігає порожні елементи",[5997,17103,17104,17109,17111,17116],{},[6015,17105,17106],{},[3753,17107,17108],{},"SplitN(s, sep, n)",[6015,17110,17095],{},[6015,17112,17113,17114],{},"Перші ",[3753,17115,11101],{},[6015,17117,17118],{},"Останній елемент = решта",[5997,17120,17121,17126,17129,17131],{},[6015,17122,17123],{},[3753,17124,17125],{},"Fields(s)",[6015,17127,17128],{},"Пробіли\u002Fтаби\u002F\\n",[6015,17130,17098],{},[6015,17132,17133],{},"Ігнорує зайві пробіли",[5997,17135,17136,17141,17144,17146],{},[6015,17137,17138],{},[3753,17139,17140],{},"Join(slice, sep)",[6015,17142,17143],{},"—",[6015,17145,17143],{},[6015,17147,17148],{},"Об'єднує зріз у рядок",[12536,17150,17151,17532,17536],{"icon":12743,"label":2367},[3984,17152,17154],{"className":12746,"code":17153,"language":12748,"meta":3992,"style":3992},"import java.util.Arrays;\n\npublic class StringSplit {\n    public static void main(String[] args) {\n        \u002F\u002F 1. split — розбиває на ВСІ частини\n        String csv = \"John,Doe,30,Engineer\";\n        String[] parts = csv.split(\",\");\n        System.out.println(Arrays.toString(parts));  \u002F\u002F [John, Doe, 30, Engineer]\n        System.out.printf(\"Ім'я: %s, Прізвище: %s\\n\", parts[0], parts[1]);\n        \n        \u002F\u002F 2. split з ліміт — розбиває на ПЕРШІ N частин\n        String path = \"\u002Fhome\u002Fuser\u002Fdocuments\u002Ffile.txt\";\n        String[] components = path.split(\"\u002F\", 3);\n        System.out.println(Arrays.toString(components));  \u002F\u002F [, home, user\u002Fdocuments\u002Ffile.txt]\n        \n        \u002F\u002F 3. Немає Fields — треба split(\"\\\\s+\") або trim()\n        String logLine = \"  2024-01-15  10:30:45   ERROR   Connection timeout  \";\n        String[] fields = logLine.trim().split(\"\\\\s+\");\n        System.out.println(Arrays.toString(fields));\n        \n        \u002F\u002F 4. join — склеювання (Java 8+)\n        String[] words = {\"Go\", \"is\", \"awesome\"};\n        String sentence = String.join(\" \", words);\n        System.out.println(sentence);  \u002F\u002F Go is awesome\n    }\n}\n",[3753,17155,17156,17163,17167,17178,17198,17203,17217,17239,17267,17301,17305,17310,17322,17348,17374,17378,17383,17396,17428,17451,17455,17460,17484,17507,17524,17528],{"__ignoreMap":3992},[4005,17157,17158,17160],{"class":4007,"line":4008},[4005,17159,3917],{"class":4171},[4005,17161,17162],{"class":4182}," java.util.Arrays;\n",[4005,17164,17165],{"class":4007,"line":4014},[4005,17166,4036],{"emptyLinePlaceholder":4035},[4005,17168,17169,17171,17173,17176],{"class":4007,"line":4020},[4005,17170,12755],{"class":4171},[4005,17172,12758],{"class":4171},[4005,17174,17175],{"class":4178}," StringSplit",[4005,17177,5073],{"class":4182},[4005,17179,17180,17182,17184,17186,17188,17190,17192,17194,17196],{"class":4007,"line":4026},[4005,17181,12768],{"class":4171},[4005,17183,12771],{"class":4171},[4005,17185,12774],{"class":4178},[4005,17187,5764],{"class":4302},[4005,17189,4611],{"class":4182},[4005,17191,7343],{"class":4178},[4005,17193,12783],{"class":4182},[4005,17195,12786],{"class":4174},[4005,17197,12789],{"class":4182},[4005,17199,17200],{"class":4007,"line":4032},[4005,17201,17202],{"class":4190},"        \u002F\u002F 1. split — розбиває на ВСІ частини\n",[4005,17204,17205,17207,17210,17212,17215],{"class":4007,"line":4039},[4005,17206,12794],{"class":4178},[4005,17208,17209],{"class":4174}," csv",[4005,17211,4183],{"class":4182},[4005,17213,17214],{"class":4330},"\"John,Doe,30,Engineer\"",[4005,17216,12805],{"class":4182},[4005,17218,17219,17221,17223,17225,17227,17229,17231,17233,17235,17237],{"class":4007,"line":4045},[4005,17220,12794],{"class":4178},[4005,17222,12783],{"class":4182},[4005,17224,16754],{"class":4174},[4005,17226,4183],{"class":4182},[4005,17228,16734],{"class":4174},[4005,17230,3769],{"class":4182},[4005,17232,14529],{"class":4302},[4005,17234,4611],{"class":4182},[4005,17236,16739],{"class":4330},[4005,17238,12932],{"class":4182},[4005,17240,17241,17243,17245,17247,17249,17251,17253,17256,17258,17261,17264],{"class":4007,"line":4051},[4005,17242,12815],{"class":4174},[4005,17244,3769],{"class":4182},[4005,17246,12820],{"class":4174},[4005,17248,3769],{"class":4182},[4005,17250,12825],{"class":4302},[4005,17252,4611],{"class":4182},[4005,17254,17255],{"class":4174},"Arrays",[4005,17257,3769],{"class":4182},[4005,17259,17260],{"class":4302},"toString",[4005,17262,17263],{"class":4182},"(parts));  ",[4005,17265,17266],{"class":4190},"\u002F\u002F [John, Doe, 30, Engineer]\n",[4005,17268,17269,17271,17273,17275,17277,17279,17281,17284,17286,17288,17291,17293,17296,17298],{"class":4007,"line":4057},[4005,17270,12815],{"class":4174},[4005,17272,3769],{"class":4182},[4005,17274,12820],{"class":4174},[4005,17276,3769],{"class":4182},[4005,17278,14563],{"class":4302},[4005,17280,4611],{"class":4182},[4005,17282,17283],{"class":4330},"\"Ім'я: %s, Прізвище: %s",[4005,17285,7965],{"class":7964},[4005,17287,7968],{"class":4330},[4005,17289,17290],{"class":4182},", parts[",[4005,17292,4200],{"class":4186},[4005,17294,17295],{"class":4182},"], parts[",[4005,17297,4393],{"class":4186},[4005,17299,17300],{"class":4182},"]);\n",[4005,17302,17303],{"class":4007,"line":4063},[4005,17304,12810],{"class":4182},[4005,17306,17307],{"class":4007,"line":4069},[4005,17308,17309],{"class":4190},"        \u002F\u002F 2. split з ліміт — розбиває на ПЕРШІ N частин\n",[4005,17311,17312,17314,17316,17318,17320],{"class":4007,"line":4075},[4005,17313,12794],{"class":4178},[4005,17315,15188],{"class":4174},[4005,17317,4183],{"class":4182},[4005,17319,15193],{"class":4330},[4005,17321,12805],{"class":4182},[4005,17323,17324,17326,17328,17330,17332,17334,17336,17338,17340,17342,17344,17346],{"class":4007,"line":4081},[4005,17325,12794],{"class":4178},[4005,17327,12783],{"class":4182},[4005,17329,16859],{"class":4174},[4005,17331,4183],{"class":4182},[4005,17333,5064],{"class":4174},[4005,17335,3769],{"class":4182},[4005,17337,14529],{"class":4302},[4005,17339,4611],{"class":4182},[4005,17341,14819],{"class":4330},[4005,17343,3836],{"class":4182},[4005,17345,6286],{"class":4186},[4005,17347,12932],{"class":4182},[4005,17349,17350,17352,17354,17356,17358,17360,17362,17364,17366,17368,17371],{"class":4007,"line":4086},[4005,17351,12815],{"class":4174},[4005,17353,3769],{"class":4182},[4005,17355,12820],{"class":4174},[4005,17357,3769],{"class":4182},[4005,17359,12825],{"class":4302},[4005,17361,4611],{"class":4182},[4005,17363,17255],{"class":4174},[4005,17365,3769],{"class":4182},[4005,17367,17260],{"class":4302},[4005,17369,17370],{"class":4182},"(components));  ",[4005,17372,17373],{"class":4190},"\u002F\u002F [, home, user\u002Fdocuments\u002Ffile.txt]\n",[4005,17375,17376],{"class":4007,"line":4092},[4005,17377,12810],{"class":4182},[4005,17379,17380],{"class":4007,"line":4098},[4005,17381,17382],{"class":4190},"        \u002F\u002F 3. Немає Fields — треба split(\"\\\\s+\") або trim()\n",[4005,17384,17385,17387,17389,17391,17394],{"class":4007,"line":4104},[4005,17386,12794],{"class":4178},[4005,17388,14297],{"class":4174},[4005,17390,4183],{"class":4182},[4005,17392,17393],{"class":4330},"\"  2024-01-15  10:30:45   ERROR   Connection timeout  \"",[4005,17395,12805],{"class":4182},[4005,17397,17398,17400,17402,17404,17406,17408,17410,17413,17415,17417,17419,17421,17423,17426],{"class":4007,"line":4110},[4005,17399,12794],{"class":4178},[4005,17401,12783],{"class":4182},[4005,17403,16919],{"class":4174},[4005,17405,4183],{"class":4182},[4005,17407,14023],{"class":4174},[4005,17409,3769],{"class":4182},[4005,17411,17412],{"class":4302},"trim",[4005,17414,12903],{"class":4182},[4005,17416,14529],{"class":4302},[4005,17418,4611],{"class":4182},[4005,17420,7968],{"class":4330},[4005,17422,11066],{"class":7964},[4005,17424,17425],{"class":4330},"s+\"",[4005,17427,12932],{"class":4182},[4005,17429,17430,17432,17434,17436,17438,17440,17442,17444,17446,17448],{"class":4007,"line":4937},[4005,17431,12815],{"class":4174},[4005,17433,3769],{"class":4182},[4005,17435,12820],{"class":4174},[4005,17437,3769],{"class":4182},[4005,17439,12825],{"class":4302},[4005,17441,4611],{"class":4182},[4005,17443,17255],{"class":4174},[4005,17445,3769],{"class":4182},[4005,17447,17260],{"class":4302},[4005,17449,17450],{"class":4182},"(fields));\n",[4005,17452,17453],{"class":4007,"line":4942},[4005,17454,12810],{"class":4182},[4005,17456,17457],{"class":4007,"line":4947},[4005,17458,17459],{"class":4190},"        \u002F\u002F 4. join — склеювання (Java 8+)\n",[4005,17461,17462,17464,17466,17468,17471,17473,17475,17477,17479,17481],{"class":4007,"line":4953},[4005,17463,12794],{"class":4178},[4005,17465,12783],{"class":4182},[4005,17467,17033],{"class":4174},[4005,17469,17470],{"class":4182}," = {",[4005,17472,11710],{"class":4330},[4005,17474,3836],{"class":4182},[4005,17476,17007],{"class":4330},[4005,17478,3836],{"class":4182},[4005,17480,17012],{"class":4330},[4005,17482,17483],{"class":4182},"};\n",[4005,17485,17486,17488,17491,17493,17495,17497,17500,17502,17504],{"class":4007,"line":4960},[4005,17487,12794],{"class":4178},[4005,17489,17490],{"class":4174}," sentence",[4005,17492,4183],{"class":4182},[4005,17494,7343],{"class":4174},[4005,17496,3769],{"class":4182},[4005,17498,17499],{"class":4302},"join",[4005,17501,4611],{"class":4182},[4005,17503,17038],{"class":4330},[4005,17505,17506],{"class":4182},", words);\n",[4005,17508,17509,17511,17513,17515,17517,17519,17522],{"class":4007,"line":4973},[4005,17510,12815],{"class":4174},[4005,17512,3769],{"class":4182},[4005,17514,12820],{"class":4174},[4005,17516,3769],{"class":4182},[4005,17518,12825],{"class":4302},[4005,17520,17521],{"class":4182},"(sentence);  ",[4005,17523,17058],{"class":4190},[4005,17525,17526],{"class":4007,"line":4985},[4005,17527,5127],{"class":4182},[4005,17529,17530],{"class":4007,"line":7813},[4005,17531,4078],{"class":4182},[3908,17533,17534],{},[3871,17535,12950],{},[3746,17537,17538,17548,17561],{},[3749,17539,17540,16509,17544,17547],{},[3871,17541,17542,16508],{},[3753,17543,14609],{},[3753,17545,17546],{},"Split()"," — літеральний роздільник",[3749,17549,17550,14606,17555,6289,17558],{},[3871,17551,14596,17552],{},[3753,17553,17554],{},"Fields()",[3753,17556,17557],{},"split(\"\\\\s+\")",[3753,17559,17560],{},"trim()",[3749,17562,17563,17568,17569,14625],{},[3871,17564,17565],{},[3753,17566,17567],{},"String.join()"," — статичний метод, Go ",[3753,17570,17571],{},"strings.Join()",[5427,17573,17574,17579],{},[3908,17575,17576],{},[3871,17577,17578],{},"Пастка: порожні елементи!",[3984,17580,17582],{"className":4162,"code":17581,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Go\nparts := strings.Split(\"a,,c\", \",\")\n\u002F\u002F [a  c] — порожній елемент ЗБЕРІГАЄТЬСЯ\n\n\u002F\u002F Щоб видалити порожні:\nresult := []string{}\nfor _, p := range parts {\n    if p != \"\" {\n        result = append(result, p)\n    }\n}\n",[3753,17583,17584,17589,17611,17616,17620,17625,17636,17656,17669,17689,17693],{"__ignoreMap":3992},[4005,17585,17586],{"class":4007,"line":4008},[4005,17587,17588],{"class":4190},"\u002F\u002F Go\n",[4005,17590,17591,17593,17595,17597,17599,17601,17603,17605,17607,17609],{"class":4007,"line":4014},[4005,17592,16754],{"class":4174},[4005,17594,4314],{"class":4182},[4005,17596,12438],{"class":4174},[4005,17598,3769],{"class":4182},[4005,17600,16628],{"class":4302},[4005,17602,4611],{"class":4182},[4005,17604,16956],{"class":4330},[4005,17606,3836],{"class":4182},[4005,17608,16739],{"class":4330},[4005,17610,4482],{"class":4182},[4005,17612,17613],{"class":4007,"line":4020},[4005,17614,17615],{"class":4190},"\u002F\u002F [a  c] — порожній елемент ЗБЕРІГАЄТЬСЯ\n",[4005,17617,17618],{"class":4007,"line":4026},[4005,17619,4036],{"emptyLinePlaceholder":4035},[4005,17621,17622],{"class":4007,"line":4032},[4005,17623,17624],{"class":4190},"\u002F\u002F Щоб видалити порожні:\n",[4005,17626,17627,17629,17631,17633],{"class":4007,"line":4039},[4005,17628,5695],{"class":4174},[4005,17630,11583],{"class":4182},[4005,17632,7004],{"class":4178},[4005,17634,17635],{"class":4182},"{}\n",[4005,17637,17638,17640,17643,17645,17647,17649,17651,17654],{"class":4007,"line":4045},[4005,17639,3808],{"class":4836},[4005,17641,17642],{"class":4174}," _",[4005,17644,3836],{"class":4182},[4005,17646,3908],{"class":4174},[4005,17648,4314],{"class":4182},[4005,17650,12151],{"class":4836},[4005,17652,17653],{"class":4174}," parts",[4005,17655,5073],{"class":4182},[4005,17657,17658,17660,17663,17665,17667],{"class":4007,"line":4051},[4005,17659,5104],{"class":4836},[4005,17661,17662],{"class":4174}," p",[4005,17664,5110],{"class":4182},[4005,17666,4203],{"class":4330},[4005,17668,5073],{"class":4182},[4005,17670,17671,17674,17676,17679,17681,17683,17685,17687],{"class":4007,"line":4057},[4005,17672,17673],{"class":4174},"        result",[4005,17675,4183],{"class":4182},[4005,17677,17678],{"class":4302},"append",[4005,17680,4611],{"class":4182},[4005,17682,5695],{"class":4174},[4005,17684,3836],{"class":4182},[4005,17686,3908],{"class":4174},[4005,17688,4482],{"class":4182},[4005,17690,17691],{"class":4007,"line":4063},[4005,17692,5127],{"class":4182},[4005,17694,17695],{"class":4007,"line":4069},[4005,17696,4078],{"class":4182},[3900,17698],{},[3976,17700,17702],{"id":17701},"частина-4-видалення-символів-trimming","Частина 4: Видалення символів (Trimming)",[9014,17704,17706,17707,3836,17710,3836,17713,3836,17716],{"id":17705},"базове-видалення-trim-trimleft-trimright-trimspace","Базове видалення: ",[3753,17708,17709],{},"Trim",[3753,17711,17712],{},"TrimLeft",[3753,17714,17715],{},"TrimRight",[3753,17717,17718],{},"TrimSpace",[3908,17720,17721],{},[3871,17722,12993],{},[3746,17724,17725,17728,17731,17734],{},[3749,17726,17727],{},"Очищення користувацького вводу від пробілів",[3749,17729,17730],{},"Видалення роздільників з CSV",[3749,17732,17733],{},"Нормалізація шляхів файлів",[3749,17735,17736],{},"Парсинг конфігураційних файлів",[12533,17738,17739,18371],{},[12536,17740,17741,18248,18252],{"icon":12538,"label":12539},[3984,17742,17744],{"className":4162,"code":17743,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n)\n\nfunc main() {\n    \u002F\u002F 1. TrimSpace — видаляє пробіли, таби, \\n, \\r з обох боків\n    userInput := \"  hello@example.com\\t\\n  \"\n    cleaned := strings.TrimSpace(userInput)\n    fmt.Printf(\"'%s' → '%s'\\n\", userInput, cleaned)\n    \u002F\u002F '  hello@example.com \n    \u002F\u002F   ' → 'hello@example.com'\n    \n    \u002F\u002F 2. Trim — видаляє будь-які символи зі списку з обох боків\n    price := \"$$99.99$$\"\n    amount := strings.Trim(price, \"$\")\n    fmt.Println(amount)  \u002F\u002F 99.99\n    \n    path := \"\u002F\u002F\u002Fhome\u002Fuser\u002F\u002F\u002F\"\n    normalized := strings.Trim(path, \"\u002F\")\n    fmt.Println(normalized)  \u002F\u002F home\u002Fuser\n    \n    \u002F\u002F 3. TrimLeft \u002F TrimRight — видаляє тільки з одного боку\n    code := \"0001234\"\n    number := strings.TrimLeft(code, \"0\")\n    fmt.Println(number)  \u002F\u002F 1234\n    \n    extension := \"file.txt~~~\"\n    filename := strings.TrimRight(extension, \"~\")\n    fmt.Println(filename)  \u002F\u002F file.txt\n    \n    \u002F\u002F 4. Приклад: парсинг конфігурації\n    configLine := \"  # server_port=8080  \"\n    line := strings.TrimSpace(configLine)\n    if !strings.HasPrefix(line, \"#\") {\n        \u002F\u002F Обробляємо тільки не-коментарі\n        parts := strings.Split(line, \"=\")\n        fmt.Printf(\"Ключ: '%s', Значення: '%s'\\n\", parts[0], parts[1])\n    }\n}\n",[3753,17745,17746,17752,17756,17762,17766,17770,17774,17778,17786,17791,17806,17825,17863,17868,17873,17877,17882,17892,17917,17935,17939,17948,17971,17989,17993,17998,18008,18032,18050,18054,18064,18088,18104,18108,18113,18123,18143,18167,18172,18196,18240,18244],{"__ignoreMap":3992},[4005,17747,17748,17750],{"class":4007,"line":4008},[4005,17749,5739],{"class":4171},[4005,17751,5742],{"class":4178},[4005,17753,17754],{"class":4007,"line":4014},[4005,17755,4036],{"emptyLinePlaceholder":4035},[4005,17757,17758,17760],{"class":4007,"line":4020},[4005,17759,3917],{"class":4836},[4005,17761,4439],{"class":4182},[4005,17763,17764],{"class":4007,"line":4026},[4005,17765,4843],{"class":4330},[4005,17767,17768],{"class":4007,"line":4032},[4005,17769,12569],{"class":4330},[4005,17771,17772],{"class":4007,"line":4039},[4005,17773,4482],{"class":4182},[4005,17775,17776],{"class":4007,"line":4045},[4005,17777,4036],{"emptyLinePlaceholder":4035},[4005,17779,17780,17782,17784],{"class":4007,"line":4051},[4005,17781,4299],{"class":4171},[4005,17783,5764],{"class":4302},[4005,17785,4306],{"class":4182},[4005,17787,17788],{"class":4007,"line":4057},[4005,17789,17790],{"class":4190},"    \u002F\u002F 1. TrimSpace — видаляє пробіли, таби, \\n, \\r з обох боків\n",[4005,17792,17793,17795,17797,17800,17803],{"class":4007,"line":4063},[4005,17794,16024],{"class":4174},[4005,17796,4314],{"class":4182},[4005,17798,17799],{"class":4330},"\"  hello@example.com",[4005,17801,17802],{"class":7964},"\\t\\n",[4005,17804,17805],{"class":4330},"  \"\n",[4005,17807,17808,17811,17813,17815,17817,17819,17821,17823],{"class":4007,"line":4069},[4005,17809,17810],{"class":4174},"    cleaned",[4005,17812,4314],{"class":4182},[4005,17814,12438],{"class":4174},[4005,17816,3769],{"class":4182},[4005,17818,17718],{"class":4302},[4005,17820,4611],{"class":4182},[4005,17822,16052],{"class":4174},[4005,17824,4482],{"class":4182},[4005,17826,17827,17829,17831,17833,17835,17838,17840,17843,17845,17848,17850,17852,17854,17856,17858,17861],{"class":4007,"line":4075},[4005,17828,5370],{"class":4174},[4005,17830,3769],{"class":4182},[4005,17832,7945],{"class":4302},[4005,17834,4611],{"class":4182},[4005,17836,17837],{"class":4330},"\"'",[4005,17839,16775],{"class":4174},[4005,17841,17842],{"class":4330},"' → '",[4005,17844,16775],{"class":4174},[4005,17846,17847],{"class":4330},"'",[4005,17849,7965],{"class":7964},[4005,17851,7968],{"class":4330},[4005,17853,3836],{"class":4182},[4005,17855,16052],{"class":4174},[4005,17857,3836],{"class":4182},[4005,17859,17860],{"class":4174},"cleaned",[4005,17862,4482],{"class":4182},[4005,17864,17865],{"class":4007,"line":4081},[4005,17866,17867],{"class":4190},"    \u002F\u002F '  hello@example.com \n",[4005,17869,17870],{"class":4007,"line":4086},[4005,17871,17872],{"class":4190},"    \u002F\u002F   ' → 'hello@example.com'\n",[4005,17874,17875],{"class":4007,"line":4092},[4005,17876,5214],{"class":4182},[4005,17878,17879],{"class":4007,"line":4098},[4005,17880,17881],{"class":4190},"    \u002F\u002F 2. Trim — видаляє будь-які символи зі списку з обох боків\n",[4005,17883,17884,17887,17889],{"class":4007,"line":4104},[4005,17885,17886],{"class":4174},"    price",[4005,17888,4314],{"class":4182},[4005,17890,17891],{"class":4330},"\"$$99.99$$\"\n",[4005,17893,17894,17897,17899,17901,17903,17905,17907,17910,17912,17915],{"class":4007,"line":4110},[4005,17895,17896],{"class":4174},"    amount",[4005,17898,4314],{"class":4182},[4005,17900,12438],{"class":4174},[4005,17902,3769],{"class":4182},[4005,17904,17709],{"class":4302},[4005,17906,4611],{"class":4182},[4005,17908,17909],{"class":4174},"price",[4005,17911,3836],{"class":4182},[4005,17913,17914],{"class":4330},"\"$\"",[4005,17916,4482],{"class":4182},[4005,17918,17919,17921,17923,17925,17927,17930,17932],{"class":4007,"line":4937},[4005,17920,5370],{"class":4174},[4005,17922,3769],{"class":4182},[4005,17924,5348],{"class":4302},[4005,17926,4611],{"class":4182},[4005,17928,17929],{"class":4174},"amount",[4005,17931,5196],{"class":4182},[4005,17933,17934],{"class":4190},"\u002F\u002F 99.99\n",[4005,17936,17937],{"class":4007,"line":4942},[4005,17938,5214],{"class":4182},[4005,17940,17941,17943,17945],{"class":4007,"line":4947},[4005,17942,14719],{"class":4174},[4005,17944,4314],{"class":4182},[4005,17946,17947],{"class":4330},"\"\u002F\u002F\u002Fhome\u002Fuser\u002F\u002F\u002F\"\n",[4005,17949,17950,17953,17955,17957,17959,17961,17963,17965,17967,17969],{"class":4007,"line":4953},[4005,17951,17952],{"class":4174},"    normalized",[4005,17954,4314],{"class":4182},[4005,17956,12438],{"class":4174},[4005,17958,3769],{"class":4182},[4005,17960,17709],{"class":4302},[4005,17962,4611],{"class":4182},[4005,17964,5064],{"class":4174},[4005,17966,3836],{"class":4182},[4005,17968,14819],{"class":4330},[4005,17970,4482],{"class":4182},[4005,17972,17973,17975,17977,17979,17981,17984,17986],{"class":4007,"line":4960},[4005,17974,5370],{"class":4174},[4005,17976,3769],{"class":4182},[4005,17978,5348],{"class":4302},[4005,17980,4611],{"class":4182},[4005,17982,17983],{"class":4174},"normalized",[4005,17985,5196],{"class":4182},[4005,17987,17988],{"class":4190},"\u002F\u002F home\u002Fuser\n",[4005,17990,17991],{"class":4007,"line":4973},[4005,17992,5214],{"class":4182},[4005,17994,17995],{"class":4007,"line":4985},[4005,17996,17997],{"class":4190},"    \u002F\u002F 3. TrimLeft \u002F TrimRight — видаляє тільки з одного боку\n",[4005,17999,18000,18003,18005],{"class":4007,"line":7813},[4005,18001,18002],{"class":4174},"    code",[4005,18004,4314],{"class":4182},[4005,18006,18007],{"class":4330},"\"0001234\"\n",[4005,18009,18010,18013,18015,18017,18019,18021,18023,18025,18027,18030],{"class":4007,"line":7819},[4005,18011,18012],{"class":4174},"    number",[4005,18014,4314],{"class":4182},[4005,18016,12438],{"class":4174},[4005,18018,3769],{"class":4182},[4005,18020,17712],{"class":4302},[4005,18022,4611],{"class":4182},[4005,18024,3753],{"class":4174},[4005,18026,3836],{"class":4182},[4005,18028,18029],{"class":4330},"\"0\"",[4005,18031,4482],{"class":4182},[4005,18033,18034,18036,18038,18040,18042,18045,18047],{"class":4007,"line":7826},[4005,18035,5370],{"class":4174},[4005,18037,3769],{"class":4182},[4005,18039,5348],{"class":4302},[4005,18041,4611],{"class":4182},[4005,18043,18044],{"class":4174},"number",[4005,18046,5196],{"class":4182},[4005,18048,18049],{"class":4190},"\u002F\u002F 1234\n",[4005,18051,18052],{"class":4007,"line":7839},[4005,18053,5214],{"class":4182},[4005,18055,18056,18059,18061],{"class":4007,"line":7864},[4005,18057,18058],{"class":4174},"    extension",[4005,18060,4314],{"class":4182},[4005,18062,18063],{"class":4330},"\"file.txt~~~\"\n",[4005,18065,18066,18068,18070,18072,18074,18076,18078,18081,18083,18086],{"class":4007,"line":7872},[4005,18067,13080],{"class":4174},[4005,18069,4314],{"class":4182},[4005,18071,12438],{"class":4174},[4005,18073,3769],{"class":4182},[4005,18075,17715],{"class":4302},[4005,18077,4611],{"class":4182},[4005,18079,18080],{"class":4174},"extension",[4005,18082,3836],{"class":4182},[4005,18084,18085],{"class":4330},"\"~\"",[4005,18087,4482],{"class":4182},[4005,18089,18090,18092,18094,18096,18098,18100,18102],{"class":4007,"line":7881},[4005,18091,5370],{"class":4174},[4005,18093,3769],{"class":4182},[4005,18095,5348],{"class":4302},[4005,18097,4611],{"class":4182},[4005,18099,13169],{"class":4174},[4005,18101,5196],{"class":4182},[4005,18103,14864],{"class":4190},[4005,18105,18106],{"class":4007,"line":7890},[4005,18107,5214],{"class":4182},[4005,18109,18110],{"class":4007,"line":7895},[4005,18111,18112],{"class":4190},"    \u002F\u002F 4. Приклад: парсинг конфігурації\n",[4005,18114,18115,18118,18120],{"class":4007,"line":7900},[4005,18116,18117],{"class":4174},"    configLine",[4005,18119,4314],{"class":4182},[4005,18121,18122],{"class":4330},"\"  # server_port=8080  \"\n",[4005,18124,18125,18128,18130,18132,18134,18136,18138,18141],{"class":4007,"line":7909},[4005,18126,18127],{"class":4174},"    line",[4005,18129,4314],{"class":4182},[4005,18131,12438],{"class":4174},[4005,18133,3769],{"class":4182},[4005,18135,17718],{"class":4302},[4005,18137,4611],{"class":4182},[4005,18139,18140],{"class":4174},"configLine",[4005,18142,4482],{"class":4182},[4005,18144,18145,18147,18150,18152,18154,18156,18158,18160,18162,18165],{"class":4007,"line":7915},[4005,18146,5104],{"class":4836},[4005,18148,18149],{"class":4182}," !",[4005,18151,12438],{"class":4174},[4005,18153,3769],{"class":4182},[4005,18155,12985],{"class":4302},[4005,18157,4611],{"class":4182},[4005,18159,4007],{"class":4174},[4005,18161,3836],{"class":4182},[4005,18163,18164],{"class":4330},"\"#\"",[4005,18166,12789],{"class":4182},[4005,18168,18169],{"class":4007,"line":7921},[4005,18170,18171],{"class":4190},"        \u002F\u002F Обробляємо тільки не-коментарі\n",[4005,18173,18174,18177,18179,18181,18183,18185,18187,18189,18191,18194],{"class":4007,"line":7938},[4005,18175,18176],{"class":4174},"        parts",[4005,18178,4314],{"class":4182},[4005,18180,12438],{"class":4174},[4005,18182,3769],{"class":4182},[4005,18184,16628],{"class":4302},[4005,18186,4611],{"class":4182},[4005,18188,4007],{"class":4174},[4005,18190,3836],{"class":4182},[4005,18192,18193],{"class":4330},"\"=\"",[4005,18195,4482],{"class":4182},[4005,18197,18198,18200,18202,18204,18206,18209,18211,18214,18216,18218,18220,18222,18224,18226,18228,18230,18232,18234,18236,18238],{"class":4007,"line":7982},[4005,18199,5343],{"class":4174},[4005,18201,3769],{"class":4182},[4005,18203,7945],{"class":4302},[4005,18205,4611],{"class":4182},[4005,18207,18208],{"class":4330},"\"Ключ: '",[4005,18210,16775],{"class":4174},[4005,18212,18213],{"class":4330},"', Значення: '",[4005,18215,16775],{"class":4174},[4005,18217,17847],{"class":4330},[4005,18219,7965],{"class":7964},[4005,18221,7968],{"class":4330},[4005,18223,3836],{"class":4182},[4005,18225,16754],{"class":4174},[4005,18227,11561],{"class":4182},[4005,18229,4200],{"class":4186},[4005,18231,12048],{"class":4182},[4005,18233,16754],{"class":4174},[4005,18235,11561],{"class":4182},[4005,18237,4393],{"class":4186},[4005,18239,11566],{"class":4182},[4005,18241,18242],{"class":4007,"line":7987},[4005,18243,5127],{"class":4182},[4005,18245,18246],{"class":4007,"line":7993},[4005,18247,4078],{"class":4182},[3908,18249,18250],{},[3871,18251,15050],{},[5991,18253,18254,18268],{},[5994,18255,18256],{},[5997,18257,18258,18260,18263,18266],{},[6000,18259,8718],{},[6000,18261,18262],{},"Що видаляє",[6000,18264,18265],{},"З якого боку",[6000,18267,6005],{},[6010,18269,18270,18298,18323,18347],{},[5997,18271,18272,18277,18287,18290],{},[6015,18273,18274],{},[3753,18275,18276],{},"TrimSpace(s)",[6015,18278,18279,18280,3836,18282,3836,18284],{},"Пробіли, ",[3753,18281,11060],{},[3753,18283,7965],{},[3753,18285,18286],{},"\\r",[6015,18288,18289],{},"З обох",[6015,18291,18292,8996,18295],{},[3753,18293,18294],{},"\"  hi  \"",[3753,18296,18297],{},"\"hi\"",[5997,18299,18300,18305,18311,18313],{},[6015,18301,18302],{},[3753,18303,18304],{},"Trim(s, cutset)",[6015,18306,18307,18308],{},"Символи зі ",[3753,18309,18310],{},"cutset",[6015,18312,18289],{},[6015,18314,18315,8996,18318,18320,18321,5032],{},[3753,18316,18317],{},"\"##hi##\"",[3753,18319,18297],{}," (cutset=",[3753,18322,18164],{},[5997,18324,18325,18330,18334,18337],{},[6015,18326,18327],{},[3753,18328,18329],{},"TrimLeft(s, cutset)",[6015,18331,18307,18332],{},[3753,18333,18310],{},[6015,18335,18336],{},"Зліва",[6015,18338,18339,8996,18342,18320,18345,5032],{},[3753,18340,18341],{},"\"000123\"",[3753,18343,18344],{},"\"123\"",[3753,18346,18029],{},[5997,18348,18349,18354,18358,18361],{},[6015,18350,18351],{},[3753,18352,18353],{},"TrimRight(s, cutset)",[6015,18355,18307,18356],{},[3753,18357,18310],{},[6015,18359,18360],{},"Справа",[6015,18362,18363,8996,18366,18320,18368,5032],{},[3753,18364,18365],{},"\"hi!!!\"",[3753,18367,18297],{},[3753,18369,18370],{},"\"!\"",[12536,18372,18373,18692,18696],{"icon":12743,"label":2367},[3984,18374,18376],{"className":12746,"code":18375,"language":12748,"meta":3992,"style":3992},"public class StringTrim {\n    public static void main(String[] args) {\n        \u002F\u002F 1. trim — видаляє пробіли з обох боків (тільки ASCII ≤ 0x20!)\n        String userInput = \"  hello@example.com\\t\\n  \";\n        String cleaned = userInput.trim();\n        System.out.printf(\"'%s' → '%s'\\n\", userInput, cleaned);\n        \n        \u002F\u002F 2. strip (Java 11+) — видаляє Unicode пробіли\n        String unicode = \"\\u2000hello\\u2000\";  \u002F\u002F En Quad (Unicode пробіл)\n        System.out.println(unicode.strip());  \u002F\u002F hello\n        \n        \u002F\u002F 3. Немає Trim(cutset) — треба regex або вручну\n        String price = \"$$99.99$$\";\n        String amount = price.replaceAll(\"^\\\\$+|\\\\$+$\", \"\");\n        System.out.println(amount);  \u002F\u002F 99.99\n        \n        \u002F\u002F 4. stripLeading \u002F stripTrailing (Java 11+)\n        String code = \"0001234\";\n        \u002F\u002F Немає прямого аналогу TrimLeft — треба regex\n        String number = code.replaceAll(\"^0+\", \"\");\n        System.out.println(number);  \u002F\u002F 1234\n    }\n}\n",[3753,18377,18378,18389,18409,18414,18431,18449,18473,18477,18482,18510,18537,18541,18546,18560,18596,18613,18617,18622,18636,18641,18667,18684,18688],{"__ignoreMap":3992},[4005,18379,18380,18382,18384,18387],{"class":4007,"line":4008},[4005,18381,12755],{"class":4171},[4005,18383,12758],{"class":4171},[4005,18385,18386],{"class":4178}," StringTrim",[4005,18388,5073],{"class":4182},[4005,18390,18391,18393,18395,18397,18399,18401,18403,18405,18407],{"class":4007,"line":4014},[4005,18392,12768],{"class":4171},[4005,18394,12771],{"class":4171},[4005,18396,12774],{"class":4178},[4005,18398,5764],{"class":4302},[4005,18400,4611],{"class":4182},[4005,18402,7343],{"class":4178},[4005,18404,12783],{"class":4182},[4005,18406,12786],{"class":4174},[4005,18408,12789],{"class":4182},[4005,18410,18411],{"class":4007,"line":4020},[4005,18412,18413],{"class":4190},"        \u002F\u002F 1. trim — видаляє пробіли з обох боків (тільки ASCII ≤ 0x20!)\n",[4005,18415,18416,18418,18420,18422,18424,18426,18429],{"class":4007,"line":4026},[4005,18417,12794],{"class":4178},[4005,18419,16436],{"class":4174},[4005,18421,4183],{"class":4182},[4005,18423,17799],{"class":4330},[4005,18425,17802],{"class":7964},[4005,18427,18428],{"class":4330},"  \"",[4005,18430,12805],{"class":4182},[4005,18432,18433,18435,18438,18440,18442,18444,18446],{"class":4007,"line":4032},[4005,18434,12794],{"class":4178},[4005,18436,18437],{"class":4174}," cleaned",[4005,18439,4183],{"class":4182},[4005,18441,16052],{"class":4174},[4005,18443,3769],{"class":4182},[4005,18445,17412],{"class":4302},[4005,18447,18448],{"class":4182},"();\n",[4005,18450,18451,18453,18455,18457,18459,18461,18463,18466,18468,18470],{"class":4007,"line":4039},[4005,18452,12815],{"class":4174},[4005,18454,3769],{"class":4182},[4005,18456,12820],{"class":4174},[4005,18458,3769],{"class":4182},[4005,18460,14563],{"class":4302},[4005,18462,4611],{"class":4182},[4005,18464,18465],{"class":4330},"\"'%s' → '%s'",[4005,18467,7965],{"class":7964},[4005,18469,7968],{"class":4330},[4005,18471,18472],{"class":4182},", userInput, cleaned);\n",[4005,18474,18475],{"class":4007,"line":4045},[4005,18476,12810],{"class":4182},[4005,18478,18479],{"class":4007,"line":4051},[4005,18480,18481],{"class":4190},"        \u002F\u002F 2. strip (Java 11+) — видаляє Unicode пробіли\n",[4005,18483,18484,18486,18489,18491,18493,18496,18499,18501,18504,18507],{"class":4007,"line":4057},[4005,18485,12794],{"class":4178},[4005,18487,18488],{"class":4174}," unicode",[4005,18490,4183],{"class":4182},[4005,18492,7968],{"class":4330},[4005,18494,18495],{"class":7964},"\\u",[4005,18497,18498],{"class":4330},"2000hello",[4005,18500,18495],{"class":7964},[4005,18502,18503],{"class":4330},"2000\"",[4005,18505,18506],{"class":4182},";  ",[4005,18508,18509],{"class":4190},"\u002F\u002F En Quad (Unicode пробіл)\n",[4005,18511,18512,18514,18516,18518,18520,18522,18524,18527,18529,18532,18534],{"class":4007,"line":4063},[4005,18513,12815],{"class":4174},[4005,18515,3769],{"class":4182},[4005,18517,12820],{"class":4174},[4005,18519,3769],{"class":4182},[4005,18521,12825],{"class":4302},[4005,18523,4611],{"class":4182},[4005,18525,18526],{"class":4174},"unicode",[4005,18528,3769],{"class":4182},[4005,18530,18531],{"class":4302},"strip",[4005,18533,12837],{"class":4182},[4005,18535,18536],{"class":4190},"\u002F\u002F hello\n",[4005,18538,18539],{"class":4007,"line":4069},[4005,18540,12810],{"class":4182},[4005,18542,18543],{"class":4007,"line":4075},[4005,18544,18545],{"class":4190},"        \u002F\u002F 3. Немає Trim(cutset) — треба regex або вручну\n",[4005,18547,18548,18550,18553,18555,18558],{"class":4007,"line":4081},[4005,18549,12794],{"class":4178},[4005,18551,18552],{"class":4174}," price",[4005,18554,4183],{"class":4182},[4005,18556,18557],{"class":4330},"\"$$99.99$$\"",[4005,18559,12805],{"class":4182},[4005,18561,18562,18564,18567,18569,18571,18573,18575,18577,18580,18582,18585,18587,18590,18592,18594],{"class":4007,"line":4086},[4005,18563,12794],{"class":4178},[4005,18565,18566],{"class":4174}," amount",[4005,18568,4183],{"class":4182},[4005,18570,17909],{"class":4174},[4005,18572,3769],{"class":4182},[4005,18574,16259],{"class":4302},[4005,18576,4611],{"class":4182},[4005,18578,18579],{"class":4330},"\"^",[4005,18581,11066],{"class":7964},[4005,18583,18584],{"class":4330},"$+|",[4005,18586,11066],{"class":7964},[4005,18588,18589],{"class":4330},"$+$\"",[4005,18591,3836],{"class":4182},[4005,18593,4203],{"class":4330},[4005,18595,12932],{"class":4182},[4005,18597,18598,18600,18602,18604,18606,18608,18611],{"class":4007,"line":4092},[4005,18599,12815],{"class":4174},[4005,18601,3769],{"class":4182},[4005,18603,12820],{"class":4174},[4005,18605,3769],{"class":4182},[4005,18607,12825],{"class":4302},[4005,18609,18610],{"class":4182},"(amount);  ",[4005,18612,17934],{"class":4190},[4005,18614,18615],{"class":4007,"line":4098},[4005,18616,12810],{"class":4182},[4005,18618,18619],{"class":4007,"line":4104},[4005,18620,18621],{"class":4190},"        \u002F\u002F 4. stripLeading \u002F stripTrailing (Java 11+)\n",[4005,18623,18624,18626,18629,18631,18634],{"class":4007,"line":4110},[4005,18625,12794],{"class":4178},[4005,18627,18628],{"class":4174}," code",[4005,18630,4183],{"class":4182},[4005,18632,18633],{"class":4330},"\"0001234\"",[4005,18635,12805],{"class":4182},[4005,18637,18638],{"class":4007,"line":4937},[4005,18639,18640],{"class":4190},"        \u002F\u002F Немає прямого аналогу TrimLeft — треба regex\n",[4005,18642,18643,18645,18648,18650,18652,18654,18656,18658,18661,18663,18665],{"class":4007,"line":4942},[4005,18644,12794],{"class":4178},[4005,18646,18647],{"class":4174}," number",[4005,18649,4183],{"class":4182},[4005,18651,3753],{"class":4174},[4005,18653,3769],{"class":4182},[4005,18655,16259],{"class":4302},[4005,18657,4611],{"class":4182},[4005,18659,18660],{"class":4330},"\"^0+\"",[4005,18662,3836],{"class":4182},[4005,18664,4203],{"class":4330},[4005,18666,12932],{"class":4182},[4005,18668,18669,18671,18673,18675,18677,18679,18682],{"class":4007,"line":4947},[4005,18670,12815],{"class":4174},[4005,18672,3769],{"class":4182},[4005,18674,12820],{"class":4174},[4005,18676,3769],{"class":4182},[4005,18678,12825],{"class":4302},[4005,18680,18681],{"class":4182},"(number);  ",[4005,18683,18049],{"class":4190},[4005,18685,18686],{"class":4007,"line":4953},[4005,18687,5127],{"class":4182},[4005,18689,18690],{"class":4007,"line":4960},[4005,18691,4078],{"class":4182},[3908,18693,18694],{},[3871,18695,12950],{},[3746,18697,18698,18713,18724],{},[3749,18699,18700,4761,18705,18708,18709,18712],{},[3871,18701,18702,18704],{},[3753,18703,17560],{}," видаляє тільки ASCII пробіли",[3753,18706,18707],{},"≤ 0x20","), Go ",[3753,18710,18711],{},"TrimSpace()"," — всі Unicode пробіли",[3749,18714,18715,18720,18721],{},[3871,18716,14596,18717],{},[3753,18718,18719],{},"Trim(cutset)"," — треба regex ",[3753,18722,18723],{},"replaceAll(\"^[cutset]+|[cutset]+$\", \"\")",[3749,18725,18726,3880,18729,3836,18732,3836,18735,18738],{},[3871,18727,18728],{},"Java 11+:",[3753,18730,18731],{},"strip()",[3753,18733,18734],{},"stripLeading()",[3753,18736,18737],{},"stripTrailing()"," — кращі аналоги",[3900,18740],{},[9014,18742,18744,18745,3836,18748],{"id":18743},"видалення-префіксівсуфіксів-trimprefix-trimsuffix","Видалення префіксів\u002Fсуфіксів: ",[3753,18746,18747],{},"TrimPrefix",[3753,18749,18750],{},"TrimSuffix",[3908,18752,18753],{},[3871,18754,12993],{},[3746,18756,18757,18763,18772],{},[3749,18758,18759,18760,5032],{},"Видалення протоколу з URL (",[3753,18761,18762],{},"https:\u002F\u002F",[3749,18764,18765,18766,3836,18769,5032],{},"Очищення розширень файлів (",[3753,18767,18768],{},".txt",[3753,18770,18771],{},".log",[3749,18773,18774,18775,5032],{},"Нормалізація API-шляхів (",[3753,18776,18777],{},"\u002Fapi\u002Fv1\u002F",[12533,18779,18780,19246],{},[12536,18781,18782,19156,19161],{"icon":12538,"label":12539},[3984,18783,18785],{"className":4162,"code":18784,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n)\n\nfunc main() {\n    \u002F\u002F 1. TrimPrefix — видаляє префікс (якщо є)\n    url := \"https:\u002F\u002Fexample.com\u002Fapi\"\n    domain := strings.TrimPrefix(url, \"https:\u002F\u002F\")\n    fmt.Println(domain)  \u002F\u002F example.com\u002Fapi\n    \n    \u002F\u002F Якщо префіксу немає — рядок не змінюється\n    noPrefix := strings.TrimPrefix(\"example.com\", \"https:\u002F\u002F\")\n    fmt.Println(noPrefix)  \u002F\u002F example.com (без змін)\n    \n    \u002F\u002F 2. TrimSuffix — видаляє суфікс (якщо є)\n    filename := \"report.pdf\"\n    name := strings.TrimSuffix(filename, \".pdf\")\n    fmt.Println(name)  \u002F\u002F report\n    \n    \u002F\u002F 3. Приклад: нормалізація API-шляхів\n    endpoint := \"\u002Fapi\u002Fv1\u002Fusers\u002F\"\n    clean := strings.TrimPrefix(endpoint, \"\u002F\")\n    clean = strings.TrimSuffix(clean, \"\u002F\")\n    fmt.Println(clean)  \u002F\u002F api\u002Fv1\u002Fusers\n    \n    \u002F\u002F 4. Відмінність від Trim: видаляє ТІЛЬКИ ОДИН РАЗ\n    text := \"###hello###\"\n    fmt.Println(strings.TrimPrefix(text, \"#\"))   \u002F\u002F ##hello### (тільки 1 символ!)\n    fmt.Println(strings.Trim(text, \"#\"))         \u002F\u002F hello (всі символи)\n}\n",[3753,18786,18787,18793,18797,18803,18807,18811,18815,18819,18827,18832,18841,18864,18882,18886,18891,18915,18933,18937,18942,18951,18975,18992,18996,19001,19010,19034,19057,19074,19078,19083,19092,19122,19152],{"__ignoreMap":3992},[4005,18788,18789,18791],{"class":4007,"line":4008},[4005,18790,5739],{"class":4171},[4005,18792,5742],{"class":4178},[4005,18794,18795],{"class":4007,"line":4014},[4005,18796,4036],{"emptyLinePlaceholder":4035},[4005,18798,18799,18801],{"class":4007,"line":4020},[4005,18800,3917],{"class":4836},[4005,18802,4439],{"class":4182},[4005,18804,18805],{"class":4007,"line":4026},[4005,18806,4843],{"class":4330},[4005,18808,18809],{"class":4007,"line":4032},[4005,18810,12569],{"class":4330},[4005,18812,18813],{"class":4007,"line":4039},[4005,18814,4482],{"class":4182},[4005,18816,18817],{"class":4007,"line":4045},[4005,18818,4036],{"emptyLinePlaceholder":4035},[4005,18820,18821,18823,18825],{"class":4007,"line":4051},[4005,18822,4299],{"class":4171},[4005,18824,5764],{"class":4302},[4005,18826,4306],{"class":4182},[4005,18828,18829],{"class":4007,"line":4057},[4005,18830,18831],{"class":4190},"    \u002F\u002F 1. TrimPrefix — видаляє префікс (якщо є)\n",[4005,18833,18834,18836,18838],{"class":4007,"line":4063},[4005,18835,13070],{"class":4174},[4005,18837,4314],{"class":4182},[4005,18839,18840],{"class":4330},"\"https:\u002F\u002Fexample.com\u002Fapi\"\n",[4005,18842,18843,18846,18848,18850,18852,18854,18856,18858,18860,18862],{"class":4007,"line":4069},[4005,18844,18845],{"class":4174},"    domain",[4005,18847,4314],{"class":4182},[4005,18849,12438],{"class":4174},[4005,18851,3769],{"class":4182},[4005,18853,18747],{"class":4302},[4005,18855,4611],{"class":4182},[4005,18857,13119],{"class":4174},[4005,18859,3836],{"class":4182},[4005,18861,13124],{"class":4330},[4005,18863,4482],{"class":4182},[4005,18865,18866,18868,18870,18872,18874,18877,18879],{"class":4007,"line":4075},[4005,18867,5370],{"class":4174},[4005,18869,3769],{"class":4182},[4005,18871,5348],{"class":4302},[4005,18873,4611],{"class":4182},[4005,18875,18876],{"class":4174},"domain",[4005,18878,5196],{"class":4182},[4005,18880,18881],{"class":4190},"\u002F\u002F example.com\u002Fapi\n",[4005,18883,18884],{"class":4007,"line":4081},[4005,18885,5214],{"class":4182},[4005,18887,18888],{"class":4007,"line":4086},[4005,18889,18890],{"class":4190},"    \u002F\u002F Якщо префіксу немає — рядок не змінюється\n",[4005,18892,18893,18896,18898,18900,18902,18904,18906,18909,18911,18913],{"class":4007,"line":4092},[4005,18894,18895],{"class":4174},"    noPrefix",[4005,18897,4314],{"class":4182},[4005,18899,12438],{"class":4174},[4005,18901,3769],{"class":4182},[4005,18903,18747],{"class":4302},[4005,18905,4611],{"class":4182},[4005,18907,18908],{"class":4330},"\"example.com\"",[4005,18910,3836],{"class":4182},[4005,18912,13124],{"class":4330},[4005,18914,4482],{"class":4182},[4005,18916,18917,18919,18921,18923,18925,18928,18930],{"class":4007,"line":4098},[4005,18918,5370],{"class":4174},[4005,18920,3769],{"class":4182},[4005,18922,5348],{"class":4302},[4005,18924,4611],{"class":4182},[4005,18926,18927],{"class":4174},"noPrefix",[4005,18929,5196],{"class":4182},[4005,18931,18932],{"class":4190},"\u002F\u002F example.com (без змін)\n",[4005,18934,18935],{"class":4007,"line":4104},[4005,18936,5214],{"class":4182},[4005,18938,18939],{"class":4007,"line":4110},[4005,18940,18941],{"class":4190},"    \u002F\u002F 2. TrimSuffix — видаляє суфікс (якщо є)\n",[4005,18943,18944,18946,18948],{"class":4007,"line":4937},[4005,18945,13080],{"class":4174},[4005,18947,4314],{"class":4182},[4005,18949,18950],{"class":4330},"\"report.pdf\"\n",[4005,18952,18953,18956,18958,18960,18962,18964,18966,18968,18970,18973],{"class":4007,"line":4942},[4005,18954,18955],{"class":4174},"    name",[4005,18957,4314],{"class":4182},[4005,18959,12438],{"class":4174},[4005,18961,3769],{"class":4182},[4005,18963,18750],{"class":4302},[4005,18965,4611],{"class":4182},[4005,18967,13169],{"class":4174},[4005,18969,3836],{"class":4182},[4005,18971,18972],{"class":4330},"\".pdf\"",[4005,18974,4482],{"class":4182},[4005,18976,18977,18979,18981,18983,18985,18987,18989],{"class":4007,"line":4947},[4005,18978,5370],{"class":4174},[4005,18980,3769],{"class":4182},[4005,18982,5348],{"class":4302},[4005,18984,4611],{"class":4182},[4005,18986,4650],{"class":4174},[4005,18988,5196],{"class":4182},[4005,18990,18991],{"class":4190},"\u002F\u002F report\n",[4005,18993,18994],{"class":4007,"line":4953},[4005,18995,5214],{"class":4182},[4005,18997,18998],{"class":4007,"line":4960},[4005,18999,19000],{"class":4190},"    \u002F\u002F 3. Приклад: нормалізація API-шляхів\n",[4005,19002,19003,19005,19007],{"class":4007,"line":4973},[4005,19004,4325],{"class":4174},[4005,19006,4314],{"class":4182},[4005,19008,19009],{"class":4330},"\"\u002Fapi\u002Fv1\u002Fusers\u002F\"\n",[4005,19011,19012,19015,19017,19019,19021,19023,19025,19028,19030,19032],{"class":4007,"line":4985},[4005,19013,19014],{"class":4174},"    clean",[4005,19016,4314],{"class":4182},[4005,19018,12438],{"class":4174},[4005,19020,3769],{"class":4182},[4005,19022,18747],{"class":4302},[4005,19024,4611],{"class":4182},[4005,19026,19027],{"class":4174},"endpoint",[4005,19029,3836],{"class":4182},[4005,19031,14819],{"class":4330},[4005,19033,4482],{"class":4182},[4005,19035,19036,19038,19040,19042,19044,19046,19048,19051,19053,19055],{"class":4007,"line":7813},[4005,19037,19014],{"class":4174},[4005,19039,4183],{"class":4182},[4005,19041,12438],{"class":4174},[4005,19043,3769],{"class":4182},[4005,19045,18750],{"class":4302},[4005,19047,4611],{"class":4182},[4005,19049,19050],{"class":4174},"clean",[4005,19052,3836],{"class":4182},[4005,19054,14819],{"class":4330},[4005,19056,4482],{"class":4182},[4005,19058,19059,19061,19063,19065,19067,19069,19071],{"class":4007,"line":7819},[4005,19060,5370],{"class":4174},[4005,19062,3769],{"class":4182},[4005,19064,5348],{"class":4302},[4005,19066,4611],{"class":4182},[4005,19068,19050],{"class":4174},[4005,19070,5196],{"class":4182},[4005,19072,19073],{"class":4190},"\u002F\u002F api\u002Fv1\u002Fusers\n",[4005,19075,19076],{"class":4007,"line":7826},[4005,19077,5214],{"class":4182},[4005,19079,19080],{"class":4007,"line":7839},[4005,19081,19082],{"class":4190},"    \u002F\u002F 4. Відмінність від Trim: видаляє ТІЛЬКИ ОДИН РАЗ\n",[4005,19084,19085,19087,19089],{"class":4007,"line":7864},[4005,19086,11425],{"class":4174},[4005,19088,4314],{"class":4182},[4005,19090,19091],{"class":4330},"\"###hello###\"\n",[4005,19093,19094,19096,19098,19100,19102,19104,19106,19108,19110,19112,19114,19116,19119],{"class":4007,"line":7872},[4005,19095,5370],{"class":4174},[4005,19097,3769],{"class":4182},[4005,19099,5348],{"class":4302},[4005,19101,4611],{"class":4182},[4005,19103,12438],{"class":4174},[4005,19105,3769],{"class":4182},[4005,19107,18747],{"class":4302},[4005,19109,4611],{"class":4182},[4005,19111,3989],{"class":4174},[4005,19113,3836],{"class":4182},[4005,19115,18164],{"class":4330},[4005,19117,19118],{"class":4182},"))   ",[4005,19120,19121],{"class":4190},"\u002F\u002F ##hello### (тільки 1 символ!)\n",[4005,19123,19124,19126,19128,19130,19132,19134,19136,19138,19140,19142,19144,19146,19149],{"class":4007,"line":7881},[4005,19125,5370],{"class":4174},[4005,19127,3769],{"class":4182},[4005,19129,5348],{"class":4302},[4005,19131,4611],{"class":4182},[4005,19133,12438],{"class":4174},[4005,19135,3769],{"class":4182},[4005,19137,17709],{"class":4302},[4005,19139,4611],{"class":4182},[4005,19141,3989],{"class":4174},[4005,19143,3836],{"class":4182},[4005,19145,18164],{"class":4330},[4005,19147,19148],{"class":4182},"))         ",[4005,19150,19151],{"class":4190},"\u002F\u002F hello (всі символи)\n",[4005,19153,19154],{"class":4007,"line":7890},[4005,19155,4078],{"class":4182},[3908,19157,19158],{},[3871,19159,19160],{},"Важлива відмінність:",[3984,19162,19164],{"className":4162,"code":19163,"language":4164,"meta":3992,"style":3992},"\u002F\u002F TrimPrefix \u002F TrimSuffix — видаляє ТІЛЬКИ ПОВНИЙ префікс\u002Fсуфікс\nstrings.TrimPrefix(\"https:\u002F\u002Fexample.com\", \"https:\u002F\u002F\")  \u002F\u002F example.com\nstrings.TrimPrefix(\"https:\u002F\u002Fexample.com\", \"http:\u002F\u002F\")   \u002F\u002F https:\u002F\u002Fexample.com (без змін!)\n\n\u002F\u002F Trim — видаляє ВСІ символи зі списку\nstrings.Trim(\"###hello###\", \"#\")  \u002F\u002F hello (всі '#' видалено)\n",[3753,19165,19166,19171,19193,19215,19219,19224],{"__ignoreMap":3992},[4005,19167,19168],{"class":4007,"line":4008},[4005,19169,19170],{"class":4190},"\u002F\u002F TrimPrefix \u002F TrimSuffix — видаляє ТІЛЬКИ ПОВНИЙ префікс\u002Fсуфікс\n",[4005,19172,19173,19175,19177,19179,19181,19184,19186,19188,19190],{"class":4007,"line":4014},[4005,19174,12438],{"class":4174},[4005,19176,3769],{"class":4182},[4005,19178,18747],{"class":4302},[4005,19180,4611],{"class":4182},[4005,19182,19183],{"class":4330},"\"https:\u002F\u002Fexample.com\"",[4005,19185,3836],{"class":4182},[4005,19187,13124],{"class":4330},[4005,19189,5196],{"class":4182},[4005,19191,19192],{"class":4190},"\u002F\u002F example.com\n",[4005,19194,19195,19197,19199,19201,19203,19205,19207,19210,19212],{"class":4007,"line":4020},[4005,19196,12438],{"class":4174},[4005,19198,3769],{"class":4182},[4005,19200,18747],{"class":4302},[4005,19202,4611],{"class":4182},[4005,19204,19183],{"class":4330},[4005,19206,3836],{"class":4182},[4005,19208,19209],{"class":4330},"\"http:\u002F\u002F\"",[4005,19211,5381],{"class":4182},[4005,19213,19214],{"class":4190},"\u002F\u002F https:\u002F\u002Fexample.com (без змін!)\n",[4005,19216,19217],{"class":4007,"line":4026},[4005,19218,4036],{"emptyLinePlaceholder":4035},[4005,19220,19221],{"class":4007,"line":4032},[4005,19222,19223],{"class":4190},"\u002F\u002F Trim — видаляє ВСІ символи зі списку\n",[4005,19225,19226,19228,19230,19232,19234,19237,19239,19241,19243],{"class":4007,"line":4039},[4005,19227,12438],{"class":4174},[4005,19229,3769],{"class":4182},[4005,19231,17709],{"class":4302},[4005,19233,4611],{"class":4182},[4005,19235,19236],{"class":4330},"\"###hello###\"",[4005,19238,3836],{"class":4182},[4005,19240,18164],{"class":4330},[4005,19242,5196],{"class":4182},[4005,19244,19245],{"class":4190},"\u002F\u002F hello (всі '#' видалено)\n",[12536,19247,19248,19498,19502],{"icon":12743,"label":2367},[3984,19249,19251],{"className":12746,"code":19250,"language":12748,"meta":3992,"style":3992},"public class StringPrefixSuffix {\n    public static void main(String[] args) {\n        \u002F\u002F Немає TrimPrefix \u002F TrimSuffix — треба вручну\n        \n        \u002F\u002F 1. Видалення префіксу\n        String url = \"https:\u002F\u002Fexample.com\u002Fapi\";\n        String domain = url.startsWith(\"https:\u002F\u002F\") \n            ? url.substring(7) \n            : url;\n        System.out.println(domain);  \u002F\u002F example.com\u002Fapi\n        \n        \u002F\u002F 2. Видалення суфіксу\n        String filename = \"report.pdf\";\n        String name = filename.endsWith(\".pdf\")\n            ? filename.substring(0, filename.length() - 4)\n            : filename;\n        System.out.println(name);  \u002F\u002F report\n        \n        \u002F\u002F 3. Apache Commons Lang: StringUtils\n        \u002F\u002F String domain = StringUtils.removeStart(url, \"https:\u002F\u002F\");\n        \u002F\u002F String name = StringUtils.removeEnd(filename, \".pdf\");\n    }\n}\n",[3753,19252,19253,19264,19284,19289,19293,19298,19311,19333,19350,19358,19375,19379,19384,19397,19418,19447,19454,19471,19475,19480,19485,19490,19494],{"__ignoreMap":3992},[4005,19254,19255,19257,19259,19262],{"class":4007,"line":4008},[4005,19256,12755],{"class":4171},[4005,19258,12758],{"class":4171},[4005,19260,19261],{"class":4178}," StringPrefixSuffix",[4005,19263,5073],{"class":4182},[4005,19265,19266,19268,19270,19272,19274,19276,19278,19280,19282],{"class":4007,"line":4014},[4005,19267,12768],{"class":4171},[4005,19269,12771],{"class":4171},[4005,19271,12774],{"class":4178},[4005,19273,5764],{"class":4302},[4005,19275,4611],{"class":4182},[4005,19277,7343],{"class":4178},[4005,19279,12783],{"class":4182},[4005,19281,12786],{"class":4174},[4005,19283,12789],{"class":4182},[4005,19285,19286],{"class":4007,"line":4020},[4005,19287,19288],{"class":4190},"        \u002F\u002F Немає TrimPrefix \u002F TrimSuffix — треба вручну\n",[4005,19290,19291],{"class":4007,"line":4026},[4005,19292,12810],{"class":4182},[4005,19294,19295],{"class":4007,"line":4032},[4005,19296,19297],{"class":4190},"        \u002F\u002F 1. Видалення префіксу\n",[4005,19299,19300,19302,19304,19306,19309],{"class":4007,"line":4039},[4005,19301,12794],{"class":4178},[4005,19303,13421],{"class":4174},[4005,19305,4183],{"class":4182},[4005,19307,19308],{"class":4330},"\"https:\u002F\u002Fexample.com\u002Fapi\"",[4005,19310,12805],{"class":4182},[4005,19312,19313,19315,19318,19320,19322,19324,19326,19328,19330],{"class":4007,"line":4045},[4005,19314,12794],{"class":4178},[4005,19316,19317],{"class":4174}," domain",[4005,19319,4183],{"class":4182},[4005,19321,13119],{"class":4174},[4005,19323,3769],{"class":4182},[4005,19325,13478],{"class":4302},[4005,19327,4611],{"class":4182},[4005,19329,13124],{"class":4330},[4005,19331,19332],{"class":4182},") \n",[4005,19334,19335,19338,19340,19342,19344,19346,19348],{"class":4007,"line":4051},[4005,19336,19337],{"class":4836},"            ?",[4005,19339,13421],{"class":4174},[4005,19341,3769],{"class":4182},[4005,19343,10908],{"class":4302},[4005,19345,4611],{"class":4182},[4005,19347,13258],{"class":4186},[4005,19349,19332],{"class":4182},[4005,19351,19352,19355],{"class":4007,"line":4057},[4005,19353,19354],{"class":4836},"            :",[4005,19356,19357],{"class":4182}," url;\n",[4005,19359,19360,19362,19364,19366,19368,19370,19373],{"class":4007,"line":4063},[4005,19361,12815],{"class":4174},[4005,19363,3769],{"class":4182},[4005,19365,12820],{"class":4174},[4005,19367,3769],{"class":4182},[4005,19369,12825],{"class":4302},[4005,19371,19372],{"class":4182},"(domain);  ",[4005,19374,18881],{"class":4190},[4005,19376,19377],{"class":4007,"line":4069},[4005,19378,12810],{"class":4182},[4005,19380,19381],{"class":4007,"line":4075},[4005,19382,19383],{"class":4190},"        \u002F\u002F 2. Видалення суфіксу\n",[4005,19385,19386,19388,19390,19392,19395],{"class":4007,"line":4081},[4005,19387,12794],{"class":4178},[4005,19389,13435],{"class":4174},[4005,19391,4183],{"class":4182},[4005,19393,19394],{"class":4330},"\"report.pdf\"",[4005,19396,12805],{"class":4182},[4005,19398,19399,19401,19404,19406,19408,19410,19412,19414,19416],{"class":4007,"line":4086},[4005,19400,12794],{"class":4178},[4005,19402,19403],{"class":4174}," name",[4005,19405,4183],{"class":4182},[4005,19407,13169],{"class":4174},[4005,19409,3769],{"class":4182},[4005,19411,13528],{"class":4302},[4005,19413,4611],{"class":4182},[4005,19415,18972],{"class":4330},[4005,19417,4482],{"class":4182},[4005,19419,19420,19422,19424,19426,19428,19430,19432,19434,19436,19438,19440,19443,19445],{"class":4007,"line":4092},[4005,19421,19337],{"class":4836},[4005,19423,13435],{"class":4174},[4005,19425,3769],{"class":4182},[4005,19427,10908],{"class":4302},[4005,19429,4611],{"class":4182},[4005,19431,4200],{"class":4186},[4005,19433,3836],{"class":4182},[4005,19435,13169],{"class":4174},[4005,19437,3769],{"class":4182},[4005,19439,14543],{"class":4302},[4005,19441,19442],{"class":4182},"() - ",[4005,19444,8245],{"class":4186},[4005,19446,4482],{"class":4182},[4005,19448,19449,19451],{"class":4007,"line":4098},[4005,19450,19354],{"class":4836},[4005,19452,19453],{"class":4182}," filename;\n",[4005,19455,19456,19458,19460,19462,19464,19466,19469],{"class":4007,"line":4104},[4005,19457,12815],{"class":4174},[4005,19459,3769],{"class":4182},[4005,19461,12820],{"class":4174},[4005,19463,3769],{"class":4182},[4005,19465,12825],{"class":4302},[4005,19467,19468],{"class":4182},"(name);  ",[4005,19470,18991],{"class":4190},[4005,19472,19473],{"class":4007,"line":4110},[4005,19474,12810],{"class":4182},[4005,19476,19477],{"class":4007,"line":4937},[4005,19478,19479],{"class":4190},"        \u002F\u002F 3. Apache Commons Lang: StringUtils\n",[4005,19481,19482],{"class":4007,"line":4942},[4005,19483,19484],{"class":4190},"        \u002F\u002F String domain = StringUtils.removeStart(url, \"https:\u002F\u002F\");\n",[4005,19486,19487],{"class":4007,"line":4947},[4005,19488,19489],{"class":4190},"        \u002F\u002F String name = StringUtils.removeEnd(filename, \".pdf\");\n",[4005,19491,19492],{"class":4007,"line":4953},[4005,19493,5127],{"class":4182},[4005,19495,19496],{"class":4007,"line":4960},[4005,19497,4078],{"class":4182},[3908,19499,19500],{},[3871,19501,12950],{},[3746,19503,19504,19513,19521],{},[3749,19505,19506],{},[3871,19507,19508,19509,15549,19511],{},"Немає вбудованих ",[3753,19510,18747],{},[3753,19512,18750],{},[3749,19514,19515,19516,15549,19519],{},"Треба писати вручну через ",[3753,19517,19518],{},"startsWith()",[3753,19520,13671],{},[3749,19522,19523,19524,5032],{},"Або використовувати Apache Commons Lang (",[3753,19525,19526],{},"StringUtils.removeStart\u002FEnd",[3900,19528],{},[9014,19530,19532,19533,3836,19536,3836,19539],{"id":19531},"видалення-за-умовою-trimfunc-trimleftfunc-trimrightfunc","Видалення за умовою: ",[3753,19534,19535],{},"TrimFunc",[3753,19537,19538],{},"TrimLeftFunc",[3753,19540,19541],{},"TrimRightFunc",[3908,19543,19544,19547],{},[3871,19545,19546],{},"Для складних випадків:"," видалення символів, які відповідають певній умові (наприклад, усі цифри, розділові знаки, нелатинські літери).",[12533,19549,19550,20115],{},[12536,19551,19552,19987,19991,20090,20097],{"icon":12538,"label":12539},[3984,19553,19555],{"className":4162,"code":19554,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"strings\"\n    \"unicode\"\n)\n\nfunc main() {\n    \u002F\u002F 1. TrimFunc — видаляє символи, для яких функція повертає true\n    text := \"!!!Hello, World!!!\"\n    \n    \u002F\u002F Видаляємо всі розділові знаки з обох боків\n    cleaned := strings.TrimFunc(text, func(r rune) bool {\n        return unicode.IsPunct(r)  \u002F\u002F Повертає true для !, ?, ., тощо\n    })\n    fmt.Println(cleaned)  \u002F\u002F Hello, World\n    \n    \u002F\u002F 2. Видаляємо цифри з початку\n    code := \"0001234ABC\"\n    withoutDigits := strings.TrimLeftFunc(code, func(r rune) bool {\n        return unicode.IsDigit(r)\n    })\n    fmt.Println(withoutDigits)  \u002F\u002F ABC\n    \n    \u002F\u002F 3. Видаляємо пробіли та цифри з кінця\n    log := \"Connection timeout 500   \"\n    trimmed := strings.TrimRightFunc(log, func(r rune) bool {\n        return unicode.IsSpace(r) || unicode.IsDigit(r)\n    })\n    fmt.Println(trimmed)  \u002F\u002F Connection timeout\n    \n    \u002F\u002F 4. Приклад: видалення не-ASCII символів\n    mixed := \"💎Hello世界\"\n    ascii := strings.TrimFunc(mixed, func(r rune) bool {\n        return r > 127  \u002F\u002F Видаляємо все, що не ASCII\n    })\n    fmt.Println(ascii)  \u002F\u002F Hello\n}\n",[3753,19556,19557,19563,19567,19573,19577,19581,19586,19590,19594,19602,19607,19616,19620,19625,19657,19677,19682,19699,19703,19708,19717,19750,19767,19771,19789,19793,19798,19808,19842,19871,19875,19893,19897,19902,19912,19946,19961,19965,19983],{"__ignoreMap":3992},[4005,19558,19559,19561],{"class":4007,"line":4008},[4005,19560,5739],{"class":4171},[4005,19562,5742],{"class":4178},[4005,19564,19565],{"class":4007,"line":4014},[4005,19566,4036],{"emptyLinePlaceholder":4035},[4005,19568,19569,19571],{"class":4007,"line":4020},[4005,19570,3917],{"class":4836},[4005,19572,4439],{"class":4182},[4005,19574,19575],{"class":4007,"line":4026},[4005,19576,4843],{"class":4330},[4005,19578,19579],{"class":4007,"line":4032},[4005,19580,12569],{"class":4330},[4005,19582,19583],{"class":4007,"line":4039},[4005,19584,19585],{"class":4330},"    \"unicode\"\n",[4005,19587,19588],{"class":4007,"line":4045},[4005,19589,4482],{"class":4182},[4005,19591,19592],{"class":4007,"line":4051},[4005,19593,4036],{"emptyLinePlaceholder":4035},[4005,19595,19596,19598,19600],{"class":4007,"line":4057},[4005,19597,4299],{"class":4171},[4005,19599,5764],{"class":4302},[4005,19601,4306],{"class":4182},[4005,19603,19604],{"class":4007,"line":4063},[4005,19605,19606],{"class":4190},"    \u002F\u002F 1. TrimFunc — видаляє символи, для яких функція повертає true\n",[4005,19608,19609,19611,19613],{"class":4007,"line":4069},[4005,19610,11425],{"class":4174},[4005,19612,4314],{"class":4182},[4005,19614,19615],{"class":4330},"\"!!!Hello, World!!!\"\n",[4005,19617,19618],{"class":4007,"line":4075},[4005,19619,5214],{"class":4182},[4005,19621,19622],{"class":4007,"line":4081},[4005,19623,19624],{"class":4190},"    \u002F\u002F Видаляємо всі розділові знаки з обох боків\n",[4005,19626,19627,19629,19631,19633,19635,19637,19639,19641,19643,19645,19647,19649,19651,19653,19655],{"class":4007,"line":4086},[4005,19628,17810],{"class":4174},[4005,19630,4314],{"class":4182},[4005,19632,12438],{"class":4174},[4005,19634,3769],{"class":4182},[4005,19636,19535],{"class":4302},[4005,19638,4611],{"class":4182},[4005,19640,3989],{"class":4174},[4005,19642,3836],{"class":4182},[4005,19644,4299],{"class":4171},[4005,19646,4611],{"class":4182},[4005,19648,12146],{"class":4174},[4005,19650,12339],{"class":4178},[4005,19652,4498],{"class":4182},[4005,19654,8505],{"class":4178},[4005,19656,5073],{"class":4182},[4005,19658,19659,19661,19663,19665,19668,19670,19672,19674],{"class":4007,"line":4092},[4005,19660,5119],{"class":4836},[4005,19662,18488],{"class":4174},[4005,19664,3769],{"class":4182},[4005,19666,19667],{"class":4302},"IsPunct",[4005,19669,4611],{"class":4182},[4005,19671,12146],{"class":4174},[4005,19673,5196],{"class":4182},[4005,19675,19676],{"class":4190},"\u002F\u002F Повертає true для !, ?, ., тощо\n",[4005,19678,19679],{"class":4007,"line":4098},[4005,19680,19681],{"class":4182},"    })\n",[4005,19683,19684,19686,19688,19690,19692,19694,19696],{"class":4007,"line":4104},[4005,19685,5370],{"class":4174},[4005,19687,3769],{"class":4182},[4005,19689,5348],{"class":4302},[4005,19691,4611],{"class":4182},[4005,19693,17860],{"class":4174},[4005,19695,5196],{"class":4182},[4005,19697,19698],{"class":4190},"\u002F\u002F Hello, World\n",[4005,19700,19701],{"class":4007,"line":4110},[4005,19702,5214],{"class":4182},[4005,19704,19705],{"class":4007,"line":4937},[4005,19706,19707],{"class":4190},"    \u002F\u002F 2. Видаляємо цифри з початку\n",[4005,19709,19710,19712,19714],{"class":4007,"line":4942},[4005,19711,18002],{"class":4174},[4005,19713,4314],{"class":4182},[4005,19715,19716],{"class":4330},"\"0001234ABC\"\n",[4005,19718,19719,19722,19724,19726,19728,19730,19732,19734,19736,19738,19740,19742,19744,19746,19748],{"class":4007,"line":4947},[4005,19720,19721],{"class":4174},"    withoutDigits",[4005,19723,4314],{"class":4182},[4005,19725,12438],{"class":4174},[4005,19727,3769],{"class":4182},[4005,19729,19538],{"class":4302},[4005,19731,4611],{"class":4182},[4005,19733,3753],{"class":4174},[4005,19735,3836],{"class":4182},[4005,19737,4299],{"class":4171},[4005,19739,4611],{"class":4182},[4005,19741,12146],{"class":4174},[4005,19743,12339],{"class":4178},[4005,19745,4498],{"class":4182},[4005,19747,8505],{"class":4178},[4005,19749,5073],{"class":4182},[4005,19751,19752,19754,19756,19758,19761,19763,19765],{"class":4007,"line":4953},[4005,19753,5119],{"class":4836},[4005,19755,18488],{"class":4174},[4005,19757,3769],{"class":4182},[4005,19759,19760],{"class":4302},"IsDigit",[4005,19762,4611],{"class":4182},[4005,19764,12146],{"class":4174},[4005,19766,4482],{"class":4182},[4005,19768,19769],{"class":4007,"line":4960},[4005,19770,19681],{"class":4182},[4005,19772,19773,19775,19777,19779,19781,19784,19786],{"class":4007,"line":4973},[4005,19774,5370],{"class":4174},[4005,19776,3769],{"class":4182},[4005,19778,5348],{"class":4302},[4005,19780,4611],{"class":4182},[4005,19782,19783],{"class":4174},"withoutDigits",[4005,19785,5196],{"class":4182},[4005,19787,19788],{"class":4190},"\u002F\u002F ABC\n",[4005,19790,19791],{"class":4007,"line":4985},[4005,19792,5214],{"class":4182},[4005,19794,19795],{"class":4007,"line":7813},[4005,19796,19797],{"class":4190},"    \u002F\u002F 3. Видаляємо пробіли та цифри з кінця\n",[4005,19799,19800,19803,19805],{"class":4007,"line":7819},[4005,19801,19802],{"class":4174},"    log",[4005,19804,4314],{"class":4182},[4005,19806,19807],{"class":4330},"\"Connection timeout 500   \"\n",[4005,19809,19810,19813,19815,19817,19819,19821,19823,19826,19828,19830,19832,19834,19836,19838,19840],{"class":4007,"line":7826},[4005,19811,19812],{"class":4174},"    trimmed",[4005,19814,4314],{"class":4182},[4005,19816,12438],{"class":4174},[4005,19818,3769],{"class":4182},[4005,19820,19541],{"class":4302},[4005,19822,4611],{"class":4182},[4005,19824,19825],{"class":4174},"log",[4005,19827,3836],{"class":4182},[4005,19829,4299],{"class":4171},[4005,19831,4611],{"class":4182},[4005,19833,12146],{"class":4174},[4005,19835,12339],{"class":4178},[4005,19837,4498],{"class":4182},[4005,19839,8505],{"class":4178},[4005,19841,5073],{"class":4182},[4005,19843,19844,19846,19848,19850,19853,19855,19857,19859,19861,19863,19865,19867,19869],{"class":4007,"line":7839},[4005,19845,5119],{"class":4836},[4005,19847,18488],{"class":4174},[4005,19849,3769],{"class":4182},[4005,19851,19852],{"class":4302},"IsSpace",[4005,19854,4611],{"class":4182},[4005,19856,12146],{"class":4174},[4005,19858,13177],{"class":4182},[4005,19860,18526],{"class":4174},[4005,19862,3769],{"class":4182},[4005,19864,19760],{"class":4302},[4005,19866,4611],{"class":4182},[4005,19868,12146],{"class":4174},[4005,19870,4482],{"class":4182},[4005,19872,19873],{"class":4007,"line":7864},[4005,19874,19681],{"class":4182},[4005,19876,19877,19879,19881,19883,19885,19888,19890],{"class":4007,"line":7872},[4005,19878,5370],{"class":4174},[4005,19880,3769],{"class":4182},[4005,19882,5348],{"class":4302},[4005,19884,4611],{"class":4182},[4005,19886,19887],{"class":4174},"trimmed",[4005,19889,5196],{"class":4182},[4005,19891,19892],{"class":4190},"\u002F\u002F Connection timeout\n",[4005,19894,19895],{"class":4007,"line":7881},[4005,19896,5214],{"class":4182},[4005,19898,19899],{"class":4007,"line":7890},[4005,19900,19901],{"class":4190},"    \u002F\u002F 4. Приклад: видалення не-ASCII символів\n",[4005,19903,19904,19907,19909],{"class":4007,"line":7895},[4005,19905,19906],{"class":4174},"    mixed",[4005,19908,4314],{"class":4182},[4005,19910,19911],{"class":4330},"\"💎Hello世界\"\n",[4005,19913,19914,19917,19919,19921,19923,19925,19927,19930,19932,19934,19936,19938,19940,19942,19944],{"class":4007,"line":7900},[4005,19915,19916],{"class":4174},"    ascii",[4005,19918,4314],{"class":4182},[4005,19920,12438],{"class":4174},[4005,19922,3769],{"class":4182},[4005,19924,19535],{"class":4302},[4005,19926,4611],{"class":4182},[4005,19928,19929],{"class":4174},"mixed",[4005,19931,3836],{"class":4182},[4005,19933,4299],{"class":4171},[4005,19935,4611],{"class":4182},[4005,19937,12146],{"class":4174},[4005,19939,12339],{"class":4178},[4005,19941,4498],{"class":4182},[4005,19943,8505],{"class":4178},[4005,19945,5073],{"class":4182},[4005,19947,19948,19950,19953,19955,19958],{"class":4007,"line":7909},[4005,19949,5119],{"class":4836},[4005,19951,19952],{"class":4174}," r",[4005,19954,10353],{"class":4182},[4005,19956,19957],{"class":4186},"127",[4005,19959,19960],{"class":4190},"  \u002F\u002F Видаляємо все, що не ASCII\n",[4005,19962,19963],{"class":4007,"line":7915},[4005,19964,19681],{"class":4182},[4005,19966,19967,19969,19971,19973,19975,19978,19980],{"class":4007,"line":7921},[4005,19968,5370],{"class":4174},[4005,19970,3769],{"class":4182},[4005,19972,5348],{"class":4302},[4005,19974,4611],{"class":4182},[4005,19976,19977],{"class":4174},"ascii",[4005,19979,5196],{"class":4182},[4005,19981,19982],{"class":4190},"\u002F\u002F Hello\n",[4005,19984,19985],{"class":4007,"line":7938},[4005,19986,4078],{"class":4182},[3908,19988,19989],{},[3871,19990,13297],{},[3984,19992,19994],{"className":4162,"code":19993,"language":4164,"meta":3992,"style":3992},"func TrimFunc(s string, f func(rune) bool) string\nfunc TrimLeftFunc(s string, f func(rune) bool) string\nfunc TrimRightFunc(s string, f func(rune) bool) string\n",[3753,19995,19996,20028,20059],{"__ignoreMap":3992},[4005,19997,19998,20000,20003,20005,20007,20009,20011,20013,20016,20018,20020,20022,20024,20026],{"class":4007,"line":4008},[4005,19999,4299],{"class":4171},[4005,20001,20002],{"class":4302}," TrimFunc",[4005,20004,4611],{"class":4182},[4005,20006,7550],{"class":4174},[4005,20008,4237],{"class":4178},[4005,20010,3836],{"class":4182},[4005,20012,5183],{"class":4174},[4005,20014,20015],{"class":4171}," func",[4005,20017,4611],{"class":4182},[4005,20019,8242],{"class":4178},[4005,20021,4498],{"class":4182},[4005,20023,8505],{"class":4178},[4005,20025,4498],{"class":4182},[4005,20027,7495],{"class":4178},[4005,20029,20030,20032,20035,20037,20039,20041,20043,20045,20047,20049,20051,20053,20055,20057],{"class":4007,"line":4014},[4005,20031,4299],{"class":4171},[4005,20033,20034],{"class":4302}," TrimLeftFunc",[4005,20036,4611],{"class":4182},[4005,20038,7550],{"class":4174},[4005,20040,4237],{"class":4178},[4005,20042,3836],{"class":4182},[4005,20044,5183],{"class":4174},[4005,20046,20015],{"class":4171},[4005,20048,4611],{"class":4182},[4005,20050,8242],{"class":4178},[4005,20052,4498],{"class":4182},[4005,20054,8505],{"class":4178},[4005,20056,4498],{"class":4182},[4005,20058,7495],{"class":4178},[4005,20060,20061,20063,20066,20068,20070,20072,20074,20076,20078,20080,20082,20084,20086,20088],{"class":4007,"line":4020},[4005,20062,4299],{"class":4171},[4005,20064,20065],{"class":4302}," TrimRightFunc",[4005,20067,4611],{"class":4182},[4005,20069,7550],{"class":4174},[4005,20071,4237],{"class":4178},[4005,20073,3836],{"class":4182},[4005,20075,5183],{"class":4174},[4005,20077,20015],{"class":4171},[4005,20079,4611],{"class":4182},[4005,20081,8242],{"class":4178},[4005,20083,4498],{"class":4182},[4005,20085,8505],{"class":4178},[4005,20087,4498],{"class":4182},[4005,20089,7495],{"class":4178},[3908,20091,20092],{},[3871,20093,20094,20095,5831],{},"Параметр ",[3753,20096,5183],{},[3746,20098,20099,20104,20110],{},[3749,20100,20101,20102,5032],{},"Приймає кожен символ (",[3753,20103,8242],{},[3749,20105,20106,20107,20109],{},"Повертає ",[3753,20108,4689],{}," → символ видаляється",[3749,20111,20106,20112,20114],{},[3753,20113,4206],{}," → зупиняємо видалення",[12536,20116,20117,20359,20363],{"icon":12743,"label":2367},[3984,20118,20120],{"className":12746,"code":20119,"language":12748,"meta":3992,"style":3992},"public class StringTrimFunc {\n    public static void main(String[] args) {\n        \u002F\u002F Немає TrimFunc — треба regex або вручну\n        \n        String text = \"!!!Hello, World!!!\";\n        \n        \u002F\u002F Regex: видаляємо розділові знаки\n        String cleaned = text.replaceAll(\"^[\\\\p{Punct}]+|[\\\\p{Punct}]+$\", \"\");\n        System.out.println(cleaned);  \u002F\u002F Hello, World\n        \n        \u002F\u002F Вручну через цикл\n        String code = \"0001234ABC\";\n        int start = 0;\n        while (start \u003C code.length() && Character.isDigit(code.charAt(start))) {\n            start++;\n        }\n        String withoutDigits = code.substring(start);\n        System.out.println(withoutDigits);  \u002F\u002F ABC\n    }\n}\n",[3753,20121,20122,20133,20153,20158,20162,20175,20179,20184,20219,20236,20240,20245,20258,20271,20307,20312,20316,20334,20351,20355],{"__ignoreMap":3992},[4005,20123,20124,20126,20128,20131],{"class":4007,"line":4008},[4005,20125,12755],{"class":4171},[4005,20127,12758],{"class":4171},[4005,20129,20130],{"class":4178}," StringTrimFunc",[4005,20132,5073],{"class":4182},[4005,20134,20135,20137,20139,20141,20143,20145,20147,20149,20151],{"class":4007,"line":4014},[4005,20136,12768],{"class":4171},[4005,20138,12771],{"class":4171},[4005,20140,12774],{"class":4178},[4005,20142,5764],{"class":4302},[4005,20144,4611],{"class":4182},[4005,20146,7343],{"class":4178},[4005,20148,12783],{"class":4182},[4005,20150,12786],{"class":4174},[4005,20152,12789],{"class":4182},[4005,20154,20155],{"class":4007,"line":4020},[4005,20156,20157],{"class":4190},"        \u002F\u002F Немає TrimFunc — треба regex або вручну\n",[4005,20159,20160],{"class":4007,"line":4026},[4005,20161,12810],{"class":4182},[4005,20163,20164,20166,20168,20170,20173],{"class":4007,"line":4032},[4005,20165,12794],{"class":4178},[4005,20167,12354],{"class":4174},[4005,20169,4183],{"class":4182},[4005,20171,20172],{"class":4330},"\"!!!Hello, World!!!\"",[4005,20174,12805],{"class":4182},[4005,20176,20177],{"class":4007,"line":4039},[4005,20178,12810],{"class":4182},[4005,20180,20181],{"class":4007,"line":4045},[4005,20182,20183],{"class":4190},"        \u002F\u002F Regex: видаляємо розділові знаки\n",[4005,20185,20186,20188,20190,20192,20194,20196,20198,20200,20203,20205,20208,20210,20213,20215,20217],{"class":4007,"line":4051},[4005,20187,12794],{"class":4178},[4005,20189,18437],{"class":4174},[4005,20191,4183],{"class":4182},[4005,20193,3989],{"class":4174},[4005,20195,3769],{"class":4182},[4005,20197,16259],{"class":4302},[4005,20199,4611],{"class":4182},[4005,20201,20202],{"class":4330},"\"^[",[4005,20204,11066],{"class":7964},[4005,20206,20207],{"class":4330},"p{Punct}]+|[",[4005,20209,11066],{"class":7964},[4005,20211,20212],{"class":4330},"p{Punct}]+$\"",[4005,20214,3836],{"class":4182},[4005,20216,4203],{"class":4330},[4005,20218,12932],{"class":4182},[4005,20220,20221,20223,20225,20227,20229,20231,20234],{"class":4007,"line":4057},[4005,20222,12815],{"class":4174},[4005,20224,3769],{"class":4182},[4005,20226,12820],{"class":4174},[4005,20228,3769],{"class":4182},[4005,20230,12825],{"class":4302},[4005,20232,20233],{"class":4182},"(cleaned);  ",[4005,20235,19698],{"class":4190},[4005,20237,20238],{"class":4007,"line":4063},[4005,20239,12810],{"class":4182},[4005,20241,20242],{"class":4007,"line":4069},[4005,20243,20244],{"class":4190},"        \u002F\u002F Вручну через цикл\n",[4005,20246,20247,20249,20251,20253,20256],{"class":4007,"line":4075},[4005,20248,12794],{"class":4178},[4005,20250,18628],{"class":4174},[4005,20252,4183],{"class":4182},[4005,20254,20255],{"class":4330},"\"0001234ABC\"",[4005,20257,12805],{"class":4182},[4005,20259,20260,20262,20265,20267,20269],{"class":4007,"line":4081},[4005,20261,14518],{"class":4178},[4005,20263,20264],{"class":4174}," start",[4005,20266,4183],{"class":4182},[4005,20268,4200],{"class":4186},[4005,20270,12805],{"class":4182},[4005,20272,20273,20276,20279,20281,20283,20285,20288,20291,20293,20296,20298,20300,20302,20304],{"class":4007,"line":4086},[4005,20274,20275],{"class":4836},"        while",[4005,20277,20278],{"class":4182}," (start \u003C ",[4005,20280,3753],{"class":4174},[4005,20282,3769],{"class":4182},[4005,20284,14543],{"class":4302},[4005,20286,20287],{"class":4182},"() && ",[4005,20289,20290],{"class":4174},"Character",[4005,20292,3769],{"class":4182},[4005,20294,20295],{"class":4302},"isDigit",[4005,20297,4611],{"class":4182},[4005,20299,3753],{"class":4174},[4005,20301,3769],{"class":4182},[4005,20303,15395],{"class":4302},[4005,20305,20306],{"class":4182},"(start))) {\n",[4005,20308,20309],{"class":4007,"line":4092},[4005,20310,20311],{"class":4182},"            start++;\n",[4005,20313,20314],{"class":4007,"line":4098},[4005,20315,12937],{"class":4182},[4005,20317,20318,20320,20323,20325,20327,20329,20331],{"class":4007,"line":4104},[4005,20319,12794],{"class":4178},[4005,20321,20322],{"class":4174}," withoutDigits",[4005,20324,4183],{"class":4182},[4005,20326,3753],{"class":4174},[4005,20328,3769],{"class":4182},[4005,20330,10908],{"class":4302},[4005,20332,20333],{"class":4182},"(start);\n",[4005,20335,20336,20338,20340,20342,20344,20346,20349],{"class":4007,"line":4110},[4005,20337,12815],{"class":4174},[4005,20339,3769],{"class":4182},[4005,20341,12820],{"class":4174},[4005,20343,3769],{"class":4182},[4005,20345,12825],{"class":4302},[4005,20347,20348],{"class":4182},"(withoutDigits);  ",[4005,20350,19788],{"class":4190},[4005,20352,20353],{"class":4007,"line":4937},[4005,20354,5127],{"class":4182},[4005,20356,20357],{"class":4007,"line":4942},[4005,20358,4078],{"class":4182},[3908,20360,20361],{},[3871,20362,12950],{},[3746,20364,20365,20372],{},[3749,20366,20367,20371],{},[3871,20368,14596,20369],{},[3753,20370,19535],{}," — треба regex або писати цикл",[3749,20373,20374,20375,3836,20378,3836,20381],{},"Regex для складних умов: ",[3753,20376,20377],{},"\\\\p{Punct}",[3753,20379,20380],{},"\\\\d",[3753,20382,20383],{},"\\\\s",[4748,20385,20387,20395],{"icon":20386},"i-lucide-sparkles",[3908,20388,20389],{},[3871,20390,20391,20392,20394],{},"Корисні функції з ",[3753,20393,18526],{}," для TrimFunc:",[3746,20396,20397,20403,20409,20415,20421],{},[3749,20398,20399,20402],{},[3753,20400,20401],{},"unicode.IsSpace(r)"," — пробіли, таби, переноси",[3749,20404,20405,20408],{},[3753,20406,20407],{},"unicode.IsDigit(r)"," — цифри 0-9",[3749,20410,20411,20414],{},[3753,20412,20413],{},"unicode.IsLetter(r)"," — літери будь-якого алфавіту",[3749,20416,20417,20420],{},[3753,20418,20419],{},"unicode.IsPunct(r)"," — розділові знаки (!, ?, ., тощо)",[3749,20422,20423,20426],{},[3753,20424,20425],{},"unicode.IsControl(r)"," — керуючі символи (\\n, \\t, \\r)",[3900,20428],{},[3903,20430,20432,20433],{"id":20431},"форматоване-виведення-пакет-fmt","Форматоване виведення: пакет ",[3753,20434,3785],{},[3908,20436,20437,20438,4761,20440,20443],{},"Пакет ",[3753,20439,3785],{},[3758,20441,20442],{},"format",") надає функції для форматованого виведення та читання даних. Це один з найчастіше використовуваних пакетів у Go для логування, відлагодження та роботи з текстом.",[3976,20445,20447],{"id":20446},"основні-функції-виведення","Основні функції виведення",[5991,20449,20450,20460],{},[5994,20451,20452],{},[5997,20453,20454,20456,20458],{},[6000,20455,8718],{},[6000,20457,11814],{},[6000,20459,6005],{},[6010,20461,20462,20480,20498],{},[5997,20463,20464,20469,20472],{},[6015,20465,20466],{},[3753,20467,20468],{},"fmt.Print()",[6015,20470,20471],{},"Виводить аргументи без пробілів",[6015,20473,20474,8996,20477],{},[3753,20475,20476],{},"fmt.Print(\"Hello\", \"World\")",[3753,20478,20479],{},"HelloWorld",[5997,20481,20482,20487,20490],{},[6015,20483,20484],{},[3753,20485,20486],{},"fmt.Println()",[6015,20488,20489],{},"Виводить аргументи з пробілами + перенос рядка",[6015,20491,20492,8996,20495],{},[3753,20493,20494],{},"fmt.Println(\"Hello\", \"World\")",[3753,20496,20497],{},"Hello World\\n",[5997,20499,20500,20505,20508],{},[6015,20501,20502],{},[3753,20503,20504],{},"fmt.Printf()",[6015,20506,20507],{},"Форматоване виведення за шаблоном",[6015,20509,20510],{},[3753,20511,20512],{},"fmt.Printf(\"User %s has %d points\", name, score)",[3908,20514,20515],{},[3871,20516,20517],{},"Приклад:",[3984,20519,20521],{"className":4162,"code":20520,"language":4164,"meta":3992,"style":3992},"name := \"Олег\"\nage := 25\n\nfmt.Print(\"Привіт\")              \u002F\u002F Привіт (без переносу)\nfmt.Println(\"Світ\")              \u002F\u002F Світ (з переносом)\nfmt.Printf(\"Мене звати %s, мені %d років\\n\", name, age)\n\u002F\u002F Вивід: Мене звати Олег, мені 25 років\n",[3753,20522,20523,20532,20541,20545,20564,20582,20619],{"__ignoreMap":3992},[4005,20524,20525,20527,20529],{"class":4007,"line":4008},[4005,20526,4650],{"class":4174},[4005,20528,4314],{"class":4182},[4005,20530,20531],{"class":4330},"\"Олег\"\n",[4005,20533,20534,20536,20538],{"class":4007,"line":4014},[4005,20535,4655],{"class":4174},[4005,20537,4314],{"class":4182},[4005,20539,20540],{"class":4186},"25\n",[4005,20542,20543],{"class":4007,"line":4020},[4005,20544,4036],{"emptyLinePlaceholder":4035},[4005,20546,20547,20549,20551,20554,20556,20558,20561],{"class":4007,"line":4026},[4005,20548,3785],{"class":4174},[4005,20550,3769],{"class":4182},[4005,20552,20553],{"class":4302},"Print",[4005,20555,4611],{"class":4182},[4005,20557,11871],{"class":4330},[4005,20559,20560],{"class":4182},")              ",[4005,20562,20563],{"class":4190},"\u002F\u002F Привіт (без переносу)\n",[4005,20565,20566,20568,20570,20572,20574,20577,20579],{"class":4007,"line":4032},[4005,20567,3785],{"class":4174},[4005,20569,3769],{"class":4182},[4005,20571,5348],{"class":4302},[4005,20573,4611],{"class":4182},[4005,20575,20576],{"class":4330},"\"Світ\"",[4005,20578,20560],{"class":4182},[4005,20580,20581],{"class":4190},"\u002F\u002F Світ (з переносом)\n",[4005,20583,20584,20586,20588,20590,20592,20595,20597,20600,20602,20605,20607,20609,20611,20613,20615,20617],{"class":4007,"line":4039},[4005,20585,3785],{"class":4174},[4005,20587,3769],{"class":4182},[4005,20589,7945],{"class":4302},[4005,20591,4611],{"class":4182},[4005,20593,20594],{"class":4330},"\"Мене звати ",[4005,20596,16775],{"class":4174},[4005,20598,20599],{"class":4330},", мені ",[4005,20601,7959],{"class":4174},[4005,20603,20604],{"class":4330}," років",[4005,20606,7965],{"class":7964},[4005,20608,7968],{"class":4330},[4005,20610,3836],{"class":4182},[4005,20612,4650],{"class":4174},[4005,20614,3836],{"class":4182},[4005,20616,4655],{"class":4174},[4005,20618,4482],{"class":4182},[4005,20620,20621],{"class":4007,"line":4045},[4005,20622,20623],{"class":4190},"\u002F\u002F Вивід: Мене звати Олег, мені 25 років\n",[3976,20625,20627],{"id":20626},"специфікатори-формату-verbs","Специфікатори формату (Verbs)",[3908,20629,20630,20633,20634,20637],{},[3871,20631,20632],{},"Специфікатор формату"," (або verb) — це спеціальна послідовність, що починається з ",[3753,20635,20636],{},"%"," і вказує, як форматувати значення.",[9014,20639,20641],{"id":20640},"універсальні-специфікатори","Універсальні специфікатори",[5991,20643,20644,20655],{},[5994,20645,20646],{},[5997,20647,20648,20651,20653],{},[6000,20649,20650],{},"Verb",[6000,20652,11814],{},[6000,20654,6005],{},[6010,20656,20657,20673,20691,20709,20726],{},[5997,20658,20659,20663,20666],{},[6015,20660,20661],{},[3753,20662,10666],{},[6015,20664,20665],{},"Значення за замовчуванням",[6015,20667,20668,8996,20671],{},[3753,20669,20670],{},"fmt.Printf(\"%v\", 42)",[3753,20672,9440],{},[5997,20674,20675,20680,20683],{},[6015,20676,20677],{},[3753,20678,20679],{},"%+v",[6015,20681,20682],{},"Значення + імена полів (для структур)",[6015,20684,20685,8996,20688],{},[3753,20686,20687],{},"fmt.Printf(\"%+v\", user)",[3753,20689,20690],{},"{Name:Олег Age:25}",[5997,20692,20693,20698,20701],{},[6015,20694,20695],{},[3753,20696,20697],{},"%#v",[6015,20699,20700],{},"Go-синтаксис значення",[6015,20702,20703,8996,20706],{},[3753,20704,20705],{},"fmt.Printf(\"%#v\", \"Hi\")",[3753,20707,20708],{},"\"Hi\"",[5997,20710,20711,20716,20719],{},[6015,20712,20713],{},[3753,20714,20715],{},"%T",[6015,20717,20718],{},"Тип значення",[6015,20720,20721,8996,20724],{},[3753,20722,20723],{},"fmt.Printf(\"%T\", 42)",[3753,20725,4158],{},[5997,20727,20728,20733,20738],{},[6015,20729,20730],{},[3753,20731,20732],{},"%%",[6015,20734,20735,20736],{},"Літеральний знак ",[3753,20737,20636],{},[6015,20739,20740,8996,20743],{},[3753,20741,20742],{},"fmt.Printf(\"%%\")",[3753,20744,20636],{},[3908,20746,20747],{},[3871,20748,20517],{},[3984,20750,20752],{"className":4162,"code":20751,"language":4164,"meta":3992,"style":3992},"type User struct {\n    Name string\n    Age  int\n}\n\nuser := User{Name: \"Олег\", Age: 25}\n\nfmt.Printf(\"%v\\n\", user)   \u002F\u002F {Олег 25}\nfmt.Printf(\"%+v\\n\", user)  \u002F\u002F {Name:Олег Age:25}\nfmt.Printf(\"%#v\\n\", user)  \u002F\u002F main.User{Name:\"Олег\", Age:25}\nfmt.Printf(\"%T\\n\", user)   \u002F\u002F main.User\n",[3753,20753,20754,20765,20773,20781,20785,20789,20820,20824,20851,20878,20905],{"__ignoreMap":3992},[4005,20755,20756,20758,20761,20763],{"class":4007,"line":4008},[4005,20757,4809],{"class":4171},[4005,20759,20760],{"class":4178}," User",[4005,20762,10957],{"class":4171},[4005,20764,5073],{"class":4182},[4005,20766,20767,20770],{"class":4007,"line":4014},[4005,20768,20769],{"class":4174},"    Name",[4005,20771,20772],{"class":4178}," string\n",[4005,20774,20775,20778],{"class":4007,"line":4020},[4005,20776,20777],{"class":4174},"    Age",[4005,20779,20780],{"class":4178},"  int\n",[4005,20782,20783],{"class":4007,"line":4026},[4005,20784,4078],{"class":4182},[4005,20786,20787],{"class":4007,"line":4032},[4005,20788,4036],{"emptyLinePlaceholder":4035},[4005,20790,20791,20794,20796,20799,20801,20804,20806,20808,20810,20813,20815,20818],{"class":4007,"line":4039},[4005,20792,20793],{"class":4174},"user",[4005,20795,4314],{"class":4182},[4005,20797,20798],{"class":4178},"User",[4005,20800,16268],{"class":4182},[4005,20802,20803],{"class":4174},"Name",[4005,20805,11172],{"class":4182},[4005,20807,15780],{"class":4330},[4005,20809,3836],{"class":4182},[4005,20811,20812],{"class":4174},"Age",[4005,20814,11172],{"class":4182},[4005,20816,20817],{"class":4186},"25",[4005,20819,4078],{"class":4182},[4005,20821,20822],{"class":4007,"line":4045},[4005,20823,4036],{"emptyLinePlaceholder":4035},[4005,20825,20826,20828,20830,20832,20834,20836,20838,20840,20842,20844,20846,20848],{"class":4007,"line":4051},[4005,20827,3785],{"class":4174},[4005,20829,3769],{"class":4182},[4005,20831,7945],{"class":4302},[4005,20833,4611],{"class":4182},[4005,20835,7968],{"class":4330},[4005,20837,10666],{"class":4174},[4005,20839,7965],{"class":7964},[4005,20841,7968],{"class":4330},[4005,20843,3836],{"class":4182},[4005,20845,20793],{"class":4174},[4005,20847,5381],{"class":4182},[4005,20849,20850],{"class":4190},"\u002F\u002F {Олег 25}\n",[4005,20852,20853,20855,20857,20859,20861,20863,20865,20867,20869,20871,20873,20875],{"class":4007,"line":4057},[4005,20854,3785],{"class":4174},[4005,20856,3769],{"class":4182},[4005,20858,7945],{"class":4302},[4005,20860,4611],{"class":4182},[4005,20862,7968],{"class":4330},[4005,20864,20679],{"class":4174},[4005,20866,7965],{"class":7964},[4005,20868,7968],{"class":4330},[4005,20870,3836],{"class":4182},[4005,20872,20793],{"class":4174},[4005,20874,5196],{"class":4182},[4005,20876,20877],{"class":4190},"\u002F\u002F {Name:Олег Age:25}\n",[4005,20879,20880,20882,20884,20886,20888,20890,20892,20894,20896,20898,20900,20902],{"class":4007,"line":4063},[4005,20881,3785],{"class":4174},[4005,20883,3769],{"class":4182},[4005,20885,7945],{"class":4302},[4005,20887,4611],{"class":4182},[4005,20889,7968],{"class":4330},[4005,20891,20697],{"class":4174},[4005,20893,7965],{"class":7964},[4005,20895,7968],{"class":4330},[4005,20897,3836],{"class":4182},[4005,20899,20793],{"class":4174},[4005,20901,5196],{"class":4182},[4005,20903,20904],{"class":4190},"\u002F\u002F main.User{Name:\"Олег\", Age:25}\n",[4005,20906,20907,20909,20911,20913,20915,20917,20919,20921,20923,20925,20927,20929],{"class":4007,"line":4069},[4005,20908,3785],{"class":4174},[4005,20910,3769],{"class":4182},[4005,20912,7945],{"class":4302},[4005,20914,4611],{"class":4182},[4005,20916,7968],{"class":4330},[4005,20918,20715],{"class":4174},[4005,20920,7965],{"class":7964},[4005,20922,7968],{"class":4330},[4005,20924,3836],{"class":4182},[4005,20926,20793],{"class":4174},[4005,20928,5381],{"class":4182},[4005,20930,20931],{"class":4190},"\u002F\u002F main.User\n",[9014,20933,20935],{"id":20934},"цілі-числа","Цілі числа",[5991,20937,20938,20948],{},[5994,20939,20940],{},[5997,20941,20942,20944,20946],{},[6000,20943,20650],{},[6000,20945,11814],{},[6000,20947,6005],{},[6010,20949,20950,20966,20984,21002,21020,21037,21054,21072],{},[5997,20951,20952,20956,20959],{},[6015,20953,20954],{},[3753,20955,7959],{},[6015,20957,20958],{},"Десяткове число",[6015,20960,20961,8996,20964],{},[3753,20962,20963],{},"fmt.Printf(\"%d\", 42)",[3753,20965,9440],{},[5997,20967,20968,20973,20976],{},[6015,20969,20970],{},[3753,20971,20972],{},"%b",[6015,20974,20975],{},"Двійкове число",[6015,20977,20978,8996,20981],{},[3753,20979,20980],{},"fmt.Printf(\"%b\", 42)",[3753,20982,20983],{},"101010",[5997,20985,20986,20991,20994],{},[6015,20987,20988],{},[3753,20989,20990],{},"%o",[6015,20992,20993],{},"Вісімкове число",[6015,20995,20996,8996,20999],{},[3753,20997,20998],{},"fmt.Printf(\"%o\", 42)",[3753,21000,21001],{},"52",[5997,21003,21004,21009,21012],{},[6015,21005,21006],{},[3753,21007,21008],{},"%x",[6015,21010,21011],{},"Шістнадцяткове (малі літери)",[6015,21013,21014,8996,21017],{},[3753,21015,21016],{},"fmt.Printf(\"%x\", 255)",[3753,21018,21019],{},"ff",[5997,21021,21022,21026,21029],{},[6015,21023,21024],{},[3753,21025,11547],{},[6015,21027,21028],{},"Шістнадцяткове (великі літери)",[6015,21030,21031,8996,21034],{},[3753,21032,21033],{},"fmt.Printf(\"%X\", 255)",[3753,21035,21036],{},"FF",[5997,21038,21039,21043,21046],{},[6015,21040,21041],{},[3753,21042,11607],{},[6015,21044,21045],{},"Символ за Unicode кодом",[6015,21047,21048,8996,21051],{},[3753,21049,21050],{},"fmt.Printf(\"%c\", 65)",[3753,21052,21053],{},"A",[5997,21055,21056,21061,21064],{},[6015,21057,21058],{},[3753,21059,21060],{},"%q",[6015,21062,21063],{},"Символ у лапках",[6015,21065,21066,8996,21069],{},[3753,21067,21068],{},"fmt.Printf(\"%q\", 65)",[3753,21070,21071],{},"'A'",[5997,21073,21074,21079,21082],{},[6015,21075,21076],{},[3753,21077,21078],{},"%U",[6015,21080,21081],{},"Unicode код",[6015,21083,21084,8996,21087],{},[3753,21085,21086],{},"fmt.Printf(\"%U\", 'Ї')",[3753,21088,21089],{},"U+0407",[3908,21091,21092],{},[3871,21093,20517],{},[3984,21095,21097],{"className":4162,"code":21096,"language":4164,"meta":3992,"style":3992},"num := 42\n\nfmt.Printf(\"Десяткове: %d\\n\", num)       \u002F\u002F 42\nfmt.Printf(\"Двійкове: %b\\n\", num)        \u002F\u002F 101010\nfmt.Printf(\"Вісімкове: %o\\n\", num)       \u002F\u002F 52\nfmt.Printf(\"Hex: %x\\n\", num)             \u002F\u002F 2a\nfmt.Printf(\"Символ: %c\\n\", 65)           \u002F\u002F A\nfmt.Printf(\"Unicode: %U\\n\", 'Ї')         \u002F\u002F U+0407\n",[3753,21098,21099,21108,21112,21140,21168,21196,21225,21255],{"__ignoreMap":3992},[4005,21100,21101,21104,21106],{"class":4007,"line":4008},[4005,21102,21103],{"class":4174},"num",[4005,21105,4314],{"class":4182},[4005,21107,7153],{"class":4186},[4005,21109,21110],{"class":4007,"line":4014},[4005,21111,4036],{"emptyLinePlaceholder":4035},[4005,21113,21114,21116,21118,21120,21122,21125,21127,21129,21131,21133,21135,21137],{"class":4007,"line":4020},[4005,21115,3785],{"class":4174},[4005,21117,3769],{"class":4182},[4005,21119,7945],{"class":4302},[4005,21121,4611],{"class":4182},[4005,21123,21124],{"class":4330},"\"Десяткове: ",[4005,21126,7959],{"class":4174},[4005,21128,7965],{"class":7964},[4005,21130,7968],{"class":4330},[4005,21132,3836],{"class":4182},[4005,21134,21103],{"class":4174},[4005,21136,10007],{"class":4182},[4005,21138,21139],{"class":4190},"\u002F\u002F 42\n",[4005,21141,21142,21144,21146,21148,21150,21153,21155,21157,21159,21161,21163,21165],{"class":4007,"line":4026},[4005,21143,3785],{"class":4174},[4005,21145,3769],{"class":4182},[4005,21147,7945],{"class":4302},[4005,21149,4611],{"class":4182},[4005,21151,21152],{"class":4330},"\"Двійкове: ",[4005,21154,20972],{"class":4174},[4005,21156,7965],{"class":7964},[4005,21158,7968],{"class":4330},[4005,21160,3836],{"class":4182},[4005,21162,21103],{"class":4174},[4005,21164,16007],{"class":4182},[4005,21166,21167],{"class":4190},"\u002F\u002F 101010\n",[4005,21169,21170,21172,21174,21176,21178,21181,21183,21185,21187,21189,21191,21193],{"class":4007,"line":4032},[4005,21171,3785],{"class":4174},[4005,21173,3769],{"class":4182},[4005,21175,7945],{"class":4302},[4005,21177,4611],{"class":4182},[4005,21179,21180],{"class":4330},"\"Вісімкове: ",[4005,21182,20990],{"class":4174},[4005,21184,7965],{"class":7964},[4005,21186,7968],{"class":4330},[4005,21188,3836],{"class":4182},[4005,21190,21103],{"class":4174},[4005,21192,10007],{"class":4182},[4005,21194,21195],{"class":4190},"\u002F\u002F 52\n",[4005,21197,21198,21200,21202,21204,21206,21209,21211,21213,21215,21217,21219,21222],{"class":4007,"line":4039},[4005,21199,3785],{"class":4174},[4005,21201,3769],{"class":4182},[4005,21203,7945],{"class":4302},[4005,21205,4611],{"class":4182},[4005,21207,21208],{"class":4330},"\"Hex: ",[4005,21210,21008],{"class":4174},[4005,21212,7965],{"class":7964},[4005,21214,7968],{"class":4330},[4005,21216,3836],{"class":4182},[4005,21218,21103],{"class":4174},[4005,21220,21221],{"class":4182},")             ",[4005,21223,21224],{"class":4190},"\u002F\u002F 2a\n",[4005,21226,21227,21229,21231,21233,21235,21238,21240,21242,21244,21246,21249,21252],{"class":4007,"line":4045},[4005,21228,3785],{"class":4174},[4005,21230,3769],{"class":4182},[4005,21232,7945],{"class":4302},[4005,21234,4611],{"class":4182},[4005,21236,21237],{"class":4330},"\"Символ: ",[4005,21239,11607],{"class":4174},[4005,21241,7965],{"class":7964},[4005,21243,7968],{"class":4330},[4005,21245,3836],{"class":4182},[4005,21247,21248],{"class":4186},"65",[4005,21250,21251],{"class":4182},")           ",[4005,21253,21254],{"class":4190},"\u002F\u002F A\n",[4005,21256,21257,21259,21261,21263,21265,21268,21270,21272,21274,21276,21278,21281],{"class":4007,"line":4051},[4005,21258,3785],{"class":4174},[4005,21260,3769],{"class":4182},[4005,21262,7945],{"class":4302},[4005,21264,4611],{"class":4182},[4005,21266,21267],{"class":4330},"\"Unicode: ",[4005,21269,21078],{"class":4174},[4005,21271,7965],{"class":7964},[4005,21273,7968],{"class":4330},[4005,21275,3836],{"class":4182},[4005,21277,12344],{"class":4330},[4005,21279,21280],{"class":4182},")         ",[4005,21282,21283],{"class":4190},"\u002F\u002F U+0407\n",[9014,21285,8414],{"id":21286},"дійсні-числа",[5991,21288,21289,21299],{},[5994,21290,21291],{},[5997,21292,21293,21295,21297],{},[6000,21294,20650],{},[6000,21296,11814],{},[6000,21298,6005],{},[6010,21300,21301,21319,21337,21355],{},[5997,21302,21303,21308,21311],{},[6015,21304,21305],{},[3753,21306,21307],{},"%f",[6015,21309,21310],{},"Фіксована точка",[6015,21312,21313,8996,21316],{},[3753,21314,21315],{},"fmt.Printf(\"%f\", 3.14)",[3753,21317,21318],{},"3.140000",[5997,21320,21321,21326,21329],{},[6015,21322,21323],{},[3753,21324,21325],{},"%e",[6015,21327,21328],{},"Експоненційна форма (малі)",[6015,21330,21331,8996,21334],{},[3753,21332,21333],{},"fmt.Printf(\"%e\", 1234.5)",[3753,21335,21336],{},"1.234500e+03",[5997,21338,21339,21344,21347],{},[6015,21340,21341],{},[3753,21342,21343],{},"%E",[6015,21345,21346],{},"Експоненційна форма (великі)",[6015,21348,21349,8996,21352],{},[3753,21350,21351],{},"fmt.Printf(\"%E\", 1234.5)",[3753,21353,21354],{},"1.234500E+03",[5997,21356,21357,21362,21369],{},[6015,21358,21359],{},[3753,21360,21361],{},"%g",[6015,21363,21364,21365,8512,21367],{},"Автовибір ",[3753,21366,21307],{},[3753,21368,21325],{},[6015,21370,21371,8996,21374],{},[3753,21372,21373],{},"fmt.Printf(\"%g\", 3.14)",[3753,21375,5854],{},[3908,21377,21378],{},[3871,21379,20517],{},[3984,21381,21383],{"className":4162,"code":21382,"language":4164,"meta":3992,"style":3992},"pi := 3.14159265359\n\nfmt.Printf(\"%f\\n\", pi)     \u002F\u002F 3.141593\nfmt.Printf(\"%.2f\\n\", pi)   \u002F\u002F 3.14 (2 знаки після коми)\nfmt.Printf(\"%e\\n\", pi)     \u002F\u002F 3.141593e+00\nfmt.Printf(\"%g\\n\", pi)     \u002F\u002F 3.14159265359\n",[3753,21384,21385,21395,21399,21427,21454,21481],{"__ignoreMap":3992},[4005,21386,21387,21390,21392],{"class":4007,"line":4008},[4005,21388,21389],{"class":4174},"pi",[4005,21391,4314],{"class":4182},[4005,21393,21394],{"class":4186},"3.14159265359\n",[4005,21396,21397],{"class":4007,"line":4014},[4005,21398,4036],{"emptyLinePlaceholder":4035},[4005,21400,21401,21403,21405,21407,21409,21411,21413,21415,21417,21419,21421,21424],{"class":4007,"line":4020},[4005,21402,3785],{"class":4174},[4005,21404,3769],{"class":4182},[4005,21406,7945],{"class":4302},[4005,21408,4611],{"class":4182},[4005,21410,7968],{"class":4330},[4005,21412,21307],{"class":4174},[4005,21414,7965],{"class":7964},[4005,21416,7968],{"class":4330},[4005,21418,3836],{"class":4182},[4005,21420,21389],{"class":4174},[4005,21422,21423],{"class":4182},")     ",[4005,21425,21426],{"class":4190},"\u002F\u002F 3.141593\n",[4005,21428,21429,21431,21433,21435,21437,21439,21441,21443,21445,21447,21449,21451],{"class":4007,"line":4026},[4005,21430,3785],{"class":4174},[4005,21432,3769],{"class":4182},[4005,21434,7945],{"class":4302},[4005,21436,4611],{"class":4182},[4005,21438,7968],{"class":4330},[4005,21440,10654],{"class":4174},[4005,21442,7965],{"class":7964},[4005,21444,7968],{"class":4330},[4005,21446,3836],{"class":4182},[4005,21448,21389],{"class":4174},[4005,21450,5381],{"class":4182},[4005,21452,21453],{"class":4190},"\u002F\u002F 3.14 (2 знаки після коми)\n",[4005,21455,21456,21458,21460,21462,21464,21466,21468,21470,21472,21474,21476,21478],{"class":4007,"line":4032},[4005,21457,3785],{"class":4174},[4005,21459,3769],{"class":4182},[4005,21461,7945],{"class":4302},[4005,21463,4611],{"class":4182},[4005,21465,7968],{"class":4330},[4005,21467,21325],{"class":4174},[4005,21469,7965],{"class":7964},[4005,21471,7968],{"class":4330},[4005,21473,3836],{"class":4182},[4005,21475,21389],{"class":4174},[4005,21477,21423],{"class":4182},[4005,21479,21480],{"class":4190},"\u002F\u002F 3.141593e+00\n",[4005,21482,21483,21485,21487,21489,21491,21493,21495,21497,21499,21501,21503,21505],{"class":4007,"line":4039},[4005,21484,3785],{"class":4174},[4005,21486,3769],{"class":4182},[4005,21488,7945],{"class":4302},[4005,21490,4611],{"class":4182},[4005,21492,7968],{"class":4330},[4005,21494,21361],{"class":4174},[4005,21496,7965],{"class":7964},[4005,21498,7968],{"class":4330},[4005,21500,3836],{"class":4182},[4005,21502,21389],{"class":4174},[4005,21504,21423],{"class":4182},[4005,21506,21507],{"class":4190},"\u002F\u002F 3.14159265359\n",[9014,21509,21511],{"id":21510},"рядки-та-байти","Рядки та байти",[5991,21513,21514,21524],{},[5994,21515,21516],{},[5997,21517,21518,21520,21522],{},[6000,21519,20650],{},[6000,21521,11814],{},[6000,21523,6005],{},[6010,21525,21526,21543,21560,21577],{},[5997,21527,21528,21532,21535],{},[6015,21529,21530],{},[3753,21531,16775],{},[6015,21533,21534],{},"Рядок",[6015,21536,21537,8996,21540],{},[3753,21538,21539],{},"fmt.Printf(\"%s\", \"Hello\")",[3753,21541,21542],{},"Hello",[5997,21544,21545,21549,21552],{},[6015,21546,21547],{},[3753,21548,21060],{},[6015,21550,21551],{},"Рядок у лапках (з екрануванням)",[6015,21553,21554,8996,21557],{},[3753,21555,21556],{},"fmt.Printf(\"%q\", \"Hi\\n\")",[3753,21558,21559],{},"\"Hi\\n\"",[5997,21561,21562,21566,21569],{},[6015,21563,21564],{},[3753,21565,21008],{},[6015,21567,21568],{},"Hex-дамп байтів (малі літери)",[6015,21570,21571,8996,21574],{},[3753,21572,21573],{},"fmt.Printf(\"%x\", \"Go\")",[3753,21575,21576],{},"476f",[5997,21578,21579,21583,21586],{},[6015,21580,21581],{},[3753,21582,11547],{},[6015,21584,21585],{},"Hex-дамп байтів (великі літери)",[6015,21587,21588,8996,21591],{},[3753,21589,21590],{},"fmt.Printf(\"%X\", \"Go\")",[3753,21592,21593],{},"476F",[3908,21595,21596],{},[3871,21597,20517],{},[3984,21599,21601],{"className":4162,"code":21600,"language":4164,"meta":3992,"style":3992},"text := \"Привіт\"\n\nfmt.Printf(\"%s\\n\", text)    \u002F\u002F Привіт\nfmt.Printf(\"%q\\n\", text)    \u002F\u002F \"Привіт\"\nfmt.Printf(\"%x\\n\", text)    \u002F\u002F d0bfd180d0b8d0b2d196d182 (UTF-8 байти)\n",[3753,21602,21603,21611,21615,21642,21669],{"__ignoreMap":3992},[4005,21604,21605,21607,21609],{"class":4007,"line":4008},[4005,21606,3989],{"class":4174},[4005,21608,4314],{"class":4182},[4005,21610,15582],{"class":4330},[4005,21612,21613],{"class":4007,"line":4014},[4005,21614,4036],{"emptyLinePlaceholder":4035},[4005,21616,21617,21619,21621,21623,21625,21627,21629,21631,21633,21635,21637,21639],{"class":4007,"line":4020},[4005,21618,3785],{"class":4174},[4005,21620,3769],{"class":4182},[4005,21622,7945],{"class":4302},[4005,21624,4611],{"class":4182},[4005,21626,7968],{"class":4330},[4005,21628,16775],{"class":4174},[4005,21630,7965],{"class":7964},[4005,21632,7968],{"class":4330},[4005,21634,3836],{"class":4182},[4005,21636,3989],{"class":4174},[4005,21638,12303],{"class":4182},[4005,21640,21641],{"class":4190},"\u002F\u002F Привіт\n",[4005,21643,21644,21646,21648,21650,21652,21654,21656,21658,21660,21662,21664,21666],{"class":4007,"line":4026},[4005,21645,3785],{"class":4174},[4005,21647,3769],{"class":4182},[4005,21649,7945],{"class":4302},[4005,21651,4611],{"class":4182},[4005,21653,7968],{"class":4330},[4005,21655,21060],{"class":4174},[4005,21657,7965],{"class":7964},[4005,21659,7968],{"class":4330},[4005,21661,3836],{"class":4182},[4005,21663,3989],{"class":4174},[4005,21665,12303],{"class":4182},[4005,21667,21668],{"class":4190},"\u002F\u002F \"Привіт\"\n",[4005,21670,21671,21673,21675,21677,21679,21681,21683,21685,21687,21689,21691,21693],{"class":4007,"line":4032},[4005,21672,3785],{"class":4174},[4005,21674,3769],{"class":4182},[4005,21676,7945],{"class":4302},[4005,21678,4611],{"class":4182},[4005,21680,7968],{"class":4330},[4005,21682,21008],{"class":4174},[4005,21684,7965],{"class":7964},[4005,21686,7968],{"class":4330},[4005,21688,3836],{"class":4182},[4005,21690,3989],{"class":4174},[4005,21692,12303],{"class":4182},[4005,21694,21695],{"class":4190},"\u002F\u002F d0bfd180d0b8d0b2d196d182 (UTF-8 байти)\n",[9014,21697,21699],{"id":21698},"покажчики","Покажчики",[5991,21701,21702,21712],{},[5994,21703,21704],{},[5997,21705,21706,21708,21710],{},[6000,21707,20650],{},[6000,21709,11814],{},[6000,21711,6005],{},[6010,21713,21714],{},[5997,21715,21716,21721,21724],{},[6015,21717,21718],{},[3753,21719,21720],{},"%p",[6015,21722,21723],{},"Адреса покажчика",[6015,21725,21726,8996,21729],{},[3753,21727,21728],{},"fmt.Printf(\"%p\", &x)",[3753,21730,21731],{},"0xc0000140a0",[3976,21733,21735],{"id":21734},"модифікатори-ширини-та-точності","Модифікатори ширини та точності",[3908,21737,21738,21741],{},[3871,21739,21740],{},"Ширина"," — мінімальна кількість символів для виведення:",[3984,21743,21745],{"className":4162,"code":21744,"language":4164,"meta":3992,"style":3992},"fmt.Printf(\"%5d\\n\", 42)      \u002F\u002F \"   42\" (доповнення пробілами зліва)\nfmt.Printf(\"%-5d\\n\", 42)     \u002F\u002F \"42   \" (доповнення пробілами справа, прапорець -)\nfmt.Printf(\"%05d\\n\", 42)     \u002F\u002F \"00042\" (доповнення нулями, прапорець 0)\n",[3753,21746,21747,21775,21803],{"__ignoreMap":3992},[4005,21748,21749,21751,21753,21755,21757,21759,21762,21764,21766,21768,21770,21772],{"class":4007,"line":4008},[4005,21750,3785],{"class":4174},[4005,21752,3769],{"class":4182},[4005,21754,7945],{"class":4302},[4005,21756,4611],{"class":4182},[4005,21758,7968],{"class":4330},[4005,21760,21761],{"class":4174},"%5d",[4005,21763,7965],{"class":7964},[4005,21765,7968],{"class":4330},[4005,21767,3836],{"class":4182},[4005,21769,9440],{"class":4186},[4005,21771,10036],{"class":4182},[4005,21773,21774],{"class":4190},"\u002F\u002F \"   42\" (доповнення пробілами зліва)\n",[4005,21776,21777,21779,21781,21783,21785,21787,21790,21792,21794,21796,21798,21800],{"class":4007,"line":4014},[4005,21778,3785],{"class":4174},[4005,21780,3769],{"class":4182},[4005,21782,7945],{"class":4302},[4005,21784,4611],{"class":4182},[4005,21786,7968],{"class":4330},[4005,21788,21789],{"class":4174},"%-5d",[4005,21791,7965],{"class":7964},[4005,21793,7968],{"class":4330},[4005,21795,3836],{"class":4182},[4005,21797,9440],{"class":4186},[4005,21799,21423],{"class":4182},[4005,21801,21802],{"class":4190},"\u002F\u002F \"42   \" (доповнення пробілами справа, прапорець -)\n",[4005,21804,21805,21807,21809,21811,21813,21815,21818,21820,21822,21824,21826,21828],{"class":4007,"line":4020},[4005,21806,3785],{"class":4174},[4005,21808,3769],{"class":4182},[4005,21810,7945],{"class":4302},[4005,21812,4611],{"class":4182},[4005,21814,7968],{"class":4330},[4005,21816,21817],{"class":4174},"%05d",[4005,21819,7965],{"class":7964},[4005,21821,7968],{"class":4330},[4005,21823,3836],{"class":4182},[4005,21825,9440],{"class":4186},[4005,21827,21423],{"class":4182},[4005,21829,21830],{"class":4190},"\u002F\u002F \"00042\" (доповнення нулями, прапорець 0)\n",[3908,21832,21833,21835],{},[3871,21834,9725],{}," — для дійсних чисел (кількість знаків після коми), для рядків (максимальна довжина):",[3984,21837,21839],{"className":4162,"code":21838,"language":4164,"meta":3992,"style":3992},"pi := 3.14159265359\n\nfmt.Printf(\"%.2f\\n\", pi)     \u002F\u002F 3.14 (2 знаки після коми)\nfmt.Printf(\"%.5f\\n\", pi)     \u002F\u002F 3.14159 (5 знаків після коми)\n\ntext := \"Привіт Світ\"\nfmt.Printf(\"%.5s\\n\", text)   \u002F\u002F Привіт (перші 5 байтів, не символів!)\n",[3753,21840,21841,21849,21853,21879,21907,21911,21920],{"__ignoreMap":3992},[4005,21842,21843,21845,21847],{"class":4007,"line":4008},[4005,21844,21389],{"class":4174},[4005,21846,4314],{"class":4182},[4005,21848,21394],{"class":4186},[4005,21850,21851],{"class":4007,"line":4014},[4005,21852,4036],{"emptyLinePlaceholder":4035},[4005,21854,21855,21857,21859,21861,21863,21865,21867,21869,21871,21873,21875,21877],{"class":4007,"line":4020},[4005,21856,3785],{"class":4174},[4005,21858,3769],{"class":4182},[4005,21860,7945],{"class":4302},[4005,21862,4611],{"class":4182},[4005,21864,7968],{"class":4330},[4005,21866,10654],{"class":4174},[4005,21868,7965],{"class":7964},[4005,21870,7968],{"class":4330},[4005,21872,3836],{"class":4182},[4005,21874,21389],{"class":4174},[4005,21876,21423],{"class":4182},[4005,21878,21453],{"class":4190},[4005,21880,21881,21883,21885,21887,21889,21891,21894,21896,21898,21900,21902,21904],{"class":4007,"line":4026},[4005,21882,3785],{"class":4174},[4005,21884,3769],{"class":4182},[4005,21886,7945],{"class":4302},[4005,21888,4611],{"class":4182},[4005,21890,7968],{"class":4330},[4005,21892,21893],{"class":4174},"%.5f",[4005,21895,7965],{"class":7964},[4005,21897,7968],{"class":4330},[4005,21899,3836],{"class":4182},[4005,21901,21389],{"class":4174},[4005,21903,21423],{"class":4182},[4005,21905,21906],{"class":4190},"\u002F\u002F 3.14159 (5 знаків після коми)\n",[4005,21908,21909],{"class":4007,"line":4032},[4005,21910,4036],{"emptyLinePlaceholder":4035},[4005,21912,21913,21915,21917],{"class":4007,"line":4039},[4005,21914,3989],{"class":4174},[4005,21916,4314],{"class":4182},[4005,21918,21919],{"class":4330},"\"Привіт Світ\"\n",[4005,21921,21922,21924,21926,21928,21930,21932,21935,21937,21939,21941,21943,21945],{"class":4007,"line":4045},[4005,21923,3785],{"class":4174},[4005,21925,3769],{"class":4182},[4005,21927,7945],{"class":4302},[4005,21929,4611],{"class":4182},[4005,21931,7968],{"class":4330},[4005,21933,21934],{"class":4174},"%.5s",[4005,21936,7965],{"class":7964},[4005,21938,7968],{"class":4330},[4005,21940,3836],{"class":4182},[4005,21942,3989],{"class":4174},[4005,21944,5381],{"class":4182},[4005,21946,21947],{"class":4190},"\u002F\u002F Привіт (перші 5 байтів, не символів!)\n",[3908,21949,21950],{},[3871,21951,21952],{},"Комбінація ширини та точності:",[3984,21954,21956],{"className":4162,"code":21955,"language":4164,"meta":3992,"style":3992},"fmt.Printf(\"%9.2f\\n\", 3.14)      \u002F\u002F \"     3.14\" (ширина 9, точність 2)\nfmt.Printf(\"%-9.2f\\n\", 3.14)     \u002F\u002F \"3.14     \" (вирівнювання ліворуч)\nfmt.Printf(\"%09.2f\\n\", 3.14)     \u002F\u002F \"000003.14\" (доповнення нулями)\n",[3753,21957,21958,21986,22014],{"__ignoreMap":3992},[4005,21959,21960,21962,21964,21966,21968,21970,21973,21975,21977,21979,21981,21983],{"class":4007,"line":4008},[4005,21961,3785],{"class":4174},[4005,21963,3769],{"class":4182},[4005,21965,7945],{"class":4302},[4005,21967,4611],{"class":4182},[4005,21969,7968],{"class":4330},[4005,21971,21972],{"class":4174},"%9.2f",[4005,21974,7965],{"class":7964},[4005,21976,7968],{"class":4330},[4005,21978,3836],{"class":4182},[4005,21980,5854],{"class":4186},[4005,21982,10036],{"class":4182},[4005,21984,21985],{"class":4190},"\u002F\u002F \"     3.14\" (ширина 9, точність 2)\n",[4005,21987,21988,21990,21992,21994,21996,21998,22001,22003,22005,22007,22009,22011],{"class":4007,"line":4014},[4005,21989,3785],{"class":4174},[4005,21991,3769],{"class":4182},[4005,21993,7945],{"class":4302},[4005,21995,4611],{"class":4182},[4005,21997,7968],{"class":4330},[4005,21999,22000],{"class":4174},"%-9.2f",[4005,22002,7965],{"class":7964},[4005,22004,7968],{"class":4330},[4005,22006,3836],{"class":4182},[4005,22008,5854],{"class":4186},[4005,22010,21423],{"class":4182},[4005,22012,22013],{"class":4190},"\u002F\u002F \"3.14     \" (вирівнювання ліворуч)\n",[4005,22015,22016,22018,22020,22022,22024,22026,22029,22031,22033,22035,22037,22039],{"class":4007,"line":4020},[4005,22017,3785],{"class":4174},[4005,22019,3769],{"class":4182},[4005,22021,7945],{"class":4302},[4005,22023,4611],{"class":4182},[4005,22025,7968],{"class":4330},[4005,22027,22028],{"class":4174},"%09.2f",[4005,22030,7965],{"class":7964},[4005,22032,7968],{"class":4330},[4005,22034,3836],{"class":4182},[4005,22036,5854],{"class":4186},[4005,22038,21423],{"class":4182},[4005,22040,22041],{"class":4190},"\u002F\u002F \"000003.14\" (доповнення нулями)\n",[3976,22043,22045],{"id":22044},"практичний-приклад","Практичний приклад",[3984,22047,22049],{"className":4162,"code":22048,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    name := \"Олександр\"\n    age := 28\n    height := 1.82\n    balance := 1234.56\n\n    \u002F\u002F Базове виведення:\n    fmt.Println(\"=== Інформація про користувача ===\")\n    fmt.Printf(\"Ім'я: %s\\n\", name)\n    fmt.Printf(\"Вік: %d років\\n\", age)\n    fmt.Printf(\"Зріст: %.2f м\\n\", height)\n    fmt.Printf(\"Баланс: %.2f грн\\n\", balance)\n    \n    \u002F\u002F Форматування з шириною:\n    fmt.Println(\"\\n=== Таблиця ===\")\n    fmt.Printf(\"| %-12s | %5s |\\n\", \"Параметр\", \"Значення\")\n    fmt.Printf(\"| %-12s | %5d |\\n\", \"Вік\", age)\n    fmt.Printf(\"| %-12s | %5.2f |\\n\", \"Зріст\", height)\n    \n    \u002F\u002F Відлагодження:\n    fmt.Printf(\"\\nТип name: %T\\n\", name)\n    fmt.Printf(\"Значення age: %#v\\n\", age)\n}\n",[3753,22050,22051,22057,22061,22067,22071,22079,22088,22098,22108,22118,22122,22127,22142,22166,22193,22222,22251,22255,22260,22279,22319,22354,22390,22394,22399,22428,22453],{"__ignoreMap":3992},[4005,22052,22053,22055],{"class":4007,"line":4008},[4005,22054,5739],{"class":4171},[4005,22056,5742],{"class":4178},[4005,22058,22059],{"class":4007,"line":4014},[4005,22060,4036],{"emptyLinePlaceholder":4035},[4005,22062,22063,22065],{"class":4007,"line":4020},[4005,22064,3917],{"class":4836},[4005,22066,7656],{"class":4330},[4005,22068,22069],{"class":4007,"line":4026},[4005,22070,4036],{"emptyLinePlaceholder":4035},[4005,22072,22073,22075,22077],{"class":4007,"line":4032},[4005,22074,4299],{"class":4171},[4005,22076,5764],{"class":4302},[4005,22078,4306],{"class":4182},[4005,22080,22081,22083,22085],{"class":4007,"line":4039},[4005,22082,18955],{"class":4174},[4005,22084,4314],{"class":4182},[4005,22086,22087],{"class":4330},"\"Олександр\"\n",[4005,22089,22090,22093,22095],{"class":4007,"line":4045},[4005,22091,22092],{"class":4174},"    age",[4005,22094,4314],{"class":4182},[4005,22096,22097],{"class":4186},"28\n",[4005,22099,22100,22103,22105],{"class":4007,"line":4051},[4005,22101,22102],{"class":4174},"    height",[4005,22104,4314],{"class":4182},[4005,22106,22107],{"class":4186},"1.82\n",[4005,22109,22110,22113,22115],{"class":4007,"line":4057},[4005,22111,22112],{"class":4174},"    balance",[4005,22114,4314],{"class":4182},[4005,22116,22117],{"class":4186},"1234.56\n",[4005,22119,22120],{"class":4007,"line":4063},[4005,22121,4036],{"emptyLinePlaceholder":4035},[4005,22123,22124],{"class":4007,"line":4069},[4005,22125,22126],{"class":4190},"    \u002F\u002F Базове виведення:\n",[4005,22128,22129,22131,22133,22135,22137,22140],{"class":4007,"line":4075},[4005,22130,5370],{"class":4174},[4005,22132,3769],{"class":4182},[4005,22134,5348],{"class":4302},[4005,22136,4611],{"class":4182},[4005,22138,22139],{"class":4330},"\"=== Інформація про користувача ===\"",[4005,22141,4482],{"class":4182},[4005,22143,22144,22146,22148,22150,22152,22154,22156,22158,22160,22162,22164],{"class":4007,"line":4081},[4005,22145,5370],{"class":4174},[4005,22147,3769],{"class":4182},[4005,22149,7945],{"class":4302},[4005,22151,4611],{"class":4182},[4005,22153,16772],{"class":4330},[4005,22155,16775],{"class":4174},[4005,22157,7965],{"class":7964},[4005,22159,7968],{"class":4330},[4005,22161,3836],{"class":4182},[4005,22163,4650],{"class":4174},[4005,22165,4482],{"class":4182},[4005,22167,22168,22170,22172,22174,22176,22179,22181,22183,22185,22187,22189,22191],{"class":4007,"line":4086},[4005,22169,5370],{"class":4174},[4005,22171,3769],{"class":4182},[4005,22173,7945],{"class":4302},[4005,22175,4611],{"class":4182},[4005,22177,22178],{"class":4330},"\"Вік: ",[4005,22180,7959],{"class":4174},[4005,22182,20604],{"class":4330},[4005,22184,7965],{"class":7964},[4005,22186,7968],{"class":4330},[4005,22188,3836],{"class":4182},[4005,22190,4655],{"class":4174},[4005,22192,4482],{"class":4182},[4005,22194,22195,22197,22199,22201,22203,22206,22208,22211,22213,22215,22217,22220],{"class":4007,"line":4092},[4005,22196,5370],{"class":4174},[4005,22198,3769],{"class":4182},[4005,22200,7945],{"class":4302},[4005,22202,4611],{"class":4182},[4005,22204,22205],{"class":4330},"\"Зріст: ",[4005,22207,10654],{"class":4174},[4005,22209,22210],{"class":4330}," м",[4005,22212,7965],{"class":7964},[4005,22214,7968],{"class":4330},[4005,22216,3836],{"class":4182},[4005,22218,22219],{"class":4174},"height",[4005,22221,4482],{"class":4182},[4005,22223,22224,22226,22228,22230,22232,22235,22237,22240,22242,22244,22246,22249],{"class":4007,"line":4098},[4005,22225,5370],{"class":4174},[4005,22227,3769],{"class":4182},[4005,22229,7945],{"class":4302},[4005,22231,4611],{"class":4182},[4005,22233,22234],{"class":4330},"\"Баланс: ",[4005,22236,10654],{"class":4174},[4005,22238,22239],{"class":4330}," грн",[4005,22241,7965],{"class":7964},[4005,22243,7968],{"class":4330},[4005,22245,3836],{"class":4182},[4005,22247,22248],{"class":4174},"balance",[4005,22250,4482],{"class":4182},[4005,22252,22253],{"class":4007,"line":4104},[4005,22254,5214],{"class":4182},[4005,22256,22257],{"class":4007,"line":4110},[4005,22258,22259],{"class":4190},"    \u002F\u002F Форматування з шириною:\n",[4005,22261,22262,22264,22266,22268,22270,22272,22274,22277],{"class":4007,"line":4937},[4005,22263,5370],{"class":4174},[4005,22265,3769],{"class":4182},[4005,22267,5348],{"class":4302},[4005,22269,4611],{"class":4182},[4005,22271,7968],{"class":4330},[4005,22273,7965],{"class":7964},[4005,22275,22276],{"class":4330},"=== Таблиця ===\"",[4005,22278,4482],{"class":4182},[4005,22280,22281,22283,22285,22287,22289,22292,22295,22297,22300,22303,22305,22307,22309,22312,22314,22317],{"class":4007,"line":4942},[4005,22282,5370],{"class":4174},[4005,22284,3769],{"class":4182},[4005,22286,7945],{"class":4302},[4005,22288,4611],{"class":4182},[4005,22290,22291],{"class":4330},"\"| ",[4005,22293,22294],{"class":4174},"%-12s",[4005,22296,7932],{"class":4330},[4005,22298,22299],{"class":4174},"%5s",[4005,22301,22302],{"class":4330}," |",[4005,22304,7965],{"class":7964},[4005,22306,7968],{"class":4330},[4005,22308,3836],{"class":4182},[4005,22310,22311],{"class":4330},"\"Параметр\"",[4005,22313,3836],{"class":4182},[4005,22315,22316],{"class":4330},"\"Значення\"",[4005,22318,4482],{"class":4182},[4005,22320,22321,22323,22325,22327,22329,22331,22333,22335,22337,22339,22341,22343,22345,22348,22350,22352],{"class":4007,"line":4947},[4005,22322,5370],{"class":4174},[4005,22324,3769],{"class":4182},[4005,22326,7945],{"class":4302},[4005,22328,4611],{"class":4182},[4005,22330,22291],{"class":4330},[4005,22332,22294],{"class":4174},[4005,22334,7932],{"class":4330},[4005,22336,21761],{"class":4174},[4005,22338,22302],{"class":4330},[4005,22340,7965],{"class":7964},[4005,22342,7968],{"class":4330},[4005,22344,3836],{"class":4182},[4005,22346,22347],{"class":4330},"\"Вік\"",[4005,22349,3836],{"class":4182},[4005,22351,4655],{"class":4174},[4005,22353,4482],{"class":4182},[4005,22355,22356,22358,22360,22362,22364,22366,22368,22370,22373,22375,22377,22379,22381,22384,22386,22388],{"class":4007,"line":4953},[4005,22357,5370],{"class":4174},[4005,22359,3769],{"class":4182},[4005,22361,7945],{"class":4302},[4005,22363,4611],{"class":4182},[4005,22365,22291],{"class":4330},[4005,22367,22294],{"class":4174},[4005,22369,7932],{"class":4330},[4005,22371,22372],{"class":4174},"%5.2f",[4005,22374,22302],{"class":4330},[4005,22376,7965],{"class":7964},[4005,22378,7968],{"class":4330},[4005,22380,3836],{"class":4182},[4005,22382,22383],{"class":4330},"\"Зріст\"",[4005,22385,3836],{"class":4182},[4005,22387,22219],{"class":4174},[4005,22389,4482],{"class":4182},[4005,22391,22392],{"class":4007,"line":4960},[4005,22393,5214],{"class":4182},[4005,22395,22396],{"class":4007,"line":4973},[4005,22397,22398],{"class":4190},"    \u002F\u002F Відлагодження:\n",[4005,22400,22401,22403,22405,22407,22409,22411,22413,22416,22418,22420,22422,22424,22426],{"class":4007,"line":4985},[4005,22402,5370],{"class":4174},[4005,22404,3769],{"class":4182},[4005,22406,7945],{"class":4302},[4005,22408,4611],{"class":4182},[4005,22410,7968],{"class":4330},[4005,22412,7965],{"class":7964},[4005,22414,22415],{"class":4330},"Тип name: ",[4005,22417,20715],{"class":4174},[4005,22419,7965],{"class":7964},[4005,22421,7968],{"class":4330},[4005,22423,3836],{"class":4182},[4005,22425,4650],{"class":4174},[4005,22427,4482],{"class":4182},[4005,22429,22430,22432,22434,22436,22438,22441,22443,22445,22447,22449,22451],{"class":4007,"line":7813},[4005,22431,5370],{"class":4174},[4005,22433,3769],{"class":4182},[4005,22435,7945],{"class":4302},[4005,22437,4611],{"class":4182},[4005,22439,22440],{"class":4330},"\"Значення age: ",[4005,22442,20697],{"class":4174},[4005,22444,7965],{"class":7964},[4005,22446,7968],{"class":4330},[4005,22448,3836],{"class":4182},[4005,22450,4655],{"class":4174},[4005,22452,4482],{"class":4182},[4005,22454,22455],{"class":4007,"line":7819},[4005,22456,4078],{"class":4182},[3908,22458,22459],{},[3871,22460,11778],{},[3984,22462,22465],{"className":22463,"code":22464,"language":3989},[3987],"=== Інформація про користувача ===\nІм'я: Олександр\nВік: 28 років\nЗріст: 1.82 м\nБаланс: 1234.56 грн\n\n=== Таблиця ===\n| Параметр     | Значення |\n| Вік          |    28 |\n| Зріст        |  1.82 |\n\nТип name: string\nЗначення age: 28\n",[3753,22466,22464],{"__ignoreMap":3992},[4484,22468,22469,22474],{"icon":9084},[3908,22470,22471],{},[3871,22472,22473],{},"Поширені помилки:",[4781,22475,22476,22512,22596],{},[3749,22477,22478,22481],{},[3871,22479,22480],{},"Неправильний verb для типу:",[3984,22482,22484],{"className":4162,"code":22483,"language":4164,"meta":3992,"style":3992},"fmt.Printf(\"%d\", \"текст\")  \u002F\u002F %!d(string=текст) — помилка!\n",[3753,22485,22486],{"__ignoreMap":3992},[4005,22487,22488,22490,22492,22494,22496,22498,22500,22502,22504,22507,22509],{"class":4007,"line":4008},[4005,22489,3785],{"class":4174},[4005,22491,3769],{"class":4182},[4005,22493,7945],{"class":4302},[4005,22495,4611],{"class":4182},[4005,22497,7968],{"class":4330},[4005,22499,7959],{"class":4174},[4005,22501,7968],{"class":4330},[4005,22503,3836],{"class":4182},[4005,22505,22506],{"class":4330},"\"текст\"",[4005,22508,5196],{"class":4182},[4005,22510,22511],{"class":4190},"\u002F\u002F %!d(string=текст) — помилка!\n",[3749,22513,22514,22521],{},[3871,22515,22516,22518,22519,5831],{},[3753,22517,10666],{}," для байтів замість ",[3753,22520,16775],{},[3984,22522,22524],{"className":4162,"code":22523,"language":4164,"meta":3992,"style":3992},"data := []byte{71, 111}\nfmt.Printf(\"%v\", data)   \u002F\u002F [71 111] — числа!\nfmt.Printf(\"%s\", data)   \u002F\u002F Go — рядок!\n",[3753,22525,22526,22546,22571],{"__ignoreMap":3992},[4005,22527,22528,22530,22532,22534,22536,22539,22541,22544],{"class":4007,"line":4008},[4005,22529,5193],{"class":4174},[4005,22531,11583],{"class":4182},[4005,22533,5162],{"class":4178},[4005,22535,16268],{"class":4182},[4005,22537,22538],{"class":4186},"71",[4005,22540,3836],{"class":4182},[4005,22542,22543],{"class":4186},"111",[4005,22545,4078],{"class":4182},[4005,22547,22548,22550,22552,22554,22556,22558,22560,22562,22564,22566,22568],{"class":4007,"line":4014},[4005,22549,3785],{"class":4174},[4005,22551,3769],{"class":4182},[4005,22553,7945],{"class":4302},[4005,22555,4611],{"class":4182},[4005,22557,7968],{"class":4330},[4005,22559,10666],{"class":4174},[4005,22561,7968],{"class":4330},[4005,22563,3836],{"class":4182},[4005,22565,5193],{"class":4174},[4005,22567,5381],{"class":4182},[4005,22569,22570],{"class":4190},"\u002F\u002F [71 111] — числа!\n",[4005,22572,22573,22575,22577,22579,22581,22583,22585,22587,22589,22591,22593],{"class":4007,"line":4020},[4005,22574,3785],{"class":4174},[4005,22576,3769],{"class":4182},[4005,22578,7945],{"class":4302},[4005,22580,4611],{"class":4182},[4005,22582,7968],{"class":4330},[4005,22584,16775],{"class":4174},[4005,22586,7968],{"class":4330},[4005,22588,3836],{"class":4182},[4005,22590,5193],{"class":4174},[4005,22592,5381],{"class":4182},[4005,22594,22595],{"class":4190},"\u002F\u002F Go — рядок!\n",[3749,22597,22598,22601],{},[3871,22599,22600],{},"Точність для рядків працює з байтами, не символами:",[3984,22602,22604],{"className":4162,"code":22603,"language":4164,"meta":3992,"style":3992},"fmt.Printf(\"%.5s\", \"Привіт\")  \u002F\u002F \"Прив\" (5 байтів = 2.5 символи кирилиці!)\n",[3753,22605,22606],{"__ignoreMap":3992},[4005,22607,22608,22610,22612,22614,22616,22618,22620,22622,22624,22626,22628],{"class":4007,"line":4008},[4005,22609,3785],{"class":4174},[4005,22611,3769],{"class":4182},[4005,22613,7945],{"class":4302},[4005,22615,4611],{"class":4182},[4005,22617,7968],{"class":4330},[4005,22619,21934],{"class":4174},[4005,22621,7968],{"class":4330},[4005,22623,3836],{"class":4182},[4005,22625,11871],{"class":4330},[4005,22627,5196],{"class":4182},[4005,22629,22630],{"class":4190},"\u002F\u002F \"Прив\" (5 байтів = 2.5 символи кирилиці!)\n",[3900,22632],{},[3903,22634,22636],{"id":22635},"операції-мови-go-арифметика-логіка-побітові-оператори-та-пріоритети","Операції мови Go: арифметика, логіка, побітові оператори та пріоритети",[3976,22638,22640],{"id":22639},"арифметичні-операції","Арифметичні операції",[3908,22642,22643],{},"Go підтримує стандартні арифметичні операції над числовими типами:",[5991,22645,22646,22660],{},[5994,22647,22648],{},[5997,22649,22650,22653,22656,22658],{},[6000,22651,22652],{"align":8837},"Оператор",[6000,22654,22655],{"align":8837},"Назва",[6000,22657,6005],{"align":8837},[6000,22659,17083],{"align":8837},[6010,22661,22662,22684,22707,22726,22758,22783,22814],{},[5997,22663,22664,22670,22673,22678],{},[6015,22665,22666],{"align":8837},[3871,22667,22668],{},[3753,22669,14837],{},[6015,22671,22672],{"align":8837},"Додавання",[6015,22674,22675],{"align":8837},[3753,22676,22677],{},"a + b",[6015,22679,22680,22681,5032],{"align":8837},"Працює також для конкатенації рядків (",[3753,22682,22683],{},"\"a\" + \"b\"",[5997,22685,22686,22693,22696,22701],{},[6015,22687,22688],{"align":8837},[3871,22689,22690],{},[3753,22691,22692],{},"-",[6015,22694,22695],{"align":8837},"Віднімання",[6015,22697,22698],{"align":8837},[3753,22699,22700],{},"a - b",[6015,22702,22703,22704],{"align":8837},"Знакове віднімання або унарний мінус ",[3753,22705,22706],{},"-x",[5997,22708,22709,22715,22718,22723],{},[6015,22710,22711],{"align":8837},[3871,22712,22713],{},[3753,22714,8128],{},[6015,22716,22717],{"align":8837},"Множення",[6015,22719,22720],{"align":8837},[3753,22721,22722],{},"a * b",[6015,22724,22725],{"align":8837},"Множення чисел",[5997,22727,22728,22734,22737,22742],{},[6015,22729,22730],{"align":8837},[3871,22731,22732],{},[3753,22733,3858],{},[6015,22735,22736],{"align":8837},"Ділення",[6015,22738,22739],{"align":8837},[3753,22740,22741],{},"10 \u002F 4",[6015,22743,22744,22747,22748,22750,22751,22754,22755],{"align":8837},[3871,22745,22746],{},"Увага:"," ділення цілих чисел дає ціле число ",[3753,22749,4398],{},". Для ",[3753,22752,22753],{},"2.5"," один із операндів має бути дійсним: ",[3753,22756,22757],{},"10.0 \u002F 4",[5997,22759,22760,22766,22769,22774],{},[6015,22761,22762],{"align":8837},[3871,22763,22764],{},[3753,22765,20636],{},[6015,22767,22768],{"align":8837},"Остача від ділення",[6015,22770,22771],{"align":8837},[3753,22772,22773],{},"35 % 3",[6015,22775,22776,22777,22779,22780],{"align":8837},"Результат ",[3753,22778,4398],{},". Працює ",[3871,22781,22782],{},"тільки з цілими числами",[5997,22784,22785,22792,22795,22800],{},[6015,22786,22787],{"align":8837},[3871,22788,22789],{},[3753,22790,22791],{},"++",[6015,22793,22794],{"align":8837},"Постфіксний інкремент",[6015,22796,22797],{"align":8837},[3753,22798,22799],{},"x++",[6015,22801,22802,22803,22806,22807,8512,22810,22813],{"align":8837},"Збільшує на 1. ",[3871,22804,22805],{},"Є інструкцією, а не виразом!"," Запис ",[3753,22808,22809],{},"y = x++",[3753,22811,22812],{},"++x"," заборонений",[5997,22815,22816,22823,22826,22831],{},[6015,22817,22818],{"align":8837},[3871,22819,22820],{},[3753,22821,22822],{},"--",[6015,22824,22825],{"align":8837},"Постфіксний декремент",[6015,22827,22828],{"align":8837},[3753,22829,22830],{},"x--",[6015,22832,22833],{"align":8837},"Зменшує на 1. Також є окремою інструкцією",[3900,22835],{},[3976,22837,22839],{"id":22838},"умовні-вирази-та-логічні-оператори","Умовні вирази та логічні оператори",[3908,22841,22842,22843,8512,22845,5831],{},"Результатом умовних виразів завжди є булеве значення ",[3753,22844,4689],{},[3753,22846,4206],{},[3746,22848,22849,22877],{},[3749,22850,22851,3880,22854,22856,22857,22860,22861,22864,22865,22868,22869,22872,22873,22876],{},[3871,22852,22853],{},"Оператори порівняння:",[3753,22855,12976],{}," (рівно), ",[3753,22858,22859],{},"!="," (не рівно), ",[3753,22862,22863],{},"\u003C"," (менше), ",[3753,22866,22867],{},">"," (більше), ",[3753,22870,22871],{},"\u003C="," (менше або рівно), ",[3753,22874,22875],{},">="," (більше або рівно).",[3749,22878,22879,22882],{},[3871,22880,22881],{},"Логічні оператори:",[3746,22883,22884,22896,22907],{},[3749,22885,22886,22892,22893,22895],{},[3871,22887,22888,22891],{},[3753,22889,22890],{},"&&"," (Логічне І \u002F Кон'юнкція):"," повертає ",[3753,22894,4689],{},", тільки якщо обидва операнди істинні.",[3749,22897,22898,22892,22904,22906],{},[3871,22899,22900,22903],{},[3753,22901,22902],{},"||"," (Логічне АБО \u002F Диз'юнкція):",[3753,22905,4689],{},", якщо хоча б один операнд істинний.",[3749,22908,22909,22915,22916,22919,22920,3826],{},[3871,22910,22911,22914],{},[3753,22912,22913],{},"!"," (Логічне НЕ \u002F Заперечення):"," змінює значення на протилежне (",[3753,22917,22918],{},"!true"," $\\rightarrow$ ",[3753,22921,4206],{},[3900,22923],{},[3976,22925,22927],{"id":22926},"порозрядні-побітові-операції","Порозрядні (побітові) операції",[3908,22929,22930],{},"Побітові операції виконуються над окремими двійковими розрядами цілих чисел:",[5991,22932,22933,22944],{},[5994,22934,22935],{},[5997,22936,22937,22939,22941],{},[6000,22938,22652],{"align":8837},[6000,22940,22655],{"align":8837},[6000,22942,22943],{"align":8837},"Опис та приклад",[6010,22945,22946,22970,22994,23016,23038,23065],{},[5997,22947,22948,22954,22957],{},[6015,22949,22950],{"align":8837},[3871,22951,22952],{},[3753,22953,6412],{},[6015,22955,22956],{"align":8837},"Зсув вліво",[6015,22958,22959,22962,22963,22966,22967,22969],{"align":8837},[3753,22960,22961],{},"2 \u003C\u003C 2"," $\\rightarrow$ число ",[3753,22964,22965],{},"0010"," зсувається вліво на 2 позиції $\\rightarrow$ ",[3753,22968,9112],{}," (8)",[5997,22971,22972,22979,22982],{},[6015,22973,22974],{"align":8837},[3871,22975,22976],{},[3753,22977,22978],{},">>",[6015,22980,22981],{"align":8837},"Зсув вправо",[6015,22983,22984,22962,22987,22989,22990,22993],{"align":8837},[3753,22985,22986],{},"16 >> 3",[3753,22988,5779],{}," зсувається вправо на 3 позиції $\\rightarrow$ ",[3753,22991,22992],{},"00010"," (2)",[5997,22995,22996,23003,23006],{},[6015,22997,22998],{"align":8837},[3871,22999,23000],{},[3753,23001,23002],{},"&",[6015,23004,23005],{"align":8837},"Побітове І",[6015,23007,23008,23010,23011,4761,23013,5032],{"align":8837},[3753,23009,4393],{}," тільки якщо обидва розряди дорівнюють ",[3753,23012,4393],{},[3753,23014,23015],{},"110 & 010 = 010",[5997,23017,23018,23025,23028],{},[6015,23019,23020],{"align":8837},[3871,23021,23022],{},[3753,23023,23024],{},"|",[6015,23026,23027],{"align":8837},"Побітове АБО",[6015,23029,23030,23032,23033,4761,23035,5032],{"align":8837},[3753,23031,4393],{}," якщо хоча б один розряд дорівнює ",[3753,23034,4393],{},[3753,23036,23037],{},"101 | 010 = 111",[5997,23039,23040,23047,23050],{},[6015,23041,23042],{"align":8837},[3871,23043,23044],{},[3753,23045,23046],{},"^",[6015,23048,23049],{"align":8837},"Побітове XOR",[6015,23051,23052,23054,23055,4761,23057,23060,23061,23064],{"align":8837},[3753,23053,4393],{}," якщо тільки один із розрядів дорівнює ",[3753,23056,4393],{},[3753,23058,23059],{},"101 ^ 011 = 110","). Унарний ",[3753,23062,23063],{},"^x"," виконує інверсію бітів (NOT)",[5997,23066,23067,23074,23077],{},[6015,23068,23069],{"align":8837},[3871,23070,23071],{},[3753,23072,23073],{},"&^",[6015,23075,23076],{"align":8837},"Скидання біта (AND NOT)",[6015,23078,23079,23082,23083,23085,23086,23088,23089],{"align":8837},[3753,23080,23081],{},"z = x &^ y",": скидає в 0 біти в ",[3753,23084,4621],{},", де в ",[3753,23087,4626],{}," стоять ",[3753,23090,4393],{},[3984,23092,23094],{"className":4162,"code":23093,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    var a int = 5 \u002F\u002F Двійкове: 101\n    var b int = 2 \u002F\u002F Двійкове: 010\n\n    fmt.Printf(\"a: %03b, b: %03b\\n\", a, b)\n    fmt.Printf(\"a & b (AND):      %03b (%d)\\n\", a&b, a&b)   \u002F\u002F 000 (0)\n    fmt.Printf(\"a | b (OR):       %03b (%d)\\n\", a|b, a|b)   \u002F\u002F 111 (7)\n    fmt.Printf(\"a ^ b (XOR):      %03b (%d)\\n\", a^b, a^b)   \u002F\u002F 111 (7)\n    fmt.Printf(\"a &^ b (AND NOT): %03b (%d)\\n\", a&^b, a&^b) \u002F\u002F 101 (5)\n}\n",[3753,23095,23096,23102,23106,23112,23116,23124,23139,23154,23158,23193,23239,23285,23330,23376],{"__ignoreMap":3992},[4005,23097,23098,23100],{"class":4007,"line":4008},[4005,23099,5739],{"class":4171},[4005,23101,5742],{"class":4178},[4005,23103,23104],{"class":4007,"line":4014},[4005,23105,4036],{"emptyLinePlaceholder":4035},[4005,23107,23108,23110],{"class":4007,"line":4020},[4005,23109,3917],{"class":4836},[4005,23111,7656],{"class":4330},[4005,23113,23114],{"class":4007,"line":4026},[4005,23115,4036],{"emptyLinePlaceholder":4035},[4005,23117,23118,23120,23122],{"class":4007,"line":4032},[4005,23119,4299],{"class":4171},[4005,23121,5764],{"class":4302},[4005,23123,4306],{"class":4182},[4005,23125,23126,23128,23130,23132,23134,23136],{"class":4007,"line":4039},[4005,23127,9412],{"class":4171},[4005,23129,4376],{"class":4174},[4005,23131,4224],{"class":4178},[4005,23133,4183],{"class":4182},[4005,23135,5869],{"class":4186},[4005,23137,23138],{"class":4190}," \u002F\u002F Двійкове: 101\n",[4005,23140,23141,23143,23145,23147,23149,23151],{"class":4007,"line":4045},[4005,23142,9412],{"class":4171},[4005,23144,6087],{"class":4174},[4005,23146,4224],{"class":4178},[4005,23148,4183],{"class":4182},[4005,23150,4398],{"class":4186},[4005,23152,23153],{"class":4190}," \u002F\u002F Двійкове: 010\n",[4005,23155,23156],{"class":4007,"line":4051},[4005,23157,4036],{"emptyLinePlaceholder":4035},[4005,23159,23160,23162,23164,23166,23168,23171,23174,23177,23179,23181,23183,23185,23187,23189,23191],{"class":4007,"line":4057},[4005,23161,5370],{"class":4174},[4005,23163,3769],{"class":4182},[4005,23165,7945],{"class":4302},[4005,23167,4611],{"class":4182},[4005,23169,23170],{"class":4330},"\"a: ",[4005,23172,23173],{"class":4174},"%03b",[4005,23175,23176],{"class":4330},", b: ",[4005,23178,23173],{"class":4174},[4005,23180,7965],{"class":7964},[4005,23182,7968],{"class":4330},[4005,23184,3836],{"class":4182},[4005,23186,9306],{"class":4174},[4005,23188,3836],{"class":4182},[4005,23190,4381],{"class":4174},[4005,23192,4482],{"class":4182},[4005,23194,23195,23197,23199,23201,23203,23206,23208,23210,23212,23214,23216,23218,23220,23222,23224,23226,23228,23230,23232,23234,23236],{"class":4007,"line":4063},[4005,23196,5370],{"class":4174},[4005,23198,3769],{"class":4182},[4005,23200,7945],{"class":4302},[4005,23202,4611],{"class":4182},[4005,23204,23205],{"class":4330},"\"a & b (AND):      ",[4005,23207,23173],{"class":4174},[4005,23209,4761],{"class":4330},[4005,23211,7959],{"class":4174},[4005,23213,5032],{"class":4330},[4005,23215,7965],{"class":7964},[4005,23217,7968],{"class":4330},[4005,23219,3836],{"class":4182},[4005,23221,9306],{"class":4174},[4005,23223,23002],{"class":4182},[4005,23225,4381],{"class":4174},[4005,23227,3836],{"class":4182},[4005,23229,9306],{"class":4174},[4005,23231,23002],{"class":4182},[4005,23233,4381],{"class":4174},[4005,23235,5381],{"class":4182},[4005,23237,23238],{"class":4190},"\u002F\u002F 000 (0)\n",[4005,23240,23241,23243,23245,23247,23249,23252,23254,23256,23258,23260,23262,23264,23266,23268,23270,23272,23274,23276,23278,23280,23282],{"class":4007,"line":4069},[4005,23242,5370],{"class":4174},[4005,23244,3769],{"class":4182},[4005,23246,7945],{"class":4302},[4005,23248,4611],{"class":4182},[4005,23250,23251],{"class":4330},"\"a | b (OR):       ",[4005,23253,23173],{"class":4174},[4005,23255,4761],{"class":4330},[4005,23257,7959],{"class":4174},[4005,23259,5032],{"class":4330},[4005,23261,7965],{"class":7964},[4005,23263,7968],{"class":4330},[4005,23265,3836],{"class":4182},[4005,23267,9306],{"class":4174},[4005,23269,23024],{"class":4182},[4005,23271,4381],{"class":4174},[4005,23273,3836],{"class":4182},[4005,23275,9306],{"class":4174},[4005,23277,23024],{"class":4182},[4005,23279,4381],{"class":4174},[4005,23281,5381],{"class":4182},[4005,23283,23284],{"class":4190},"\u002F\u002F 111 (7)\n",[4005,23286,23287,23289,23291,23293,23295,23298,23300,23302,23304,23306,23308,23310,23312,23314,23316,23318,23320,23322,23324,23326,23328],{"class":4007,"line":4075},[4005,23288,5370],{"class":4174},[4005,23290,3769],{"class":4182},[4005,23292,7945],{"class":4302},[4005,23294,4611],{"class":4182},[4005,23296,23297],{"class":4330},"\"a ^ b (XOR):      ",[4005,23299,23173],{"class":4174},[4005,23301,4761],{"class":4330},[4005,23303,7959],{"class":4174},[4005,23305,5032],{"class":4330},[4005,23307,7965],{"class":7964},[4005,23309,7968],{"class":4330},[4005,23311,3836],{"class":4182},[4005,23313,9306],{"class":4174},[4005,23315,23046],{"class":4182},[4005,23317,4381],{"class":4174},[4005,23319,3836],{"class":4182},[4005,23321,9306],{"class":4174},[4005,23323,23046],{"class":4182},[4005,23325,4381],{"class":4174},[4005,23327,5381],{"class":4182},[4005,23329,23284],{"class":4190},[4005,23331,23332,23334,23336,23338,23340,23343,23345,23347,23349,23351,23353,23355,23357,23359,23361,23363,23365,23367,23369,23371,23373],{"class":4007,"line":4081},[4005,23333,5370],{"class":4174},[4005,23335,3769],{"class":4182},[4005,23337,7945],{"class":4302},[4005,23339,4611],{"class":4182},[4005,23341,23342],{"class":4330},"\"a &^ b (AND NOT): ",[4005,23344,23173],{"class":4174},[4005,23346,4761],{"class":4330},[4005,23348,7959],{"class":4174},[4005,23350,5032],{"class":4330},[4005,23352,7965],{"class":7964},[4005,23354,7968],{"class":4330},[4005,23356,3836],{"class":4182},[4005,23358,9306],{"class":4174},[4005,23360,23073],{"class":4182},[4005,23362,4381],{"class":4174},[4005,23364,3836],{"class":4182},[4005,23366,9306],{"class":4174},[4005,23368,23073],{"class":4182},[4005,23370,4381],{"class":4174},[4005,23372,4498],{"class":4182},[4005,23374,23375],{"class":4190},"\u002F\u002F 101 (5)\n",[4005,23377,23378],{"class":4007,"line":4086},[4005,23379,4078],{"class":4182},[3900,23381],{},[3976,23383,23385,23386,5032],{"id":23384},"складені-операції-присвоєння-compound-assignments","Складені операції присвоєння (",[3758,23387,23388],{},"compound assignments",[3908,23390,23391,23394,23395,23398,23399,3769],{},[3871,23392,23393],{},"Складені операції присвоєння"," — це скорочений запис для зміни значення змінної. Замість того, щоб писати ",[3753,23396,23397],{},"x = x + 5",", можна просто написати ",[3753,23400,23401],{},"x += 5",[3908,23403,23404],{},[3871,23405,7053],{},[3984,23407,23409],{"className":4162,"code":23408,"language":4164,"meta":3992,"style":3992},"a += b    \u002F\u002F Еквівалентно: a = a + b\na -= b    \u002F\u002F Еквівалентно: a = a - b\na *= b    \u002F\u002F Еквівалентно: a = a * b\na \u002F= b    \u002F\u002F Еквівалентно: a = a \u002F b\n",[3753,23410,23411,23423,23435,23447],{"__ignoreMap":3992},[4005,23412,23413,23415,23418,23420],{"class":4007,"line":4008},[4005,23414,9306],{"class":4174},[4005,23416,23417],{"class":4182}," += ",[4005,23419,4381],{"class":4174},[4005,23421,23422],{"class":4190},"    \u002F\u002F Еквівалентно: a = a + b\n",[4005,23424,23425,23427,23430,23432],{"class":4007,"line":4014},[4005,23426,9306],{"class":4174},[4005,23428,23429],{"class":4182}," -= ",[4005,23431,4381],{"class":4174},[4005,23433,23434],{"class":4190},"    \u002F\u002F Еквівалентно: a = a - b\n",[4005,23436,23437,23439,23442,23444],{"class":4007,"line":4020},[4005,23438,9306],{"class":4174},[4005,23440,23441],{"class":4182}," *= ",[4005,23443,4381],{"class":4174},[4005,23445,23446],{"class":4190},"    \u002F\u002F Еквівалентно: a = a * b\n",[4005,23448,23449,23451,23454,23456],{"class":4007,"line":4026},[4005,23450,9306],{"class":4174},[4005,23452,23453],{"class":4182}," \u002F= ",[4005,23455,4381],{"class":4174},[4005,23457,23458],{"class":4190},"    \u002F\u002F Еквівалентно: a = a \u002F b\n",[3908,23460,23461,23464],{},[3871,23462,23463],{},"Найпопулярніші варіанти"," для повсякденної роботи:",[3746,23466,23467,23473,23479,23485],{},[3749,23468,23469,23472],{},[3753,23470,23471],{},"counter += 1"," — збільшити лічильник",[3749,23474,23475,23478],{},[3753,23476,23477],{},"total += price"," — додати до суми",[3749,23480,23481,23484],{},[3753,23482,23483],{},"balance -= amount"," — відняти зі значення",[3749,23486,23487,23490],{},[3753,23488,23489],{},"value *= 2"," — подвоїти значення",[3908,23492,23493,23494,4761,23497,3836,23500,3836,23503,3836,23506,3836,23509,23512],{},"Також існують ",[3871,23495,23496],{},"побітові версії",[3753,23498,23499],{},"\u003C\u003C=",[3753,23501,23502],{},"&=",[3753,23504,23505],{},"|=",[3753,23507,23508],{},"^=",[3753,23510,23511],{},"&^=","), які використовуються для роботи з бітовими масками — детальніше про них у розділі про побітові операції.",[3908,23514,23515,23516,23519,23520,23523,23524,23526,23527,8512,23530,4159],{},"Go надає 12 форм скороченого присвоєння, де ",[3753,23517,23518],{},"a op= b"," еквівалентно ",[3753,23521,23522],{},"a = a op b",", але обчислює ",[3753,23525,9306],{}," лише один раз (важливо для ",[3753,23528,23529],{},"m[key] += 1",[3753,23531,23532],{},"s[i] \u003C\u003C= 2",[5991,23534,23535,23549],{},[5994,23536,23537],{},[5997,23538,23539,23541,23544,23546],{},[6000,23540,22652],{"align":8837},[6000,23542,23543],{"align":8837},"Еквівалент",[6000,23545,6005],{"align":8837},[6000,23547,23548],{"align":8837},"Go-специфіка",[6010,23550,23551,23574,23593,23612,23635,23655,23673,23692,23710,23728,23746],{},[5997,23552,23553,23558,23563,23568],{},[6015,23554,23555],{"align":8837},[3753,23556,23557],{},"+=",[6015,23559,23560],{"align":8837},[3753,23561,23562],{},"a = a + b",[6015,23564,23565],{"align":8837},[3753,23566,23567],{},"total += 5",[6015,23569,23570,23571,5032],{"align":8837},"Працює для чисел і рядків (",[3753,23572,23573],{},"s += \"world\"",[5997,23575,23576,23581,23586,23591],{},[6015,23577,23578],{"align":8837},[3753,23579,23580],{},"-=",[6015,23582,23583],{"align":8837},[3753,23584,23585],{},"a = a - b",[6015,23587,23588],{"align":8837},[3753,23589,23590],{},"balance -= fee",[6015,23592],{"align":8837},[5997,23594,23595,23600,23605,23610],{},[6015,23596,23597],{"align":8837},[3753,23598,23599],{},"*=",[6015,23601,23602],{"align":8837},[3753,23603,23604],{},"a = a * b",[6015,23606,23607],{"align":8837},[3753,23608,23609],{},"count *= 2",[6015,23611],{"align":8837},[5997,23613,23614,23619,23624,23629],{},[6015,23615,23616],{"align":8837},[3753,23617,23618],{},"\u002F=",[6015,23620,23621],{"align":8837},[3753,23622,23623],{},"a = a \u002F b",[6015,23625,23626],{"align":8837},[3753,23627,23628],{},"avg \u002F= n",[6015,23630,23631,23632],{"align":8837},"Паніка якщо ",[3753,23633,23634],{},"b==0",[5997,23636,23637,23642,23647,23652],{},[6015,23638,23639],{"align":8837},[3753,23640,23641],{},"%=",[6015,23643,23644],{"align":8837},[3753,23645,23646],{},"a = a % b",[6015,23648,23649],{"align":8837},[3753,23650,23651],{},"a %= 15",[6015,23653,23654],{"align":8837},"Лише цілі",[5997,23656,23657,23661,23666,23671],{},[6015,23658,23659],{"align":8837},[3753,23660,23499],{},[6015,23662,23663],{"align":8837},[3753,23664,23665],{},"a = a \u003C\u003C b",[6015,23667,23668],{"align":8837},[3753,23669,23670],{},"flags \u003C\u003C= 2",[6015,23672],{"align":8837},[5997,23674,23675,23680,23685,23690],{},[6015,23676,23677],{"align":8837},[3753,23678,23679],{},">>=",[6015,23681,23682],{"align":8837},[3753,23683,23684],{},"a = a >> b",[6015,23686,23687],{"align":8837},[3753,23688,23689],{},"flags >>= 1",[6015,23691],{"align":8837},[5997,23693,23694,23698,23703,23708],{},[6015,23695,23696],{"align":8837},[3753,23697,23502],{},[6015,23699,23700],{"align":8837},[3753,23701,23702],{},"a = a & b",[6015,23704,23705],{"align":8837},[3753,23706,23707],{},"mask &= 0xFF",[6015,23709],{"align":8837},[5997,23711,23712,23716,23721,23726],{},[6015,23713,23714],{"align":8837},[3753,23715,23505],{},[6015,23717,23718],{"align":8837},[3753,23719,23720],{},"a = a | b",[6015,23722,23723],{"align":8837},[3753,23724,23725],{},"roles |= RoleAdmin",[6015,23727],{"align":8837},[5997,23729,23730,23734,23739,23744],{},[6015,23731,23732],{"align":8837},[3753,23733,23508],{},[6015,23735,23736],{"align":8837},[3753,23737,23738],{},"a = a ^ b",[6015,23740,23741],{"align":8837},[3753,23742,23743],{},"a ^= 10",[6015,23745],{"align":8837},[5997,23747,23748,23752,23757,23762],{},[6015,23749,23750],{"align":8837},[3753,23751,23511],{},[6015,23753,23754],{"align":8837},[3753,23755,23756],{},"a = a &^ b",[6015,23758,23759],{"align":8837},[3753,23760,23761],{},"mask &^= RoleGuest",[6015,23763,23764],{"align":8837},"Скидання бітів (AND NOT)",[3984,23766,23768],{"className":4162,"code":23767,"language":4164,"meta":3992,"style":3992},"a := 10\nb := 5\na += b; fmt.Println(a) \u002F\u002F 15\na -= b; fmt.Println(a) \u002F\u002F 10\na *= 10; fmt.Println(a) \u002F\u002F 100\na \u002F= b; fmt.Println(a) \u002F\u002F 20\na %= 15; fmt.Println(a) \u002F\u002F 5\na \u003C\u003C= 2; fmt.Println(a) \u002F\u002F 20 (00101 -> 10100)\na >>= 1; fmt.Println(a) \u002F\u002F 10\na &= 8; fmt.Println(a) \u002F\u002F 8  (01010 & 01000)\na ^= 10; fmt.Println(a) \u002F\u002F 2  (01000 ^ 01010)\na |= 5; fmt.Println(a) \u002F\u002F 7  (00010 | 00101)\n",[3753,23769,23770,23778,23786,23812,23837,23862,23887,23913,23939,23964,23990,24016],{"__ignoreMap":3992},[4005,23771,23772,23774,23776],{"class":4007,"line":4008},[4005,23773,9306],{"class":4174},[4005,23775,4314],{"class":4182},[4005,23777,7167],{"class":4186},[4005,23779,23780,23782,23784],{"class":4007,"line":4014},[4005,23781,4381],{"class":4174},[4005,23783,4314],{"class":4182},[4005,23785,10266],{"class":4186},[4005,23787,23788,23790,23792,23794,23797,23799,23801,23803,23805,23807,23809],{"class":4007,"line":4020},[4005,23789,9306],{"class":4174},[4005,23791,23417],{"class":4182},[4005,23793,4381],{"class":4174},[4005,23795,23796],{"class":4182},"; ",[4005,23798,3785],{"class":4174},[4005,23800,3769],{"class":4182},[4005,23802,5348],{"class":4302},[4005,23804,4611],{"class":4182},[4005,23806,9306],{"class":4174},[4005,23808,4498],{"class":4182},[4005,23810,23811],{"class":4190},"\u002F\u002F 15\n",[4005,23813,23814,23816,23818,23820,23822,23824,23826,23828,23830,23832,23834],{"class":4007,"line":4026},[4005,23815,9306],{"class":4174},[4005,23817,23429],{"class":4182},[4005,23819,4381],{"class":4174},[4005,23821,23796],{"class":4182},[4005,23823,3785],{"class":4174},[4005,23825,3769],{"class":4182},[4005,23827,5348],{"class":4302},[4005,23829,4611],{"class":4182},[4005,23831,9306],{"class":4174},[4005,23833,4498],{"class":4182},[4005,23835,23836],{"class":4190},"\u002F\u002F 10\n",[4005,23838,23839,23841,23843,23845,23847,23849,23851,23853,23855,23857,23859],{"class":4007,"line":4032},[4005,23840,9306],{"class":4174},[4005,23842,23441],{"class":4182},[4005,23844,4631],{"class":4186},[4005,23846,23796],{"class":4182},[4005,23848,3785],{"class":4174},[4005,23850,3769],{"class":4182},[4005,23852,5348],{"class":4302},[4005,23854,4611],{"class":4182},[4005,23856,9306],{"class":4174},[4005,23858,4498],{"class":4182},[4005,23860,23861],{"class":4190},"\u002F\u002F 100\n",[4005,23863,23864,23866,23868,23870,23872,23874,23876,23878,23880,23882,23884],{"class":4007,"line":4039},[4005,23865,9306],{"class":4174},[4005,23867,23453],{"class":4182},[4005,23869,4381],{"class":4174},[4005,23871,23796],{"class":4182},[4005,23873,3785],{"class":4174},[4005,23875,3769],{"class":4182},[4005,23877,5348],{"class":4302},[4005,23879,4611],{"class":4182},[4005,23881,9306],{"class":4174},[4005,23883,4498],{"class":4182},[4005,23885,23886],{"class":4190},"\u002F\u002F 20\n",[4005,23888,23889,23891,23894,23896,23898,23900,23902,23904,23906,23908,23910],{"class":4007,"line":4045},[4005,23890,9306],{"class":4174},[4005,23892,23893],{"class":4182}," %= ",[4005,23895,9467],{"class":4186},[4005,23897,23796],{"class":4182},[4005,23899,3785],{"class":4174},[4005,23901,3769],{"class":4182},[4005,23903,5348],{"class":4302},[4005,23905,4611],{"class":4182},[4005,23907,9306],{"class":4174},[4005,23909,4498],{"class":4182},[4005,23911,23912],{"class":4190},"\u002F\u002F 5\n",[4005,23914,23915,23917,23920,23922,23924,23926,23928,23930,23932,23934,23936],{"class":4007,"line":4051},[4005,23916,9306],{"class":4174},[4005,23918,23919],{"class":4182}," \u003C\u003C= ",[4005,23921,4398],{"class":4186},[4005,23923,23796],{"class":4182},[4005,23925,3785],{"class":4174},[4005,23927,3769],{"class":4182},[4005,23929,5348],{"class":4302},[4005,23931,4611],{"class":4182},[4005,23933,9306],{"class":4174},[4005,23935,4498],{"class":4182},[4005,23937,23938],{"class":4190},"\u002F\u002F 20 (00101 -> 10100)\n",[4005,23940,23941,23943,23946,23948,23950,23952,23954,23956,23958,23960,23962],{"class":4007,"line":4057},[4005,23942,9306],{"class":4174},[4005,23944,23945],{"class":4182}," >>= ",[4005,23947,4393],{"class":4186},[4005,23949,23796],{"class":4182},[4005,23951,3785],{"class":4174},[4005,23953,3769],{"class":4182},[4005,23955,5348],{"class":4302},[4005,23957,4611],{"class":4182},[4005,23959,9306],{"class":4174},[4005,23961,4498],{"class":4182},[4005,23963,23836],{"class":4190},[4005,23965,23966,23968,23971,23973,23975,23977,23979,23981,23983,23985,23987],{"class":4007,"line":4063},[4005,23967,9306],{"class":4174},[4005,23969,23970],{"class":4182}," &= ",[4005,23972,8264],{"class":4186},[4005,23974,23796],{"class":4182},[4005,23976,3785],{"class":4174},[4005,23978,3769],{"class":4182},[4005,23980,5348],{"class":4302},[4005,23982,4611],{"class":4182},[4005,23984,9306],{"class":4174},[4005,23986,4498],{"class":4182},[4005,23988,23989],{"class":4190},"\u002F\u002F 8  (01010 & 01000)\n",[4005,23991,23992,23994,23997,23999,24001,24003,24005,24007,24009,24011,24013],{"class":4007,"line":4069},[4005,23993,9306],{"class":4174},[4005,23995,23996],{"class":4182}," ^= ",[4005,23998,4631],{"class":4186},[4005,24000,23796],{"class":4182},[4005,24002,3785],{"class":4174},[4005,24004,3769],{"class":4182},[4005,24006,5348],{"class":4302},[4005,24008,4611],{"class":4182},[4005,24010,9306],{"class":4174},[4005,24012,4498],{"class":4182},[4005,24014,24015],{"class":4190},"\u002F\u002F 2  (01000 ^ 01010)\n",[4005,24017,24018,24020,24023,24025,24027,24029,24031,24033,24035,24037,24039],{"class":4007,"line":4075},[4005,24019,9306],{"class":4174},[4005,24021,24022],{"class":4182}," |= ",[4005,24024,5869],{"class":4186},[4005,24026,23796],{"class":4182},[4005,24028,3785],{"class":4174},[4005,24030,3769],{"class":4182},[4005,24032,5348],{"class":4302},[4005,24034,4611],{"class":4182},[4005,24036,9306],{"class":4174},[4005,24038,4498],{"class":4182},[4005,24040,24041],{"class":4190},"\u002F\u002F 7  (00010 | 00101)\n",[5427,24043,24044,3880,24047,3836,24049,24051,24052,24055,24056,24062,24063,3836,24065,8512,24068,7537,24070,3880,24073,24076,24077,24080,24081,3769],{},[3871,24045,24046],{},"Go-специфіка — це інструкції, а не вирази:",[3753,24048,22799],{},[3753,24050,22830],{}," та всі ",[3753,24053,24054],{},"op="," є ",[3871,24057,24058,24059,5032],{},"інструкціями (",[3758,24060,24061],{},"statements",", а не виразами. Записи ",[3753,24064,22809],{},[3753,24066,24067],{},"y = (a += b)",[3753,24069,22812],{},[3871,24071,24072],{},"помилка компіляції",[3753,24074,24075],{},"expected statements",". На відміну від C\u002FJava, де ",[3753,24078,24079],{},"a++"," повертає значення, в Go це запобігає помилкам ",[3753,24082,24083],{},"if (a = b++)",[3976,24085,24087],{"id":24086},"пріоритет-операторів-в-якому-порядку-обчислюються-вирази","Пріоритет операторів: в якому порядку обчислюються вирази?",[3908,24089,24090,24091,3769],{},"Коли в одному виразі є кілька операторів, Go обчислює їх у певному порядку. Це називається ",[3871,24092,24093],{},"пріоритет операторів",[4748,24095,24096,24102,24138],{"icon":4750},[3908,24097,24098,24101],{},[3871,24099,24100],{},"Просте правило:"," Пріоритет в Go такий самий, як у математиці:",[4781,24103,24104,24114,24122,24131],{},[3749,24105,24106,24107,3836,24109,3836,24111,24113],{},"Спочатку ",[3753,24108,8128],{},[3753,24110,3858],{},[3753,24112,20636],{}," (множення, ділення)",[3749,24115,24116,24117,3836,24119,24121],{},"Потім ",[3753,24118,14837],{},[3753,24120,22692],{}," (додавання, віднімання)",[3749,24123,24124,24125,3836,24127,3836,24129],{},"Потім порівняння ",[3753,24126,12976],{},[3753,24128,22863],{},[3753,24130,22867],{},[3749,24132,24133,24134,3836,24136],{},"В кінці логічні ",[3753,24135,22890],{},[3753,24137,22902],{},[3908,24139,24140,3880,24142,4183,24145,4183,24148,4183,24151],{},[3871,24141,20517],{},[3753,24143,24144],{},"2 + 3 * 4",[3753,24146,24147],{},"2 + (3 * 4)",[3753,24149,24150],{},"2 + 12",[3753,24152,24153],{},"14",[9014,24155,24157],{"id":24156},"повна-таблиця-пріоритетів","Повна таблиця пріоритетів",[5991,24159,24160,24175],{},[5994,24161,24162],{},[5997,24163,24164,24167,24170,24173],{},[6000,24165,24166],{},"Пріоритет",[6000,24168,24169],{},"Оператори",[6000,24171,24172],{},"Опис",[6000,24174,6005],{},[6010,24176,24177,24211,24238,24269,24287],{},[5997,24178,24179,24184,24200,24203],{},[6015,24180,24181],{},[3871,24182,24183],{},"5 (Найвищий)",[6015,24185,24186,3880,24188,3880,24190,3880,24192,3880,24194,3880,24196,3880,24198],{},[3753,24187,8128],{},[3753,24189,3858],{},[3753,24191,20636],{},[3753,24193,6412],{},[3753,24195,22978],{},[3753,24197,23002],{},[3753,24199,23073],{},[6015,24201,24202],{},"Множення, ділення, побітові",[6015,24204,24205,4183,24208],{},[3753,24206,24207],{},"a * b + c",[3753,24209,24210],{},"(a * b) + c",[5997,24212,24213,24217,24227,24230],{},[6015,24214,24215],{},[3871,24216,8245],{},[6015,24218,24219,3880,24221,3880,24223,3880,24225],{},[3753,24220,14837],{},[3753,24222,22692],{},[3753,24224,23024],{},[3753,24226,23046],{},[6015,24228,24229],{},"Додавання, віднімання, побітові",[6015,24231,24232,4183,24235],{},[3753,24233,24234],{},"a + b \u003C\u003C 2",[3753,24236,24237],{},"a + (b \u003C\u003C 2)",[5997,24239,24240,24244,24258,24261],{},[6015,24241,24242],{},[3871,24243,6286],{},[6015,24245,24246,3880,24248,3880,24250,3880,24252,3880,24254,3880,24256],{},[3753,24247,12976],{},[3753,24249,22859],{},[3753,24251,22863],{},[3753,24253,22867],{},[3753,24255,22871],{},[3753,24257,22875],{},[6015,24259,24260],{},"Порівняння",[6015,24262,24263,4183,24266],{},[3753,24264,24265],{},"a + b == c",[3753,24267,24268],{},"(a + b) == c",[5997,24270,24271,24275,24279,24282],{},[6015,24272,24273],{},[3871,24274,4398],{},[6015,24276,24277],{},[3753,24278,22890],{},[6015,24280,24281],{},"Логічне І (AND)",[6015,24283,24284],{},[3753,24285,24286],{},"a > 0 && b > 0",[5997,24288,24289,24294,24298,24301],{},[6015,24290,24291],{},[3871,24292,24293],{},"1 (Найнижчий)",[6015,24295,24296],{},[3753,24297,22902],{},[6015,24299,24300],{},"Логічне АБО (OR)",[6015,24302,24303],{},[3753,24304,24305],{},"a \u003C 0 || b \u003C 0",[9014,24307,24309],{"id":24308},"що-таке-асоціативність","Що таке асоціативність?",[3908,24311,24312,24315,24316,3769],{},[3871,24313,24314],{},"Асоціативність"," визначає, в якому порядку обчислюються оператори ",[3871,24317,24318],{},"одного пріоритету",[3908,24320,24321,24322,24325,24326,5831],{},"У Go всі бінарні оператори ",[3871,24323,24324],{},"лівоасоціативні"," — обчислюються ",[3871,24327,24328],{},"зліва направо",[3984,24330,24332],{"className":4162,"code":24331,"language":4164,"meta":3992,"style":3992},"a - b - c   \u002F\u002F обчислюється як (a - b) - c, не як a - (b - c)\na \u002F b \u002F c   \u002F\u002F обчислюється як (a \u002F b) \u002F c\n\n\u002F\u002F Приклад:\nresult := 10 - 5 - 2\n\u002F\u002F Крок 1: (10 - 5) = 5\n\u002F\u002F Крок 2: 5 - 2 = 3\n\u002F\u002F result = 3\n",[3753,24333,24334,24349,24364,24368,24373,24390,24395,24400],{"__ignoreMap":3992},[4005,24335,24336,24338,24340,24342,24344,24346],{"class":4007,"line":4008},[4005,24337,9306],{"class":4174},[4005,24339,14546],{"class":4182},[4005,24341,4381],{"class":4174},[4005,24343,14546],{"class":4182},[4005,24345,4386],{"class":4174},[4005,24347,24348],{"class":4190},"   \u002F\u002F обчислюється як (a - b) - c, не як a - (b - c)\n",[4005,24350,24351,24353,24355,24357,24359,24361],{"class":4007,"line":4014},[4005,24352,9306],{"class":4174},[4005,24354,15549],{"class":4182},[4005,24356,4381],{"class":4174},[4005,24358,15549],{"class":4182},[4005,24360,4386],{"class":4174},[4005,24362,24363],{"class":4190},"   \u002F\u002F обчислюється як (a \u002F b) \u002F c\n",[4005,24365,24366],{"class":4007,"line":4020},[4005,24367,4036],{"emptyLinePlaceholder":4035},[4005,24369,24370],{"class":4007,"line":4026},[4005,24371,24372],{"class":4190},"\u002F\u002F Приклад:\n",[4005,24374,24375,24377,24379,24381,24383,24385,24387],{"class":4007,"line":4032},[4005,24376,5695],{"class":4174},[4005,24378,4314],{"class":4182},[4005,24380,4631],{"class":4186},[4005,24382,14546],{"class":4182},[4005,24384,5869],{"class":4186},[4005,24386,14546],{"class":4182},[4005,24388,24389],{"class":4186},"2\n",[4005,24391,24392],{"class":4007,"line":4039},[4005,24393,24394],{"class":4190},"\u002F\u002F Крок 1: (10 - 5) = 5\n",[4005,24396,24397],{"class":4007,"line":4045},[4005,24398,24399],{"class":4190},"\u002F\u002F Крок 2: 5 - 2 = 3\n",[4005,24401,24402],{"class":4007,"line":4051},[4005,24403,24404],{"class":4190},"\u002F\u002F result = 3\n",[3908,24406,24407,24410,24411,5831],{},[3871,24408,24409],{},"Унарні оператори"," (що стоять перед одним операндом) ",[3871,24412,24413],{},"правоасоціативні",[3984,24415,24417],{"className":4162,"code":24416,"language":4164,"meta":3992,"style":3992},"-!x    \u002F\u002F обчислюється як -(!(x))\n*&ptr  \u002F\u002F обчислюється як *(&ptr)\n",[3753,24418,24419,24429],{"__ignoreMap":3992},[4005,24420,24421,24424,24426],{"class":4007,"line":4008},[4005,24422,24423],{"class":4182},"-!",[4005,24425,4621],{"class":4174},[4005,24427,24428],{"class":4190},"    \u002F\u002F обчислюється як -(!(x))\n",[4005,24430,24431,24434,24437],{"class":4007,"line":4014},[4005,24432,24433],{"class":4182},"*&",[4005,24435,24436],{"class":4174},"ptr",[4005,24438,24439],{"class":4190},"  \u002F\u002F обчислюється як *(&ptr)\n",[9014,24441,24443],{"id":24442},"практичні-приклади","Практичні приклади",[3908,24445,24446],{},[3871,24447,24448],{},"Приклад 1: Множення перед додаванням",[3984,24450,24452],{"className":4162,"code":24451,"language":4164,"meta":3992,"style":3992},"result := 2 + 3 * 4\n\u002F\u002F Крок 1: 3 * 4 = 12 (пріоритет 5)\n\u002F\u002F Крок 2: 2 + 12 = 14 (пріоритет 4)\n\u002F\u002F result = 14\n",[3753,24453,24454,24471,24476,24481],{"__ignoreMap":3992},[4005,24455,24456,24458,24460,24462,24464,24466,24468],{"class":4007,"line":4008},[4005,24457,5695],{"class":4174},[4005,24459,4314],{"class":4182},[4005,24461,4398],{"class":4186},[4005,24463,6289],{"class":4182},[4005,24465,6286],{"class":4186},[4005,24467,6735],{"class":4182},[4005,24469,24470],{"class":4186},"4\n",[4005,24472,24473],{"class":4007,"line":4014},[4005,24474,24475],{"class":4190},"\u002F\u002F Крок 1: 3 * 4 = 12 (пріоритет 5)\n",[4005,24477,24478],{"class":4007,"line":4020},[4005,24479,24480],{"class":4190},"\u002F\u002F Крок 2: 2 + 12 = 14 (пріоритет 4)\n",[4005,24482,24483],{"class":4007,"line":4026},[4005,24484,24485],{"class":4190},"\u002F\u002F result = 14\n",[3908,24487,24488],{},[3871,24489,24490],{},"Приклад 2: Побітові операції та додавання",[3984,24492,24494],{"className":4162,"code":24493,"language":4164,"meta":3992,"style":3992},"result := 5 + 2 \u003C\u003C 1\n\u002F\u002F Крок 1: 2 \u003C\u003C 1 = 4 (зсув має пріоритет 5)\n\u002F\u002F Крок 2: 5 + 4 = 9 (додавання має пріоритет 4)\n\u002F\u002F result = 9\n\n\u002F\u002F ❌ Помилка: думати, що це (5 + 2) \u003C\u003C 1 = 14\n",[3753,24495,24496,24513,24518,24523,24528,24532],{"__ignoreMap":3992},[4005,24497,24498,24500,24502,24504,24506,24508,24510],{"class":4007,"line":4008},[4005,24499,5695],{"class":4174},[4005,24501,4314],{"class":4182},[4005,24503,5869],{"class":4186},[4005,24505,6289],{"class":4182},[4005,24507,4398],{"class":4186},[4005,24509,6429],{"class":4182},[4005,24511,24512],{"class":4186},"1\n",[4005,24514,24515],{"class":4007,"line":4014},[4005,24516,24517],{"class":4190},"\u002F\u002F Крок 1: 2 \u003C\u003C 1 = 4 (зсув має пріоритет 5)\n",[4005,24519,24520],{"class":4007,"line":4020},[4005,24521,24522],{"class":4190},"\u002F\u002F Крок 2: 5 + 4 = 9 (додавання має пріоритет 4)\n",[4005,24524,24525],{"class":4007,"line":4026},[4005,24526,24527],{"class":4190},"\u002F\u002F result = 9\n",[4005,24529,24530],{"class":4007,"line":4032},[4005,24531,4036],{"emptyLinePlaceholder":4035},[4005,24533,24534],{"class":4007,"line":4039},[4005,24535,24536],{"class":4190},"\u002F\u002F ❌ Помилка: думати, що це (5 + 2) \u003C\u003C 1 = 14\n",[3908,24538,24539],{},[3871,24540,24541],{},"Приклад 3: Порівняння та логічні оператори",[3984,24543,24545],{"className":4162,"code":24544,"language":4164,"meta":3992,"style":3992},"result := 5 > 3 && 10 \u003C 20\n\u002F\u002F Крок 1: 5 > 3 = true (порівняння, пріоритет 3)\n\u002F\u002F Крок 2: 10 \u003C 20 = true (порівняння, пріоритет 3)\n\u002F\u002F Крок 3: true && true = true (логічне І, пріоритет 2)\n\u002F\u002F result = true\n",[3753,24546,24547,24567,24572,24577,24582],{"__ignoreMap":3992},[4005,24548,24549,24551,24553,24555,24557,24559,24561,24563,24565],{"class":4007,"line":4008},[4005,24550,5695],{"class":4174},[4005,24552,4314],{"class":4182},[4005,24554,5869],{"class":4186},[4005,24556,10353],{"class":4182},[4005,24558,6286],{"class":4186},[4005,24560,5227],{"class":4182},[4005,24562,4631],{"class":4186},[4005,24564,10331],{"class":4182},[4005,24566,4636],{"class":4186},[4005,24568,24569],{"class":4007,"line":4014},[4005,24570,24571],{"class":4190},"\u002F\u002F Крок 1: 5 > 3 = true (порівняння, пріоритет 3)\n",[4005,24573,24574],{"class":4007,"line":4020},[4005,24575,24576],{"class":4190},"\u002F\u002F Крок 2: 10 \u003C 20 = true (порівняння, пріоритет 3)\n",[4005,24578,24579],{"class":4007,"line":4026},[4005,24580,24581],{"class":4190},"\u002F\u002F Крок 3: true && true = true (логічне І, пріоритет 2)\n",[4005,24583,24584],{"class":4007,"line":4032},[4005,24585,24586],{"class":4190},"\u002F\u002F result = true\n",[3908,24588,24589],{},[3871,24590,24591],{},"Приклад 4: Поширена помилка з побітовими операціями",[3984,24593,24595],{"className":4162,"code":24594,"language":4164,"meta":3992,"style":3992},"mask := 0xFF\nx := 0xAB\n\n\u002F\u002F ❌ ПОМИЛКА:\nif x & mask == 0 {\n    \u002F\u002F Це читається як: x & (mask == 0)\n    \u002F\u002F Спочатку: mask == 0 → false (пріоритет 3)\n    \u002F\u002F Потім: x & false → помилка типів!\n}\n\n\u002F\u002F ✅ ПРАВИЛЬНО:\nif (x & mask) == 0 {\n    \u002F\u002F Спочатку: (x & mask) виконується в дужках\n    \u002F\u002F Потім: результат порівнюється з 0\n}\n",[3753,24596,24597,24607,24616,24620,24625,24641,24646,24651,24656,24660,24664,24669,24687,24692,24697],{"__ignoreMap":3992},[4005,24598,24599,24602,24604],{"class":4007,"line":4008},[4005,24600,24601],{"class":4174},"mask",[4005,24603,4314],{"class":4182},[4005,24605,24606],{"class":4186},"0xFF\n",[4005,24608,24609,24611,24613],{"class":4007,"line":4014},[4005,24610,4621],{"class":4174},[4005,24612,4314],{"class":4182},[4005,24614,24615],{"class":4186},"0xAB\n",[4005,24617,24618],{"class":4007,"line":4020},[4005,24619,4036],{"emptyLinePlaceholder":4035},[4005,24621,24622],{"class":4007,"line":4026},[4005,24623,24624],{"class":4190},"\u002F\u002F ❌ ПОМИЛКА:\n",[4005,24626,24627,24629,24631,24633,24635,24637,24639],{"class":4007,"line":4032},[4005,24628,3800],{"class":4836},[4005,24630,6141],{"class":4174},[4005,24632,8004],{"class":4182},[4005,24634,24601],{"class":4174},[4005,24636,5473],{"class":4182},[4005,24638,4200],{"class":4186},[4005,24640,5073],{"class":4182},[4005,24642,24643],{"class":4007,"line":4039},[4005,24644,24645],{"class":4190},"    \u002F\u002F Це читається як: x & (mask == 0)\n",[4005,24647,24648],{"class":4007,"line":4045},[4005,24649,24650],{"class":4190},"    \u002F\u002F Спочатку: mask == 0 → false (пріоритет 3)\n",[4005,24652,24653],{"class":4007,"line":4051},[4005,24654,24655],{"class":4190},"    \u002F\u002F Потім: x & false → помилка типів!\n",[4005,24657,24658],{"class":4007,"line":4057},[4005,24659,4078],{"class":4182},[4005,24661,24662],{"class":4007,"line":4063},[4005,24663,4036],{"emptyLinePlaceholder":4035},[4005,24665,24666],{"class":4007,"line":4069},[4005,24667,24668],{"class":4190},"\u002F\u002F ✅ ПРАВИЛЬНО:\n",[4005,24670,24671,24673,24675,24677,24679,24681,24683,24685],{"class":4007,"line":4075},[4005,24672,3800],{"class":4836},[4005,24674,4761],{"class":4182},[4005,24676,4621],{"class":4174},[4005,24678,8004],{"class":4182},[4005,24680,24601],{"class":4174},[4005,24682,12688],{"class":4182},[4005,24684,4200],{"class":4186},[4005,24686,5073],{"class":4182},[4005,24688,24689],{"class":4007,"line":4081},[4005,24690,24691],{"class":4190},"    \u002F\u002F Спочатку: (x & mask) виконується в дужках\n",[4005,24693,24694],{"class":4007,"line":4086},[4005,24695,24696],{"class":4190},"    \u002F\u002F Потім: результат порівнюється з 0\n",[4005,24698,24699],{"class":4007,"line":4092},[4005,24700,4078],{"class":4182},[9014,24702,24704],{"id":24703},"коли-використовувати-дужки","Коли використовувати дужки?",[4484,24706,24707,24712,24717,24720,24857],{"icon":9084},[3908,24708,24709],{},[3871,24710,24711],{},"Золоте правило:",[3908,24713,24714],{},[3871,24715,24716],{},"Якщо сумніваєтесь — ставте дужки!",[3908,24718,24719],{},"Дужки роблять код зрозумілішим для інших розробників і запобігають помилкам:",[3984,24721,24723],{"className":4162,"code":24722,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Незрозуміло:\nresult := a + b * c \u003C\u003C d & e\n\n\u002F\u002F Зрозуміло:\nresult := (a + (b * c)) \u003C\u003C (d & e)\n\n\u002F\u002F Або навіть:\ntemp1 := b * c\ntemp2 := a + temp1\ntemp3 := d & e\nresult := temp2 \u003C\u003C temp3\n",[3753,24724,24725,24730,24756,24760,24765,24794,24798,24803,24817,24831,24844],{"__ignoreMap":3992},[4005,24726,24727],{"class":4007,"line":4008},[4005,24728,24729],{"class":4190},"\u002F\u002F Незрозуміло:\n",[4005,24731,24732,24734,24736,24738,24740,24742,24744,24746,24748,24751,24753],{"class":4007,"line":4014},[4005,24733,5695],{"class":4174},[4005,24735,4314],{"class":4182},[4005,24737,9306],{"class":4174},[4005,24739,6289],{"class":4182},[4005,24741,4381],{"class":4174},[4005,24743,6735],{"class":4182},[4005,24745,4386],{"class":4174},[4005,24747,6429],{"class":4182},[4005,24749,24750],{"class":4174},"d",[4005,24752,8004],{"class":4182},[4005,24754,24755],{"class":4174},"e\n",[4005,24757,24758],{"class":4007,"line":4020},[4005,24759,4036],{"emptyLinePlaceholder":4035},[4005,24761,24762],{"class":4007,"line":4026},[4005,24763,24764],{"class":4190},"\u002F\u002F Зрозуміло:\n",[4005,24766,24767,24769,24771,24773,24776,24778,24780,24782,24785,24787,24789,24792],{"class":4007,"line":4032},[4005,24768,5695],{"class":4174},[4005,24770,7999],{"class":4182},[4005,24772,9306],{"class":4174},[4005,24774,24775],{"class":4182}," + (",[4005,24777,4381],{"class":4174},[4005,24779,6735],{"class":4182},[4005,24781,4386],{"class":4174},[4005,24783,24784],{"class":4182},")) \u003C\u003C (",[4005,24786,24750],{"class":4174},[4005,24788,8004],{"class":4182},[4005,24790,24791],{"class":4174},"e",[4005,24793,4482],{"class":4182},[4005,24795,24796],{"class":4007,"line":4039},[4005,24797,4036],{"emptyLinePlaceholder":4035},[4005,24799,24800],{"class":4007,"line":4045},[4005,24801,24802],{"class":4190},"\u002F\u002F Або навіть:\n",[4005,24804,24805,24808,24810,24812,24814],{"class":4007,"line":4051},[4005,24806,24807],{"class":4174},"temp1",[4005,24809,4314],{"class":4182},[4005,24811,4381],{"class":4174},[4005,24813,6735],{"class":4182},[4005,24815,24816],{"class":4174},"c\n",[4005,24818,24819,24822,24824,24826,24828],{"class":4007,"line":4057},[4005,24820,24821],{"class":4174},"temp2",[4005,24823,4314],{"class":4182},[4005,24825,9306],{"class":4174},[4005,24827,6289],{"class":4182},[4005,24829,24830],{"class":4174},"temp1\n",[4005,24832,24833,24836,24838,24840,24842],{"class":4007,"line":4063},[4005,24834,24835],{"class":4174},"temp3",[4005,24837,4314],{"class":4182},[4005,24839,24750],{"class":4174},[4005,24841,8004],{"class":4182},[4005,24843,24755],{"class":4174},[4005,24845,24846,24848,24850,24852,24854],{"class":4007,"line":4069},[4005,24847,5695],{"class":4174},[4005,24849,4314],{"class":4182},[4005,24851,24821],{"class":4174},[4005,24853,6429],{"class":4182},[4005,24855,24856],{"class":4174},"temp3\n",[3908,24858,24859],{},[3871,24860,5421,24861,24864],{},[3753,24862,24863],{},"go vet"," допоможе знайти підозрілі вирази!",[9014,24866,24868],{"id":24867},"шпаргалка-від-найвищого-до-найнижчого","Шпаргалка: від найвищого до найнижчого",[3984,24870,24873],{"className":24871,"code":24872,"language":3989},[3987],"1️⃣ Унарні:        +x  -x  !x  ^x  *ptr  &x\n2️⃣ Множення:      *   \u002F   %   \u003C\u003C   >>   &   &^\n3️⃣ Додавання:     +   -   |   ^\n4️⃣ Порівняння:    ==  !=  \u003C   \u003C=   >   >=\n5️⃣ Логічне І:     &&\n6️⃣ Логічне АБО:   ||\n",[3753,24874,24872],{"__ignoreMap":3992},[3908,24876,24877,24880],{},[3871,24878,24879],{},"Запам'ятайте:"," Як у математиці — спочатку множення\u002Fділення, потім додавання\u002Fвіднімання, потім порівняння, в кінці логіка.",[3900,24882],{},[3903,24884,24886],{"id":24885},"керуючі-конструкції-розгалуження-та-цикли","Керуючі конструкції: розгалуження та цикли",[3908,24888,24889,24890,24893,24894,24896,24897,3769],{},"У мові Go потік виконання програми керується мінімалістичним, але надзвичайно потужним набором інструкцій: умовними переходами ",[3753,24891,24892],{},"if...else",", багатогілковим перемикачем ",[3753,24895,3804],{}," та універсальним циклом ",[3753,24898,3808],{},[3900,24900],{},[3976,24902,24904,24905,24907],{"id":24903},"умовні-конструкції-ifelse-та-блокова-ініціалізація","Умовні конструкції ",[3753,24906,24892],{}," та блокова ініціалізація",[3908,24909,24910,24911,24913,24914,24916,24917,3769],{},"Конструкція ",[3753,24912,3800],{}," перевіряє істинність булевого виразу. Якщо вираз повертає ",[3753,24915,4689],{},", виконується відповідний блок інструкцій у фігурних дужках ",[3753,24918,5281],{},[24920,24921,24922,24930],"important",{},[3908,24923,24924],{},[3871,24925,24926,24927,24929],{},"Синтаксичні правила ",[3753,24928,3800],{}," у Go:",[4781,24931,24932,24945,24957],{},[3749,24933,24934,24941,24942,24944],{},[3871,24935,24936,24937,24940],{},"Круглі дужки ",[3753,24938,24939],{},"()"," навколо умовного виразу є необов'язковими"," (і за стандартом ",[3753,24943,3889],{}," видаляються).",[3749,24946,24947,24953,24954,3826],{},[3871,24948,24949,24950,24952],{},"Фігурні дужки ",[3753,24951,5281],{}," є строго обов'язковими",", навіть якщо в тілі умови лише один рядок (на відміну від C\u002FJava\u002FC#, де можна було написати ",[3753,24955,24956],{},"if (x) doSomething();",[3749,24958,24959,24960,8512,24963,3880,24966,24969,24970,24972,24973,24976],{},"Блок ",[3753,24961,24962],{},"else",[3753,24964,24965],{},"else if",[3871,24967,24968],{},"зобов'язаний починатися на тому самому рядку",", де закривається попередня фігурна дужка ",[3753,24971,16278],{}," (наприклад: ",[3753,24974,24975],{},"} else {","). Розрив рядка компілятор вважатиме синтаксичною помилкою.",[3908,24978,24979,24980,5831],{},"Розглянемо всі форми використання ",[3753,24981,3800],{},[3984,24983,24985],{"className":4162,"code":24984,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    statusCode := 404\n\n    \u002F\u002F 1. Базова конструкція if \u002F else if \u002F else\n    if statusCode == 200 {\n        fmt.Println(\"Запит успішний (200 OK)\")\n    } else if statusCode == 404 {\n        fmt.Println(\"Ресурс не знайдено (404 Not Found)\")\n    } else if statusCode == 500 {\n        fmt.Println(\"Внутрішня помилка сервера (500 Internal Error)\")\n    } else {\n        fmt.Println(\"Інший статус-код:\", statusCode)\n    }\n\n    \u002F\u002F 2. if з блоком короткої ініціалізації (Simple Statement)\n    \u002F\u002F Синтаксис: if [ініціалізація]; [умова] { ... }\n    \u002F\u002F Змінна 'length' існує ВИКЛЮЧНО всередині гілок if та else!\n    if length := len(\"user_session_token\"); length > 10 {\n        fmt.Printf(\"Токен валідний, довжина: %d символів\\n\", length)\n    } else {\n        fmt.Printf(\"Токен занадто короткий: %d символів\\n\", length)\n    }\n\n    \u002F\u002F length тут вже НЕ існує! Компілятор захищає простір імен від зайвих змінних.\n}\n",[3753,24986,24987,24993,24997,25003,25007,25015,25024,25028,25033,25046,25061,25080,25095,25111,25126,25134,25154,25158,25162,25167,25172,25177,25203,25231,25239,25266,25270,25274,25279],{"__ignoreMap":3992},[4005,24988,24989,24991],{"class":4007,"line":4008},[4005,24990,5739],{"class":4171},[4005,24992,5742],{"class":4178},[4005,24994,24995],{"class":4007,"line":4014},[4005,24996,4036],{"emptyLinePlaceholder":4035},[4005,24998,24999,25001],{"class":4007,"line":4020},[4005,25000,3917],{"class":4836},[4005,25002,7656],{"class":4330},[4005,25004,25005],{"class":4007,"line":4026},[4005,25006,4036],{"emptyLinePlaceholder":4035},[4005,25008,25009,25011,25013],{"class":4007,"line":4032},[4005,25010,4299],{"class":4171},[4005,25012,5764],{"class":4302},[4005,25014,4306],{"class":4182},[4005,25016,25017,25019,25021],{"class":4007,"line":4039},[4005,25018,4311],{"class":4174},[4005,25020,4314],{"class":4182},[4005,25022,25023],{"class":4186},"404\n",[4005,25025,25026],{"class":4007,"line":4045},[4005,25027,4036],{"emptyLinePlaceholder":4035},[4005,25029,25030],{"class":4007,"line":4051},[4005,25031,25032],{"class":4190},"    \u002F\u002F 1. Базова конструкція if \u002F else if \u002F else\n",[4005,25034,25035,25037,25040,25042,25044],{"class":4007,"line":4057},[4005,25036,5104],{"class":4836},[4005,25038,25039],{"class":4174}," statusCode",[4005,25041,5473],{"class":4182},[4005,25043,4317],{"class":4186},[4005,25045,5073],{"class":4182},[4005,25047,25048,25050,25052,25054,25056,25059],{"class":4007,"line":4063},[4005,25049,5343],{"class":4174},[4005,25051,3769],{"class":4182},[4005,25053,5348],{"class":4302},[4005,25055,4611],{"class":4182},[4005,25057,25058],{"class":4330},"\"Запит успішний (200 OK)\"",[4005,25060,4482],{"class":4182},[4005,25062,25063,25066,25068,25071,25073,25075,25078],{"class":4007,"line":4069},[4005,25064,25065],{"class":4182},"    } ",[4005,25067,24962],{"class":4836},[4005,25069,25070],{"class":4836}," if",[4005,25072,25039],{"class":4174},[4005,25074,5473],{"class":4182},[4005,25076,25077],{"class":4186},"404",[4005,25079,5073],{"class":4182},[4005,25081,25082,25084,25086,25088,25090,25093],{"class":4007,"line":4075},[4005,25083,5343],{"class":4174},[4005,25085,3769],{"class":4182},[4005,25087,5348],{"class":4302},[4005,25089,4611],{"class":4182},[4005,25091,25092],{"class":4330},"\"Ресурс не знайдено (404 Not Found)\"",[4005,25094,4482],{"class":4182},[4005,25096,25097,25099,25101,25103,25105,25107,25109],{"class":4007,"line":4081},[4005,25098,25065],{"class":4182},[4005,25100,24962],{"class":4836},[4005,25102,25070],{"class":4836},[4005,25104,25039],{"class":4174},[4005,25106,5473],{"class":4182},[4005,25108,6732],{"class":4186},[4005,25110,5073],{"class":4182},[4005,25112,25113,25115,25117,25119,25121,25124],{"class":4007,"line":4086},[4005,25114,5343],{"class":4174},[4005,25116,3769],{"class":4182},[4005,25118,5348],{"class":4302},[4005,25120,4611],{"class":4182},[4005,25122,25123],{"class":4330},"\"Внутрішня помилка сервера (500 Internal Error)\"",[4005,25125,4482],{"class":4182},[4005,25127,25128,25130,25132],{"class":4007,"line":4092},[4005,25129,25065],{"class":4182},[4005,25131,24962],{"class":4836},[4005,25133,5073],{"class":4182},[4005,25135,25136,25138,25140,25142,25144,25147,25149,25152],{"class":4007,"line":4098},[4005,25137,5343],{"class":4174},[4005,25139,3769],{"class":4182},[4005,25141,5348],{"class":4302},[4005,25143,4611],{"class":4182},[4005,25145,25146],{"class":4330},"\"Інший статус-код:\"",[4005,25148,3836],{"class":4182},[4005,25150,25151],{"class":4174},"statusCode",[4005,25153,4482],{"class":4182},[4005,25155,25156],{"class":4007,"line":4104},[4005,25157,5127],{"class":4182},[4005,25159,25160],{"class":4007,"line":4110},[4005,25161,4036],{"emptyLinePlaceholder":4035},[4005,25163,25164],{"class":4007,"line":4937},[4005,25165,25166],{"class":4190},"    \u002F\u002F 2. if з блоком короткої ініціалізації (Simple Statement)\n",[4005,25168,25169],{"class":4007,"line":4942},[4005,25170,25171],{"class":4190},"    \u002F\u002F Синтаксис: if [ініціалізація]; [умова] { ... }\n",[4005,25173,25174],{"class":4007,"line":4947},[4005,25175,25176],{"class":4190},"    \u002F\u002F Змінна 'length' існує ВИКЛЮЧНО всередині гілок if та else!\n",[4005,25178,25179,25181,25184,25186,25188,25190,25193,25195,25197,25199,25201],{"class":4007,"line":4953},[4005,25180,5104],{"class":4836},[4005,25182,25183],{"class":4174}," length",[4005,25185,4314],{"class":4182},[4005,25187,11465],{"class":4302},[4005,25189,4611],{"class":4182},[4005,25191,25192],{"class":4330},"\"user_session_token\"",[4005,25194,5468],{"class":4182},[4005,25196,14543],{"class":4174},[4005,25198,10353],{"class":4182},[4005,25200,4631],{"class":4186},[4005,25202,5073],{"class":4182},[4005,25204,25205,25207,25209,25211,25213,25216,25218,25221,25223,25225,25227,25229],{"class":4007,"line":4960},[4005,25206,5343],{"class":4174},[4005,25208,3769],{"class":4182},[4005,25210,7945],{"class":4302},[4005,25212,4611],{"class":4182},[4005,25214,25215],{"class":4330},"\"Токен валідний, довжина: ",[4005,25217,7959],{"class":4174},[4005,25219,25220],{"class":4330}," символів",[4005,25222,7965],{"class":7964},[4005,25224,7968],{"class":4330},[4005,25226,3836],{"class":4182},[4005,25228,14543],{"class":4174},[4005,25230,4482],{"class":4182},[4005,25232,25233,25235,25237],{"class":4007,"line":4973},[4005,25234,25065],{"class":4182},[4005,25236,24962],{"class":4836},[4005,25238,5073],{"class":4182},[4005,25240,25241,25243,25245,25247,25249,25252,25254,25256,25258,25260,25262,25264],{"class":4007,"line":4985},[4005,25242,5343],{"class":4174},[4005,25244,3769],{"class":4182},[4005,25246,7945],{"class":4302},[4005,25248,4611],{"class":4182},[4005,25250,25251],{"class":4330},"\"Токен занадто короткий: ",[4005,25253,7959],{"class":4174},[4005,25255,25220],{"class":4330},[4005,25257,7965],{"class":7964},[4005,25259,7968],{"class":4330},[4005,25261,3836],{"class":4182},[4005,25263,14543],{"class":4174},[4005,25265,4482],{"class":4182},[4005,25267,25268],{"class":4007,"line":7813},[4005,25269,5127],{"class":4182},[4005,25271,25272],{"class":4007,"line":7819},[4005,25273,4036],{"emptyLinePlaceholder":4035},[4005,25275,25276],{"class":4007,"line":7826},[4005,25277,25278],{"class":4190},"    \u002F\u002F length тут вже НЕ існує! Компілятор захищає простір імен від зайвих змінних.\n",[4005,25280,25281],{"class":4007,"line":7839},[4005,25282,4078],{"class":4182},[4748,25284,25285,25290,25295,25421,25425,25439,25444],{},[3908,25286,25287],{},[3871,25288,25289],{},"Найпоширеніший патерн у Go: перевірка помилок одразу після виклику функції",[3908,25291,25292,25293,5831],{},"Багато функцій у Go повертають два значення: результат і помилку. Замість того, щоб створювати зайві змінні, можна викликати функцію прямо в ",[3753,25294,3800],{},[3984,25296,25298],{"className":4162,"code":25297,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ❌ Довгий спосіб (зайва змінна err існує поза if):\nerr := server.Start()\nif err != nil {\n    log.Fatalf(\"Помилка: %v\", err)\n}\n\n\u002F\u002F ✅ Короткий спосіб (err існує тільки всередині if):\nif err := server.Start(); err != nil {\n    log.Fatalf(\"Помилка: %v\", err)\n}\n",[3753,25299,25300,25305,25321,25333,25357,25361,25365,25370,25395,25417],{"__ignoreMap":3992},[4005,25301,25302],{"class":4007,"line":4008},[4005,25303,25304],{"class":4190},"\u002F\u002F ❌ Довгий спосіб (зайва змінна err існує поза if):\n",[4005,25306,25307,25309,25311,25314,25316,25319],{"class":4007,"line":4014},[4005,25308,4598],{"class":4174},[4005,25310,4314],{"class":4182},[4005,25312,25313],{"class":4174},"server",[4005,25315,3769],{"class":4182},[4005,25317,25318],{"class":4302},"Start",[4005,25320,5143],{"class":4182},[4005,25322,25323,25325,25327,25329,25331],{"class":4007,"line":4020},[4005,25324,3800],{"class":4836},[4005,25326,5107],{"class":4174},[4005,25328,5110],{"class":4182},[4005,25330,4209],{"class":4171},[4005,25332,5073],{"class":4182},[4005,25334,25335,25337,25339,25342,25344,25347,25349,25351,25353,25355],{"class":4007,"line":4026},[4005,25336,19802],{"class":4174},[4005,25338,3769],{"class":4182},[4005,25340,25341],{"class":4302},"Fatalf",[4005,25343,4611],{"class":4182},[4005,25345,25346],{"class":4330},"\"Помилка: ",[4005,25348,10666],{"class":4174},[4005,25350,7968],{"class":4330},[4005,25352,3836],{"class":4182},[4005,25354,4598],{"class":4174},[4005,25356,4482],{"class":4182},[4005,25358,25359],{"class":4007,"line":4032},[4005,25360,4078],{"class":4182},[4005,25362,25363],{"class":4007,"line":4039},[4005,25364,4036],{"emptyLinePlaceholder":4035},[4005,25366,25367],{"class":4007,"line":4045},[4005,25368,25369],{"class":4190},"\u002F\u002F ✅ Короткий спосіб (err існує тільки всередині if):\n",[4005,25371,25372,25374,25376,25378,25380,25382,25384,25387,25389,25391,25393],{"class":4007,"line":4051},[4005,25373,3800],{"class":4836},[4005,25375,5107],{"class":4174},[4005,25377,4314],{"class":4182},[4005,25379,25313],{"class":4174},[4005,25381,3769],{"class":4182},[4005,25383,25318],{"class":4302},[4005,25385,25386],{"class":4182},"(); ",[4005,25388,4598],{"class":4174},[4005,25390,5110],{"class":4182},[4005,25392,4209],{"class":4171},[4005,25394,5073],{"class":4182},[4005,25396,25397,25399,25401,25403,25405,25407,25409,25411,25413,25415],{"class":4007,"line":4057},[4005,25398,19802],{"class":4174},[4005,25400,3769],{"class":4182},[4005,25402,25341],{"class":4302},[4005,25404,4611],{"class":4182},[4005,25406,25346],{"class":4330},[4005,25408,10666],{"class":4174},[4005,25410,7968],{"class":4330},[4005,25412,3836],{"class":4182},[4005,25414,4598],{"class":4174},[4005,25416,4482],{"class":4182},[4005,25418,25419],{"class":4007,"line":4063},[4005,25420,4078],{"class":4182},[3908,25422,25423],{},[3871,25424,6299],{},[3746,25426,25427,25433,25436],{},[3749,25428,25429,25430,25432],{},"Змінна ",[3753,25431,4598],{}," не \"забруднює\" код — вона існує тільки там, де потрібна",[3749,25434,25435],{},"Код читається як \"якщо запуск дасть помилку, то...\"",[3749,25437,25438],{},"Це найпоширеніший патерн у Go-проєктах",[3908,25440,25441],{},[3871,25442,25443],{},"Інші приклади:",[3984,25445,25447],{"className":4162,"code":25446,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Читання файлу:\nif data, err := os.ReadFile(\"config.json\"); err != nil {\n    log.Fatalf(\"Не вдалося прочитати файл: %v\", err)\n} else {\n    fmt.Printf(\"Прочитано %d байтів\\n\", len(data))\n}\n\n\u002F\u002F HTTP-запит:\nif resp, err := http.Get(\"https:\u002F\u002Fapi.example.com\"); err != nil {\n    log.Printf(\"Помилка запиту: %v\", err)\n} else {\n    defer resp.Body.Close()\n    \u002F\u002F обробка відповіді...\n}\n",[3753,25448,25449,25454,25489,25512,25521,25553,25557,25561,25566,25602,25625,25633,25650,25655],{"__ignoreMap":3992},[4005,25450,25451],{"class":4007,"line":4008},[4005,25452,25453],{"class":4190},"\u002F\u002F Читання файлу:\n",[4005,25455,25456,25458,25461,25463,25465,25467,25469,25471,25474,25476,25479,25481,25483,25485,25487],{"class":4007,"line":4014},[4005,25457,3800],{"class":4836},[4005,25459,25460],{"class":4174}," data",[4005,25462,3836],{"class":4182},[4005,25464,4598],{"class":4174},[4005,25466,4314],{"class":4182},[4005,25468,4603],{"class":4174},[4005,25470,3769],{"class":4182},[4005,25472,25473],{"class":4302},"ReadFile",[4005,25475,4611],{"class":4182},[4005,25477,25478],{"class":4330},"\"config.json\"",[4005,25480,5468],{"class":4182},[4005,25482,4598],{"class":4174},[4005,25484,5110],{"class":4182},[4005,25486,4209],{"class":4171},[4005,25488,5073],{"class":4182},[4005,25490,25491,25493,25495,25497,25499,25502,25504,25506,25508,25510],{"class":4007,"line":4020},[4005,25492,19802],{"class":4174},[4005,25494,3769],{"class":4182},[4005,25496,25341],{"class":4302},[4005,25498,4611],{"class":4182},[4005,25500,25501],{"class":4330},"\"Не вдалося прочитати файл: ",[4005,25503,10666],{"class":4174},[4005,25505,7968],{"class":4330},[4005,25507,3836],{"class":4182},[4005,25509,4598],{"class":4174},[4005,25511,4482],{"class":4182},[4005,25513,25514,25517,25519],{"class":4007,"line":4026},[4005,25515,25516],{"class":4182},"} ",[4005,25518,24962],{"class":4836},[4005,25520,5073],{"class":4182},[4005,25522,25523,25525,25527,25529,25531,25534,25536,25538,25540,25542,25544,25546,25548,25550],{"class":4007,"line":4032},[4005,25524,5370],{"class":4174},[4005,25526,3769],{"class":4182},[4005,25528,7945],{"class":4302},[4005,25530,4611],{"class":4182},[4005,25532,25533],{"class":4330},"\"Прочитано ",[4005,25535,7959],{"class":4174},[4005,25537,8117],{"class":4330},[4005,25539,7965],{"class":7964},[4005,25541,7968],{"class":4330},[4005,25543,3836],{"class":4182},[4005,25545,11465],{"class":4302},[4005,25547,4611],{"class":4182},[4005,25549,5193],{"class":4174},[4005,25551,25552],{"class":4182},"))\n",[4005,25554,25555],{"class":4007,"line":4039},[4005,25556,4078],{"class":4182},[4005,25558,25559],{"class":4007,"line":4045},[4005,25560,4036],{"emptyLinePlaceholder":4035},[4005,25562,25563],{"class":4007,"line":4051},[4005,25564,25565],{"class":4190},"\u002F\u002F HTTP-запит:\n",[4005,25567,25568,25570,25573,25575,25577,25579,25582,25584,25587,25589,25592,25594,25596,25598,25600],{"class":4007,"line":4057},[4005,25569,3800],{"class":4836},[4005,25571,25572],{"class":4174}," resp",[4005,25574,3836],{"class":4182},[4005,25576,4598],{"class":4174},[4005,25578,4314],{"class":4182},[4005,25580,25581],{"class":4174},"http",[4005,25583,3769],{"class":4182},[4005,25585,25586],{"class":4302},"Get",[4005,25588,4611],{"class":4182},[4005,25590,25591],{"class":4330},"\"https:\u002F\u002Fapi.example.com\"",[4005,25593,5468],{"class":4182},[4005,25595,4598],{"class":4174},[4005,25597,5110],{"class":4182},[4005,25599,4209],{"class":4171},[4005,25601,5073],{"class":4182},[4005,25603,25604,25606,25608,25610,25612,25615,25617,25619,25621,25623],{"class":4007,"line":4063},[4005,25605,19802],{"class":4174},[4005,25607,3769],{"class":4182},[4005,25609,7945],{"class":4302},[4005,25611,4611],{"class":4182},[4005,25613,25614],{"class":4330},"\"Помилка запиту: ",[4005,25616,10666],{"class":4174},[4005,25618,7968],{"class":4330},[4005,25620,3836],{"class":4182},[4005,25622,4598],{"class":4174},[4005,25624,4482],{"class":4182},[4005,25626,25627,25629,25631],{"class":4007,"line":4069},[4005,25628,25516],{"class":4182},[4005,25630,24962],{"class":4836},[4005,25632,5073],{"class":4182},[4005,25634,25635,25637,25639,25641,25644,25646,25648],{"class":4007,"line":4075},[4005,25636,5132],{"class":4836},[4005,25638,25572],{"class":4174},[4005,25640,3769],{"class":4182},[4005,25642,25643],{"class":4174},"Body",[4005,25645,3769],{"class":4182},[4005,25647,5140],{"class":4302},[4005,25649,5143],{"class":4182},[4005,25651,25652],{"class":4007,"line":4081},[4005,25653,25654],{"class":4190},"    \u002F\u002F обробка відповіді...\n",[4005,25656,25657],{"class":4007,"line":4086},[4005,25658,4078],{"class":4182},[3900,25660],{},[3976,25662,25664,25665],{"id":25663},"багатогілковий-перемикач-switch","Багатогілковий перемикач ",[3753,25666,3804],{},[3908,25668,24910,25669,25671,25672,25675,25676,3769],{},[3753,25670,3804],{}," дозволяє компактно порівняти значення виразу з набором варіантів (",[3753,25673,25674],{},"case",") без необхідності писати довгі ланцюжки ",[3753,25677,24965],{},[4142,25679,25680,25699,25710,25721],{},[4145,25681,10416,25684,25690,25691,25693,25694,25696,25697,3769],{"name":25682,"type":25683},"Автоматичний break","Особливість Go",[3871,25685,25686,25687],{},"не потрібно писати ",[3753,25688,25689],{},"break"," наприкінці кожного блоку ",[3753,25692,25674],{},"! Як тільки Go знаходить збіг, він виконує код цього ",[3753,25695,25674],{}," і автоматично виходить зі ",[3753,25698,3804],{},[4145,25700,25703,25704,25706,25707,3769],{"name":25701,"type":25702},"Множинні значення в одному case","Гнучкість","В одному рядку ",[3753,25705,25674],{}," можна перелічити кілька значень через кому: ",[3753,25708,25709],{},"case 400, 401, 403, 404:",[4145,25711,25714,25715,25717,25718,3769],{"name":25712,"type":25713},"Оператор fallthrough","Примусовий перехід","Якщо вам дійсно необхідно передати виконання наступному ",[3753,25716,25674],{}," (як у мові C), використовується явне ключове слово ",[3753,25719,25720],{},"fallthrough",[4145,25722,25725,25726,25728,25729,25731,25732,25735],{"name":25723,"type":25724},"Tagless Switch (Без виразу)","Зручний патерн Go","Якщо після слова ",[3753,25727,3804],{}," не вказувати змінну, ",[3753,25730,3804],{}," працює як елегантна заміна складної конструкції ",[3753,25733,25734],{},"if-else",", перевіряючи довільні булеві умови.",[9014,25737,25739],{"id":25738},"приклад-1-базовий-switch-з-множинними-значеннями","Приклад 1: Базовий switch з множинними значеннями",[3984,25741,25743],{"className":4162,"code":25742,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    httpMethod := \"POST\"\n\n    \u002F\u002F Класичний switch за значенням\n    switch httpMethod {\n    case \"GET\", \"HEAD\":\n        fmt.Println(\"Безпечний метод читання даних (Read-Only)\")\n    case \"POST\", \"PUT\", \"PATCH\":\n        fmt.Println(\"Метод мутації стану (Write\u002FUpdate)\")\n    case \"DELETE\":\n        fmt.Println(\"Метод видалення ресурсу\")\n    default:\n        fmt.Println(\"Непідтримуваний HTTP метод:\", httpMethod)\n    }\n}\n",[3753,25744,25745,25751,25755,25761,25765,25773,25783,25787,25792,25801,25815,25830,25849,25864,25873,25888,25894,25914,25918],{"__ignoreMap":3992},[4005,25746,25747,25749],{"class":4007,"line":4008},[4005,25748,5739],{"class":4171},[4005,25750,5742],{"class":4178},[4005,25752,25753],{"class":4007,"line":4014},[4005,25754,4036],{"emptyLinePlaceholder":4035},[4005,25756,25757,25759],{"class":4007,"line":4020},[4005,25758,3917],{"class":4836},[4005,25760,7656],{"class":4330},[4005,25762,25763],{"class":4007,"line":4026},[4005,25764,4036],{"emptyLinePlaceholder":4035},[4005,25766,25767,25769,25771],{"class":4007,"line":4032},[4005,25768,4299],{"class":4171},[4005,25770,5764],{"class":4302},[4005,25772,4306],{"class":4182},[4005,25774,25775,25778,25780],{"class":4007,"line":4039},[4005,25776,25777],{"class":4174},"    httpMethod",[4005,25779,4314],{"class":4182},[4005,25781,25782],{"class":4330},"\"POST\"\n",[4005,25784,25785],{"class":4007,"line":4045},[4005,25786,4036],{"emptyLinePlaceholder":4035},[4005,25788,25789],{"class":4007,"line":4051},[4005,25790,25791],{"class":4190},"    \u002F\u002F Класичний switch за значенням\n",[4005,25793,25794,25796,25799],{"class":4007,"line":4057},[4005,25795,7355],{"class":4836},[4005,25797,25798],{"class":4174}," httpMethod",[4005,25800,5073],{"class":4182},[4005,25802,25803,25805,25808,25810,25813],{"class":4007,"line":4063},[4005,25804,7365],{"class":4836},[4005,25806,25807],{"class":4330}," \"GET\"",[4005,25809,3836],{"class":4182},[4005,25811,25812],{"class":4330},"\"HEAD\"",[4005,25814,7370],{"class":4182},[4005,25816,25817,25819,25821,25823,25825,25828],{"class":4007,"line":4069},[4005,25818,5343],{"class":4174},[4005,25820,3769],{"class":4182},[4005,25822,5348],{"class":4302},[4005,25824,4611],{"class":4182},[4005,25826,25827],{"class":4330},"\"Безпечний метод читання даних (Read-Only)\"",[4005,25829,4482],{"class":4182},[4005,25831,25832,25834,25837,25839,25842,25844,25847],{"class":4007,"line":4075},[4005,25833,7365],{"class":4836},[4005,25835,25836],{"class":4330}," \"POST\"",[4005,25838,3836],{"class":4182},[4005,25840,25841],{"class":4330},"\"PUT\"",[4005,25843,3836],{"class":4182},[4005,25845,25846],{"class":4330},"\"PATCH\"",[4005,25848,7370],{"class":4182},[4005,25850,25851,25853,25855,25857,25859,25862],{"class":4007,"line":4081},[4005,25852,5343],{"class":4174},[4005,25854,3769],{"class":4182},[4005,25856,5348],{"class":4302},[4005,25858,4611],{"class":4182},[4005,25860,25861],{"class":4330},"\"Метод мутації стану (Write\u002FUpdate)\"",[4005,25863,4482],{"class":4182},[4005,25865,25866,25868,25871],{"class":4007,"line":4086},[4005,25867,7365],{"class":4836},[4005,25869,25870],{"class":4330}," \"DELETE\"",[4005,25872,7370],{"class":4182},[4005,25874,25875,25877,25879,25881,25883,25886],{"class":4007,"line":4092},[4005,25876,5343],{"class":4174},[4005,25878,3769],{"class":4182},[4005,25880,5348],{"class":4302},[4005,25882,4611],{"class":4182},[4005,25884,25885],{"class":4330},"\"Метод видалення ресурсу\"",[4005,25887,4482],{"class":4182},[4005,25889,25890,25892],{"class":4007,"line":4098},[4005,25891,7430],{"class":4836},[4005,25893,7370],{"class":4182},[4005,25895,25896,25898,25900,25902,25904,25907,25909,25912],{"class":4007,"line":4104},[4005,25897,5343],{"class":4174},[4005,25899,3769],{"class":4182},[4005,25901,5348],{"class":4302},[4005,25903,4611],{"class":4182},[4005,25905,25906],{"class":4330},"\"Непідтримуваний HTTP метод:\"",[4005,25908,3836],{"class":4182},[4005,25910,25911],{"class":4174},"httpMethod",[4005,25913,4482],{"class":4182},[4005,25915,25916],{"class":4007,"line":4110},[4005,25917,5127],{"class":4182},[4005,25919,25920],{"class":4007,"line":4937},[4005,25921,4078],{"class":4182},[3908,25923,25924],{},[3871,25925,11778],{},[3984,25927,25930],{"className":25928,"code":25929,"language":3989},[3987],"Метод мутації стану (Write\u002FUpdate)\n",[3753,25931,25929],{"__ignoreMap":3992},[9014,25933,25935],{"id":25934},"приклад-2-switch-з-ініціалізацією-змінної","Приклад 2: Switch з ініціалізацією змінної",[3908,25937,25938,25939,25941,25942,5831],{},"Як і в ",[3753,25940,3800],{},", можна оголосити змінну прямо в ",[3753,25943,3804],{},[3984,25945,25947],{"className":4162,"code":25946,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\nfunc main() {\n    \u002F\u002F Змінна hour існує тільки всередині switch\n    switch hour := time.Now().Hour(); {\n    case hour \u003C 6:\n        fmt.Println(\"🌙 Глибока ніч — час спати!\")\n    case hour \u003C 12:\n        fmt.Println(\"🌅 Доброго ранку!\")\n    case hour \u003C 17:\n        fmt.Println(\"☀️ Добрий день!\")\n    case hour \u003C 22:\n        fmt.Println(\"🌆 Добрий вечір!\")\n    default:\n        fmt.Println(\"🌃 Пізній вечір — час відпочивати\")\n    }\n}\n",[3753,25948,25949,25955,25959,25965,25969,25974,25978,25982,25990,25995,26020,26033,26048,26061,26076,26089,26104,26117,26132,26138,26153,26157],{"__ignoreMap":3992},[4005,25950,25951,25953],{"class":4007,"line":4008},[4005,25952,5739],{"class":4171},[4005,25954,5742],{"class":4178},[4005,25956,25957],{"class":4007,"line":4014},[4005,25958,4036],{"emptyLinePlaceholder":4035},[4005,25960,25961,25963],{"class":4007,"line":4020},[4005,25962,3917],{"class":4836},[4005,25964,4439],{"class":4182},[4005,25966,25967],{"class":4007,"line":4026},[4005,25968,4843],{"class":4330},[4005,25970,25971],{"class":4007,"line":4032},[4005,25972,25973],{"class":4330},"    \"time\"\n",[4005,25975,25976],{"class":4007,"line":4039},[4005,25977,4482],{"class":4182},[4005,25979,25980],{"class":4007,"line":4045},[4005,25981,4036],{"emptyLinePlaceholder":4035},[4005,25983,25984,25986,25988],{"class":4007,"line":4051},[4005,25985,4299],{"class":4171},[4005,25987,5764],{"class":4302},[4005,25989,4306],{"class":4182},[4005,25991,25992],{"class":4007,"line":4057},[4005,25993,25994],{"class":4190},"    \u002F\u002F Змінна hour існує тільки всередині switch\n",[4005,25996,25997,25999,26002,26004,26007,26009,26012,26014,26017],{"class":4007,"line":4063},[4005,25998,7355],{"class":4836},[4005,26000,26001],{"class":4174}," hour",[4005,26003,4314],{"class":4182},[4005,26005,26006],{"class":4174},"time",[4005,26008,3769],{"class":4182},[4005,26010,26011],{"class":4302},"Now",[4005,26013,12903],{"class":4182},[4005,26015,26016],{"class":4302},"Hour",[4005,26018,26019],{"class":4182},"(); {\n",[4005,26021,26022,26024,26026,26028,26031],{"class":4007,"line":4069},[4005,26023,7365],{"class":4836},[4005,26025,26001],{"class":4174},[4005,26027,10331],{"class":4182},[4005,26029,26030],{"class":4186},"6",[4005,26032,7370],{"class":4182},[4005,26034,26035,26037,26039,26041,26043,26046],{"class":4007,"line":4075},[4005,26036,5343],{"class":4174},[4005,26038,3769],{"class":4182},[4005,26040,5348],{"class":4302},[4005,26042,4611],{"class":4182},[4005,26044,26045],{"class":4330},"\"🌙 Глибока ніч — час спати!\"",[4005,26047,4482],{"class":4182},[4005,26049,26050,26052,26054,26056,26059],{"class":4007,"line":4081},[4005,26051,7365],{"class":4836},[4005,26053,26001],{"class":4174},[4005,26055,10331],{"class":4182},[4005,26057,26058],{"class":4186},"12",[4005,26060,7370],{"class":4182},[4005,26062,26063,26065,26067,26069,26071,26074],{"class":4007,"line":4086},[4005,26064,5343],{"class":4174},[4005,26066,3769],{"class":4182},[4005,26068,5348],{"class":4302},[4005,26070,4611],{"class":4182},[4005,26072,26073],{"class":4330},"\"🌅 Доброго ранку!\"",[4005,26075,4482],{"class":4182},[4005,26077,26078,26080,26082,26084,26087],{"class":4007,"line":4092},[4005,26079,7365],{"class":4836},[4005,26081,26001],{"class":4174},[4005,26083,10331],{"class":4182},[4005,26085,26086],{"class":4186},"17",[4005,26088,7370],{"class":4182},[4005,26090,26091,26093,26095,26097,26099,26102],{"class":4007,"line":4098},[4005,26092,5343],{"class":4174},[4005,26094,3769],{"class":4182},[4005,26096,5348],{"class":4302},[4005,26098,4611],{"class":4182},[4005,26100,26101],{"class":4330},"\"☀️ Добрий день!\"",[4005,26103,4482],{"class":4182},[4005,26105,26106,26108,26110,26112,26115],{"class":4007,"line":4104},[4005,26107,7365],{"class":4836},[4005,26109,26001],{"class":4174},[4005,26111,10331],{"class":4182},[4005,26113,26114],{"class":4186},"22",[4005,26116,7370],{"class":4182},[4005,26118,26119,26121,26123,26125,26127,26130],{"class":4007,"line":4110},[4005,26120,5343],{"class":4174},[4005,26122,3769],{"class":4182},[4005,26124,5348],{"class":4302},[4005,26126,4611],{"class":4182},[4005,26128,26129],{"class":4330},"\"🌆 Добрий вечір!\"",[4005,26131,4482],{"class":4182},[4005,26133,26134,26136],{"class":4007,"line":4937},[4005,26135,7430],{"class":4836},[4005,26137,7370],{"class":4182},[4005,26139,26140,26142,26144,26146,26148,26151],{"class":4007,"line":4942},[4005,26141,5343],{"class":4174},[4005,26143,3769],{"class":4182},[4005,26145,5348],{"class":4302},[4005,26147,4611],{"class":4182},[4005,26149,26150],{"class":4330},"\"🌃 Пізній вечір — час відпочивати\"",[4005,26152,4482],{"class":4182},[4005,26154,26155],{"class":4007,"line":4947},[4005,26156,5127],{"class":4182},[4005,26158,26159],{"class":4007,"line":4953},[4005,26160,4078],{"class":4182},[9014,26162,26164],{"id":26163},"приклад-3-tagless-switch-без-виразу","Приклад 3: Tagless switch (без виразу)",[3908,26166,26167,26168,26170,26171,26174],{},"Коли немає конкретного значення для порівняння, використовуйте ",[3753,26169,3804],{}," без виразу. Він працює як ",[3753,26172,26173],{},"if-else if-else",", але читабельніше:",[3984,26176,26178],{"className":4162,"code":26177,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    clientScore := 85\n\n    \u002F\u002F switch без виразу — перевіряємо різні умови\n    switch {\n    case clientScore >= 90:\n        fmt.Println(\"⭐⭐⭐ Преміум клієнт (Рейтинг A)\")\n        fmt.Println(\"Знижка: 20%\")\n    case clientScore >= 75:\n        fmt.Println(\"⭐⭐ Надійний клієнт (Рейтинг B)\")\n        fmt.Println(\"Знижка: 10%\")\n    case clientScore >= 50:\n        fmt.Println(\"⭐ Стандартний клієнт (Рейтинг C)\")\n        fmt.Println(\"Знижка: 5%\")\n    default:\n        fmt.Println(\"❌ Новий клієнт — немає знижки\")\n    }\n}\n",[3753,26179,26180,26186,26190,26196,26200,26208,26218,26222,26227,26233,26247,26262,26277,26290,26305,26320,26333,26348,26363,26369,26384,26388],{"__ignoreMap":3992},[4005,26181,26182,26184],{"class":4007,"line":4008},[4005,26183,5739],{"class":4171},[4005,26185,5742],{"class":4178},[4005,26187,26188],{"class":4007,"line":4014},[4005,26189,4036],{"emptyLinePlaceholder":4035},[4005,26191,26192,26194],{"class":4007,"line":4020},[4005,26193,3917],{"class":4836},[4005,26195,7656],{"class":4330},[4005,26197,26198],{"class":4007,"line":4026},[4005,26199,4036],{"emptyLinePlaceholder":4035},[4005,26201,26202,26204,26206],{"class":4007,"line":4032},[4005,26203,4299],{"class":4171},[4005,26205,5764],{"class":4302},[4005,26207,4306],{"class":4182},[4005,26209,26210,26213,26215],{"class":4007,"line":4039},[4005,26211,26212],{"class":4174},"    clientScore",[4005,26214,4314],{"class":4182},[4005,26216,26217],{"class":4186},"85\n",[4005,26219,26220],{"class":4007,"line":4045},[4005,26221,4036],{"emptyLinePlaceholder":4035},[4005,26223,26224],{"class":4007,"line":4051},[4005,26225,26226],{"class":4190},"    \u002F\u002F switch без виразу — перевіряємо різні умови\n",[4005,26228,26229,26231],{"class":4007,"line":4057},[4005,26230,7355],{"class":4836},[4005,26232,5073],{"class":4182},[4005,26234,26235,26237,26240,26242,26245],{"class":4007,"line":4063},[4005,26236,7365],{"class":4836},[4005,26238,26239],{"class":4174}," clientScore",[4005,26241,10397],{"class":4182},[4005,26243,26244],{"class":4186},"90",[4005,26246,7370],{"class":4182},[4005,26248,26249,26251,26253,26255,26257,26260],{"class":4007,"line":4069},[4005,26250,5343],{"class":4174},[4005,26252,3769],{"class":4182},[4005,26254,5348],{"class":4302},[4005,26256,4611],{"class":4182},[4005,26258,26259],{"class":4330},"\"⭐⭐⭐ Преміум клієнт (Рейтинг A)\"",[4005,26261,4482],{"class":4182},[4005,26263,26264,26266,26268,26270,26272,26275],{"class":4007,"line":4075},[4005,26265,5343],{"class":4174},[4005,26267,3769],{"class":4182},[4005,26269,5348],{"class":4302},[4005,26271,4611],{"class":4182},[4005,26273,26274],{"class":4330},"\"Знижка: 20%\"",[4005,26276,4482],{"class":4182},[4005,26278,26279,26281,26283,26285,26288],{"class":4007,"line":4081},[4005,26280,7365],{"class":4836},[4005,26282,26239],{"class":4174},[4005,26284,10397],{"class":4182},[4005,26286,26287],{"class":4186},"75",[4005,26289,7370],{"class":4182},[4005,26291,26292,26294,26296,26298,26300,26303],{"class":4007,"line":4086},[4005,26293,5343],{"class":4174},[4005,26295,3769],{"class":4182},[4005,26297,5348],{"class":4302},[4005,26299,4611],{"class":4182},[4005,26301,26302],{"class":4330},"\"⭐⭐ Надійний клієнт (Рейтинг B)\"",[4005,26304,4482],{"class":4182},[4005,26306,26307,26309,26311,26313,26315,26318],{"class":4007,"line":4092},[4005,26308,5343],{"class":4174},[4005,26310,3769],{"class":4182},[4005,26312,5348],{"class":4302},[4005,26314,4611],{"class":4182},[4005,26316,26317],{"class":4330},"\"Знижка: 10%\"",[4005,26319,4482],{"class":4182},[4005,26321,26322,26324,26326,26328,26331],{"class":4007,"line":4098},[4005,26323,7365],{"class":4836},[4005,26325,26239],{"class":4174},[4005,26327,10397],{"class":4182},[4005,26329,26330],{"class":4186},"50",[4005,26332,7370],{"class":4182},[4005,26334,26335,26337,26339,26341,26343,26346],{"class":4007,"line":4104},[4005,26336,5343],{"class":4174},[4005,26338,3769],{"class":4182},[4005,26340,5348],{"class":4302},[4005,26342,4611],{"class":4182},[4005,26344,26345],{"class":4330},"\"⭐ Стандартний клієнт (Рейтинг C)\"",[4005,26347,4482],{"class":4182},[4005,26349,26350,26352,26354,26356,26358,26361],{"class":4007,"line":4110},[4005,26351,5343],{"class":4174},[4005,26353,3769],{"class":4182},[4005,26355,5348],{"class":4302},[4005,26357,4611],{"class":4182},[4005,26359,26360],{"class":4330},"\"Знижка: 5%\"",[4005,26362,4482],{"class":4182},[4005,26364,26365,26367],{"class":4007,"line":4937},[4005,26366,7430],{"class":4836},[4005,26368,7370],{"class":4182},[4005,26370,26371,26373,26375,26377,26379,26382],{"class":4007,"line":4942},[4005,26372,5343],{"class":4174},[4005,26374,3769],{"class":4182},[4005,26376,5348],{"class":4302},[4005,26378,4611],{"class":4182},[4005,26380,26381],{"class":4330},"\"❌ Новий клієнт — немає знижки\"",[4005,26383,4482],{"class":4182},[4005,26385,26386],{"class":4007,"line":4947},[4005,26387,5127],{"class":4182},[4005,26389,26390],{"class":4007,"line":4953},[4005,26391,4078],{"class":4182},[3908,26393,26394],{},[3871,26395,11778],{},[3984,26397,26400],{"className":26398,"code":26399,"language":3989},[3987],"⭐⭐ Надійний клієнт (Рейтинг B)\nЗнижка: 10%\n",[3753,26401,26399],{"__ignoreMap":3992},[9014,26403,26405],{"id":26404},"приклад-4-switch-з-типом-type-switch","Приклад 4: Switch з типом (type switch)",[3908,26407,26408],{},"Для роботи з інтерфейсами можна перевіряти тип значення:",[3984,26410,26412],{"className":4162,"code":26411,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc processValue(value any) {\n    switch v := value.(type) {\n    case int:\n        fmt.Printf(\"Ціле число: %d (подвоєне: %d)\\n\", v, v*2)\n    case string:\n        fmt.Printf(\"Рядок: '%s' (довжина: %d)\\n\", v, len(v))\n    case bool:\n        if v {\n            fmt.Println(\"Булеве: true ✓\")\n        } else {\n            fmt.Println(\"Булеве: false ✗\")\n        }\n    case []int:\n        fmt.Printf(\"Зріз цілих чисел: %v (елементів: %d)\\n\", v, len(v))\n    default:\n        fmt.Printf(\"Невідомий тип: %T\\n\", v)\n    }\n}\n\nfunc main() {\n    processValue(42)\n    processValue(\"Привіт\")\n    processValue(true)\n    processValue([]int{1, 2, 3})\n    processValue(3.14)\n}\n",[3753,26413,26414,26420,26424,26430,26434,26451,26469,26477,26518,26526,26566,26574,26582,26598,26607,26622,26626,26637,26677,26683,26708,26712,26716,26720,26728,26739,26749,26759,26782,26792],{"__ignoreMap":3992},[4005,26415,26416,26418],{"class":4007,"line":4008},[4005,26417,5739],{"class":4171},[4005,26419,5742],{"class":4178},[4005,26421,26422],{"class":4007,"line":4014},[4005,26423,4036],{"emptyLinePlaceholder":4035},[4005,26425,26426,26428],{"class":4007,"line":4020},[4005,26427,3917],{"class":4836},[4005,26429,7656],{"class":4330},[4005,26431,26432],{"class":4007,"line":4026},[4005,26433,4036],{"emptyLinePlaceholder":4035},[4005,26435,26436,26438,26441,26443,26446,26449],{"class":4007,"line":4032},[4005,26437,4299],{"class":4171},[4005,26439,26440],{"class":4302}," processValue",[4005,26442,4611],{"class":4182},[4005,26444,26445],{"class":4174},"value",[4005,26447,26448],{"class":4178}," any",[4005,26450,12789],{"class":4182},[4005,26452,26453,26455,26458,26460,26462,26465,26467],{"class":4007,"line":4039},[4005,26454,7355],{"class":4836},[4005,26456,26457],{"class":4174}," v",[4005,26459,4314],{"class":4182},[4005,26461,26445],{"class":4174},[4005,26463,26464],{"class":4182},".(",[4005,26466,4809],{"class":4171},[4005,26468,12789],{"class":4182},[4005,26470,26471,26473,26475],{"class":4007,"line":4045},[4005,26472,7365],{"class":4836},[4005,26474,4224],{"class":4178},[4005,26476,7370],{"class":4182},[4005,26478,26479,26481,26483,26485,26487,26490,26492,26495,26497,26499,26501,26503,26505,26508,26510,26512,26514,26516],{"class":4007,"line":4051},[4005,26480,5343],{"class":4174},[4005,26482,3769],{"class":4182},[4005,26484,7945],{"class":4302},[4005,26486,4611],{"class":4182},[4005,26488,26489],{"class":4330},"\"Ціле число: ",[4005,26491,7959],{"class":4174},[4005,26493,26494],{"class":4330}," (подвоєне: ",[4005,26496,7959],{"class":4174},[4005,26498,5032],{"class":4330},[4005,26500,7965],{"class":7964},[4005,26502,7968],{"class":4330},[4005,26504,3836],{"class":4182},[4005,26506,26507],{"class":4174},"v",[4005,26509,3836],{"class":4182},[4005,26511,26507],{"class":4174},[4005,26513,8128],{"class":4182},[4005,26515,4398],{"class":4186},[4005,26517,4482],{"class":4182},[4005,26519,26520,26522,26524],{"class":4007,"line":4057},[4005,26521,7365],{"class":4836},[4005,26523,4237],{"class":4178},[4005,26525,7370],{"class":4182},[4005,26527,26528,26530,26532,26534,26536,26539,26541,26544,26546,26548,26550,26552,26554,26556,26558,26560,26562,26564],{"class":4007,"line":4063},[4005,26529,5343],{"class":4174},[4005,26531,3769],{"class":4182},[4005,26533,7945],{"class":4302},[4005,26535,4611],{"class":4182},[4005,26537,26538],{"class":4330},"\"Рядок: '",[4005,26540,16775],{"class":4174},[4005,26542,26543],{"class":4330},"' (довжина: ",[4005,26545,7959],{"class":4174},[4005,26547,5032],{"class":4330},[4005,26549,7965],{"class":7964},[4005,26551,7968],{"class":4330},[4005,26553,3836],{"class":4182},[4005,26555,26507],{"class":4174},[4005,26557,3836],{"class":4182},[4005,26559,11465],{"class":4302},[4005,26561,4611],{"class":4182},[4005,26563,26507],{"class":4174},[4005,26565,25552],{"class":4182},[4005,26567,26568,26570,26572],{"class":4007,"line":4069},[4005,26569,7365],{"class":4836},[4005,26571,4250],{"class":4178},[4005,26573,7370],{"class":4182},[4005,26575,26576,26578,26580],{"class":4007,"line":4075},[4005,26577,12892],{"class":4836},[4005,26579,26457],{"class":4174},[4005,26581,5073],{"class":4182},[4005,26583,26584,26587,26589,26591,26593,26596],{"class":4007,"line":4081},[4005,26585,26586],{"class":4174},"            fmt",[4005,26588,3769],{"class":4182},[4005,26590,5348],{"class":4302},[4005,26592,4611],{"class":4182},[4005,26594,26595],{"class":4330},"\"Булеве: true ✓\"",[4005,26597,4482],{"class":4182},[4005,26599,26600,26603,26605],{"class":4007,"line":4086},[4005,26601,26602],{"class":4182},"        } ",[4005,26604,24962],{"class":4836},[4005,26606,5073],{"class":4182},[4005,26608,26609,26611,26613,26615,26617,26620],{"class":4007,"line":4092},[4005,26610,26586],{"class":4174},[4005,26612,3769],{"class":4182},[4005,26614,5348],{"class":4302},[4005,26616,4611],{"class":4182},[4005,26618,26619],{"class":4330},"\"Булеве: false ✗\"",[4005,26621,4482],{"class":4182},[4005,26623,26624],{"class":4007,"line":4098},[4005,26625,12937],{"class":4182},[4005,26627,26628,26630,26633,26635],{"class":4007,"line":4104},[4005,26629,7365],{"class":4836},[4005,26631,26632],{"class":4182}," []",[4005,26634,4158],{"class":4178},[4005,26636,7370],{"class":4182},[4005,26638,26639,26641,26643,26645,26647,26650,26652,26655,26657,26659,26661,26663,26665,26667,26669,26671,26673,26675],{"class":4007,"line":4110},[4005,26640,5343],{"class":4174},[4005,26642,3769],{"class":4182},[4005,26644,7945],{"class":4302},[4005,26646,4611],{"class":4182},[4005,26648,26649],{"class":4330},"\"Зріз цілих чисел: ",[4005,26651,10666],{"class":4174},[4005,26653,26654],{"class":4330}," (елементів: ",[4005,26656,7959],{"class":4174},[4005,26658,5032],{"class":4330},[4005,26660,7965],{"class":7964},[4005,26662,7968],{"class":4330},[4005,26664,3836],{"class":4182},[4005,26666,26507],{"class":4174},[4005,26668,3836],{"class":4182},[4005,26670,11465],{"class":4302},[4005,26672,4611],{"class":4182},[4005,26674,26507],{"class":4174},[4005,26676,25552],{"class":4182},[4005,26678,26679,26681],{"class":4007,"line":4937},[4005,26680,7430],{"class":4836},[4005,26682,7370],{"class":4182},[4005,26684,26685,26687,26689,26691,26693,26696,26698,26700,26702,26704,26706],{"class":4007,"line":4942},[4005,26686,5343],{"class":4174},[4005,26688,3769],{"class":4182},[4005,26690,7945],{"class":4302},[4005,26692,4611],{"class":4182},[4005,26694,26695],{"class":4330},"\"Невідомий тип: ",[4005,26697,20715],{"class":4174},[4005,26699,7965],{"class":7964},[4005,26701,7968],{"class":4330},[4005,26703,3836],{"class":4182},[4005,26705,26507],{"class":4174},[4005,26707,4482],{"class":4182},[4005,26709,26710],{"class":4007,"line":4947},[4005,26711,5127],{"class":4182},[4005,26713,26714],{"class":4007,"line":4953},[4005,26715,4078],{"class":4182},[4005,26717,26718],{"class":4007,"line":4960},[4005,26719,4036],{"emptyLinePlaceholder":4035},[4005,26721,26722,26724,26726],{"class":4007,"line":4973},[4005,26723,4299],{"class":4171},[4005,26725,5764],{"class":4302},[4005,26727,4306],{"class":4182},[4005,26729,26730,26733,26735,26737],{"class":4007,"line":4985},[4005,26731,26732],{"class":4302},"    processValue",[4005,26734,4611],{"class":4182},[4005,26736,9440],{"class":4186},[4005,26738,4482],{"class":4182},[4005,26740,26741,26743,26745,26747],{"class":4007,"line":7813},[4005,26742,26732],{"class":4302},[4005,26744,4611],{"class":4182},[4005,26746,11871],{"class":4330},[4005,26748,4482],{"class":4182},[4005,26750,26751,26753,26755,26757],{"class":4007,"line":7819},[4005,26752,26732],{"class":4302},[4005,26754,4611],{"class":4182},[4005,26756,4689],{"class":4171},[4005,26758,4482],{"class":4182},[4005,26760,26761,26763,26765,26767,26769,26771,26773,26775,26777,26779],{"class":4007,"line":7826},[4005,26762,26732],{"class":4302},[4005,26764,5159],{"class":4182},[4005,26766,4158],{"class":4178},[4005,26768,16268],{"class":4182},[4005,26770,4393],{"class":4186},[4005,26772,3836],{"class":4182},[4005,26774,4398],{"class":4186},[4005,26776,3836],{"class":4182},[4005,26778,6286],{"class":4186},[4005,26780,26781],{"class":4182},"})\n",[4005,26783,26784,26786,26788,26790],{"class":4007,"line":7839},[4005,26785,26732],{"class":4302},[4005,26787,4611],{"class":4182},[4005,26789,5854],{"class":4186},[4005,26791,4482],{"class":4182},[4005,26793,26794],{"class":4007,"line":7864},[4005,26795,4078],{"class":4182},[3908,26797,26798],{},[3871,26799,11778],{},[3984,26801,26804],{"className":26802,"code":26803,"language":3989},[3987],"Ціле число: 42 (подвоєне: 84)\nРядок: 'Привіт' (довжина: 12)\nБулеве: true ✓\nЗріз цілих чисел: [1 2 3] (елементів: 3)\nНевідомий тип: float64\n",[3753,26805,26803],{"__ignoreMap":3992},[9014,26807,26809],{"id":26808},"приклад-5-обробка-http-статус-кодів","Приклад 5: Обробка HTTP статус-кодів",[3984,26811,26813],{"className":4162,"code":26812,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc handleHTTPStatus(statusCode int) {\n    switch statusCode {\n    case 200, 201, 204:\n        fmt.Println(\"✅ Успішний запит\")\n        \n    case 301, 302, 307, 308:\n        fmt.Println(\"↪️ Перенаправлення — перевірте Location\")\n        \n    case 400:\n        fmt.Println(\"❌ Неправильний запит\")\n    case 401:\n        fmt.Println(\"🔒 Потрібна автентифікація\")\n    case 403:\n        fmt.Println(\"⛔ Доступ заборонено\")\n    case 404:\n        fmt.Println(\"🔍 Ресурс не знайдено\")\n        \n    case 500, 502, 503, 504:\n        fmt.Println(\"💥 Помилка сервера — спробуйте пізніше\")\n        \n    default:\n        fmt.Printf(\"⚠️ Незвичний статус-код: %d\\n\", statusCode)\n    }\n}\n\nfunc main() {\n    handleHTTPStatus(200)\n    handleHTTPStatus(404)\n    handleHTTPStatus(500)\n    handleHTTPStatus(999)\n}\n",[3753,26814,26815,26821,26825,26831,26835,26850,26858,26877,26892,26896,26920,26935,26939,26948,26963,26972,26987,26996,27011,27020,27035,27039,27063,27078,27082,27088,27113,27117,27121,27125,27133,27144,27154,27164,27175],{"__ignoreMap":3992},[4005,26816,26817,26819],{"class":4007,"line":4008},[4005,26818,5739],{"class":4171},[4005,26820,5742],{"class":4178},[4005,26822,26823],{"class":4007,"line":4014},[4005,26824,4036],{"emptyLinePlaceholder":4035},[4005,26826,26827,26829],{"class":4007,"line":4020},[4005,26828,3917],{"class":4836},[4005,26830,7656],{"class":4330},[4005,26832,26833],{"class":4007,"line":4026},[4005,26834,4036],{"emptyLinePlaceholder":4035},[4005,26836,26837,26839,26842,26844,26846,26848],{"class":4007,"line":4032},[4005,26838,4299],{"class":4171},[4005,26840,26841],{"class":4302}," handleHTTPStatus",[4005,26843,4611],{"class":4182},[4005,26845,25151],{"class":4174},[4005,26847,4224],{"class":4178},[4005,26849,12789],{"class":4182},[4005,26851,26852,26854,26856],{"class":4007,"line":4039},[4005,26853,7355],{"class":4836},[4005,26855,25039],{"class":4174},[4005,26857,5073],{"class":4182},[4005,26859,26860,26862,26865,26867,26870,26872,26875],{"class":4007,"line":4045},[4005,26861,7365],{"class":4836},[4005,26863,26864],{"class":4186}," 200",[4005,26866,3836],{"class":4182},[4005,26868,26869],{"class":4186},"201",[4005,26871,3836],{"class":4182},[4005,26873,26874],{"class":4186},"204",[4005,26876,7370],{"class":4182},[4005,26878,26879,26881,26883,26885,26887,26890],{"class":4007,"line":4051},[4005,26880,5343],{"class":4174},[4005,26882,3769],{"class":4182},[4005,26884,5348],{"class":4302},[4005,26886,4611],{"class":4182},[4005,26888,26889],{"class":4330},"\"✅ Успішний запит\"",[4005,26891,4482],{"class":4182},[4005,26893,26894],{"class":4007,"line":4057},[4005,26895,12810],{"class":4182},[4005,26897,26898,26900,26903,26905,26908,26910,26913,26915,26918],{"class":4007,"line":4063},[4005,26899,7365],{"class":4836},[4005,26901,26902],{"class":4186}," 301",[4005,26904,3836],{"class":4182},[4005,26906,26907],{"class":4186},"302",[4005,26909,3836],{"class":4182},[4005,26911,26912],{"class":4186},"307",[4005,26914,3836],{"class":4182},[4005,26916,26917],{"class":4186},"308",[4005,26919,7370],{"class":4182},[4005,26921,26922,26924,26926,26928,26930,26933],{"class":4007,"line":4069},[4005,26923,5343],{"class":4174},[4005,26925,3769],{"class":4182},[4005,26927,5348],{"class":4302},[4005,26929,4611],{"class":4182},[4005,26931,26932],{"class":4330},"\"↪️ Перенаправлення — перевірте Location\"",[4005,26934,4482],{"class":4182},[4005,26936,26937],{"class":4007,"line":4075},[4005,26938,12810],{"class":4182},[4005,26940,26941,26943,26946],{"class":4007,"line":4081},[4005,26942,7365],{"class":4836},[4005,26944,26945],{"class":4186}," 400",[4005,26947,7370],{"class":4182},[4005,26949,26950,26952,26954,26956,26958,26961],{"class":4007,"line":4086},[4005,26951,5343],{"class":4174},[4005,26953,3769],{"class":4182},[4005,26955,5348],{"class":4302},[4005,26957,4611],{"class":4182},[4005,26959,26960],{"class":4330},"\"❌ Неправильний запит\"",[4005,26962,4482],{"class":4182},[4005,26964,26965,26967,26970],{"class":4007,"line":4092},[4005,26966,7365],{"class":4836},[4005,26968,26969],{"class":4186}," 401",[4005,26971,7370],{"class":4182},[4005,26973,26974,26976,26978,26980,26982,26985],{"class":4007,"line":4098},[4005,26975,5343],{"class":4174},[4005,26977,3769],{"class":4182},[4005,26979,5348],{"class":4302},[4005,26981,4611],{"class":4182},[4005,26983,26984],{"class":4330},"\"🔒 Потрібна автентифікація\"",[4005,26986,4482],{"class":4182},[4005,26988,26989,26991,26994],{"class":4007,"line":4104},[4005,26990,7365],{"class":4836},[4005,26992,26993],{"class":4186}," 403",[4005,26995,7370],{"class":4182},[4005,26997,26998,27000,27002,27004,27006,27009],{"class":4007,"line":4110},[4005,26999,5343],{"class":4174},[4005,27001,3769],{"class":4182},[4005,27003,5348],{"class":4302},[4005,27005,4611],{"class":4182},[4005,27007,27008],{"class":4330},"\"⛔ Доступ заборонено\"",[4005,27010,4482],{"class":4182},[4005,27012,27013,27015,27018],{"class":4007,"line":4937},[4005,27014,7365],{"class":4836},[4005,27016,27017],{"class":4186}," 404",[4005,27019,7370],{"class":4182},[4005,27021,27022,27024,27026,27028,27030,27033],{"class":4007,"line":4942},[4005,27023,5343],{"class":4174},[4005,27025,3769],{"class":4182},[4005,27027,5348],{"class":4302},[4005,27029,4611],{"class":4182},[4005,27031,27032],{"class":4330},"\"🔍 Ресурс не знайдено\"",[4005,27034,4482],{"class":4182},[4005,27036,27037],{"class":4007,"line":4947},[4005,27038,12810],{"class":4182},[4005,27040,27041,27043,27046,27048,27051,27053,27056,27058,27061],{"class":4007,"line":4953},[4005,27042,7365],{"class":4836},[4005,27044,27045],{"class":4186}," 500",[4005,27047,3836],{"class":4182},[4005,27049,27050],{"class":4186},"502",[4005,27052,3836],{"class":4182},[4005,27054,27055],{"class":4186},"503",[4005,27057,3836],{"class":4182},[4005,27059,27060],{"class":4186},"504",[4005,27062,7370],{"class":4182},[4005,27064,27065,27067,27069,27071,27073,27076],{"class":4007,"line":4960},[4005,27066,5343],{"class":4174},[4005,27068,3769],{"class":4182},[4005,27070,5348],{"class":4302},[4005,27072,4611],{"class":4182},[4005,27074,27075],{"class":4330},"\"💥 Помилка сервера — спробуйте пізніше\"",[4005,27077,4482],{"class":4182},[4005,27079,27080],{"class":4007,"line":4973},[4005,27081,12810],{"class":4182},[4005,27083,27084,27086],{"class":4007,"line":4985},[4005,27085,7430],{"class":4836},[4005,27087,7370],{"class":4182},[4005,27089,27090,27092,27094,27096,27098,27101,27103,27105,27107,27109,27111],{"class":4007,"line":7813},[4005,27091,5343],{"class":4174},[4005,27093,3769],{"class":4182},[4005,27095,7945],{"class":4302},[4005,27097,4611],{"class":4182},[4005,27099,27100],{"class":4330},"\"⚠️ Незвичний статус-код: ",[4005,27102,7959],{"class":4174},[4005,27104,7965],{"class":7964},[4005,27106,7968],{"class":4330},[4005,27108,3836],{"class":4182},[4005,27110,25151],{"class":4174},[4005,27112,4482],{"class":4182},[4005,27114,27115],{"class":4007,"line":7819},[4005,27116,5127],{"class":4182},[4005,27118,27119],{"class":4007,"line":7826},[4005,27120,4078],{"class":4182},[4005,27122,27123],{"class":4007,"line":7839},[4005,27124,4036],{"emptyLinePlaceholder":4035},[4005,27126,27127,27129,27131],{"class":4007,"line":7864},[4005,27128,4299],{"class":4171},[4005,27130,5764],{"class":4302},[4005,27132,4306],{"class":4182},[4005,27134,27135,27138,27140,27142],{"class":4007,"line":7872},[4005,27136,27137],{"class":4302},"    handleHTTPStatus",[4005,27139,4611],{"class":4182},[4005,27141,4317],{"class":4186},[4005,27143,4482],{"class":4182},[4005,27145,27146,27148,27150,27152],{"class":4007,"line":7881},[4005,27147,27137],{"class":4302},[4005,27149,4611],{"class":4182},[4005,27151,25077],{"class":4186},[4005,27153,4482],{"class":4182},[4005,27155,27156,27158,27160,27162],{"class":4007,"line":7890},[4005,27157,27137],{"class":4302},[4005,27159,4611],{"class":4182},[4005,27161,6732],{"class":4186},[4005,27163,4482],{"class":4182},[4005,27165,27166,27168,27170,27173],{"class":4007,"line":7895},[4005,27167,27137],{"class":4302},[4005,27169,4611],{"class":4182},[4005,27171,27172],{"class":4186},"999",[4005,27174,4482],{"class":4182},[4005,27176,27177],{"class":4007,"line":7900},[4005,27178,4078],{"class":4182},[3908,27180,27181],{},[3871,27182,11778],{},[3984,27184,27187],{"className":27185,"code":27186,"language":3989},[3987],"✅ Успішний запит\n🔍 Ресурс не знайдено\n💥 Помилка сервера — спробуйте пізніше\n⚠️ Незвичний статус-код: 999\n",[3753,27188,27186],{"__ignoreMap":3992},[9014,27190,27192,27193],{"id":27191},"приклад-6-оператор-fallthrough","Приклад 6: Оператор ",[3753,27194,25720],{},[3908,27196,27197,3880,27200,27202,27203,3880,27205,5831],{},[3871,27198,27199],{},"⚠️ Використовується рідко!",[3753,27201,25720],{}," примусово передає виконання наступному ",[3753,27204,25674],{},[3871,27206,27207],{},"без перевірки його умови",[3984,27209,27211],{"className":4162,"code":27210,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    step := 1\n    fmt.Println(\"Виконання конвеєра обробки:\")\n    \n    switch step {\n    case 1:\n        fmt.Println(\"  [Крок 1] ✓ Перевірка валідності токена\")\n        fallthrough \u002F\u002F Переходимо до case 2 БЕЗ перевірки умови!\n    case 2:\n        fmt.Println(\"  [Крок 2] ✓ Зчитування профілю з бази\")\n        fallthrough\n    case 3:\n        fmt.Println(\"  [Крок 3] ✓ Формування HTTP-відповіді\")\n    case 4:\n        fmt.Println(\"  [Крок 4] ✓ Логування результату\")\n    }\n}\n",[3753,27212,27213,27219,27223,27229,27233,27241,27250,27265,27269,27278,27287,27302,27310,27319,27334,27339,27348,27363,27372,27387,27391],{"__ignoreMap":3992},[4005,27214,27215,27217],{"class":4007,"line":4008},[4005,27216,5739],{"class":4171},[4005,27218,5742],{"class":4178},[4005,27220,27221],{"class":4007,"line":4014},[4005,27222,4036],{"emptyLinePlaceholder":4035},[4005,27224,27225,27227],{"class":4007,"line":4020},[4005,27226,3917],{"class":4836},[4005,27228,7656],{"class":4330},[4005,27230,27231],{"class":4007,"line":4026},[4005,27232,4036],{"emptyLinePlaceholder":4035},[4005,27234,27235,27237,27239],{"class":4007,"line":4032},[4005,27236,4299],{"class":4171},[4005,27238,5764],{"class":4302},[4005,27240,4306],{"class":4182},[4005,27242,27243,27246,27248],{"class":4007,"line":4039},[4005,27244,27245],{"class":4174},"    step",[4005,27247,4314],{"class":4182},[4005,27249,24512],{"class":4186},[4005,27251,27252,27254,27256,27258,27260,27263],{"class":4007,"line":4045},[4005,27253,5370],{"class":4174},[4005,27255,3769],{"class":4182},[4005,27257,5348],{"class":4302},[4005,27259,4611],{"class":4182},[4005,27261,27262],{"class":4330},"\"Виконання конвеєра обробки:\"",[4005,27264,4482],{"class":4182},[4005,27266,27267],{"class":4007,"line":4051},[4005,27268,5214],{"class":4182},[4005,27270,27271,27273,27276],{"class":4007,"line":4057},[4005,27272,7355],{"class":4836},[4005,27274,27275],{"class":4174}," step",[4005,27277,5073],{"class":4182},[4005,27279,27280,27282,27285],{"class":4007,"line":4063},[4005,27281,7365],{"class":4836},[4005,27283,27284],{"class":4186}," 1",[4005,27286,7370],{"class":4182},[4005,27288,27289,27291,27293,27295,27297,27300],{"class":4007,"line":4069},[4005,27290,5343],{"class":4174},[4005,27292,3769],{"class":4182},[4005,27294,5348],{"class":4302},[4005,27296,4611],{"class":4182},[4005,27298,27299],{"class":4330},"\"  [Крок 1] ✓ Перевірка валідності токена\"",[4005,27301,4482],{"class":4182},[4005,27303,27304,27307],{"class":4007,"line":4075},[4005,27305,27306],{"class":4836},"        fallthrough",[4005,27308,27309],{"class":4190}," \u002F\u002F Переходимо до case 2 БЕЗ перевірки умови!\n",[4005,27311,27312,27314,27317],{"class":4007,"line":4081},[4005,27313,7365],{"class":4836},[4005,27315,27316],{"class":4186}," 2",[4005,27318,7370],{"class":4182},[4005,27320,27321,27323,27325,27327,27329,27332],{"class":4007,"line":4086},[4005,27322,5343],{"class":4174},[4005,27324,3769],{"class":4182},[4005,27326,5348],{"class":4302},[4005,27328,4611],{"class":4182},[4005,27330,27331],{"class":4330},"\"  [Крок 2] ✓ Зчитування профілю з бази\"",[4005,27333,4482],{"class":4182},[4005,27335,27336],{"class":4007,"line":4092},[4005,27337,27338],{"class":4836},"        fallthrough\n",[4005,27340,27341,27343,27346],{"class":4007,"line":4098},[4005,27342,7365],{"class":4836},[4005,27344,27345],{"class":4186}," 3",[4005,27347,7370],{"class":4182},[4005,27349,27350,27352,27354,27356,27358,27361],{"class":4007,"line":4104},[4005,27351,5343],{"class":4174},[4005,27353,3769],{"class":4182},[4005,27355,5348],{"class":4302},[4005,27357,4611],{"class":4182},[4005,27359,27360],{"class":4330},"\"  [Крок 3] ✓ Формування HTTP-відповіді\"",[4005,27362,4482],{"class":4182},[4005,27364,27365,27367,27370],{"class":4007,"line":4110},[4005,27366,7365],{"class":4836},[4005,27368,27369],{"class":4186}," 4",[4005,27371,7370],{"class":4182},[4005,27373,27374,27376,27378,27380,27382,27385],{"class":4007,"line":4937},[4005,27375,5343],{"class":4174},[4005,27377,3769],{"class":4182},[4005,27379,5348],{"class":4302},[4005,27381,4611],{"class":4182},[4005,27383,27384],{"class":4330},"\"  [Крок 4] ✓ Логування результату\"",[4005,27386,4482],{"class":4182},[4005,27388,27389],{"class":4007,"line":4942},[4005,27390,5127],{"class":4182},[4005,27392,27393],{"class":4007,"line":4947},[4005,27394,4078],{"class":4182},[3908,27396,27397],{},[3871,27398,27399],{},"Вивід (хоча step = 1, виконаються кроки 1, 2, 3):",[3984,27401,27404],{"className":27402,"code":27403,"language":3989},[3987],"Виконання конвеєра обробки:\n  [Крок 1] ✓ Перевірка валідності токена\n  [Крок 2] ✓ Зчитування профілю з бази\n  [Крок 3] ✓ Формування HTTP-відповіді\n",[3753,27405,27403],{"__ignoreMap":3992},[4484,27407,27408,27414,27422,27427,27506,27511],{"icon":9084},[3908,27409,27410],{},[3871,27411,12460,27412,6406],{},[3753,27413,25720],{},[3908,27415,27416,27419,27420,3769],{},[3871,27417,27418],{},"Рідко!"," У 99% випадків краще просто перелічити значення в одному ",[3753,27421,25674],{},[3908,27423,27424],{},[3871,27425,27426],{},"❌ Погано (fallthrough):",[3984,27428,27430],{"className":4162,"code":27429,"language":4164,"meta":3992,"style":3992},"switch day {\ncase \"Понеділок\":\n    fmt.Println(\"Робочий день\")\n    fallthrough\ncase \"Вівторок\":\n    fmt.Println(\"Робочий день\")\n    fallthrough\n\u002F\u002F ...\n}\n",[3753,27431,27432,27441,27450,27465,27470,27479,27493,27497,27502],{"__ignoreMap":3992},[4005,27433,27434,27436,27439],{"class":4007,"line":4008},[4005,27435,3804],{"class":4836},[4005,27437,27438],{"class":4174}," day",[4005,27440,5073],{"class":4182},[4005,27442,27443,27445,27448],{"class":4007,"line":4014},[4005,27444,25674],{"class":4836},[4005,27446,27447],{"class":4330}," \"Понеділок\"",[4005,27449,7370],{"class":4182},[4005,27451,27452,27454,27456,27458,27460,27463],{"class":4007,"line":4020},[4005,27453,5370],{"class":4174},[4005,27455,3769],{"class":4182},[4005,27457,5348],{"class":4302},[4005,27459,4611],{"class":4182},[4005,27461,27462],{"class":4330},"\"Робочий день\"",[4005,27464,4482],{"class":4182},[4005,27466,27467],{"class":4007,"line":4026},[4005,27468,27469],{"class":4836},"    fallthrough\n",[4005,27471,27472,27474,27477],{"class":4007,"line":4032},[4005,27473,25674],{"class":4836},[4005,27475,27476],{"class":4330}," \"Вівторок\"",[4005,27478,7370],{"class":4182},[4005,27480,27481,27483,27485,27487,27489,27491],{"class":4007,"line":4039},[4005,27482,5370],{"class":4174},[4005,27484,3769],{"class":4182},[4005,27486,5348],{"class":4302},[4005,27488,4611],{"class":4182},[4005,27490,27462],{"class":4330},[4005,27492,4482],{"class":4182},[4005,27494,27495],{"class":4007,"line":4045},[4005,27496,27469],{"class":4836},[4005,27498,27499],{"class":4007,"line":4051},[4005,27500,27501],{"class":4190},"\u002F\u002F ...\n",[4005,27503,27504],{"class":4007,"line":4057},[4005,27505,4078],{"class":4182},[3908,27507,27508],{},[3871,27509,27510],{},"✅ Добре (множинні значення):",[3984,27512,27514],{"className":4162,"code":27513,"language":4164,"meta":3992,"style":3992},"switch day {\ncase \"Понеділок\", \"Вівторок\", \"Середа\", \"Четвер\", \"П'ятниця\":\n    fmt.Println(\"Робочий день\")\ncase \"Субота\", \"Неділя\":\n    fmt.Println(\"Вихідний\")\n}\n",[3753,27515,27516,27524,27552,27566,27580,27595],{"__ignoreMap":3992},[4005,27517,27518,27520,27522],{"class":4007,"line":4008},[4005,27519,3804],{"class":4836},[4005,27521,27438],{"class":4174},[4005,27523,5073],{"class":4182},[4005,27525,27526,27528,27530,27532,27535,27537,27540,27542,27545,27547,27550],{"class":4007,"line":4014},[4005,27527,25674],{"class":4836},[4005,27529,27447],{"class":4330},[4005,27531,3836],{"class":4182},[4005,27533,27534],{"class":4330},"\"Вівторок\"",[4005,27536,3836],{"class":4182},[4005,27538,27539],{"class":4330},"\"Середа\"",[4005,27541,3836],{"class":4182},[4005,27543,27544],{"class":4330},"\"Четвер\"",[4005,27546,3836],{"class":4182},[4005,27548,27549],{"class":4330},"\"П'ятниця\"",[4005,27551,7370],{"class":4182},[4005,27553,27554,27556,27558,27560,27562,27564],{"class":4007,"line":4020},[4005,27555,5370],{"class":4174},[4005,27557,3769],{"class":4182},[4005,27559,5348],{"class":4302},[4005,27561,4611],{"class":4182},[4005,27563,27462],{"class":4330},[4005,27565,4482],{"class":4182},[4005,27567,27568,27570,27573,27575,27578],{"class":4007,"line":4026},[4005,27569,25674],{"class":4836},[4005,27571,27572],{"class":4330}," \"Субота\"",[4005,27574,3836],{"class":4182},[4005,27576,27577],{"class":4330},"\"Неділя\"",[4005,27579,7370],{"class":4182},[4005,27581,27582,27584,27586,27588,27590,27593],{"class":4007,"line":4032},[4005,27583,5370],{"class":4174},[4005,27585,3769],{"class":4182},[4005,27587,5348],{"class":4302},[4005,27589,4611],{"class":4182},[4005,27591,27592],{"class":4330},"\"Вихідний\"",[4005,27594,4482],{"class":4182},[4005,27596,27597],{"class":4007,"line":4039},[4005,27598,4078],{"class":4182},[9014,27600,27602],{"id":27601},"порівняння-switch-в-go-та-інших-мовах","Порівняння switch в Go та інших мовах",[5991,27604,27605,27618],{},[5994,27606,27607],{},[5997,27608,27609,27611,27613,27616],{},[6000,27610,10840],{},[6000,27612,12539],{},[6000,27614,27615],{},"Java\u002FC\u002FC++",[6000,27617,1913],{},[6010,27619,27620,27635,27657,27672,27686],{},[5997,27621,27622,27627,27630,27633],{},[6015,27623,27624,27626],{},[3753,27625,25689],{}," наприкінці",[6015,27628,27629],{},"❌ Не потрібен (автоматично)",[6015,27631,27632],{},"✅ Обов'язковий",[6015,27634,27632],{},[5997,27636,27637,27642,27648,27653],{},[6015,27638,27639,27640],{},"Множинні значення в ",[3753,27641,25674],{},[6015,27643,27644,27645],{},"✅ ",[3753,27646,27647],{},"case 1, 2, 3:",[6015,27649,27650,27651],{},"❌ Потрібні окремі ",[3753,27652,25674],{},[6015,27654,27650,27655],{},[3753,27656,25674],{},[5997,27658,27659,27662,27667,27670],{},[6015,27660,27661],{},"Switch без виразу",[6015,27663,27644,27664],{},[3753,27665,27666],{},"switch { case x > 10: }",[6015,27668,27669],{},"❌",[6015,27671,27669],{},[5997,27673,27674,27677,27682,27684],{},[6015,27675,27676],{},"Type switch",[6015,27678,27644,27679],{},[3753,27680,27681],{},"switch v := x.(type)",[6015,27683,27669],{},[6015,27685,27669],{},[5997,27687,27688,27692,27695,27698],{},[6015,27689,27690],{},[3753,27691,25720],{},[6015,27693,27694],{},"✅ Явний оператор",[6015,27696,27697],{},"❌ За замовчуванням",[6015,27699,27697],{},[3900,27701],{},[3976,27703,27705,27706,27708],{"id":27704},"цикл-for-усі-форми-та-патерни-організації-повторень","Цикл ",[3753,27707,3808],{},": усі форми та патерни організації повторень",[3908,27710,27711,27712,27715,27716,27719,27720,3769],{},"У Go навмисно немає окремих конструкцій ",[3753,27713,27714],{},"while"," чи ",[3753,27717,27718],{},"do-while",". Замість цього розробник має у своєму розпорядженні єдиний, але всеосяжний цикл ",[3871,27721,27722],{},[3753,27723,3808],{},[3908,27725,27726],{},"Формальний синтаксис повного циклу:",[3984,27728,27730],{"className":4162,"code":27729,"language":4164,"meta":3992,"style":3992},"for [ініціалізація_лічильника]; [умова_виконання]; [постінструкція_зміни] {\n    \u002F\u002F Тіло циклу\n}\n",[3753,27731,27732,27756,27761],{"__ignoreMap":3992},[4005,27733,27734,27736,27739,27742,27745,27748,27750,27753],{"class":4007,"line":4008},[4005,27735,3808],{"class":4836},[4005,27737,27738],{"class":4182}," [",[4005,27740,27741],{"class":4174},"ініціалізація_лічильника",[4005,27743,27744],{"class":4182},"]; [",[4005,27746,27747],{"class":4174},"умова_виконання",[4005,27749,27744],{"class":4182},[4005,27751,27752],{"class":4174},"постінструкція_зміни",[4005,27754,27755],{"class":4182},"] {\n",[4005,27757,27758],{"class":4007,"line":4014},[4005,27759,27760],{"class":4190},"    \u002F\u002F Тіло циклу\n",[4005,27762,27763],{"class":4007,"line":4020},[4005,27764,4078],{"class":4182},[3908,27766,27767,27768,24929],{},"Розглянемо всі форми циклу ",[3753,27769,3808],{},[9014,27771,27773],{"id":27772},"класичний-цикл-із-лічильником","Класичний цикл із лічильником",[3984,27775,27777],{"className":4162,"code":27776,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Спрацює рівно 3 рази (ітерації i=1, i=2, i=3)\n    for i := 1; i \u003C= 3; i++ {\n        fmt.Printf(\"Ітерація лічильника: %d (квадрат: %d)\\n\", i, i*i)\n    }\n}\n",[3753,27778,27779,27785,27789,27795,27799,27807,27812,27838,27878,27882],{"__ignoreMap":3992},[4005,27780,27781,27783],{"class":4007,"line":4008},[4005,27782,5739],{"class":4171},[4005,27784,5742],{"class":4178},[4005,27786,27787],{"class":4007,"line":4014},[4005,27788,4036],{"emptyLinePlaceholder":4035},[4005,27790,27791,27793],{"class":4007,"line":4020},[4005,27792,3917],{"class":4836},[4005,27794,7656],{"class":4330},[4005,27796,27797],{"class":4007,"line":4026},[4005,27798,4036],{"emptyLinePlaceholder":4035},[4005,27800,27801,27803,27805],{"class":4007,"line":4032},[4005,27802,4299],{"class":4171},[4005,27804,5764],{"class":4302},[4005,27806,4306],{"class":4182},[4005,27808,27809],{"class":4007,"line":4039},[4005,27810,27811],{"class":4190},"    \u002F\u002F Спрацює рівно 3 рази (ітерації i=1, i=2, i=3)\n",[4005,27813,27814,27816,27818,27820,27822,27824,27827,27829,27831,27833,27835],{"class":4007,"line":4045},[4005,27815,12138],{"class":4836},[4005,27817,6592],{"class":4174},[4005,27819,4314],{"class":4182},[4005,27821,4393],{"class":4186},[4005,27823,23796],{"class":4182},[4005,27825,27826],{"class":4174},"i",[4005,27828,10375],{"class":4182},[4005,27830,6286],{"class":4186},[4005,27832,23796],{"class":4182},[4005,27834,27826],{"class":4174},[4005,27836,27837],{"class":4182},"++ {\n",[4005,27839,27840,27842,27844,27846,27848,27851,27853,27856,27858,27860,27862,27864,27866,27868,27870,27872,27874,27876],{"class":4007,"line":4051},[4005,27841,5343],{"class":4174},[4005,27843,3769],{"class":4182},[4005,27845,7945],{"class":4302},[4005,27847,4611],{"class":4182},[4005,27849,27850],{"class":4330},"\"Ітерація лічильника: ",[4005,27852,7959],{"class":4174},[4005,27854,27855],{"class":4330}," (квадрат: ",[4005,27857,7959],{"class":4174},[4005,27859,5032],{"class":4330},[4005,27861,7965],{"class":7964},[4005,27863,7968],{"class":4330},[4005,27865,3836],{"class":4182},[4005,27867,27826],{"class":4174},[4005,27869,3836],{"class":4182},[4005,27871,27826],{"class":4174},[4005,27873,8128],{"class":4182},[4005,27875,27826],{"class":4174},[4005,27877,4482],{"class":4182},[4005,27879,27880],{"class":4007,"line":4057},[4005,27881,5127],{"class":4182},[4005,27883,27884],{"class":4007,"line":4063},[4005,27885,4078],{"class":4182},[3900,27887],{},[9014,27889,27891,27892],{"id":27890},"форми-з-винесенням-компонентів-та-аналог-while","Форми з винесенням компонентів та аналог ",[3753,27893,27714],{},[3908,27895,27896,27897,27899],{},"Усі три частини заголовка ",[3753,27898,3808],{}," є опціональними. Їх можна виносити за межі:",[3984,27901,27903],{"className":4162,"code":27902,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Варіант А: Ініціалізація винесена назовні\n    i := 1\n    for ; i \u003C= 3; i++ {\n        fmt.Println(\"Варіант A:\", i)\n    }\n\n    \u002F\u002F Варіант Б: Форма умови (Аналог класичного while)\n    \u002F\u002F Використовується, коли цикл має тривати, поки умова залишається true\n    attempts := 3\n    for attempts > 0 {\n        fmt.Printf(\"Залишилося спроб підключення: %d\\n\", attempts)\n        attempts--\n    }\n}\n",[3753,27904,27905,27911,27915,27921,27925,27933,27938,27947,27966,27985,27989,27993,27998,28003,28012,28025,28051,28059,28063],{"__ignoreMap":3992},[4005,27906,27907,27909],{"class":4007,"line":4008},[4005,27908,5739],{"class":4171},[4005,27910,5742],{"class":4178},[4005,27912,27913],{"class":4007,"line":4014},[4005,27914,4036],{"emptyLinePlaceholder":4035},[4005,27916,27917,27919],{"class":4007,"line":4020},[4005,27918,3917],{"class":4836},[4005,27920,7656],{"class":4330},[4005,27922,27923],{"class":4007,"line":4026},[4005,27924,4036],{"emptyLinePlaceholder":4035},[4005,27926,27927,27929,27931],{"class":4007,"line":4032},[4005,27928,4299],{"class":4171},[4005,27930,5764],{"class":4302},[4005,27932,4306],{"class":4182},[4005,27934,27935],{"class":4007,"line":4039},[4005,27936,27937],{"class":4190},"    \u002F\u002F Варіант А: Ініціалізація винесена назовні\n",[4005,27939,27940,27943,27945],{"class":4007,"line":4045},[4005,27941,27942],{"class":4174},"    i",[4005,27944,4314],{"class":4182},[4005,27946,24512],{"class":4186},[4005,27948,27949,27951,27954,27956,27958,27960,27962,27964],{"class":4007,"line":4051},[4005,27950,12138],{"class":4836},[4005,27952,27953],{"class":4182}," ; ",[4005,27955,27826],{"class":4174},[4005,27957,10375],{"class":4182},[4005,27959,6286],{"class":4186},[4005,27961,23796],{"class":4182},[4005,27963,27826],{"class":4174},[4005,27965,27837],{"class":4182},[4005,27967,27968,27970,27972,27974,27976,27979,27981,27983],{"class":4007,"line":4057},[4005,27969,5343],{"class":4174},[4005,27971,3769],{"class":4182},[4005,27973,5348],{"class":4302},[4005,27975,4611],{"class":4182},[4005,27977,27978],{"class":4330},"\"Варіант A:\"",[4005,27980,3836],{"class":4182},[4005,27982,27826],{"class":4174},[4005,27984,4482],{"class":4182},[4005,27986,27987],{"class":4007,"line":4063},[4005,27988,5127],{"class":4182},[4005,27990,27991],{"class":4007,"line":4069},[4005,27992,4036],{"emptyLinePlaceholder":4035},[4005,27994,27995],{"class":4007,"line":4075},[4005,27996,27997],{"class":4190},"    \u002F\u002F Варіант Б: Форма умови (Аналог класичного while)\n",[4005,27999,28000],{"class":4007,"line":4081},[4005,28001,28002],{"class":4190},"    \u002F\u002F Використовується, коли цикл має тривати, поки умова залишається true\n",[4005,28004,28005,28008,28010],{"class":4007,"line":4086},[4005,28006,28007],{"class":4174},"    attempts",[4005,28009,4314],{"class":4182},[4005,28011,4403],{"class":4186},[4005,28013,28014,28016,28019,28021,28023],{"class":4007,"line":4092},[4005,28015,12138],{"class":4836},[4005,28017,28018],{"class":4174}," attempts",[4005,28020,10353],{"class":4182},[4005,28022,4200],{"class":4186},[4005,28024,5073],{"class":4182},[4005,28026,28027,28029,28031,28033,28035,28038,28040,28042,28044,28046,28049],{"class":4007,"line":4098},[4005,28028,5343],{"class":4174},[4005,28030,3769],{"class":4182},[4005,28032,7945],{"class":4302},[4005,28034,4611],{"class":4182},[4005,28036,28037],{"class":4330},"\"Залишилося спроб підключення: ",[4005,28039,7959],{"class":4174},[4005,28041,7965],{"class":7964},[4005,28043,7968],{"class":4330},[4005,28045,3836],{"class":4182},[4005,28047,28048],{"class":4174},"attempts",[4005,28050,4482],{"class":4182},[4005,28052,28053,28056],{"class":4007,"line":4104},[4005,28054,28055],{"class":4174},"        attempts",[4005,28057,28058],{"class":4182},"--\n",[4005,28060,28061],{"class":4007,"line":4110},[4005,28062,5127],{"class":4182},[4005,28064,28065],{"class":4007,"line":4937},[4005,28066,4078],{"class":4182},[3900,28068],{},[9014,28070,28072,28073,15549,28075],{"id":28071},"нескінченний-цикл-та-керування-через-break-continue","Нескінченний цикл та керування через ",[3753,28074,25689],{},[3753,28076,28077],{},"continue",[3908,28079,28080,28081,28084,28085,28088],{},"Якщо пропустити всі умови, запис ",[3753,28082,28083],{},"for {}"," створить вічний цикл (аналог ",[3753,28086,28087],{},"while (true)"," у C\u002FJava). Він незамінний для фонових демонів, мережевих серверів, що слухають порт, або обробників черг:",[3984,28090,28092],{"className":4162,"code":28091,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    counter := 0\n\n    for {\n        counter++\n\n        \u002F\u002F continue: пропустити решту тіла і перейти до наступної ітерації\n        if counter%2 == 0 {\n            continue \u002F\u002F Пропускаємо парні числа\n        }\n\n        \u002F\u002F break: негайно перервати цикл і вийти з нього\n        if counter > 5 {\n            fmt.Println(\"Досягнуто ліміту. Зупинка нескінченного циклу.\")\n            break\n        }\n\n        fmt.Println(\"Обробка непарного числа:\", counter)\n    }\n}\n",[3753,28093,28094,28100,28104,28110,28114,28122,28131,28135,28141,28149,28153,28158,28175,28183,28187,28191,28196,28208,28223,28228,28232,28236,28256,28260],{"__ignoreMap":3992},[4005,28095,28096,28098],{"class":4007,"line":4008},[4005,28097,5739],{"class":4171},[4005,28099,5742],{"class":4178},[4005,28101,28102],{"class":4007,"line":4014},[4005,28103,4036],{"emptyLinePlaceholder":4035},[4005,28105,28106,28108],{"class":4007,"line":4020},[4005,28107,3917],{"class":4836},[4005,28109,7656],{"class":4330},[4005,28111,28112],{"class":4007,"line":4026},[4005,28113,4036],{"emptyLinePlaceholder":4035},[4005,28115,28116,28118,28120],{"class":4007,"line":4032},[4005,28117,4299],{"class":4171},[4005,28119,5764],{"class":4302},[4005,28121,4306],{"class":4182},[4005,28123,28124,28127,28129],{"class":4007,"line":4039},[4005,28125,28126],{"class":4174},"    counter",[4005,28128,4314],{"class":4182},[4005,28130,8013],{"class":4186},[4005,28132,28133],{"class":4007,"line":4045},[4005,28134,4036],{"emptyLinePlaceholder":4035},[4005,28136,28137,28139],{"class":4007,"line":4051},[4005,28138,12138],{"class":4836},[4005,28140,5073],{"class":4182},[4005,28142,28143,28146],{"class":4007,"line":4057},[4005,28144,28145],{"class":4174},"        counter",[4005,28147,28148],{"class":4182},"++\n",[4005,28150,28151],{"class":4007,"line":4063},[4005,28152,4036],{"emptyLinePlaceholder":4035},[4005,28154,28155],{"class":4007,"line":4069},[4005,28156,28157],{"class":4190},"        \u002F\u002F continue: пропустити решту тіла і перейти до наступної ітерації\n",[4005,28159,28160,28162,28165,28167,28169,28171,28173],{"class":4007,"line":4075},[4005,28161,12892],{"class":4836},[4005,28163,28164],{"class":4174}," counter",[4005,28166,20636],{"class":4182},[4005,28168,4398],{"class":4186},[4005,28170,5473],{"class":4182},[4005,28172,4200],{"class":4186},[4005,28174,5073],{"class":4182},[4005,28176,28177,28180],{"class":4007,"line":4081},[4005,28178,28179],{"class":4836},"            continue",[4005,28181,28182],{"class":4190}," \u002F\u002F Пропускаємо парні числа\n",[4005,28184,28185],{"class":4007,"line":4086},[4005,28186,12937],{"class":4182},[4005,28188,28189],{"class":4007,"line":4092},[4005,28190,4036],{"emptyLinePlaceholder":4035},[4005,28192,28193],{"class":4007,"line":4098},[4005,28194,28195],{"class":4190},"        \u002F\u002F break: негайно перервати цикл і вийти з нього\n",[4005,28197,28198,28200,28202,28204,28206],{"class":4007,"line":4104},[4005,28199,12892],{"class":4836},[4005,28201,28164],{"class":4174},[4005,28203,10353],{"class":4182},[4005,28205,5869],{"class":4186},[4005,28207,5073],{"class":4182},[4005,28209,28210,28212,28214,28216,28218,28221],{"class":4007,"line":4110},[4005,28211,26586],{"class":4174},[4005,28213,3769],{"class":4182},[4005,28215,5348],{"class":4302},[4005,28217,4611],{"class":4182},[4005,28219,28220],{"class":4330},"\"Досягнуто ліміту. Зупинка нескінченного циклу.\"",[4005,28222,4482],{"class":4182},[4005,28224,28225],{"class":4007,"line":4937},[4005,28226,28227],{"class":4836},"            break\n",[4005,28229,28230],{"class":4007,"line":4942},[4005,28231,12937],{"class":4182},[4005,28233,28234],{"class":4007,"line":4947},[4005,28235,4036],{"emptyLinePlaceholder":4035},[4005,28237,28238,28240,28242,28244,28246,28249,28251,28254],{"class":4007,"line":4953},[4005,28239,5343],{"class":4174},[4005,28241,3769],{"class":4182},[4005,28243,5348],{"class":4302},[4005,28245,4611],{"class":4182},[4005,28247,28248],{"class":4330},"\"Обробка непарного числа:\"",[4005,28250,3836],{"class":4182},[4005,28252,28253],{"class":4174},"counter",[4005,28255,4482],{"class":4182},[4005,28257,28258],{"class":4007,"line":4960},[4005,28259,5127],{"class":4182},[4005,28261,28262],{"class":4007,"line":4973},[4005,28263,4078],{"class":4182},[3900,28265],{},[9014,28267,28269],{"id":28268},"вкладені-цикли-та-вихід-за-мітками-labeled-break-continue","Вкладені цикли та вихід за мітками (Labeled Break \u002F Continue)",[3908,28271,28272,28273,28275,28276,5831],{},"Коли цикли вкладені один в одного, звичайний ",[3753,28274,25689],{}," виходить лише з найглибшого поточного циклу. Щоб перервати зовнішній батьківський цикл, у Go використовуються ",[3871,28277,28278,28279,5032],{},"мітки (",[3758,28280,28281],{},"Labels",[3984,28283,28285],{"className":4162,"code":28284,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F 1. Вкладений цикл: побудова таблиці множення 3x3\n    fmt.Println(\"Таблиця множення:\")\n    for row := 1; row \u003C= 3; row++ {\n        for col := 1; col \u003C= 3; col++ {\n            fmt.Printf(\"%d\\t\", row*col)\n        }\n        fmt.Println() \u002F\u002F Перенос на новий рядок\n    }\n\n    \u002F\u002F 2. Вихід із зовнішнього циклу за міткою SearchLoop\n    fmt.Println(\"\\nПошук цільової координати (2, 2):\")\nSearchLoop:\n    for x := 1; x \u003C= 3; x++ {\n        for y := 1; y \u003C= 3; y++ {\n            fmt.Printf(\"Перевірка координати [%d, %d]\\n\", x, y)\n            if x == 2 && y == 2 {\n                fmt.Println(\"  🎯 Ціль знайдено! Миттєвий вихід з усіх циклів.\")\n                break SearchLoop \u002F\u002F Перериває весь цикл SearchLoop!\n            }\n        }\n    }\n    fmt.Println(\"Роботу завершено.\")\n}\n",[3753,28286,28287,28293,28297,28303,28307,28315,28320,28335,28361,28387,28415,28419,28432,28436,28440,28445,28464,28471,28495,28519,28555,28575,28591,28601,28605,28609,28613,28628],{"__ignoreMap":3992},[4005,28288,28289,28291],{"class":4007,"line":4008},[4005,28290,5739],{"class":4171},[4005,28292,5742],{"class":4178},[4005,28294,28295],{"class":4007,"line":4014},[4005,28296,4036],{"emptyLinePlaceholder":4035},[4005,28298,28299,28301],{"class":4007,"line":4020},[4005,28300,3917],{"class":4836},[4005,28302,7656],{"class":4330},[4005,28304,28305],{"class":4007,"line":4026},[4005,28306,4036],{"emptyLinePlaceholder":4035},[4005,28308,28309,28311,28313],{"class":4007,"line":4032},[4005,28310,4299],{"class":4171},[4005,28312,5764],{"class":4302},[4005,28314,4306],{"class":4182},[4005,28316,28317],{"class":4007,"line":4039},[4005,28318,28319],{"class":4190},"    \u002F\u002F 1. Вкладений цикл: побудова таблиці множення 3x3\n",[4005,28321,28322,28324,28326,28328,28330,28333],{"class":4007,"line":4045},[4005,28323,5370],{"class":4174},[4005,28325,3769],{"class":4182},[4005,28327,5348],{"class":4302},[4005,28329,4611],{"class":4182},[4005,28331,28332],{"class":4330},"\"Таблиця множення:\"",[4005,28334,4482],{"class":4182},[4005,28336,28337,28339,28342,28344,28346,28348,28351,28353,28355,28357,28359],{"class":4007,"line":4051},[4005,28338,12138],{"class":4836},[4005,28340,28341],{"class":4174}," row",[4005,28343,4314],{"class":4182},[4005,28345,4393],{"class":4186},[4005,28347,23796],{"class":4182},[4005,28349,28350],{"class":4174},"row",[4005,28352,10375],{"class":4182},[4005,28354,6286],{"class":4186},[4005,28356,23796],{"class":4182},[4005,28358,28350],{"class":4174},[4005,28360,27837],{"class":4182},[4005,28362,28363,28365,28368,28370,28372,28374,28377,28379,28381,28383,28385],{"class":4007,"line":4057},[4005,28364,14396],{"class":4836},[4005,28366,28367],{"class":4174}," col",[4005,28369,4314],{"class":4182},[4005,28371,4393],{"class":4186},[4005,28373,23796],{"class":4182},[4005,28375,28376],{"class":4174},"col",[4005,28378,10375],{"class":4182},[4005,28380,6286],{"class":4186},[4005,28382,23796],{"class":4182},[4005,28384,28376],{"class":4174},[4005,28386,27837],{"class":4182},[4005,28388,28389,28391,28393,28395,28397,28399,28401,28403,28405,28407,28409,28411,28413],{"class":4007,"line":4063},[4005,28390,26586],{"class":4174},[4005,28392,3769],{"class":4182},[4005,28394,7945],{"class":4302},[4005,28396,4611],{"class":4182},[4005,28398,7968],{"class":4330},[4005,28400,7959],{"class":4174},[4005,28402,11060],{"class":7964},[4005,28404,7968],{"class":4330},[4005,28406,3836],{"class":4182},[4005,28408,28350],{"class":4174},[4005,28410,8128],{"class":4182},[4005,28412,28376],{"class":4174},[4005,28414,4482],{"class":4182},[4005,28416,28417],{"class":4007,"line":4069},[4005,28418,12937],{"class":4182},[4005,28420,28421,28423,28425,28427,28429],{"class":4007,"line":4075},[4005,28422,5343],{"class":4174},[4005,28424,3769],{"class":4182},[4005,28426,5348],{"class":4302},[4005,28428,7346],{"class":4182},[4005,28430,28431],{"class":4190},"\u002F\u002F Перенос на новий рядок\n",[4005,28433,28434],{"class":4007,"line":4081},[4005,28435,5127],{"class":4182},[4005,28437,28438],{"class":4007,"line":4086},[4005,28439,4036],{"emptyLinePlaceholder":4035},[4005,28441,28442],{"class":4007,"line":4092},[4005,28443,28444],{"class":4190},"    \u002F\u002F 2. Вихід із зовнішнього циклу за міткою SearchLoop\n",[4005,28446,28447,28449,28451,28453,28455,28457,28459,28462],{"class":4007,"line":4098},[4005,28448,5370],{"class":4174},[4005,28450,3769],{"class":4182},[4005,28452,5348],{"class":4302},[4005,28454,4611],{"class":4182},[4005,28456,7968],{"class":4330},[4005,28458,7965],{"class":7964},[4005,28460,28461],{"class":4330},"Пошук цільової координати (2, 2):\"",[4005,28463,4482],{"class":4182},[4005,28465,28466,28469],{"class":4007,"line":4104},[4005,28467,28468],{"class":4174},"SearchLoop",[4005,28470,7370],{"class":4182},[4005,28472,28473,28475,28477,28479,28481,28483,28485,28487,28489,28491,28493],{"class":4007,"line":4110},[4005,28474,12138],{"class":4836},[4005,28476,6141],{"class":4174},[4005,28478,4314],{"class":4182},[4005,28480,4393],{"class":4186},[4005,28482,23796],{"class":4182},[4005,28484,4621],{"class":4174},[4005,28486,10375],{"class":4182},[4005,28488,6286],{"class":4186},[4005,28490,23796],{"class":4182},[4005,28492,4621],{"class":4174},[4005,28494,27837],{"class":4182},[4005,28496,28497,28499,28501,28503,28505,28507,28509,28511,28513,28515,28517],{"class":4007,"line":4937},[4005,28498,14396],{"class":4836},[4005,28500,6158],{"class":4174},[4005,28502,4314],{"class":4182},[4005,28504,4393],{"class":4186},[4005,28506,23796],{"class":4182},[4005,28508,4626],{"class":4174},[4005,28510,10375],{"class":4182},[4005,28512,6286],{"class":4186},[4005,28514,23796],{"class":4182},[4005,28516,4626],{"class":4174},[4005,28518,27837],{"class":4182},[4005,28520,28521,28523,28525,28527,28529,28532,28534,28536,28538,28541,28543,28545,28547,28549,28551,28553],{"class":4007,"line":4942},[4005,28522,26586],{"class":4174},[4005,28524,3769],{"class":4182},[4005,28526,7945],{"class":4302},[4005,28528,4611],{"class":4182},[4005,28530,28531],{"class":4330},"\"Перевірка координати [",[4005,28533,7959],{"class":4174},[4005,28535,3836],{"class":4330},[4005,28537,7959],{"class":4174},[4005,28539,28540],{"class":4330},"]",[4005,28542,7965],{"class":7964},[4005,28544,7968],{"class":4330},[4005,28546,3836],{"class":4182},[4005,28548,4621],{"class":4174},[4005,28550,3836],{"class":4182},[4005,28552,4626],{"class":4174},[4005,28554,4482],{"class":4182},[4005,28556,28557,28559,28561,28563,28565,28567,28569,28571,28573],{"class":4007,"line":4947},[4005,28558,14421],{"class":4836},[4005,28560,6141],{"class":4174},[4005,28562,5473],{"class":4182},[4005,28564,4398],{"class":4186},[4005,28566,5227],{"class":4182},[4005,28568,4626],{"class":4174},[4005,28570,5473],{"class":4182},[4005,28572,4398],{"class":4186},[4005,28574,5073],{"class":4182},[4005,28576,28577,28580,28582,28584,28586,28589],{"class":4007,"line":4953},[4005,28578,28579],{"class":4174},"                fmt",[4005,28581,3769],{"class":4182},[4005,28583,5348],{"class":4302},[4005,28585,4611],{"class":4182},[4005,28587,28588],{"class":4330},"\"  🎯 Ціль знайдено! Миттєвий вихід з усіх циклів.\"",[4005,28590,4482],{"class":4182},[4005,28592,28593,28595,28598],{"class":4007,"line":4960},[4005,28594,14451],{"class":4836},[4005,28596,28597],{"class":4174}," SearchLoop",[4005,28599,28600],{"class":4190}," \u002F\u002F Перериває весь цикл SearchLoop!\n",[4005,28602,28603],{"class":4007,"line":4973},[4005,28604,14458],{"class":4182},[4005,28606,28607],{"class":4007,"line":4985},[4005,28608,12937],{"class":4182},[4005,28610,28611],{"class":4007,"line":7813},[4005,28612,5127],{"class":4182},[4005,28614,28615,28617,28619,28621,28623,28626],{"class":4007,"line":7819},[4005,28616,5370],{"class":4174},[4005,28618,3769],{"class":4182},[4005,28620,5348],{"class":4302},[4005,28622,4611],{"class":4182},[4005,28624,28625],{"class":4330},"\"Роботу завершено.\"",[4005,28627,4482],{"class":4182},[4005,28629,28630],{"class":4007,"line":7826},[4005,28631,4078],{"class":4182},[3900,28633],{},[9014,28635,28637,28638],{"id":28636},"перебір-колекцій-через-for-range","Перебір колекцій через ",[3753,28639,28640],{},"for-range",[3908,28642,27705,28643,28645,28646,28649],{},[3753,28644,28640],{}," — це зручний спосіб пройтися по всіх елементах колекції (масив, зріз, рядок, мапа, канал). Це як ",[3753,28647,28648],{},"foreach"," в інших мовах, але з додатковими можливостями.",[3908,28651,28652],{},[3871,28653,28654],{},"Загальний синтаксис:",[3984,28656,28658],{"className":4162,"code":28657,"language":4164,"meta":3992,"style":3992},"for індекс, значення := range колекція {\n    \u002F\u002F використовуємо індекс та значення\n}\n",[3753,28659,28660,28681,28686],{"__ignoreMap":3992},[4005,28661,28662,28664,28667,28669,28672,28674,28676,28679],{"class":4007,"line":4008},[4005,28663,3808],{"class":4836},[4005,28665,28666],{"class":4174}," індекс",[4005,28668,3836],{"class":4182},[4005,28670,28671],{"class":4174},"значення",[4005,28673,4314],{"class":4182},[4005,28675,12151],{"class":4836},[4005,28677,28678],{"class":4174}," колекція",[4005,28680,5073],{"class":4182},[4005,28682,28683],{"class":4007,"line":4014},[4005,28684,28685],{"class":4190},"    \u002F\u002F використовуємо індекс та значення\n",[4005,28687,28688],{"class":4007,"line":4020},[4005,28689,4078],{"class":4182},[3976,28691,28693,28694],{"id":28692},"основні-форми-for-range","Основні форми ",[3753,28695,28640],{},[5991,28697,28698,28714],{},[5994,28699,28700],{},[5997,28701,28702,28705,28708,28711],{},[6000,28703,28704],{},"Форма",[6000,28706,28707],{},"Синтаксис",[6000,28709,28710],{},"Що отримуємо",[6000,28712,28713],{},"Приклад використання",[6010,28715,28716,28732,28748,28763],{},[5997,28717,28718,28721,28726,28729],{},[6015,28719,28720],{},"Індекс + значення",[6015,28722,28723],{},[3753,28724,28725],{},"for i, v := range col",[6015,28727,28728],{},"Індекс і копію елемента",[6015,28730,28731],{},"Обробка кожного елемента",[5997,28733,28734,28737,28742,28745],{},[6015,28735,28736],{},"Тільки значення",[6015,28738,28739],{},[3753,28740,28741],{},"for _, v := range col",[6015,28743,28744],{},"Тільки копію елемента",[6015,28746,28747],{},"Коли індекс не потрібен",[5997,28749,28750,28753,28758,28760],{},[6015,28751,28752],{},"Тільки індекс",[6015,28754,28755],{},[3753,28756,28757],{},"for i := range col",[6015,28759,28752],{},[6015,28761,28762],{},"Підрахунок елементів",[5997,28764,28765,28768,28773,28776],{},[6015,28766,28767],{},"Без змінних",[6015,28769,28770],{},[3753,28771,28772],{},"for range col",[6015,28774,28775],{},"Нічого",[6015,28777,28778],{},"Виконати N разів",[4748,28780,28781,28795],{"icon":4750},[3908,28782,28783,3880,28786,22892,28788,28791,28792,28794],{},[3871,28784,28785],{},"Важливо:",[3753,28787,28640],{},[3871,28789,28790],{},"копію"," елемента, а не оригінал. Зміна ",[3753,28793,26507],{}," не змінює елемент у колекції!",[3984,28796,28798],{"className":4162,"code":28797,"language":4164,"meta":3992,"style":3992},"nums := []int{1, 2, 3}\nfor _, v := range nums {\n    v = v * 2  \u002F\u002F ❌ Це змінює тільки копію v, не nums!\n}\nfmt.Println(nums)  \u002F\u002F [1, 2, 3] — без змін!\n",[3753,28799,28800,28823,28842,28858,28862],{"__ignoreMap":3992},[4005,28801,28802,28805,28807,28809,28811,28813,28815,28817,28819,28821],{"class":4007,"line":4008},[4005,28803,28804],{"class":4174},"nums",[4005,28806,11583],{"class":4182},[4005,28808,4158],{"class":4178},[4005,28810,16268],{"class":4182},[4005,28812,4393],{"class":4186},[4005,28814,3836],{"class":4182},[4005,28816,4398],{"class":4186},[4005,28818,3836],{"class":4182},[4005,28820,6286],{"class":4186},[4005,28822,4078],{"class":4182},[4005,28824,28825,28827,28829,28831,28833,28835,28837,28840],{"class":4007,"line":4014},[4005,28826,3808],{"class":4836},[4005,28828,17642],{"class":4174},[4005,28830,3836],{"class":4182},[4005,28832,26507],{"class":4174},[4005,28834,4314],{"class":4182},[4005,28836,12151],{"class":4836},[4005,28838,28839],{"class":4174}," nums",[4005,28841,5073],{"class":4182},[4005,28843,28844,28847,28849,28851,28853,28855],{"class":4007,"line":4020},[4005,28845,28846],{"class":4174},"    v",[4005,28848,4183],{"class":4182},[4005,28850,26507],{"class":4174},[4005,28852,6735],{"class":4182},[4005,28854,4398],{"class":4186},[4005,28856,28857],{"class":4190},"  \u002F\u002F ❌ Це змінює тільки копію v, не nums!\n",[4005,28859,28860],{"class":4007,"line":4026},[4005,28861,4078],{"class":4182},[4005,28863,28864,28866,28868,28870,28872,28874,28876],{"class":4007,"line":4032},[4005,28865,3785],{"class":4174},[4005,28867,3769],{"class":4182},[4005,28869,5348],{"class":4302},[4005,28871,4611],{"class":4182},[4005,28873,28804],{"class":4174},[4005,28875,5196],{"class":4182},[4005,28877,28878],{"class":4190},"\u002F\u002F [1, 2, 3] — без змін!\n",[3976,28880,28882],{"id":28881},"приклад-1-перебір-масивузрізу","Приклад 1: Перебір масиву\u002Fзрізу",[3984,28884,28886],{"className":4162,"code":28885,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    scores := []int{85, 92, 78, 95, 88}\n\n    \u002F\u002F Отримуємо індекс і значення:\n    fmt.Println(\"Результати іспитів:\")\n    for index, score := range scores {\n        fmt.Printf(\"  Студент #%d: %d балів\\n\", index+1, score)\n    }\n\n    \u002F\u002F Тільки значення (індекс не потрібен):\n    total := 0\n    for _, score := range scores {\n        total += score\n    }\n    average := float64(total) \u002F float64(len(scores))\n    fmt.Printf(\"Середній бал: %.1f\\n\", average)\n\n    \u002F\u002F Тільки індекси:\n    fmt.Println(\"Номери студентів:\")\n    for i := range scores {\n        fmt.Printf(\"  %d\", i+1)\n    }\n    fmt.Println()\n}\n",[3753,28887,28888,28894,28898,28904,28908,28916,28952,28956,28961,28976,28995,29035,29039,29043,29048,29057,29075,29085,29089,29119,29146,29150,29155,29170,29184,29211,29215,29225],{"__ignoreMap":3992},[4005,28889,28890,28892],{"class":4007,"line":4008},[4005,28891,5739],{"class":4171},[4005,28893,5742],{"class":4178},[4005,28895,28896],{"class":4007,"line":4014},[4005,28897,4036],{"emptyLinePlaceholder":4035},[4005,28899,28900,28902],{"class":4007,"line":4020},[4005,28901,3917],{"class":4836},[4005,28903,7656],{"class":4330},[4005,28905,28906],{"class":4007,"line":4026},[4005,28907,4036],{"emptyLinePlaceholder":4035},[4005,28909,28910,28912,28914],{"class":4007,"line":4032},[4005,28911,4299],{"class":4171},[4005,28913,5764],{"class":4302},[4005,28915,4306],{"class":4182},[4005,28917,28918,28921,28923,28925,28927,28930,28932,28935,28937,28940,28942,28945,28947,28950],{"class":4007,"line":4039},[4005,28919,28920],{"class":4174},"    scores",[4005,28922,11583],{"class":4182},[4005,28924,4158],{"class":4178},[4005,28926,16268],{"class":4182},[4005,28928,28929],{"class":4186},"85",[4005,28931,3836],{"class":4182},[4005,28933,28934],{"class":4186},"92",[4005,28936,3836],{"class":4182},[4005,28938,28939],{"class":4186},"78",[4005,28941,3836],{"class":4182},[4005,28943,28944],{"class":4186},"95",[4005,28946,3836],{"class":4182},[4005,28948,28949],{"class":4186},"88",[4005,28951,4078],{"class":4182},[4005,28953,28954],{"class":4007,"line":4045},[4005,28955,4036],{"emptyLinePlaceholder":4035},[4005,28957,28958],{"class":4007,"line":4051},[4005,28959,28960],{"class":4190},"    \u002F\u002F Отримуємо індекс і значення:\n",[4005,28962,28963,28965,28967,28969,28971,28974],{"class":4007,"line":4057},[4005,28964,5370],{"class":4174},[4005,28966,3769],{"class":4182},[4005,28968,5348],{"class":4302},[4005,28970,4611],{"class":4182},[4005,28972,28973],{"class":4330},"\"Результати іспитів:\"",[4005,28975,4482],{"class":4182},[4005,28977,28978,28980,28982,28984,28986,28988,28990,28993],{"class":4007,"line":4063},[4005,28979,12138],{"class":4836},[4005,28981,12379],{"class":4174},[4005,28983,3836],{"class":4182},[4005,28985,4670],{"class":4174},[4005,28987,4314],{"class":4182},[4005,28989,12151],{"class":4836},[4005,28991,28992],{"class":4174}," scores",[4005,28994,5073],{"class":4182},[4005,28996,28997,28999,29001,29003,29005,29008,29010,29012,29014,29017,29019,29021,29023,29025,29027,29029,29031,29033],{"class":4007,"line":4069},[4005,28998,5343],{"class":4174},[4005,29000,3769],{"class":4182},[4005,29002,7945],{"class":4302},[4005,29004,4611],{"class":4182},[4005,29006,29007],{"class":4330},"\"  Студент #",[4005,29009,7959],{"class":4174},[4005,29011,11172],{"class":4330},[4005,29013,7959],{"class":4174},[4005,29015,29016],{"class":4330}," балів",[4005,29018,7965],{"class":7964},[4005,29020,7968],{"class":4330},[4005,29022,3836],{"class":4182},[4005,29024,12419],{"class":4174},[4005,29026,14837],{"class":4182},[4005,29028,4393],{"class":4186},[4005,29030,3836],{"class":4182},[4005,29032,4670],{"class":4174},[4005,29034,4482],{"class":4182},[4005,29036,29037],{"class":4007,"line":4075},[4005,29038,5127],{"class":4182},[4005,29040,29041],{"class":4007,"line":4081},[4005,29042,4036],{"emptyLinePlaceholder":4035},[4005,29044,29045],{"class":4007,"line":4086},[4005,29046,29047],{"class":4190},"    \u002F\u002F Тільки значення (індекс не потрібен):\n",[4005,29049,29050,29053,29055],{"class":4007,"line":4092},[4005,29051,29052],{"class":4174},"    total",[4005,29054,4314],{"class":4182},[4005,29056,8013],{"class":4186},[4005,29058,29059,29061,29063,29065,29067,29069,29071,29073],{"class":4007,"line":4098},[4005,29060,12138],{"class":4836},[4005,29062,17642],{"class":4174},[4005,29064,3836],{"class":4182},[4005,29066,4670],{"class":4174},[4005,29068,4314],{"class":4182},[4005,29070,12151],{"class":4836},[4005,29072,28992],{"class":4174},[4005,29074,5073],{"class":4182},[4005,29076,29077,29080,29082],{"class":4007,"line":4104},[4005,29078,29079],{"class":4174},"        total",[4005,29081,23417],{"class":4182},[4005,29083,29084],{"class":4174},"score\n",[4005,29086,29087],{"class":4007,"line":4110},[4005,29088,5127],{"class":4182},[4005,29090,29091,29094,29096,29098,29100,29103,29106,29108,29110,29112,29114,29117],{"class":4007,"line":4937},[4005,29092,29093],{"class":4174},"    average",[4005,29095,4314],{"class":4182},[4005,29097,8437],{"class":4178},[4005,29099,4611],{"class":4182},[4005,29101,29102],{"class":4174},"total",[4005,29104,29105],{"class":4182},") \u002F ",[4005,29107,8437],{"class":4178},[4005,29109,4611],{"class":4182},[4005,29111,11465],{"class":4302},[4005,29113,4611],{"class":4182},[4005,29115,29116],{"class":4174},"scores",[4005,29118,25552],{"class":4182},[4005,29120,29121,29123,29125,29127,29129,29132,29135,29137,29139,29141,29144],{"class":4007,"line":4942},[4005,29122,5370],{"class":4174},[4005,29124,3769],{"class":4182},[4005,29126,7945],{"class":4302},[4005,29128,4611],{"class":4182},[4005,29130,29131],{"class":4330},"\"Середній бал: ",[4005,29133,29134],{"class":4174},"%.1f",[4005,29136,7965],{"class":7964},[4005,29138,7968],{"class":4330},[4005,29140,3836],{"class":4182},[4005,29142,29143],{"class":4174},"average",[4005,29145,4482],{"class":4182},[4005,29147,29148],{"class":4007,"line":4947},[4005,29149,4036],{"emptyLinePlaceholder":4035},[4005,29151,29152],{"class":4007,"line":4953},[4005,29153,29154],{"class":4190},"    \u002F\u002F Тільки індекси:\n",[4005,29156,29157,29159,29161,29163,29165,29168],{"class":4007,"line":4960},[4005,29158,5370],{"class":4174},[4005,29160,3769],{"class":4182},[4005,29162,5348],{"class":4302},[4005,29164,4611],{"class":4182},[4005,29166,29167],{"class":4330},"\"Номери студентів:\"",[4005,29169,4482],{"class":4182},[4005,29171,29172,29174,29176,29178,29180,29182],{"class":4007,"line":4973},[4005,29173,12138],{"class":4836},[4005,29175,6592],{"class":4174},[4005,29177,4314],{"class":4182},[4005,29179,12151],{"class":4836},[4005,29181,28992],{"class":4174},[4005,29183,5073],{"class":4182},[4005,29185,29186,29188,29190,29192,29194,29197,29199,29201,29203,29205,29207,29209],{"class":4007,"line":4985},[4005,29187,5343],{"class":4174},[4005,29189,3769],{"class":4182},[4005,29191,7945],{"class":4302},[4005,29193,4611],{"class":4182},[4005,29195,29196],{"class":4330},"\"  ",[4005,29198,7959],{"class":4174},[4005,29200,7968],{"class":4330},[4005,29202,3836],{"class":4182},[4005,29204,27826],{"class":4174},[4005,29206,14837],{"class":4182},[4005,29208,4393],{"class":4186},[4005,29210,4482],{"class":4182},[4005,29212,29213],{"class":4007,"line":7813},[4005,29214,5127],{"class":4182},[4005,29216,29217,29219,29221,29223],{"class":4007,"line":7819},[4005,29218,5370],{"class":4174},[4005,29220,3769],{"class":4182},[4005,29222,5348],{"class":4302},[4005,29224,5143],{"class":4182},[4005,29226,29227],{"class":4007,"line":7826},[4005,29228,4078],{"class":4182},[3908,29230,29231],{},[3871,29232,11778],{},[3984,29234,29237],{"className":29235,"code":29236,"language":3989},[3987],"Результати іспитів:\n  Студент #1: 85 балів\n  Студент #2: 92 балів\n  Студент #3: 78 балів\n  Студент #4: 95 балів\n  Студент #5: 88 балів\nСередній бал: 87.6\nНомери студентів:\n  1 2 3 4 5\n",[3753,29238,29236],{"__ignoreMap":3992},[3976,29240,29242],{"id":29241},"приклад-2-перебір-рядка-utf-8-руни","Приклад 2: Перебір рядка (UTF-8 руни)",[3908,29244,29245,29246,29248,29249,29252],{},"При переборі рядка ",[3753,29247,28640],{}," автоматично декодує UTF-8 і повертає ",[3871,29250,29251],{},"руни"," (символи):",[3984,29254,29256],{"className":4162,"code":29255,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    text := \"Go 🚀 Україна\"\n\n    \u002F\u002F byteIndex — позиція БАЙТА (не символу!)\n    \u002F\u002F runeValue — Unicode символ (rune)\n    for byteIndex, runeValue := range text {\n        fmt.Printf(\"Байт %2d: '%c' (U+%04X)\\n\", byteIndex, runeValue, runeValue)\n    }\n}\n",[3753,29257,29258,29264,29268,29274,29278,29286,29295,29299,29304,29309,29327,29370,29374],{"__ignoreMap":3992},[4005,29259,29260,29262],{"class":4007,"line":4008},[4005,29261,5739],{"class":4171},[4005,29263,5742],{"class":4178},[4005,29265,29266],{"class":4007,"line":4014},[4005,29267,4036],{"emptyLinePlaceholder":4035},[4005,29269,29270,29272],{"class":4007,"line":4020},[4005,29271,3917],{"class":4836},[4005,29273,7656],{"class":4330},[4005,29275,29276],{"class":4007,"line":4026},[4005,29277,4036],{"emptyLinePlaceholder":4035},[4005,29279,29280,29282,29284],{"class":4007,"line":4032},[4005,29281,4299],{"class":4171},[4005,29283,5764],{"class":4302},[4005,29285,4306],{"class":4182},[4005,29287,29288,29290,29292],{"class":4007,"line":4039},[4005,29289,11425],{"class":4174},[4005,29291,4314],{"class":4182},[4005,29293,29294],{"class":4330},"\"Go 🚀 Україна\"\n",[4005,29296,29297],{"class":4007,"line":4045},[4005,29298,4036],{"emptyLinePlaceholder":4035},[4005,29300,29301],{"class":4007,"line":4051},[4005,29302,29303],{"class":4190},"    \u002F\u002F byteIndex — позиція БАЙТА (не символу!)\n",[4005,29305,29306],{"class":4007,"line":4057},[4005,29307,29308],{"class":4190},"    \u002F\u002F runeValue — Unicode символ (rune)\n",[4005,29310,29311,29313,29315,29317,29319,29321,29323,29325],{"class":4007,"line":4063},[4005,29312,12138],{"class":4836},[4005,29314,12141],{"class":4174},[4005,29316,3836],{"class":4182},[4005,29318,12384],{"class":4174},[4005,29320,4314],{"class":4182},[4005,29322,12151],{"class":4836},[4005,29324,12354],{"class":4174},[4005,29326,5073],{"class":4182},[4005,29328,29329,29331,29333,29335,29337,29339,29342,29344,29346,29348,29350,29352,29354,29356,29358,29360,29362,29364,29366,29368],{"class":4007,"line":4069},[4005,29330,5343],{"class":4174},[4005,29332,3769],{"class":4182},[4005,29334,7945],{"class":4302},[4005,29336,4611],{"class":4182},[4005,29338,12169],{"class":4330},[4005,29340,29341],{"class":4174},"%2d",[4005,29343,12174],{"class":4330},[4005,29345,11607],{"class":4174},[4005,29347,12179],{"class":4330},[4005,29349,12182],{"class":4174},[4005,29351,5032],{"class":4330},[4005,29353,7965],{"class":7964},[4005,29355,7968],{"class":4330},[4005,29357,3836],{"class":4182},[4005,29359,12193],{"class":4174},[4005,29361,3836],{"class":4182},[4005,29363,12384],{"class":4174},[4005,29365,3836],{"class":4182},[4005,29367,12384],{"class":4174},[4005,29369,4482],{"class":4182},[4005,29371,29372],{"class":4007,"line":4075},[4005,29373,5127],{"class":4182},[4005,29375,29376],{"class":4007,"line":4081},[4005,29377,4078],{"class":4182},[3908,29379,29380],{},[3871,29381,29382],{},"Вівід:",[3984,29384,29387],{"className":29385,"code":29386,"language":3989},[3987],"Байт  0: 'G' (U+0047)\nБайт  1: 'o' (U+006F)\nБайт  2: ' ' (U+0020)\nБайт  3: '🚀' (U+1F680)  ← byteIndex стрибає на 3, бо емодзі = 4 байти\nБайт  7: ' ' (U+0020)\nБайт  8: 'У' (U+0423)   ← кирилиця = 2 байти\nБайт 10: 'к' (U+043A)\nБайт 12: 'р' (U+0440)\nБайт 14: 'а' (U+0430)\nБайт 16: 'ї' (U+0457)\nБайт 18: 'н' (U+043D)\nБайт 20: 'а' (U+0430)\n",[3753,29388,29386],{"__ignoreMap":3992},[4484,29390,29391,29394,29395,29398],{"icon":6509},[3871,29392,29393],{},"Зверніть увагу:"," індекс — це позиція ",[3871,29396,29397],{},"байта",", а не символу! Емодзі займає 4 байти, тому наступний індекс буде 3 + 4 = 7.",[3976,29400,29402],{"id":29401},"приклад-3-перебір-мапи-map","Приклад 3: Перебір мапи (map)",[3908,29404,29405,29406,29408],{},"Для мап ",[3753,29407,28640],{}," повертає ключ і значення:",[3984,29410,29412],{"className":4162,"code":29411,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    prices := map[string]float64{\n        \"Хліб\":   25.50,\n        \"Молоко\": 32.00,\n        \"Яйця\":   45.00,\n    }\n\n    fmt.Println(\"Прайс-лист:\")\n    for product, price := range prices {\n        fmt.Printf(\"  %-10s: %.2f грн\\n\", product, price)\n    }\n\n    \u002F\u002F Тільки ключі:\n    fmt.Println(\"\\nТовари:\")\n    for product := range prices {\n        fmt.Printf(\"  - %s\\n\", product)\n    }\n}\n",[3753,29413,29414,29420,29424,29430,29434,29442,29462,29476,29488,29500,29504,29508,29523,29543,29578,29582,29586,29591,29610,29624,29649,29653],{"__ignoreMap":3992},[4005,29415,29416,29418],{"class":4007,"line":4008},[4005,29417,5739],{"class":4171},[4005,29419,5742],{"class":4178},[4005,29421,29422],{"class":4007,"line":4014},[4005,29423,4036],{"emptyLinePlaceholder":4035},[4005,29425,29426,29428],{"class":4007,"line":4020},[4005,29427,3917],{"class":4836},[4005,29429,7656],{"class":4330},[4005,29431,29432],{"class":4007,"line":4026},[4005,29433,4036],{"emptyLinePlaceholder":4035},[4005,29435,29436,29438,29440],{"class":4007,"line":4032},[4005,29437,4299],{"class":4171},[4005,29439,5764],{"class":4302},[4005,29441,4306],{"class":4182},[4005,29443,29444,29447,29449,29451,29453,29455,29457,29459],{"class":4007,"line":4039},[4005,29445,29446],{"class":4174},"    prices",[4005,29448,4314],{"class":4182},[4005,29450,8793],{"class":4171},[4005,29452,11561],{"class":4182},[4005,29454,7004],{"class":4178},[4005,29456,28540],{"class":4182},[4005,29458,8437],{"class":4178},[4005,29460,29461],{"class":4182},"{\n",[4005,29463,29464,29467,29470,29473],{"class":4007,"line":4045},[4005,29465,29466],{"class":4330},"        \"Хліб\"",[4005,29468,29469],{"class":4182},":   ",[4005,29471,29472],{"class":4186},"25.50",[4005,29474,29475],{"class":4182},",\n",[4005,29477,29478,29481,29483,29486],{"class":4007,"line":4051},[4005,29479,29480],{"class":4330},"        \"Молоко\"",[4005,29482,11172],{"class":4182},[4005,29484,29485],{"class":4186},"32.00",[4005,29487,29475],{"class":4182},[4005,29489,29490,29493,29495,29498],{"class":4007,"line":4057},[4005,29491,29492],{"class":4330},"        \"Яйця\"",[4005,29494,29469],{"class":4182},[4005,29496,29497],{"class":4186},"45.00",[4005,29499,29475],{"class":4182},[4005,29501,29502],{"class":4007,"line":4063},[4005,29503,5127],{"class":4182},[4005,29505,29506],{"class":4007,"line":4069},[4005,29507,4036],{"emptyLinePlaceholder":4035},[4005,29509,29510,29512,29514,29516,29518,29521],{"class":4007,"line":4075},[4005,29511,5370],{"class":4174},[4005,29513,3769],{"class":4182},[4005,29515,5348],{"class":4302},[4005,29517,4611],{"class":4182},[4005,29519,29520],{"class":4330},"\"Прайс-лист:\"",[4005,29522,4482],{"class":4182},[4005,29524,29525,29527,29530,29532,29534,29536,29538,29541],{"class":4007,"line":4081},[4005,29526,12138],{"class":4836},[4005,29528,29529],{"class":4174}," product",[4005,29531,3836],{"class":4182},[4005,29533,17909],{"class":4174},[4005,29535,4314],{"class":4182},[4005,29537,12151],{"class":4836},[4005,29539,29540],{"class":4174}," prices",[4005,29542,5073],{"class":4182},[4005,29544,29545,29547,29549,29551,29553,29555,29558,29560,29562,29564,29566,29568,29570,29572,29574,29576],{"class":4007,"line":4086},[4005,29546,5343],{"class":4174},[4005,29548,3769],{"class":4182},[4005,29550,7945],{"class":4302},[4005,29552,4611],{"class":4182},[4005,29554,29196],{"class":4330},[4005,29556,29557],{"class":4174},"%-10s",[4005,29559,11172],{"class":4330},[4005,29561,10654],{"class":4174},[4005,29563,22239],{"class":4330},[4005,29565,7965],{"class":7964},[4005,29567,7968],{"class":4330},[4005,29569,3836],{"class":4182},[4005,29571,10087],{"class":4174},[4005,29573,3836],{"class":4182},[4005,29575,17909],{"class":4174},[4005,29577,4482],{"class":4182},[4005,29579,29580],{"class":4007,"line":4092},[4005,29581,5127],{"class":4182},[4005,29583,29584],{"class":4007,"line":4098},[4005,29585,4036],{"emptyLinePlaceholder":4035},[4005,29587,29588],{"class":4007,"line":4104},[4005,29589,29590],{"class":4190},"    \u002F\u002F Тільки ключі:\n",[4005,29592,29593,29595,29597,29599,29601,29603,29605,29608],{"class":4007,"line":4110},[4005,29594,5370],{"class":4174},[4005,29596,3769],{"class":4182},[4005,29598,5348],{"class":4302},[4005,29600,4611],{"class":4182},[4005,29602,7968],{"class":4330},[4005,29604,7965],{"class":7964},[4005,29606,29607],{"class":4330},"Товари:\"",[4005,29609,4482],{"class":4182},[4005,29611,29612,29614,29616,29618,29620,29622],{"class":4007,"line":4937},[4005,29613,12138],{"class":4836},[4005,29615,29529],{"class":4174},[4005,29617,4314],{"class":4182},[4005,29619,12151],{"class":4836},[4005,29621,29540],{"class":4174},[4005,29623,5073],{"class":4182},[4005,29625,29626,29628,29630,29632,29634,29637,29639,29641,29643,29645,29647],{"class":4007,"line":4942},[4005,29627,5343],{"class":4174},[4005,29629,3769],{"class":4182},[4005,29631,7945],{"class":4302},[4005,29633,4611],{"class":4182},[4005,29635,29636],{"class":4330},"\"  - ",[4005,29638,16775],{"class":4174},[4005,29640,7965],{"class":7964},[4005,29642,7968],{"class":4330},[4005,29644,3836],{"class":4182},[4005,29646,10087],{"class":4174},[4005,29648,4482],{"class":4182},[4005,29650,29651],{"class":4007,"line":4947},[4005,29652,5127],{"class":4182},[4005,29654,29655],{"class":4007,"line":4953},[4005,29656,4078],{"class":4182},[3908,29658,29659],{},[3871,29660,11778],{},[3984,29662,29665],{"className":29663,"code":29664,"language":3989},[3987],"Прайс-лист:\n  Хліб      : 25.50 грн\n  Молоко    : 32.00 грн\n  Яйця      : 45.00 грн\n\nТовари:\n  - Хліб\n  - Молоко\n  - Яйця\n",[3753,29666,29664],{"__ignoreMap":3992},[4484,29668,29670,29673,29674,29677],{"icon":29669},"i-lucide-shuffle",[3871,29671,29672],{},"Порядок елементів у мапі:"," Go ",[3871,29675,29676],{},"навмисно рандомізує"," порядок обходу мапи при кожному запуску! Ніколи не покладайтесь на порядок елементів.",[3976,29679,29681],{"id":29680},"приклад-4-модифікація-елементів-через-індекс","Приклад 4: Модифікація елементів через індекс",[3908,29683,29684],{},"Щоб змінити елементи колекції, використовуйте індекс для доступу до оригіналу:",[3984,29686,29688],{"className":4162,"code":29687,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    numbers := []int{1, 2, 3, 4, 5}\n    \n    \u002F\u002F ❌ ПОМИЛКА: зміна копії\n    for _, num := range numbers {\n        num = num * 2  \u002F\u002F Це не змінить numbers!\n    }\n    fmt.Println(\"Після помилкової зміни:\", numbers)  \u002F\u002F [1, 2, 3, 4, 5]\n\n    \u002F\u002F ✅ ПРАВИЛЬНО: використовуємо індекс\n    for i := range numbers {\n        numbers[i] = numbers[i] * 2  \u002F\u002F Змінюємо оригінал\n    }\n    fmt.Println(\"Після правильної зміни:\", numbers)  \u002F\u002F [2, 4, 6, 8, 10]\n\n    \u002F\u002F ✅ АЛЬТЕРНАТИВА: використовуємо індекс із for-range\n    for i, num := range numbers {\n        numbers[i] = num * 2  \u002F\u002F Тепер [4, 8, 12, 16, 20]\n    }\n    fmt.Println(\"Після подвійної зміни:\", numbers)\n}\n",[3753,29689,29690,29696,29700,29706,29710,29718,29749,29753,29758,29777,29793,29797,29820,29824,29829,29843,29868,29872,29894,29898,29903,29921,29940,29944,29963],{"__ignoreMap":3992},[4005,29691,29692,29694],{"class":4007,"line":4008},[4005,29693,5739],{"class":4171},[4005,29695,5742],{"class":4178},[4005,29697,29698],{"class":4007,"line":4014},[4005,29699,4036],{"emptyLinePlaceholder":4035},[4005,29701,29702,29704],{"class":4007,"line":4020},[4005,29703,3917],{"class":4836},[4005,29705,7656],{"class":4330},[4005,29707,29708],{"class":4007,"line":4026},[4005,29709,4036],{"emptyLinePlaceholder":4035},[4005,29711,29712,29714,29716],{"class":4007,"line":4032},[4005,29713,4299],{"class":4171},[4005,29715,5764],{"class":4302},[4005,29717,4306],{"class":4182},[4005,29719,29720,29723,29725,29727,29729,29731,29733,29735,29737,29739,29741,29743,29745,29747],{"class":4007,"line":4039},[4005,29721,29722],{"class":4174},"    numbers",[4005,29724,11583],{"class":4182},[4005,29726,4158],{"class":4178},[4005,29728,16268],{"class":4182},[4005,29730,4393],{"class":4186},[4005,29732,3836],{"class":4182},[4005,29734,4398],{"class":4186},[4005,29736,3836],{"class":4182},[4005,29738,6286],{"class":4186},[4005,29740,3836],{"class":4182},[4005,29742,8245],{"class":4186},[4005,29744,3836],{"class":4182},[4005,29746,5869],{"class":4186},[4005,29748,4078],{"class":4182},[4005,29750,29751],{"class":4007,"line":4045},[4005,29752,5214],{"class":4182},[4005,29754,29755],{"class":4007,"line":4051},[4005,29756,29757],{"class":4190},"    \u002F\u002F ❌ ПОМИЛКА: зміна копії\n",[4005,29759,29760,29762,29764,29766,29768,29770,29772,29775],{"class":4007,"line":4057},[4005,29761,12138],{"class":4836},[4005,29763,17642],{"class":4174},[4005,29765,3836],{"class":4182},[4005,29767,21103],{"class":4174},[4005,29769,4314],{"class":4182},[4005,29771,12151],{"class":4836},[4005,29773,29774],{"class":4174}," numbers",[4005,29776,5073],{"class":4182},[4005,29778,29779,29782,29784,29786,29788,29790],{"class":4007,"line":4063},[4005,29780,29781],{"class":4174},"        num",[4005,29783,4183],{"class":4182},[4005,29785,21103],{"class":4174},[4005,29787,6735],{"class":4182},[4005,29789,4398],{"class":4186},[4005,29791,29792],{"class":4190},"  \u002F\u002F Це не змінить numbers!\n",[4005,29794,29795],{"class":4007,"line":4069},[4005,29796,5127],{"class":4182},[4005,29798,29799,29801,29803,29805,29807,29810,29812,29815,29817],{"class":4007,"line":4075},[4005,29800,5370],{"class":4174},[4005,29802,3769],{"class":4182},[4005,29804,5348],{"class":4302},[4005,29806,4611],{"class":4182},[4005,29808,29809],{"class":4330},"\"Після помилкової зміни:\"",[4005,29811,3836],{"class":4182},[4005,29813,29814],{"class":4174},"numbers",[4005,29816,5196],{"class":4182},[4005,29818,29819],{"class":4190},"\u002F\u002F [1, 2, 3, 4, 5]\n",[4005,29821,29822],{"class":4007,"line":4081},[4005,29823,4036],{"emptyLinePlaceholder":4035},[4005,29825,29826],{"class":4007,"line":4086},[4005,29827,29828],{"class":4190},"    \u002F\u002F ✅ ПРАВИЛЬНО: використовуємо індекс\n",[4005,29830,29831,29833,29835,29837,29839,29841],{"class":4007,"line":4092},[4005,29832,12138],{"class":4836},[4005,29834,6592],{"class":4174},[4005,29836,4314],{"class":4182},[4005,29838,12151],{"class":4836},[4005,29840,29774],{"class":4174},[4005,29842,5073],{"class":4182},[4005,29844,29845,29848,29850,29852,29854,29856,29858,29860,29863,29865],{"class":4007,"line":4098},[4005,29846,29847],{"class":4174},"        numbers",[4005,29849,11561],{"class":4182},[4005,29851,27826],{"class":4174},[4005,29853,12081],{"class":4182},[4005,29855,29814],{"class":4174},[4005,29857,11561],{"class":4182},[4005,29859,27826],{"class":4174},[4005,29861,29862],{"class":4182},"] * ",[4005,29864,4398],{"class":4186},[4005,29866,29867],{"class":4190},"  \u002F\u002F Змінюємо оригінал\n",[4005,29869,29870],{"class":4007,"line":4104},[4005,29871,5127],{"class":4182},[4005,29873,29874,29876,29878,29880,29882,29885,29887,29889,29891],{"class":4007,"line":4110},[4005,29875,5370],{"class":4174},[4005,29877,3769],{"class":4182},[4005,29879,5348],{"class":4302},[4005,29881,4611],{"class":4182},[4005,29883,29884],{"class":4330},"\"Після правильної зміни:\"",[4005,29886,3836],{"class":4182},[4005,29888,29814],{"class":4174},[4005,29890,5196],{"class":4182},[4005,29892,29893],{"class":4190},"\u002F\u002F [2, 4, 6, 8, 10]\n",[4005,29895,29896],{"class":4007,"line":4937},[4005,29897,4036],{"emptyLinePlaceholder":4035},[4005,29899,29900],{"class":4007,"line":4942},[4005,29901,29902],{"class":4190},"    \u002F\u002F ✅ АЛЬТЕРНАТИВА: використовуємо індекс із for-range\n",[4005,29904,29905,29907,29909,29911,29913,29915,29917,29919],{"class":4007,"line":4947},[4005,29906,12138],{"class":4836},[4005,29908,6592],{"class":4174},[4005,29910,3836],{"class":4182},[4005,29912,21103],{"class":4174},[4005,29914,4314],{"class":4182},[4005,29916,12151],{"class":4836},[4005,29918,29774],{"class":4174},[4005,29920,5073],{"class":4182},[4005,29922,29923,29925,29927,29929,29931,29933,29935,29937],{"class":4007,"line":4953},[4005,29924,29847],{"class":4174},[4005,29926,11561],{"class":4182},[4005,29928,27826],{"class":4174},[4005,29930,12081],{"class":4182},[4005,29932,21103],{"class":4174},[4005,29934,6735],{"class":4182},[4005,29936,4398],{"class":4186},[4005,29938,29939],{"class":4190},"  \u002F\u002F Тепер [4, 8, 12, 16, 20]\n",[4005,29941,29942],{"class":4007,"line":4960},[4005,29943,5127],{"class":4182},[4005,29945,29946,29948,29950,29952,29954,29957,29959,29961],{"class":4007,"line":4973},[4005,29947,5370],{"class":4174},[4005,29949,3769],{"class":4182},[4005,29951,5348],{"class":4302},[4005,29953,4611],{"class":4182},[4005,29955,29956],{"class":4330},"\"Після подвійної зміни:\"",[4005,29958,3836],{"class":4182},[4005,29960,29814],{"class":4174},[4005,29962,4482],{"class":4182},[4005,29964,29965],{"class":4007,"line":4985},[4005,29966,4078],{"class":4182},[3908,29968,29969],{},[3871,29970,11778],{},[3984,29972,29975],{"className":29973,"code":29974,"language":3989},[3987],"Після помилкової зміни: [1 2 3 4 5]\nПісля правильної зміни: [2 4 6 8 10]\nПісля подвійної зміни: [4 8 12 16 20]\n",[3753,29976,29974],{"__ignoreMap":3992},[3976,29978,29980],{"id":29979},"приклад-5-виконання-n-разів","Приклад 5: Виконання N разів",[3908,29982,29983],{},"Коли потрібно виконати щось N разів, але не потрібні індекс чи значення:",[3984,29985,29987],{"className":4162,"code":29986,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    servers := [3]string{\"node-1\", \"node-2\", \"node-3\"}\n\n    \u002F\u002F Просто виконати 3 рази:\n    count := 0\n    for range servers {\n        count++\n        fmt.Printf(\"Пінг #%d...\\n\", count)\n    }\n}\n",[3753,29988,29989,29995,29999,30005,30009,30017,30048,30052,30057,30065,30077,30084,30112,30116],{"__ignoreMap":3992},[4005,29990,29991,29993],{"class":4007,"line":4008},[4005,29992,5739],{"class":4171},[4005,29994,5742],{"class":4178},[4005,29996,29997],{"class":4007,"line":4014},[4005,29998,4036],{"emptyLinePlaceholder":4035},[4005,30000,30001,30003],{"class":4007,"line":4020},[4005,30002,3917],{"class":4836},[4005,30004,7656],{"class":4330},[4005,30006,30007],{"class":4007,"line":4026},[4005,30008,4036],{"emptyLinePlaceholder":4035},[4005,30010,30011,30013,30015],{"class":4007,"line":4032},[4005,30012,4299],{"class":4171},[4005,30014,5764],{"class":4302},[4005,30016,4306],{"class":4182},[4005,30018,30019,30022,30025,30027,30029,30031,30033,30036,30038,30041,30043,30046],{"class":4007,"line":4039},[4005,30020,30021],{"class":4174},"    servers",[4005,30023,30024],{"class":4182}," := [",[4005,30026,6286],{"class":4186},[4005,30028,28540],{"class":4182},[4005,30030,7004],{"class":4178},[4005,30032,16268],{"class":4182},[4005,30034,30035],{"class":4330},"\"node-1\"",[4005,30037,3836],{"class":4182},[4005,30039,30040],{"class":4330},"\"node-2\"",[4005,30042,3836],{"class":4182},[4005,30044,30045],{"class":4330},"\"node-3\"",[4005,30047,4078],{"class":4182},[4005,30049,30050],{"class":4007,"line":4045},[4005,30051,4036],{"emptyLinePlaceholder":4035},[4005,30053,30054],{"class":4007,"line":4051},[4005,30055,30056],{"class":4190},"    \u002F\u002F Просто виконати 3 рази:\n",[4005,30058,30059,30061,30063],{"class":4007,"line":4057},[4005,30060,14072],{"class":4174},[4005,30062,4314],{"class":4182},[4005,30064,8013],{"class":4186},[4005,30066,30067,30069,30072,30075],{"class":4007,"line":4063},[4005,30068,12138],{"class":4836},[4005,30070,30071],{"class":4836}," range",[4005,30073,30074],{"class":4174}," servers",[4005,30076,5073],{"class":4182},[4005,30078,30079,30082],{"class":4007,"line":4069},[4005,30080,30081],{"class":4174},"        count",[4005,30083,28148],{"class":4182},[4005,30085,30086,30088,30090,30092,30094,30097,30099,30102,30104,30106,30108,30110],{"class":4007,"line":4075},[4005,30087,5343],{"class":4174},[4005,30089,3769],{"class":4182},[4005,30091,7945],{"class":4302},[4005,30093,4611],{"class":4182},[4005,30095,30096],{"class":4330},"\"Пінг #",[4005,30098,7959],{"class":4174},[4005,30100,30101],{"class":4330},"...",[4005,30103,7965],{"class":7964},[4005,30105,7968],{"class":4330},[4005,30107,3836],{"class":4182},[4005,30109,7189],{"class":4174},[4005,30111,4482],{"class":4182},[4005,30113,30114],{"class":4007,"line":4081},[4005,30115,5127],{"class":4182},[4005,30117,30118],{"class":4007,"line":4086},[4005,30119,4078],{"class":4182},[3908,30121,30122],{},[3871,30123,11778],{},[3984,30125,30128],{"className":30126,"code":30127,"language":3989},[3987],"Пінг #1...\nПінг #2...\nПінг #3...\n",[3753,30129,30127],{"__ignoreMap":3992},[3976,30131,30133],{"id":30132},"порівняння-з-іншими-мовами","Порівняння з іншими мовами",[5991,30135,30136,30148],{},[5994,30137,30138],{},[5997,30139,30140,30143],{},[6000,30141,30142],{},"Мова",[6000,30144,30145,30146],{},"Еквівалент ",[3753,30147,28640],{},[6010,30149,30150,30161,30172,30183,30195],{},[5997,30151,30152,30156],{},[6015,30153,30154],{},[3871,30155,12539],{},[6015,30157,30158],{},[3753,30159,30160],{},"for i, v := range arr",[5997,30162,30163,30167],{},[6015,30164,30165],{},[3871,30166,2548],{},[6015,30168,30169],{},[3753,30170,30171],{},"for i, v in enumerate(arr):",[5997,30173,30174,30178],{},[6015,30175,30176],{},[3871,30177,1913],{},[6015,30179,30180],{},[3753,30181,30182],{},"arr.forEach((v, i) => ...)",[5997,30184,30185,30189],{},[6015,30186,30187],{},[3871,30188,2367],{},[6015,30190,30191,30194],{},[3753,30192,30193],{},"for (Type v : arr)"," (без індексу)",[5997,30196,30197,30201],{},[6015,30198,30199],{},[3871,30200,5],{},[6015,30202,30203,30194],{},[3753,30204,30205],{},"foreach (var v in arr)",[3976,30207,30209],{"id":30208},"шпаргалка-коли-що-використовувати","Шпаргалка: коли що використовувати",[3984,30211,30213],{"className":4162,"code":30212,"language":4164,"meta":3992,"style":3992},"nums := []int{10, 20, 30}\n\n\u002F\u002F Потрібні індекс ТА значення:\nfor i, v := range nums { ... }\n\n\u002F\u002F Потрібне тільки значення:\nfor _, v := range nums { ... }\n\n\u002F\u002F Потрібен тільки індекс:\nfor i := range nums { ... }\n\n\u002F\u002F Просто N разів виконати:\nfor range nums { ... }\n\n\u002F\u002F Модифікувати елементи:\nfor i := range nums {\n    nums[i] = nums[i] * 2\n}\n",[3753,30214,30215,30237,30241,30246,30265,30269,30274,30292,30296,30301,30315,30319,30324,30334,30338,30343,30357,30378],{"__ignoreMap":3992},[4005,30216,30217,30219,30221,30223,30225,30227,30229,30231,30233,30235],{"class":4007,"line":4008},[4005,30218,28804],{"class":4174},[4005,30220,11583],{"class":4182},[4005,30222,4158],{"class":4178},[4005,30224,16268],{"class":4182},[4005,30226,4631],{"class":4186},[4005,30228,3836],{"class":4182},[4005,30230,5335],{"class":4186},[4005,30232,3836],{"class":4182},[4005,30234,4276],{"class":4186},[4005,30236,4078],{"class":4182},[4005,30238,30239],{"class":4007,"line":4014},[4005,30240,4036],{"emptyLinePlaceholder":4035},[4005,30242,30243],{"class":4007,"line":4020},[4005,30244,30245],{"class":4190},"\u002F\u002F Потрібні індекс ТА значення:\n",[4005,30247,30248,30250,30252,30254,30256,30258,30260,30262],{"class":4007,"line":4026},[4005,30249,3808],{"class":4836},[4005,30251,6592],{"class":4174},[4005,30253,3836],{"class":4182},[4005,30255,26507],{"class":4174},[4005,30257,4314],{"class":4182},[4005,30259,12151],{"class":4836},[4005,30261,28839],{"class":4174},[4005,30263,30264],{"class":4182}," { ... }\n",[4005,30266,30267],{"class":4007,"line":4032},[4005,30268,4036],{"emptyLinePlaceholder":4035},[4005,30270,30271],{"class":4007,"line":4039},[4005,30272,30273],{"class":4190},"\u002F\u002F Потрібне тільки значення:\n",[4005,30275,30276,30278,30280,30282,30284,30286,30288,30290],{"class":4007,"line":4045},[4005,30277,3808],{"class":4836},[4005,30279,17642],{"class":4174},[4005,30281,3836],{"class":4182},[4005,30283,26507],{"class":4174},[4005,30285,4314],{"class":4182},[4005,30287,12151],{"class":4836},[4005,30289,28839],{"class":4174},[4005,30291,30264],{"class":4182},[4005,30293,30294],{"class":4007,"line":4051},[4005,30295,4036],{"emptyLinePlaceholder":4035},[4005,30297,30298],{"class":4007,"line":4057},[4005,30299,30300],{"class":4190},"\u002F\u002F Потрібен тільки індекс:\n",[4005,30302,30303,30305,30307,30309,30311,30313],{"class":4007,"line":4063},[4005,30304,3808],{"class":4836},[4005,30306,6592],{"class":4174},[4005,30308,4314],{"class":4182},[4005,30310,12151],{"class":4836},[4005,30312,28839],{"class":4174},[4005,30314,30264],{"class":4182},[4005,30316,30317],{"class":4007,"line":4069},[4005,30318,4036],{"emptyLinePlaceholder":4035},[4005,30320,30321],{"class":4007,"line":4075},[4005,30322,30323],{"class":4190},"\u002F\u002F Просто N разів виконати:\n",[4005,30325,30326,30328,30330,30332],{"class":4007,"line":4081},[4005,30327,3808],{"class":4836},[4005,30329,30071],{"class":4836},[4005,30331,28839],{"class":4174},[4005,30333,30264],{"class":4182},[4005,30335,30336],{"class":4007,"line":4086},[4005,30337,4036],{"emptyLinePlaceholder":4035},[4005,30339,30340],{"class":4007,"line":4092},[4005,30341,30342],{"class":4190},"\u002F\u002F Модифікувати елементи:\n",[4005,30344,30345,30347,30349,30351,30353,30355],{"class":4007,"line":4098},[4005,30346,3808],{"class":4836},[4005,30348,6592],{"class":4174},[4005,30350,4314],{"class":4182},[4005,30352,12151],{"class":4836},[4005,30354,28839],{"class":4174},[4005,30356,5073],{"class":4182},[4005,30358,30359,30362,30364,30366,30368,30370,30372,30374,30376],{"class":4007,"line":4104},[4005,30360,30361],{"class":4174},"    nums",[4005,30363,11561],{"class":4182},[4005,30365,27826],{"class":4174},[4005,30367,12081],{"class":4182},[4005,30369,28804],{"class":4174},[4005,30371,11561],{"class":4182},[4005,30373,27826],{"class":4174},[4005,30375,29862],{"class":4182},[4005,30377,24389],{"class":4186},[4005,30379,30380],{"class":4007,"line":4110},[4005,30381,4078],{"class":4182},[3900,30383],{},[3903,30385,30387,30388,5032],{"id":30386},"статичні-фіксовані-масиви-nt","Статичні фіксовані масиви (",[3753,30389,8600],{},[3908,30391,30392],{},"У системному програмуванні та розробці мережевих сервісів масиви є фундаментальною структурою для збереження однотипних даних у неперервній ділянці пам'яті: фіксованих буферів сокетів, криптографічних ключів (наприклад, 32-байтний хеш SHA-256) або IPv4-адрес.",[3976,30394,30396],{"id":30395},"синтаксис-оголошення-масиву","Синтаксис оголошення масиву",[3908,30398,30399],{},[3871,30400,28654],{},[3984,30402,30404],{"className":4162,"code":30403,"language":4164,"meta":3992,"style":3992},"var назва [розмір]тип\n",[3753,30405,30406],{"__ignoreMap":3992},[4005,30407,30408,30410,30413,30415,30418,30420],{"class":4007,"line":4008},[4005,30409,3963],{"class":4171},[4005,30411,30412],{"class":4174}," назва",[4005,30414,27738],{"class":4182},[4005,30416,30417],{"class":4178},"розмір",[4005,30419,28540],{"class":4182},[4005,30421,30422],{"class":4178},"тип\n",[3908,30424,30425],{},[3871,30426,30427],{},"Компоненти:",[3746,30429,30430,30436],{},[3749,30431,30432,30435],{},[3753,30433,30434],{},"[розмір]"," — фіксована кількість елементів (константа, відома на етапі компіляції)",[3749,30437,30438,30441],{},[3753,30439,30440],{},"тип"," — тип даних елементів масиву (всі елементи мають однаковий тип)",[3908,30443,30444],{},[3871,30445,30446],{},"Базові приклади:",[3984,30448,30450],{"className":4162,"code":30449,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Оголошення масивів:\nvar numbers [5]int           \u002F\u002F Масив з 5 цілих чисел\nvar names [3]string          \u002F\u002F Масив з 3 рядків\nvar prices [10]float64       \u002F\u002F Масив з 10 дійсних чисел\nvar flags [8]bool            \u002F\u002F Масив з 8 булевих значень\n\n\u002F\u002F Ініціалізація при оголошенні:\nvar ages = [4]int{25, 30, 35, 40}              \u002F\u002F Явна довжина\nvar colors = [...]string{\"red\", \"green\", \"blue\"} \u002F\u002F Автовизначення довжини (3 елементи)\nvar ipAddr = [4]byte{127, 0, 0, 1}             \u002F\u002F IPv4 адреса\n\n\u002F\u002F Короткий синтаксис (всередині функцій):\nscores := [5]int{100, 95, 87, 92, 88}\nmatrix := [2][3]int{{1, 2, 3}, {4, 5, 6}}      \u002F\u002F Двовимірний масив\n",[3753,30451,30452,30457,30474,30492,30509,30527,30531,30536,30576,30608,30645,30649,30654,30689],{"__ignoreMap":3992},[4005,30453,30454],{"class":4007,"line":4008},[4005,30455,30456],{"class":4190},"\u002F\u002F Оголошення масивів:\n",[4005,30458,30459,30461,30463,30465,30467,30469,30471],{"class":4007,"line":4014},[4005,30460,3963],{"class":4171},[4005,30462,29774],{"class":4174},[4005,30464,27738],{"class":4182},[4005,30466,5869],{"class":4186},[4005,30468,28540],{"class":4182},[4005,30470,4158],{"class":4178},[4005,30472,30473],{"class":4190},"           \u002F\u002F Масив з 5 цілих чисел\n",[4005,30475,30476,30478,30481,30483,30485,30487,30489],{"class":4007,"line":4020},[4005,30477,3963],{"class":4171},[4005,30479,30480],{"class":4174}," names",[4005,30482,27738],{"class":4182},[4005,30484,6286],{"class":4186},[4005,30486,28540],{"class":4182},[4005,30488,7004],{"class":4178},[4005,30490,30491],{"class":4190},"          \u002F\u002F Масив з 3 рядків\n",[4005,30493,30494,30496,30498,30500,30502,30504,30506],{"class":4007,"line":4026},[4005,30495,3963],{"class":4171},[4005,30497,29540],{"class":4174},[4005,30499,27738],{"class":4182},[4005,30501,4631],{"class":4186},[4005,30503,28540],{"class":4182},[4005,30505,8437],{"class":4178},[4005,30507,30508],{"class":4190},"       \u002F\u002F Масив з 10 дійсних чисел\n",[4005,30510,30511,30513,30516,30518,30520,30522,30524],{"class":4007,"line":4032},[4005,30512,3963],{"class":4171},[4005,30514,30515],{"class":4174}," flags",[4005,30517,27738],{"class":4182},[4005,30519,8264],{"class":4186},[4005,30521,28540],{"class":4182},[4005,30523,8505],{"class":4178},[4005,30525,30526],{"class":4190},"            \u002F\u002F Масив з 8 булевих значень\n",[4005,30528,30529],{"class":4007,"line":4039},[4005,30530,4036],{"emptyLinePlaceholder":4035},[4005,30532,30533],{"class":4007,"line":4045},[4005,30534,30535],{"class":4190},"\u002F\u002F Ініціалізація при оголошенні:\n",[4005,30537,30538,30540,30543,30546,30548,30550,30552,30554,30556,30558,30560,30562,30565,30567,30570,30573],{"class":4007,"line":4051},[4005,30539,3963],{"class":4171},[4005,30541,30542],{"class":4174}," ages",[4005,30544,30545],{"class":4182}," = [",[4005,30547,8245],{"class":4186},[4005,30549,28540],{"class":4182},[4005,30551,4158],{"class":4178},[4005,30553,16268],{"class":4182},[4005,30555,20817],{"class":4186},[4005,30557,3836],{"class":4182},[4005,30559,4276],{"class":4186},[4005,30561,3836],{"class":4182},[4005,30563,30564],{"class":4186},"35",[4005,30566,3836],{"class":4182},[4005,30568,30569],{"class":4186},"40",[4005,30571,30572],{"class":4182},"}              ",[4005,30574,30575],{"class":4190},"\u002F\u002F Явна довжина\n",[4005,30577,30578,30580,30583,30586,30588,30590,30593,30595,30598,30600,30603,30605],{"class":4007,"line":4057},[4005,30579,3963],{"class":4171},[4005,30581,30582],{"class":4174}," colors",[4005,30584,30585],{"class":4182}," = [...]",[4005,30587,7004],{"class":4178},[4005,30589,16268],{"class":4182},[4005,30591,30592],{"class":4330},"\"red\"",[4005,30594,3836],{"class":4182},[4005,30596,30597],{"class":4330},"\"green\"",[4005,30599,3836],{"class":4182},[4005,30601,30602],{"class":4330},"\"blue\"",[4005,30604,25516],{"class":4182},[4005,30606,30607],{"class":4190},"\u002F\u002F Автовизначення довжини (3 елементи)\n",[4005,30609,30610,30612,30615,30617,30619,30621,30623,30625,30627,30629,30631,30633,30635,30637,30639,30642],{"class":4007,"line":4063},[4005,30611,3963],{"class":4171},[4005,30613,30614],{"class":4174}," ipAddr",[4005,30616,30545],{"class":4182},[4005,30618,8245],{"class":4186},[4005,30620,28540],{"class":4182},[4005,30622,5162],{"class":4178},[4005,30624,16268],{"class":4182},[4005,30626,19957],{"class":4186},[4005,30628,3836],{"class":4182},[4005,30630,4200],{"class":4186},[4005,30632,3836],{"class":4182},[4005,30634,4200],{"class":4186},[4005,30636,3836],{"class":4182},[4005,30638,4393],{"class":4186},[4005,30640,30641],{"class":4182},"}             ",[4005,30643,30644],{"class":4190},"\u002F\u002F IPv4 адреса\n",[4005,30646,30647],{"class":4007,"line":4069},[4005,30648,4036],{"emptyLinePlaceholder":4035},[4005,30650,30651],{"class":4007,"line":4075},[4005,30652,30653],{"class":4190},"\u002F\u002F Короткий синтаксис (всередині функцій):\n",[4005,30655,30656,30658,30660,30662,30664,30666,30668,30670,30672,30674,30676,30679,30681,30683,30685,30687],{"class":4007,"line":4081},[4005,30657,29116],{"class":4174},[4005,30659,30024],{"class":4182},[4005,30661,5869],{"class":4186},[4005,30663,28540],{"class":4182},[4005,30665,4158],{"class":4178},[4005,30667,16268],{"class":4182},[4005,30669,6478],{"class":4186},[4005,30671,3836],{"class":4182},[4005,30673,28944],{"class":4186},[4005,30675,3836],{"class":4182},[4005,30677,30678],{"class":4186},"87",[4005,30680,3836],{"class":4182},[4005,30682,28934],{"class":4186},[4005,30684,3836],{"class":4182},[4005,30686,28949],{"class":4186},[4005,30688,4078],{"class":4182},[4005,30690,30691,30694,30696,30698,30701,30703,30705,30707,30710,30712,30714,30716,30718,30720,30723,30725,30727,30729,30731,30733,30736],{"class":4007,"line":4086},[4005,30692,30693],{"class":4174},"matrix",[4005,30695,30024],{"class":4182},[4005,30697,4398],{"class":4186},[4005,30699,30700],{"class":4182},"][",[4005,30702,6286],{"class":4186},[4005,30704,28540],{"class":4182},[4005,30706,4158],{"class":4178},[4005,30708,30709],{"class":4182},"{{",[4005,30711,4393],{"class":4186},[4005,30713,3836],{"class":4182},[4005,30715,4398],{"class":4186},[4005,30717,3836],{"class":4182},[4005,30719,6286],{"class":4186},[4005,30721,30722],{"class":4182},"}, {",[4005,30724,8245],{"class":4186},[4005,30726,3836],{"class":4182},[4005,30728,5869],{"class":4186},[4005,30730,3836],{"class":4182},[4005,30732,26030],{"class":4186},[4005,30734,30735],{"class":4182},"}}      ",[4005,30737,30738],{"class":4190},"\u002F\u002F Двовимірний масив\n",[4484,30740,30741,30746,30781],{"icon":4750},[3908,30742,30743],{},[3871,30744,30745],{},"Ключові правила:",[4781,30747,30748,30754,30766,30772],{},[3749,30749,30750,30753],{},[3871,30751,30752],{},"Розмір фіксований:"," Після створення масиву змінити його розмір неможливо",[3749,30755,30756,3880,30759,6203,30762,30765],{},[3871,30757,30758],{},"Розмір — частина типу:",[3753,30760,30761],{},"[3]int",[3753,30763,30764],{},"[5]int"," — це різні типи!",[3749,30767,30768,30771],{},[3871,30769,30770],{},"Zero values:"," Неініціалізовані елементи автоматично отримують нульові значення",[3749,30773,30774,3880,30777,30780],{},[3871,30775,30776],{},"Автовизначення:",[3753,30778,30779],{},"[...]"," дозволяє компілятору підрахувати кількість елементів",[3984,30782,30784],{"className":4162,"code":30783,"language":4164,"meta":3992,"style":3992},"var arr1 [3]int        \u002F\u002F [0, 0, 0] — автоматична ініціалізація нулями\narr2 := [...]int{1, 2} \u002F\u002F [1, 2] — компілятор визначає довжину як 2\n",[3753,30785,30786,30804],{"__ignoreMap":3992},[4005,30787,30788,30790,30793,30795,30797,30799,30801],{"class":4007,"line":4008},[4005,30789,3963],{"class":4171},[4005,30791,30792],{"class":4174}," arr1",[4005,30794,27738],{"class":4182},[4005,30796,6286],{"class":4186},[4005,30798,28540],{"class":4182},[4005,30800,4158],{"class":4178},[4005,30802,30803],{"class":4190},"        \u002F\u002F [0, 0, 0] — автоматична ініціалізація нулями\n",[4005,30805,30806,30809,30812,30814,30816,30818,30820,30822,30824],{"class":4007,"line":4014},[4005,30807,30808],{"class":4174},"arr2",[4005,30810,30811],{"class":4182}," := [...]",[4005,30813,4158],{"class":4178},[4005,30815,16268],{"class":4182},[4005,30817,4393],{"class":4186},[4005,30819,3836],{"class":4182},[4005,30821,4398],{"class":4186},[4005,30823,25516],{"class":4182},[4005,30825,30826],{"class":4190},"\u002F\u002F [1, 2] — компілятор визначає довжину як 2\n",[3976,30828,30830],{"id":30829},"фізична-організація-масиву-в-памяті","Фізична організація масиву в пам'яті",[3908,30832,30833,30836],{},[3871,30834,30835],{},"Масив у Go"," — це суміжний монолітний блок оперативної пам'яті фіксованої довжини, що складається з елементів одного типу.",[3908,30838,30839,30840,30843,30844,30847],{},"Головна особливість масивів Go — ",[3871,30841,30842],{},"повна відсутність прихованих накладних витрат",": у пам'яті немає жодних додаткових покажчиків, метаданих чи посилань на об'єкти (як це відбувається у Java чи Python). Масив ",[3753,30845,30846],{},"[4]byte"," фізично займає рівно 4 байти в пам'яті:",[3994,30849,30851],{"alt":30850},"Фізичне розміщення масиву [4]byte в пам'яті",[3984,30852,30854],{"className":3999,"code":30853,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 12\n\npackage \"Масив var ip [4]byte = [4]byte{127, 0, 0, 1} (Рівно 4 байти в RAM)\" #F8FAFC {\n    rectangle \"Індекс [0]\\n• Байт 0\\n• Значення: 127\\n• Адреса: 0x1000\" as B0 #DBEAFE\n    rectangle \"Індекс [1]\\n• Байт 1\\n• Значення: 0\\n• Адреса: 0x1001\" as B1 #DBEAFE\n    rectangle \"Індекс [2]\\n• Байт 2\\n• Значення: 0\\n• Адреса: 0x1002\" as B2 #DBEAFE\n    rectangle \"Індекс [3]\\n• Байт 3\\n• Значення: 1\\n• Адреса: 0x1003\" as B3 #DBEAFE\n\n    B0 -right-> B1 : Суміжні комірки RAM\n    B1 -right-> B2\n    B2 -right-> B3\n}\n@enduml\n",[3753,30855,30856,30860,30864,30868,30873,30877,30882,30887,30892,30897,30902,30906,30911,30916,30921,30925],{"__ignoreMap":3992},[4005,30857,30858],{"class":4007,"line":4008},[4005,30859,4011],{},[4005,30861,30862],{"class":4007,"line":4014},[4005,30863,4017],{},[4005,30865,30866],{"class":4007,"line":4020},[4005,30867,4023],{},[4005,30869,30870],{"class":4007,"line":4026},[4005,30871,30872],{},"skinparam defaultFontSize 12\n",[4005,30874,30875],{"class":4007,"line":4032},[4005,30876,4036],{"emptyLinePlaceholder":4035},[4005,30878,30879],{"class":4007,"line":4039},[4005,30880,30881],{},"package \"Масив var ip [4]byte = [4]byte{127, 0, 0, 1} (Рівно 4 байти в RAM)\" #F8FAFC {\n",[4005,30883,30884],{"class":4007,"line":4045},[4005,30885,30886],{},"    rectangle \"Індекс [0]\\n• Байт 0\\n• Значення: 127\\n• Адреса: 0x1000\" as B0 #DBEAFE\n",[4005,30888,30889],{"class":4007,"line":4051},[4005,30890,30891],{},"    rectangle \"Індекс [1]\\n• Байт 1\\n• Значення: 0\\n• Адреса: 0x1001\" as B1 #DBEAFE\n",[4005,30893,30894],{"class":4007,"line":4057},[4005,30895,30896],{},"    rectangle \"Індекс [2]\\n• Байт 2\\n• Значення: 0\\n• Адреса: 0x1002\" as B2 #DBEAFE\n",[4005,30898,30899],{"class":4007,"line":4063},[4005,30900,30901],{},"    rectangle \"Індекс [3]\\n• Байт 3\\n• Значення: 1\\n• Адреса: 0x1003\" as B3 #DBEAFE\n",[4005,30903,30904],{"class":4007,"line":4069},[4005,30905,4036],{"emptyLinePlaceholder":4035},[4005,30907,30908],{"class":4007,"line":4075},[4005,30909,30910],{},"    B0 -right-> B1 : Суміжні комірки RAM\n",[4005,30912,30913],{"class":4007,"line":4081},[4005,30914,30915],{},"    B1 -right-> B2\n",[4005,30917,30918],{"class":4007,"line":4086},[4005,30919,30920],{},"    B2 -right-> B3\n",[4005,30922,30923],{"class":4007,"line":4092},[4005,30924,4078],{},[4005,30926,30927],{"class":4007,"line":4098},[4005,30928,4113],{},[3908,30930,30931],{},"Розмір масиву в пам'яті обчислюється за простою математичною формулою:",[30933,30934],"math-formula",{"tex":30935},"\\text{SizeInBytes} = N \\times \\text{sizeof}(T)",[3908,30937,30938,30939,30942],{},"Наприклад, масив ",[3753,30940,30941],{},"[8]int64"," займає $8 \\times 8 = 64$ байти.",[3900,30944],{},[3976,30946,30948,30949,30951],{"id":30947},"залізне-правило-типу-розмірність-n-є-частиною-типу-даних","Залізне правило типу: розмірність ",[3753,30950,8609],{}," є частиною типу даних",[3908,30953,30954,30955],{},"У більшості мов (C#, Java, C++) розмір масиву є просто його динамічною властивістю. ",[3871,30956,30957,30958,30960],{},"У Go розмірність ",[3753,30959,8609],{}," є невіддільною частиною самого типу даних!",[3984,30962,30964],{"className":4162,"code":30963,"language":4164,"meta":3992,"style":3992},"package main\n\nfunc processArray(data [4]int) {\n    \u002F\u002F Функція очікує МАСИВ З РІВНО ЧОТИРЬОХ ЦІЛИХ ЧИСЕЛ\n}\n\nfunc main() {\n    var arr4 [4]int\n    var arr5 [5]int\n\n    processArray(arr4) \u002F\u002F ✅ Успішно: типи [4]int ідентичні\n\n    \u002F\u002F ❌ ПОМИЛКА КОМПІЛЯЦІЇ:\n    \u002F\u002F processArray(arr5)\n    \u002F\u002F cannot use arr5 (variable of type [5]int) as [4]int value in argument to processArray\n}\n",[3753,30965,30966,30972,30976,30997,31002,31006,31010,31018,31033,31048,31052,31067,31071,31075,31080,31085],{"__ignoreMap":3992},[4005,30967,30968,30970],{"class":4007,"line":4008},[4005,30969,5739],{"class":4171},[4005,30971,5742],{"class":4178},[4005,30973,30974],{"class":4007,"line":4014},[4005,30975,4036],{"emptyLinePlaceholder":4035},[4005,30977,30978,30980,30983,30985,30987,30989,30991,30993,30995],{"class":4007,"line":4020},[4005,30979,4299],{"class":4171},[4005,30981,30982],{"class":4302}," processArray",[4005,30984,4611],{"class":4182},[4005,30986,5193],{"class":4174},[4005,30988,27738],{"class":4182},[4005,30990,8245],{"class":4186},[4005,30992,28540],{"class":4182},[4005,30994,4158],{"class":4178},[4005,30996,12789],{"class":4182},[4005,30998,30999],{"class":4007,"line":4026},[4005,31000,31001],{"class":4190},"    \u002F\u002F Функція очікує МАСИВ З РІВНО ЧОТИРЬОХ ЦІЛИХ ЧИСЕЛ\n",[4005,31003,31004],{"class":4007,"line":4032},[4005,31005,4078],{"class":4182},[4005,31007,31008],{"class":4007,"line":4039},[4005,31009,4036],{"emptyLinePlaceholder":4035},[4005,31011,31012,31014,31016],{"class":4007,"line":4045},[4005,31013,4299],{"class":4171},[4005,31015,5764],{"class":4302},[4005,31017,4306],{"class":4182},[4005,31019,31020,31022,31025,31027,31029,31031],{"class":4007,"line":4051},[4005,31021,9412],{"class":4171},[4005,31023,31024],{"class":4174}," arr4",[4005,31026,27738],{"class":4182},[4005,31028,8245],{"class":4186},[4005,31030,28540],{"class":4182},[4005,31032,14224],{"class":4178},[4005,31034,31035,31037,31040,31042,31044,31046],{"class":4007,"line":4057},[4005,31036,9412],{"class":4171},[4005,31038,31039],{"class":4174}," arr5",[4005,31041,27738],{"class":4182},[4005,31043,5869],{"class":4186},[4005,31045,28540],{"class":4182},[4005,31047,14224],{"class":4178},[4005,31049,31050],{"class":4007,"line":4063},[4005,31051,4036],{"emptyLinePlaceholder":4035},[4005,31053,31054,31057,31059,31062,31064],{"class":4007,"line":4069},[4005,31055,31056],{"class":4302},"    processArray",[4005,31058,4611],{"class":4182},[4005,31060,31061],{"class":4174},"arr4",[4005,31063,4498],{"class":4182},[4005,31065,31066],{"class":4190},"\u002F\u002F ✅ Успішно: типи [4]int ідентичні\n",[4005,31068,31069],{"class":4007,"line":4075},[4005,31070,4036],{"emptyLinePlaceholder":4035},[4005,31072,31073],{"class":4007,"line":4081},[4005,31074,5806],{"class":4190},[4005,31076,31077],{"class":4007,"line":4086},[4005,31078,31079],{"class":4190},"    \u002F\u002F processArray(arr5)\n",[4005,31081,31082],{"class":4007,"line":4092},[4005,31083,31084],{"class":4190},"    \u002F\u002F cannot use arr5 (variable of type [5]int) as [4]int value in argument to processArray\n",[4005,31086,31087],{"class":4007,"line":4098},[4005,31088,4078],{"class":4182},[3908,31090,31091,31092,8157,31095,31097,31098,31105],{},"Типи ",[3753,31093,31094],{},"[4]int",[3753,31096,30764],{}," для компілятора Go є ",[3871,31099,31100,31101,8157,31103],{},"настільки ж несумісними, як ",[3753,31102,7004],{},[3753,31104,8505],{},"! Це дає компілятору можливість гарантувати безпеку меж пам'яті ще під час компіляції.",[3900,31107],{},[3976,31109,31111],{"id":31110},"усі-способи-створення-та-ініціалізації-масивів","Усі способи створення та ініціалізації масивів",[3908,31113,31114,31115,31118],{},"У мові Go існує ",[3871,31116,31117],{},"сім практичних патернів"," ініціалізації статичних масивів:",[3984,31120,31122],{"className":4162,"code":31121,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F 1. Оголошення неініціалізованого масиву (Ініціалізація Zero Values)\n    \u002F\u002F Створюється масив, усі елементи якого гарантовано занулені компілятором:\n    var counters [4]int \u002F\u002F [0, 0, 0, 0]\n\n    \u002F\u002F 2. Повний літерал масиву з явним вказанням розміру\n    statusCodes := [3]int{200, 404, 500}\n\n    \u002F\u002F 3. Часткова ініціалізація\n    \u002F\u002F Невизначені елементи автоматично заповнюються нулями:\n    scores := [5]int{10, 20} \u002F\u002F [10, 20, 0, 0, 0]\n\n    \u002F\u002F 4. Автоматичний підрахунок кількості елементів через три крапки [...]\n    \u002F\u002F Компілятор сам порахує кількість елементів і підставить розмір 3:\n    dnsServers := [...]string{\"1.1.1.1\", \"8.8.8.8\", \"9.9.9.9\"}\n\n    \u002F\u002F 5. Розріджений індексований масив (Sparse Array)\n    \u002F\u002F Дозволяє задати значення для конкретних індексів за синтаксисом index: value\n    httpStatusMap := [600]string{\n        200: \"OK\",\n        400: \"Bad Request\",\n        404: \"Not Found\",\n        500: \"Internal Server Error\",\n    }\n\n    \u002F\u002F 6. Комбінована індексація\n    \u002F\u002F Елементи без індексів ідуть по порядку, далі індекс 7 перескакує вперед:\n    customSequence := [...]int{1, 2, 3, 7: 100, 200}\n    \u002F\u002F Індекси: [0]=1, [1]=2, [2]=3, [3..6]=0, [7]=100, [8]=200\n\n    \u002F\u002F 7. Багатовимірні масиви (Матриці)\n    matrix := [2][3]int{\n        {1, 2, 3}, \u002F\u002F Рядок 0\n        {4, 5, 6}, \u002F\u002F Рядок 1\n    }\n\n    fmt.Println(\"1. Нульовий масив:\", counters)\n    fmt.Println(\"2. Статус коди:\", statusCodes)\n    fmt.Println(\"3. Часткові бали:\", scores)\n    fmt.Printf(\"4. DNS сервери (довжина %d): %v\\n\", len(dnsServers), dnsServers)\n    fmt.Println(\"5. HTTP 404:\", httpStatusMap[404])\n    fmt.Println(\"6. Послідовність:\", customSequence)\n    fmt.Printf(\"7. Елемент матриці [1][2]: %d\\n\", matrix[1][2]) \u002F\u002F 6\n}\n",[3753,31123,31124,31130,31134,31140,31144,31152,31157,31162,31180,31184,31189,31216,31220,31225,31230,31255,31259,31264,31269,31295,31299,31304,31309,31325,31337,31349,31361,31373,31377,31381,31386,31391,31426,31431,31435,31440,31459,31480,31499,31503,31507,31527,31547,31566,31606,31630,31650,31687],{"__ignoreMap":3992},[4005,31125,31126,31128],{"class":4007,"line":4008},[4005,31127,5739],{"class":4171},[4005,31129,5742],{"class":4178},[4005,31131,31132],{"class":4007,"line":4014},[4005,31133,4036],{"emptyLinePlaceholder":4035},[4005,31135,31136,31138],{"class":4007,"line":4020},[4005,31137,3917],{"class":4836},[4005,31139,7656],{"class":4330},[4005,31141,31142],{"class":4007,"line":4026},[4005,31143,4036],{"emptyLinePlaceholder":4035},[4005,31145,31146,31148,31150],{"class":4007,"line":4032},[4005,31147,4299],{"class":4171},[4005,31149,5764],{"class":4302},[4005,31151,4306],{"class":4182},[4005,31153,31154],{"class":4007,"line":4039},[4005,31155,31156],{"class":4190},"    \u002F\u002F 1. Оголошення неініціалізованого масиву (Ініціалізація Zero Values)\n",[4005,31158,31159],{"class":4007,"line":4045},[4005,31160,31161],{"class":4190},"    \u002F\u002F Створюється масив, усі елементи якого гарантовано занулені компілятором:\n",[4005,31163,31164,31166,31169,31171,31173,31175,31177],{"class":4007,"line":4051},[4005,31165,9412],{"class":4171},[4005,31167,31168],{"class":4174}," counters",[4005,31170,27738],{"class":4182},[4005,31172,8245],{"class":4186},[4005,31174,28540],{"class":4182},[4005,31176,4158],{"class":4178},[4005,31178,31179],{"class":4190}," \u002F\u002F [0, 0, 0, 0]\n",[4005,31181,31182],{"class":4007,"line":4057},[4005,31183,4036],{"emptyLinePlaceholder":4035},[4005,31185,31186],{"class":4007,"line":4063},[4005,31187,31188],{"class":4190},"    \u002F\u002F 2. Повний літерал масиву з явним вказанням розміру\n",[4005,31190,31191,31194,31196,31198,31200,31202,31204,31206,31208,31210,31212,31214],{"class":4007,"line":4069},[4005,31192,31193],{"class":4174},"    statusCodes",[4005,31195,30024],{"class":4182},[4005,31197,6286],{"class":4186},[4005,31199,28540],{"class":4182},[4005,31201,4158],{"class":4178},[4005,31203,16268],{"class":4182},[4005,31205,4317],{"class":4186},[4005,31207,3836],{"class":4182},[4005,31209,25077],{"class":4186},[4005,31211,3836],{"class":4182},[4005,31213,6732],{"class":4186},[4005,31215,4078],{"class":4182},[4005,31217,31218],{"class":4007,"line":4075},[4005,31219,4036],{"emptyLinePlaceholder":4035},[4005,31221,31222],{"class":4007,"line":4081},[4005,31223,31224],{"class":4190},"    \u002F\u002F 3. Часткова ініціалізація\n",[4005,31226,31227],{"class":4007,"line":4086},[4005,31228,31229],{"class":4190},"    \u002F\u002F Невизначені елементи автоматично заповнюються нулями:\n",[4005,31231,31232,31234,31236,31238,31240,31242,31244,31246,31248,31250,31252],{"class":4007,"line":4092},[4005,31233,28920],{"class":4174},[4005,31235,30024],{"class":4182},[4005,31237,5869],{"class":4186},[4005,31239,28540],{"class":4182},[4005,31241,4158],{"class":4178},[4005,31243,16268],{"class":4182},[4005,31245,4631],{"class":4186},[4005,31247,3836],{"class":4182},[4005,31249,5335],{"class":4186},[4005,31251,25516],{"class":4182},[4005,31253,31254],{"class":4190},"\u002F\u002F [10, 20, 0, 0, 0]\n",[4005,31256,31257],{"class":4007,"line":4098},[4005,31258,4036],{"emptyLinePlaceholder":4035},[4005,31260,31261],{"class":4007,"line":4104},[4005,31262,31263],{"class":4190},"    \u002F\u002F 4. Автоматичний підрахунок кількості елементів через три крапки [...]\n",[4005,31265,31266],{"class":4007,"line":4110},[4005,31267,31268],{"class":4190},"    \u002F\u002F Компілятор сам порахує кількість елементів і підставить розмір 3:\n",[4005,31270,31271,31274,31276,31278,31280,31283,31285,31288,31290,31293],{"class":4007,"line":4937},[4005,31272,31273],{"class":4174},"    dnsServers",[4005,31275,30811],{"class":4182},[4005,31277,7004],{"class":4178},[4005,31279,16268],{"class":4182},[4005,31281,31282],{"class":4330},"\"1.1.1.1\"",[4005,31284,3836],{"class":4182},[4005,31286,31287],{"class":4330},"\"8.8.8.8\"",[4005,31289,3836],{"class":4182},[4005,31291,31292],{"class":4330},"\"9.9.9.9\"",[4005,31294,4078],{"class":4182},[4005,31296,31297],{"class":4007,"line":4942},[4005,31298,4036],{"emptyLinePlaceholder":4035},[4005,31300,31301],{"class":4007,"line":4947},[4005,31302,31303],{"class":4190},"    \u002F\u002F 5. Розріджений індексований масив (Sparse Array)\n",[4005,31305,31306],{"class":4007,"line":4953},[4005,31307,31308],{"class":4190},"    \u002F\u002F Дозволяє задати значення для конкретних індексів за синтаксисом index: value\n",[4005,31310,31311,31314,31316,31319,31321,31323],{"class":4007,"line":4960},[4005,31312,31313],{"class":4174},"    httpStatusMap",[4005,31315,30024],{"class":4182},[4005,31317,31318],{"class":4186},"600",[4005,31320,28540],{"class":4182},[4005,31322,7004],{"class":4178},[4005,31324,29461],{"class":4182},[4005,31326,31327,31330,31332,31335],{"class":4007,"line":4973},[4005,31328,31329],{"class":4186},"        200",[4005,31331,11172],{"class":4182},[4005,31333,31334],{"class":4330},"\"OK\"",[4005,31336,29475],{"class":4182},[4005,31338,31339,31342,31344,31347],{"class":4007,"line":4985},[4005,31340,31341],{"class":4186},"        400",[4005,31343,11172],{"class":4182},[4005,31345,31346],{"class":4330},"\"Bad Request\"",[4005,31348,29475],{"class":4182},[4005,31350,31351,31354,31356,31359],{"class":4007,"line":7813},[4005,31352,31353],{"class":4186},"        404",[4005,31355,11172],{"class":4182},[4005,31357,31358],{"class":4330},"\"Not Found\"",[4005,31360,29475],{"class":4182},[4005,31362,31363,31366,31368,31371],{"class":4007,"line":7819},[4005,31364,31365],{"class":4186},"        500",[4005,31367,11172],{"class":4182},[4005,31369,31370],{"class":4330},"\"Internal Server Error\"",[4005,31372,29475],{"class":4182},[4005,31374,31375],{"class":4007,"line":7826},[4005,31376,5127],{"class":4182},[4005,31378,31379],{"class":4007,"line":7839},[4005,31380,4036],{"emptyLinePlaceholder":4035},[4005,31382,31383],{"class":4007,"line":7864},[4005,31384,31385],{"class":4190},"    \u002F\u002F 6. Комбінована індексація\n",[4005,31387,31388],{"class":4007,"line":7872},[4005,31389,31390],{"class":4190},"    \u002F\u002F Елементи без індексів ідуть по порядку, далі індекс 7 перескакує вперед:\n",[4005,31392,31393,31396,31398,31400,31402,31404,31406,31408,31410,31412,31414,31416,31418,31420,31422,31424],{"class":4007,"line":7881},[4005,31394,31395],{"class":4174},"    customSequence",[4005,31397,30811],{"class":4182},[4005,31399,4158],{"class":4178},[4005,31401,16268],{"class":4182},[4005,31403,4393],{"class":4186},[4005,31405,3836],{"class":4182},[4005,31407,4398],{"class":4186},[4005,31409,3836],{"class":4182},[4005,31411,6286],{"class":4186},[4005,31413,3836],{"class":4182},[4005,31415,13258],{"class":4186},[4005,31417,11172],{"class":4182},[4005,31419,6478],{"class":4186},[4005,31421,3836],{"class":4182},[4005,31423,4317],{"class":4186},[4005,31425,4078],{"class":4182},[4005,31427,31428],{"class":4007,"line":7890},[4005,31429,31430],{"class":4190},"    \u002F\u002F Індекси: [0]=1, [1]=2, [2]=3, [3..6]=0, [7]=100, [8]=200\n",[4005,31432,31433],{"class":4007,"line":7895},[4005,31434,4036],{"emptyLinePlaceholder":4035},[4005,31436,31437],{"class":4007,"line":7900},[4005,31438,31439],{"class":4190},"    \u002F\u002F 7. Багатовимірні масиви (Матриці)\n",[4005,31441,31442,31445,31447,31449,31451,31453,31455,31457],{"class":4007,"line":7909},[4005,31443,31444],{"class":4174},"    matrix",[4005,31446,30024],{"class":4182},[4005,31448,4398],{"class":4186},[4005,31450,30700],{"class":4182},[4005,31452,6286],{"class":4186},[4005,31454,28540],{"class":4182},[4005,31456,4158],{"class":4178},[4005,31458,29461],{"class":4182},[4005,31460,31461,31464,31466,31468,31470,31472,31474,31477],{"class":4007,"line":7915},[4005,31462,31463],{"class":4182},"        {",[4005,31465,4393],{"class":4186},[4005,31467,3836],{"class":4182},[4005,31469,4398],{"class":4186},[4005,31471,3836],{"class":4182},[4005,31473,6286],{"class":4186},[4005,31475,31476],{"class":4182},"}, ",[4005,31478,31479],{"class":4190},"\u002F\u002F Рядок 0\n",[4005,31481,31482,31484,31486,31488,31490,31492,31494,31496],{"class":4007,"line":7921},[4005,31483,31463],{"class":4182},[4005,31485,8245],{"class":4186},[4005,31487,3836],{"class":4182},[4005,31489,5869],{"class":4186},[4005,31491,3836],{"class":4182},[4005,31493,26030],{"class":4186},[4005,31495,31476],{"class":4182},[4005,31497,31498],{"class":4190},"\u002F\u002F Рядок 1\n",[4005,31500,31501],{"class":4007,"line":7938},[4005,31502,5127],{"class":4182},[4005,31504,31505],{"class":4007,"line":7982},[4005,31506,4036],{"emptyLinePlaceholder":4035},[4005,31508,31509,31511,31513,31515,31517,31520,31522,31525],{"class":4007,"line":7987},[4005,31510,5370],{"class":4174},[4005,31512,3769],{"class":4182},[4005,31514,5348],{"class":4302},[4005,31516,4611],{"class":4182},[4005,31518,31519],{"class":4330},"\"1. Нульовий масив:\"",[4005,31521,3836],{"class":4182},[4005,31523,31524],{"class":4174},"counters",[4005,31526,4482],{"class":4182},[4005,31528,31529,31531,31533,31535,31537,31540,31542,31545],{"class":4007,"line":7993},[4005,31530,5370],{"class":4174},[4005,31532,3769],{"class":4182},[4005,31534,5348],{"class":4302},[4005,31536,4611],{"class":4182},[4005,31538,31539],{"class":4330},"\"2. Статус коди:\"",[4005,31541,3836],{"class":4182},[4005,31543,31544],{"class":4174},"statusCodes",[4005,31546,4482],{"class":4182},[4005,31548,31549,31551,31553,31555,31557,31560,31562,31564],{"class":4007,"line":8016},[4005,31550,5370],{"class":4174},[4005,31552,3769],{"class":4182},[4005,31554,5348],{"class":4302},[4005,31556,4611],{"class":4182},[4005,31558,31559],{"class":4330},"\"3. Часткові бали:\"",[4005,31561,3836],{"class":4182},[4005,31563,29116],{"class":4174},[4005,31565,4482],{"class":4182},[4005,31567,31568,31570,31572,31574,31576,31579,31581,31584,31586,31588,31590,31592,31594,31596,31599,31602,31604],{"class":4007,"line":8035},[4005,31569,5370],{"class":4174},[4005,31571,3769],{"class":4182},[4005,31573,7945],{"class":4302},[4005,31575,4611],{"class":4182},[4005,31577,31578],{"class":4330},"\"4. DNS сервери (довжина ",[4005,31580,7959],{"class":4174},[4005,31582,31583],{"class":4330},"): ",[4005,31585,10666],{"class":4174},[4005,31587,7965],{"class":7964},[4005,31589,7968],{"class":4330},[4005,31591,3836],{"class":4182},[4005,31593,11465],{"class":4302},[4005,31595,4611],{"class":4182},[4005,31597,31598],{"class":4174},"dnsServers",[4005,31600,31601],{"class":4182},"), ",[4005,31603,31598],{"class":4174},[4005,31605,4482],{"class":4182},[4005,31607,31608,31610,31612,31614,31616,31619,31621,31624,31626,31628],{"class":4007,"line":8063},[4005,31609,5370],{"class":4174},[4005,31611,3769],{"class":4182},[4005,31613,5348],{"class":4302},[4005,31615,4611],{"class":4182},[4005,31617,31618],{"class":4330},"\"5. HTTP 404:\"",[4005,31620,3836],{"class":4182},[4005,31622,31623],{"class":4174},"httpStatusMap",[4005,31625,11561],{"class":4182},[4005,31627,25077],{"class":4186},[4005,31629,11566],{"class":4182},[4005,31631,31632,31634,31636,31638,31640,31643,31645,31648],{"class":4007,"line":8090},[4005,31633,5370],{"class":4174},[4005,31635,3769],{"class":4182},[4005,31637,5348],{"class":4302},[4005,31639,4611],{"class":4182},[4005,31641,31642],{"class":4330},"\"6. Послідовність:\"",[4005,31644,3836],{"class":4182},[4005,31646,31647],{"class":4174},"customSequence",[4005,31649,4482],{"class":4182},[4005,31651,31652,31654,31656,31658,31660,31663,31665,31667,31669,31671,31673,31675,31677,31679,31681,31684],{"class":4007,"line":8095},[4005,31653,5370],{"class":4174},[4005,31655,3769],{"class":4182},[4005,31657,7945],{"class":4302},[4005,31659,4611],{"class":4182},[4005,31661,31662],{"class":4330},"\"7. Елемент матриці [1][2]: ",[4005,31664,7959],{"class":4174},[4005,31666,7965],{"class":7964},[4005,31668,7968],{"class":4330},[4005,31670,3836],{"class":4182},[4005,31672,30693],{"class":4174},[4005,31674,11561],{"class":4182},[4005,31676,4393],{"class":4186},[4005,31678,30700],{"class":4182},[4005,31680,4398],{"class":4186},[4005,31682,31683],{"class":4182},"]) ",[4005,31685,31686],{"class":4190},"\u002F\u002F 6\n",[4005,31688,31689],{"class":4007,"line":8101},[4005,31690,4078],{"class":4182},[3900,31692],{},[3976,31694,31696,31697,3858,31699,31702],{"id":31695},"операції-над-масивами-доступ-функції-lencap-та-контроль-меж","Операції над масивами: доступ, функції ",[3753,31698,11465],{},[3753,31700,31701],{},"cap"," та контроль меж",[3746,31704,31705,31721,31734],{},[3749,31706,31707,31710,31711,31713,31714,31717,31718,3769],{},[3871,31708,31709],{},"Доступ за індексом:"," індексація починається з ",[3753,31712,4200],{}," і закінчується ",[3753,31715,31716],{},"N-1",". Звернення здійснюється через квадратні дужки: ",[3753,31719,31720],{},"arr[i] = 10",[3749,31722,31723,31731,31732,3769],{},[3871,31724,31725,31726,8157,31728,5831],{},"Функції ",[3753,31727,11289],{},[3753,31729,31730],{},"cap()"," для статичних масивів обидві функції повертають однакове константне число — фізичний розмір масиву ",[3753,31733,8609],{},[3749,31735,31736,31742],{},[3871,31737,31738,31739,4159],{},"Захист меж пам'яті (",[3758,31740,31741],{},"Bounds Checking",[3746,31743,31744,31754],{},[3749,31745,31746,31747,31750,31751,3769],{},"Якщо індекс виходить за межі і відомий компілятору (наприклад, ",[3753,31748,31749],{},"arr[10]"," для масиву з 5 елементів), компілятор зупинить збірку: ",[3753,31752,31753],{},"invalid array index 10 (out of bounds for 5-element array)",[3749,31755,31756,31757,31760],{},"Якщо індекс обчислюється динамічно під час виконання програми, Go викине безпечну паніку: ",[3753,31758,31759],{},"panic: runtime error: index out of range [10] with length 5",". Вихід за межі пам'яті (Buffer Overflow) у Go фізично неможливий!",[3900,31762],{},[3976,31764,31766],{"id":31765},"ітерація-по-масивах","Ітерація по масивах",[3984,31768,31770],{"className":4162,"code":31769,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    routes := [...]string{\"\u002Fapi\u002Fv1\u002Fauth\", \"\u002Fapi\u002Fv1\u002Fusers\", \"\u002Fapi\u002Fv1\u002Fhealth\"}\n\n    \u002F\u002F Спосіб 1: Класичний цикл із лічильником через len()\n    fmt.Println(\"Класичний обхід:\")\n    for i := 0; i \u003C len(routes); i++ {\n        fmt.Printf(\"  Маршрут #%d: %s\\n\", i, routes[i])\n    }\n\n    \u002F\u002F Спосіб 2: Рекомендований for-range (індекс + значення)\n    fmt.Println(\"\\nОбхід через for-range:\")\n    for idx, path := range routes {\n        fmt.Printf(\"  [%d] -> %s\\n\", idx, path)\n    }\n\n    \u002F\u002F Спосіб 3: Отримання тільки значень (пропуск індексу через _)\n    fmt.Println(\"\\nТільки значення:\")\n    for _, path := range routes {\n        fmt.Println(\"  Endpoint:\", path)\n    }\n}\n",[3753,31771,31772,31778,31782,31788,31792,31800,31826,31830,31835,31850,31879,31916,31920,31924,31929,31948,31968,32003,32007,32011,32016,32035,32053,32072,32076],{"__ignoreMap":3992},[4005,31773,31774,31776],{"class":4007,"line":4008},[4005,31775,5739],{"class":4171},[4005,31777,5742],{"class":4178},[4005,31779,31780],{"class":4007,"line":4014},[4005,31781,4036],{"emptyLinePlaceholder":4035},[4005,31783,31784,31786],{"class":4007,"line":4020},[4005,31785,3917],{"class":4836},[4005,31787,7656],{"class":4330},[4005,31789,31790],{"class":4007,"line":4026},[4005,31791,4036],{"emptyLinePlaceholder":4035},[4005,31793,31794,31796,31798],{"class":4007,"line":4032},[4005,31795,4299],{"class":4171},[4005,31797,5764],{"class":4302},[4005,31799,4306],{"class":4182},[4005,31801,31802,31805,31807,31809,31811,31814,31816,31819,31821,31824],{"class":4007,"line":4039},[4005,31803,31804],{"class":4174},"    routes",[4005,31806,30811],{"class":4182},[4005,31808,7004],{"class":4178},[4005,31810,16268],{"class":4182},[4005,31812,31813],{"class":4330},"\"\u002Fapi\u002Fv1\u002Fauth\"",[4005,31815,3836],{"class":4182},[4005,31817,31818],{"class":4330},"\"\u002Fapi\u002Fv1\u002Fusers\"",[4005,31820,3836],{"class":4182},[4005,31822,31823],{"class":4330},"\"\u002Fapi\u002Fv1\u002Fhealth\"",[4005,31825,4078],{"class":4182},[4005,31827,31828],{"class":4007,"line":4045},[4005,31829,4036],{"emptyLinePlaceholder":4035},[4005,31831,31832],{"class":4007,"line":4051},[4005,31833,31834],{"class":4190},"    \u002F\u002F Спосіб 1: Класичний цикл із лічильником через len()\n",[4005,31836,31837,31839,31841,31843,31845,31848],{"class":4007,"line":4057},[4005,31838,5370],{"class":4174},[4005,31840,3769],{"class":4182},[4005,31842,5348],{"class":4302},[4005,31844,4611],{"class":4182},[4005,31846,31847],{"class":4330},"\"Класичний обхід:\"",[4005,31849,4482],{"class":4182},[4005,31851,31852,31854,31856,31858,31860,31862,31864,31866,31868,31870,31873,31875,31877],{"class":4007,"line":4063},[4005,31853,12138],{"class":4836},[4005,31855,6592],{"class":4174},[4005,31857,4314],{"class":4182},[4005,31859,4200],{"class":4186},[4005,31861,23796],{"class":4182},[4005,31863,27826],{"class":4174},[4005,31865,10331],{"class":4182},[4005,31867,11465],{"class":4302},[4005,31869,4611],{"class":4182},[4005,31871,31872],{"class":4174},"routes",[4005,31874,5468],{"class":4182},[4005,31876,27826],{"class":4174},[4005,31878,27837],{"class":4182},[4005,31880,31881,31883,31885,31887,31889,31892,31894,31896,31898,31900,31902,31904,31906,31908,31910,31912,31914],{"class":4007,"line":4069},[4005,31882,5343],{"class":4174},[4005,31884,3769],{"class":4182},[4005,31886,7945],{"class":4302},[4005,31888,4611],{"class":4182},[4005,31890,31891],{"class":4330},"\"  Маршрут #",[4005,31893,7959],{"class":4174},[4005,31895,11172],{"class":4330},[4005,31897,16775],{"class":4174},[4005,31899,7965],{"class":7964},[4005,31901,7968],{"class":4330},[4005,31903,3836],{"class":4182},[4005,31905,27826],{"class":4174},[4005,31907,3836],{"class":4182},[4005,31909,31872],{"class":4174},[4005,31911,11561],{"class":4182},[4005,31913,27826],{"class":4174},[4005,31915,11566],{"class":4182},[4005,31917,31918],{"class":4007,"line":4075},[4005,31919,5127],{"class":4182},[4005,31921,31922],{"class":4007,"line":4081},[4005,31923,4036],{"emptyLinePlaceholder":4035},[4005,31925,31926],{"class":4007,"line":4086},[4005,31927,31928],{"class":4190},"    \u002F\u002F Спосіб 2: Рекомендований for-range (індекс + значення)\n",[4005,31930,31931,31933,31935,31937,31939,31941,31943,31946],{"class":4007,"line":4092},[4005,31932,5370],{"class":4174},[4005,31934,3769],{"class":4182},[4005,31936,5348],{"class":4302},[4005,31938,4611],{"class":4182},[4005,31940,7968],{"class":4330},[4005,31942,7965],{"class":7964},[4005,31944,31945],{"class":4330},"Обхід через for-range:\"",[4005,31947,4482],{"class":4182},[4005,31949,31950,31952,31955,31957,31959,31961,31963,31966],{"class":4007,"line":4098},[4005,31951,12138],{"class":4836},[4005,31953,31954],{"class":4174}," idx",[4005,31956,3836],{"class":4182},[4005,31958,5064],{"class":4174},[4005,31960,4314],{"class":4182},[4005,31962,12151],{"class":4836},[4005,31964,31965],{"class":4174}," routes",[4005,31967,5073],{"class":4182},[4005,31969,31970,31972,31974,31976,31978,31981,31983,31986,31988,31990,31992,31994,31997,31999,32001],{"class":4007,"line":4104},[4005,31971,5343],{"class":4174},[4005,31973,3769],{"class":4182},[4005,31975,7945],{"class":4302},[4005,31977,4611],{"class":4182},[4005,31979,31980],{"class":4330},"\"  [",[4005,31982,7959],{"class":4174},[4005,31984,31985],{"class":4330},"] -> ",[4005,31987,16775],{"class":4174},[4005,31989,7965],{"class":7964},[4005,31991,7968],{"class":4330},[4005,31993,3836],{"class":4182},[4005,31995,31996],{"class":4174},"idx",[4005,31998,3836],{"class":4182},[4005,32000,5064],{"class":4174},[4005,32002,4482],{"class":4182},[4005,32004,32005],{"class":4007,"line":4110},[4005,32006,5127],{"class":4182},[4005,32008,32009],{"class":4007,"line":4937},[4005,32010,4036],{"emptyLinePlaceholder":4035},[4005,32012,32013],{"class":4007,"line":4942},[4005,32014,32015],{"class":4190},"    \u002F\u002F Спосіб 3: Отримання тільки значень (пропуск індексу через _)\n",[4005,32017,32018,32020,32022,32024,32026,32028,32030,32033],{"class":4007,"line":4947},[4005,32019,5370],{"class":4174},[4005,32021,3769],{"class":4182},[4005,32023,5348],{"class":4302},[4005,32025,4611],{"class":4182},[4005,32027,7968],{"class":4330},[4005,32029,7965],{"class":7964},[4005,32031,32032],{"class":4330},"Тільки значення:\"",[4005,32034,4482],{"class":4182},[4005,32036,32037,32039,32041,32043,32045,32047,32049,32051],{"class":4007,"line":4953},[4005,32038,12138],{"class":4836},[4005,32040,17642],{"class":4174},[4005,32042,3836],{"class":4182},[4005,32044,5064],{"class":4174},[4005,32046,4314],{"class":4182},[4005,32048,12151],{"class":4836},[4005,32050,31965],{"class":4174},[4005,32052,5073],{"class":4182},[4005,32054,32055,32057,32059,32061,32063,32066,32068,32070],{"class":4007,"line":4960},[4005,32056,5343],{"class":4174},[4005,32058,3769],{"class":4182},[4005,32060,5348],{"class":4302},[4005,32062,4611],{"class":4182},[4005,32064,32065],{"class":4330},"\"  Endpoint:\"",[4005,32067,3836],{"class":4182},[4005,32069,5064],{"class":4174},[4005,32071,4482],{"class":4182},[4005,32073,32074],{"class":4007,"line":4973},[4005,32075,5127],{"class":4182},[4005,32077,32078],{"class":4007,"line":4985},[4005,32079,4078],{"class":4182},[3900,32081],{},[3976,32083,32085],{"id":32084},"семантика-значень-value-semantics-масиви-копіюються-повністю","Семантика значень (Value Semantics): масиви копіюються повністю!",[3908,32087,32088],{},"Це одна з найважливіших відмінностей Go від інших мов:",[24920,32090,32091,32098,32099,32102,32103,3769],{},[3871,32092,32093,32094,32097],{},"У Go масив — це значення (",[3758,32095,32096],{},"Value","), а не посилання!","\nКоли ви присвоюєте один масив іншому (",[3753,32100,32101],{},"arr2 = arr1",") або передаєте масив як параметр у функцію, Go здійснює ",[3871,32104,32105],{},"повне побайтове копіювання всіх елементів",[3984,32107,32109],{"className":4162,"code":32108,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Функція отримує ПОВНУ КОПІЮ масиву!\nfunc modifyArray(data [3]int) {\n    data[0] = 999\n    fmt.Println(\"Всередині функції modifyArray:\", data) \u002F\u002F [999, 20, 30]\n}\n\n\u002F\u002F Функція отримує покажчик на оригінальний масив\nfunc modifyArrayByPointer(dataPtr *[3]int) {\n    dataPtr[0] = 777 \u002F\u002F Мутує оригінальну пам'ять\n}\n\nfunc main() {\n    original := [3]int{10, 20, 30}\n\n    \u002F\u002F 1. Присвоєння створює незалежний дублікат у пам'яті:\n    copied := original\n    copied[1] = 888\n\n    fmt.Printf(\"Оригінал: %v\\n\", original) \u002F\u002F [10, 20, 30] — НЕ ЗМІНИВСЯ!\n    fmt.Printf(\"Копія:    %v\\n\", copied)   \u002F\u002F [10, 888, 30]\n\n    \u002F\u002F 2. Передача за значенням не впливає на оригінал:\n    modifyArray(original)\n    fmt.Printf(\"Оригінал після modifyArray: %v\\n\", original) \u002F\u002F [10, 20, 30]\n\n    \u002F\u002F 3. Передача покажчика змінює оригінал без копіювання пам'яті:\n    modifyArrayByPointer(&original)\n    fmt.Printf(\"Оригінал після modifyArrayByPointer: %v\\n\", original) \u002F\u002F [777, 20, 30]\n}\n",[3753,32110,32111,32117,32121,32127,32131,32136,32157,32170,32192,32196,32200,32205,32228,32245,32249,32253,32261,32288,32292,32297,32307,32320,32324,32353,32382,32386,32391,32402,32430,32434,32439,32451,32479],{"__ignoreMap":3992},[4005,32112,32113,32115],{"class":4007,"line":4008},[4005,32114,5739],{"class":4171},[4005,32116,5742],{"class":4178},[4005,32118,32119],{"class":4007,"line":4014},[4005,32120,4036],{"emptyLinePlaceholder":4035},[4005,32122,32123,32125],{"class":4007,"line":4020},[4005,32124,3917],{"class":4836},[4005,32126,7656],{"class":4330},[4005,32128,32129],{"class":4007,"line":4026},[4005,32130,4036],{"emptyLinePlaceholder":4035},[4005,32132,32133],{"class":4007,"line":4032},[4005,32134,32135],{"class":4190},"\u002F\u002F Функція отримує ПОВНУ КОПІЮ масиву!\n",[4005,32137,32138,32140,32143,32145,32147,32149,32151,32153,32155],{"class":4007,"line":4039},[4005,32139,4299],{"class":4171},[4005,32141,32142],{"class":4302}," modifyArray",[4005,32144,4611],{"class":4182},[4005,32146,5193],{"class":4174},[4005,32148,27738],{"class":4182},[4005,32150,6286],{"class":4186},[4005,32152,28540],{"class":4182},[4005,32154,4158],{"class":4178},[4005,32156,12789],{"class":4182},[4005,32158,32159,32161,32163,32165,32167],{"class":4007,"line":4045},[4005,32160,5152],{"class":4174},[4005,32162,11561],{"class":4182},[4005,32164,4200],{"class":4186},[4005,32166,12081],{"class":4182},[4005,32168,32169],{"class":4186},"999\n",[4005,32171,32172,32174,32176,32178,32180,32183,32185,32187,32189],{"class":4007,"line":4051},[4005,32173,5370],{"class":4174},[4005,32175,3769],{"class":4182},[4005,32177,5348],{"class":4302},[4005,32179,4611],{"class":4182},[4005,32181,32182],{"class":4330},"\"Всередині функції modifyArray:\"",[4005,32184,3836],{"class":4182},[4005,32186,5193],{"class":4174},[4005,32188,4498],{"class":4182},[4005,32190,32191],{"class":4190},"\u002F\u002F [999, 20, 30]\n",[4005,32193,32194],{"class":4007,"line":4057},[4005,32195,4078],{"class":4182},[4005,32197,32198],{"class":4007,"line":4063},[4005,32199,4036],{"emptyLinePlaceholder":4035},[4005,32201,32202],{"class":4007,"line":4069},[4005,32203,32204],{"class":4190},"\u002F\u002F Функція отримує покажчик на оригінальний масив\n",[4005,32206,32207,32209,32212,32214,32217,32220,32222,32224,32226],{"class":4007,"line":4075},[4005,32208,4299],{"class":4171},[4005,32210,32211],{"class":4302}," modifyArrayByPointer",[4005,32213,4611],{"class":4182},[4005,32215,32216],{"class":4174},"dataPtr",[4005,32218,32219],{"class":4182}," *[",[4005,32221,6286],{"class":4186},[4005,32223,28540],{"class":4182},[4005,32225,4158],{"class":4178},[4005,32227,12789],{"class":4182},[4005,32229,32230,32233,32235,32237,32239,32242],{"class":4007,"line":4081},[4005,32231,32232],{"class":4174},"    dataPtr",[4005,32234,11561],{"class":4182},[4005,32236,4200],{"class":4186},[4005,32238,12081],{"class":4182},[4005,32240,32241],{"class":4186},"777",[4005,32243,32244],{"class":4190}," \u002F\u002F Мутує оригінальну пам'ять\n",[4005,32246,32247],{"class":4007,"line":4086},[4005,32248,4078],{"class":4182},[4005,32250,32251],{"class":4007,"line":4092},[4005,32252,4036],{"emptyLinePlaceholder":4035},[4005,32254,32255,32257,32259],{"class":4007,"line":4098},[4005,32256,4299],{"class":4171},[4005,32258,5764],{"class":4302},[4005,32260,4306],{"class":4182},[4005,32262,32263,32266,32268,32270,32272,32274,32276,32278,32280,32282,32284,32286],{"class":4007,"line":4104},[4005,32264,32265],{"class":4174},"    original",[4005,32267,30024],{"class":4182},[4005,32269,6286],{"class":4186},[4005,32271,28540],{"class":4182},[4005,32273,4158],{"class":4178},[4005,32275,16268],{"class":4182},[4005,32277,4631],{"class":4186},[4005,32279,3836],{"class":4182},[4005,32281,5335],{"class":4186},[4005,32283,3836],{"class":4182},[4005,32285,4276],{"class":4186},[4005,32287,4078],{"class":4182},[4005,32289,32290],{"class":4007,"line":4110},[4005,32291,4036],{"emptyLinePlaceholder":4035},[4005,32293,32294],{"class":4007,"line":4937},[4005,32295,32296],{"class":4190},"    \u002F\u002F 1. Присвоєння створює незалежний дублікат у пам'яті:\n",[4005,32298,32299,32302,32304],{"class":4007,"line":4942},[4005,32300,32301],{"class":4174},"    copied",[4005,32303,4314],{"class":4182},[4005,32305,32306],{"class":4174},"original\n",[4005,32308,32309,32311,32313,32315,32317],{"class":4007,"line":4947},[4005,32310,32301],{"class":4174},[4005,32312,11561],{"class":4182},[4005,32314,4393],{"class":4186},[4005,32316,12081],{"class":4182},[4005,32318,32319],{"class":4186},"888\n",[4005,32321,32322],{"class":4007,"line":4953},[4005,32323,4036],{"emptyLinePlaceholder":4035},[4005,32325,32326,32328,32330,32332,32334,32337,32339,32341,32343,32345,32348,32350],{"class":4007,"line":4960},[4005,32327,5370],{"class":4174},[4005,32329,3769],{"class":4182},[4005,32331,7945],{"class":4302},[4005,32333,4611],{"class":4182},[4005,32335,32336],{"class":4330},"\"Оригінал: ",[4005,32338,10666],{"class":4174},[4005,32340,7965],{"class":7964},[4005,32342,7968],{"class":4330},[4005,32344,3836],{"class":4182},[4005,32346,32347],{"class":4174},"original",[4005,32349,4498],{"class":4182},[4005,32351,32352],{"class":4190},"\u002F\u002F [10, 20, 30] — НЕ ЗМІНИВСЯ!\n",[4005,32354,32355,32357,32359,32361,32363,32366,32368,32370,32372,32374,32377,32379],{"class":4007,"line":4973},[4005,32356,5370],{"class":4174},[4005,32358,3769],{"class":4182},[4005,32360,7945],{"class":4302},[4005,32362,4611],{"class":4182},[4005,32364,32365],{"class":4330},"\"Копія:    ",[4005,32367,10666],{"class":4174},[4005,32369,7965],{"class":7964},[4005,32371,7968],{"class":4330},[4005,32373,3836],{"class":4182},[4005,32375,32376],{"class":4174},"copied",[4005,32378,5381],{"class":4182},[4005,32380,32381],{"class":4190},"\u002F\u002F [10, 888, 30]\n",[4005,32383,32384],{"class":4007,"line":4985},[4005,32385,4036],{"emptyLinePlaceholder":4035},[4005,32387,32388],{"class":4007,"line":7813},[4005,32389,32390],{"class":4190},"    \u002F\u002F 2. Передача за значенням не впливає на оригінал:\n",[4005,32392,32393,32396,32398,32400],{"class":4007,"line":7819},[4005,32394,32395],{"class":4302},"    modifyArray",[4005,32397,4611],{"class":4182},[4005,32399,32347],{"class":4174},[4005,32401,4482],{"class":4182},[4005,32403,32404,32406,32408,32410,32412,32415,32417,32419,32421,32423,32425,32427],{"class":4007,"line":7826},[4005,32405,5370],{"class":4174},[4005,32407,3769],{"class":4182},[4005,32409,7945],{"class":4302},[4005,32411,4611],{"class":4182},[4005,32413,32414],{"class":4330},"\"Оригінал після modifyArray: ",[4005,32416,10666],{"class":4174},[4005,32418,7965],{"class":7964},[4005,32420,7968],{"class":4330},[4005,32422,3836],{"class":4182},[4005,32424,32347],{"class":4174},[4005,32426,4498],{"class":4182},[4005,32428,32429],{"class":4190},"\u002F\u002F [10, 20, 30]\n",[4005,32431,32432],{"class":4007,"line":7839},[4005,32433,4036],{"emptyLinePlaceholder":4035},[4005,32435,32436],{"class":4007,"line":7864},[4005,32437,32438],{"class":4190},"    \u002F\u002F 3. Передача покажчика змінює оригінал без копіювання пам'яті:\n",[4005,32440,32441,32444,32447,32449],{"class":4007,"line":7872},[4005,32442,32443],{"class":4302},"    modifyArrayByPointer",[4005,32445,32446],{"class":4182},"(&",[4005,32448,32347],{"class":4174},[4005,32450,4482],{"class":4182},[4005,32452,32453,32455,32457,32459,32461,32464,32466,32468,32470,32472,32474,32476],{"class":4007,"line":7881},[4005,32454,5370],{"class":4174},[4005,32456,3769],{"class":4182},[4005,32458,7945],{"class":4302},[4005,32460,4611],{"class":4182},[4005,32462,32463],{"class":4330},"\"Оригінал після modifyArrayByPointer: ",[4005,32465,10666],{"class":4174},[4005,32467,7965],{"class":7964},[4005,32469,7968],{"class":4330},[4005,32471,3836],{"class":4182},[4005,32473,32347],{"class":4174},[4005,32475,4498],{"class":4182},[4005,32477,32478],{"class":4190},"\u002F\u002F [777, 20, 30]\n",[4005,32480,32481],{"class":4007,"line":7890},[4005,32482,4078],{"class":4182},[4748,32484,32485,32488,32489,32492,32493,32499,32500,3769],{},[3871,32486,32487],{},"Чому масиви рідко передають у функції напряму:","\nЯкщо передати масив ",[3753,32490,32491],{},"[1000000]int64"," за значенням, програмі доведеться скопіювати 8 мегабайтів пам'яті на кожен виклик функції. Тому для динамічної та швидкої роботи без копіювання в Go використовують ",[3871,32494,32495,32496,5032],{},"зрізи (",[3758,32497,32498],{},"slices"," або передають покажчик на масив ",[3753,32501,32502],{},"*[N]T",[3900,32504],{},[3976,32506,32508],{"id":32507},"порівняння-масивів-між-собою","Порівняння масивів між собою",[3908,32510,32511,32512,8157,32516,32520],{},"Масиви однакового типу можна безпосередньо порівнювати за допомогою операторів ",[3871,32513,32514],{},[3753,32515,12976],{},[3871,32517,32518],{},[3753,32519,22859],{}," (за умови, що тип їхніх елементів підтримує порівняння):",[3984,32522,32524],{"className":4162,"code":32523,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    a := [3]int{1, 2, 3}\n    b := [3]int{1, 2, 3}\n    c := [3]int{1, 2, 4}\n\n    fmt.Println(\"a == b:\", a == b) \u002F\u002F true (усі елементи збігаються)\n    fmt.Println(\"a == c:\", a == c) \u002F\u002F false\n}\n",[3753,32525,32526,32532,32536,32542,32546,32554,32581,32608,32635,32639,32665,32690],{"__ignoreMap":3992},[4005,32527,32528,32530],{"class":4007,"line":4008},[4005,32529,5739],{"class":4171},[4005,32531,5742],{"class":4178},[4005,32533,32534],{"class":4007,"line":4014},[4005,32535,4036],{"emptyLinePlaceholder":4035},[4005,32537,32538,32540],{"class":4007,"line":4020},[4005,32539,3917],{"class":4836},[4005,32541,7656],{"class":4330},[4005,32543,32544],{"class":4007,"line":4026},[4005,32545,4036],{"emptyLinePlaceholder":4035},[4005,32547,32548,32550,32552],{"class":4007,"line":4032},[4005,32549,4299],{"class":4171},[4005,32551,5764],{"class":4302},[4005,32553,4306],{"class":4182},[4005,32555,32556,32559,32561,32563,32565,32567,32569,32571,32573,32575,32577,32579],{"class":4007,"line":4039},[4005,32557,32558],{"class":4174},"    a",[4005,32560,30024],{"class":4182},[4005,32562,6286],{"class":4186},[4005,32564,28540],{"class":4182},[4005,32566,4158],{"class":4178},[4005,32568,16268],{"class":4182},[4005,32570,4393],{"class":4186},[4005,32572,3836],{"class":4182},[4005,32574,4398],{"class":4186},[4005,32576,3836],{"class":4182},[4005,32578,6286],{"class":4186},[4005,32580,4078],{"class":4182},[4005,32582,32583,32586,32588,32590,32592,32594,32596,32598,32600,32602,32604,32606],{"class":4007,"line":4045},[4005,32584,32585],{"class":4174},"    b",[4005,32587,30024],{"class":4182},[4005,32589,6286],{"class":4186},[4005,32591,28540],{"class":4182},[4005,32593,4158],{"class":4178},[4005,32595,16268],{"class":4182},[4005,32597,4393],{"class":4186},[4005,32599,3836],{"class":4182},[4005,32601,4398],{"class":4186},[4005,32603,3836],{"class":4182},[4005,32605,6286],{"class":4186},[4005,32607,4078],{"class":4182},[4005,32609,32610,32613,32615,32617,32619,32621,32623,32625,32627,32629,32631,32633],{"class":4007,"line":4051},[4005,32611,32612],{"class":4174},"    c",[4005,32614,30024],{"class":4182},[4005,32616,6286],{"class":4186},[4005,32618,28540],{"class":4182},[4005,32620,4158],{"class":4178},[4005,32622,16268],{"class":4182},[4005,32624,4393],{"class":4186},[4005,32626,3836],{"class":4182},[4005,32628,4398],{"class":4186},[4005,32630,3836],{"class":4182},[4005,32632,8245],{"class":4186},[4005,32634,4078],{"class":4182},[4005,32636,32637],{"class":4007,"line":4057},[4005,32638,4036],{"emptyLinePlaceholder":4035},[4005,32640,32641,32643,32645,32647,32649,32652,32654,32656,32658,32660,32662],{"class":4007,"line":4063},[4005,32642,5370],{"class":4174},[4005,32644,3769],{"class":4182},[4005,32646,5348],{"class":4302},[4005,32648,4611],{"class":4182},[4005,32650,32651],{"class":4330},"\"a == b:\"",[4005,32653,3836],{"class":4182},[4005,32655,9306],{"class":4174},[4005,32657,5473],{"class":4182},[4005,32659,4381],{"class":4174},[4005,32661,4498],{"class":4182},[4005,32663,32664],{"class":4190},"\u002F\u002F true (усі елементи збігаються)\n",[4005,32666,32667,32669,32671,32673,32675,32678,32680,32682,32684,32686,32688],{"class":4007,"line":4069},[4005,32668,5370],{"class":4174},[4005,32670,3769],{"class":4182},[4005,32672,5348],{"class":4302},[4005,32674,4611],{"class":4182},[4005,32676,32677],{"class":4330},"\"a == c:\"",[4005,32679,3836],{"class":4182},[4005,32681,9306],{"class":4174},[4005,32683,5473],{"class":4182},[4005,32685,4386],{"class":4174},[4005,32687,4498],{"class":4182},[4005,32689,9838],{"class":4190},[4005,32691,32692],{"class":4007,"line":4075},[4005,32693,4078],{"class":4182},[3900,32695],{},[3903,32697,32699],{"id":32698},"функції-та-функціональне-програмування-в-go","Функції та функціональне програмування в Go",[3908,32701,32702,32703,4761,32706,32709],{},"У мові Go функції є фундаментальним будівельним блоком будь-якої архітектури. Go підтримує парадигму функцій як ",[3871,32704,32705],{},"об'єктів першого класу",[3758,32707,32708],{},"First-Class Citizens","), що дозволяє писати чистий, модульний та виразний код без зайвої складності.",[3900,32711],{},[3976,32713,32715],{"id":32714},"анатомія-оголошення-функцій-та-передача-параметрів","Анатомія оголошення функцій та передача параметрів",[3908,32717,32718],{},"Функція — це іменований, логічно ізольований блок коду, який приймає вхідні дані (параметри), виконує алгоритмічні дії та повертає результат.",[3984,32720,32723],{"className":32721,"code":32722,"language":3989},[3987],"func   FunctionName   (param1 Type, param2 Type)   ReturnType   {\n    \u002F\u002F Тіло функції\n    return value\n}\n",[3753,32724,32722],{"__ignoreMap":3992},[3994,32726,32728],{"alt":32727},"Анатомія оголошення функції у Go",[3984,32729,32731],{"className":3999,"code":32730,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 13\n\npackage \"Синтаксична структура функції\" #F8FAFC {\n    rectangle \"func\\n(Ключове слово)\" as Kw #DBEAFE\n    rectangle \"CalculateTax\\n(Ім'я функції)\" as Name #DCFCE7\n    rectangle \"(amount float64, rate float64)\\n(Вхідні параметри)\" as Params #FEF3C7\n    rectangle \"float64\\n(Тип результату)\" as Ret #FCE7F3\n    rectangle \"{ ... }\\n(Тіло функції)\" as Body #E2E8F0\n}\n\nKw -right-> Name\nName -right-> Params\nParams -right-> Ret\nRet -right-> Body\n@enduml\n",[3753,32732,32733,32737,32741,32745,32749,32753,32758,32763,32768,32773,32778,32783,32787,32791,32795,32800,32805,32810],{"__ignoreMap":3992},[4005,32734,32735],{"class":4007,"line":4008},[4005,32736,4011],{},[4005,32738,32739],{"class":4007,"line":4014},[4005,32740,4017],{},[4005,32742,32743],{"class":4007,"line":4020},[4005,32744,4023],{},[4005,32746,32747],{"class":4007,"line":4026},[4005,32748,4029],{},[4005,32750,32751],{"class":4007,"line":4032},[4005,32752,4036],{"emptyLinePlaceholder":4035},[4005,32754,32755],{"class":4007,"line":4039},[4005,32756,32757],{},"package \"Синтаксична структура функції\" #F8FAFC {\n",[4005,32759,32760],{"class":4007,"line":4045},[4005,32761,32762],{},"    rectangle \"func\\n(Ключове слово)\" as Kw #DBEAFE\n",[4005,32764,32765],{"class":4007,"line":4051},[4005,32766,32767],{},"    rectangle \"CalculateTax\\n(Ім'я функції)\" as Name #DCFCE7\n",[4005,32769,32770],{"class":4007,"line":4057},[4005,32771,32772],{},"    rectangle \"(amount float64, rate float64)\\n(Вхідні параметри)\" as Params #FEF3C7\n",[4005,32774,32775],{"class":4007,"line":4063},[4005,32776,32777],{},"    rectangle \"float64\\n(Тип результату)\" as Ret #FCE7F3\n",[4005,32779,32780],{"class":4007,"line":4069},[4005,32781,32782],{},"    rectangle \"{ ... }\\n(Тіло функції)\" as Body #E2E8F0\n",[4005,32784,32785],{"class":4007,"line":4075},[4005,32786,4078],{},[4005,32788,32789],{"class":4007,"line":4081},[4005,32790,4036],{"emptyLinePlaceholder":4035},[4005,32792,32793],{"class":4007,"line":4086},[4005,32794,4089],{},[4005,32796,32797],{"class":4007,"line":4092},[4005,32798,32799],{},"Name -right-> Params\n",[4005,32801,32802],{"class":4007,"line":4098},[4005,32803,32804],{},"Params -right-> Ret\n",[4005,32806,32807],{"class":4007,"line":4104},[4005,32808,32809],{},"Ret -right-> Body\n",[4005,32811,32812],{"class":4007,"line":4110},[4005,32813,4113],{},[3908,32815,32816],{},[3871,32817,32818],{},"Правила найменування функцій:",[3746,32820,32821,32838],{},[3749,32822,32823,32826,32827,32830,32831,3836,32834,32837],{},[3871,32824,32825],{},"Експортовані функції (Public):"," назва починається з великої літери ",[3753,32828,32829],{},"PascalCase"," (наприклад, ",[3753,32832,32833],{},"CalculateTotal",[3753,32835,32836],{},"NewServer","). Вони доступні іншим пакетам проєкту.",[3749,32839,32840,32843,32844,32830,32847,3836,32850,32853],{},[3871,32841,32842],{},"Приватні функції (Private \u002F Package-level):"," назва починається з малої літери ",[3753,32845,32846],{},"camelCase",[3753,32848,32849],{},"formatResponse",[3753,32851,32852],{},"validateSession","). Вони доступні лише всередині свого пакета.",[3984,32855,32857],{"className":4162,"code":32856,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F 1. Базова функція з двома параметрами\nfunc multiply(x int, y int) int {\n    return x * y\n}\n\n\u002F\u002F 2. Скорочений запис параметрів однакового типу\n\u002F\u002F Синтаксис: якщо кілька параметрів підряд мають ОДНАКОВИЙ тип,\n\u002F\u002F можна написати тип лише один раз наприкінці групи\nfunc createConnection(host, ip string, port, timeout int) string {\n    \u002F\u002F host string, ip string → host, ip string (обидва string)\n    \u002F\u002F port int, timeout int → port, timeout int (обидва int)\n    return fmt.Sprintf(\"Підключення до %s (%s):%d з таймаутом %ds\", host, ip, port, timeout)\n}\n\nfunc main() {\n    res := multiply(6, 7)\n    connStr := createConnection(\"api.production\", \"10.0.0.1\", 443, 30)\n\n    fmt.Println(\"Результат множення:\", res)\n    fmt.Println(\"Конфігурація:\", connStr)\n}\n",[3753,32858,32859,32865,32869,32875,32879,32884,32909,32920,32924,32928,32933,32938,32943,32978,32983,32988,33041,33045,33049,33057,33077,33108,33112,33132,33152],{"__ignoreMap":3992},[4005,32860,32861,32863],{"class":4007,"line":4008},[4005,32862,5739],{"class":4171},[4005,32864,5742],{"class":4178},[4005,32866,32867],{"class":4007,"line":4014},[4005,32868,4036],{"emptyLinePlaceholder":4035},[4005,32870,32871,32873],{"class":4007,"line":4020},[4005,32872,3917],{"class":4836},[4005,32874,7656],{"class":4330},[4005,32876,32877],{"class":4007,"line":4026},[4005,32878,4036],{"emptyLinePlaceholder":4035},[4005,32880,32881],{"class":4007,"line":4032},[4005,32882,32883],{"class":4190},"\u002F\u002F 1. Базова функція з двома параметрами\n",[4005,32885,32886,32888,32891,32893,32895,32897,32899,32901,32903,32905,32907],{"class":4007,"line":4039},[4005,32887,4299],{"class":4171},[4005,32889,32890],{"class":4302}," multiply",[4005,32892,4611],{"class":4182},[4005,32894,4621],{"class":4174},[4005,32896,4224],{"class":4178},[4005,32898,3836],{"class":4182},[4005,32900,4626],{"class":4174},[4005,32902,4224],{"class":4178},[4005,32904,4498],{"class":4182},[4005,32906,4158],{"class":4178},[4005,32908,5073],{"class":4182},[4005,32910,32911,32913,32915,32917],{"class":4007,"line":4045},[4005,32912,5260],{"class":4836},[4005,32914,6141],{"class":4174},[4005,32916,6735],{"class":4182},[4005,32918,32919],{"class":4174},"y\n",[4005,32921,32922],{"class":4007,"line":4051},[4005,32923,4078],{"class":4182},[4005,32925,32926],{"class":4007,"line":4057},[4005,32927,4036],{"emptyLinePlaceholder":4035},[4005,32929,32930],{"class":4007,"line":4063},[4005,32931,32932],{"class":4190},"\u002F\u002F 2. Скорочений запис параметрів однакового типу\n",[4005,32934,32935],{"class":4007,"line":4069},[4005,32936,32937],{"class":4190},"\u002F\u002F Синтаксис: якщо кілька параметрів підряд мають ОДНАКОВИЙ тип,\n",[4005,32939,32940],{"class":4007,"line":4075},[4005,32941,32942],{"class":4190},"\u002F\u002F можна написати тип лише один раз наприкінці групи\n",[4005,32944,32945,32947,32950,32952,32954,32956,32959,32961,32963,32965,32967,32970,32972,32974,32976],{"class":4007,"line":4081},[4005,32946,4299],{"class":4171},[4005,32948,32949],{"class":4302}," createConnection",[4005,32951,4611],{"class":4182},[4005,32953,4408],{"class":4174},[4005,32955,3836],{"class":4182},[4005,32957,32958],{"class":4174},"ip",[4005,32960,4237],{"class":4178},[4005,32962,3836],{"class":4182},[4005,32964,4413],{"class":4174},[4005,32966,3836],{"class":4182},[4005,32968,32969],{"class":4174},"timeout",[4005,32971,4224],{"class":4178},[4005,32973,4498],{"class":4182},[4005,32975,7004],{"class":4178},[4005,32977,5073],{"class":4182},[4005,32979,32980],{"class":4007,"line":4086},[4005,32981,32982],{"class":4190},"    \u002F\u002F host string, ip string → host, ip string (обидва string)\n",[4005,32984,32985],{"class":4007,"line":4092},[4005,32986,32987],{"class":4190},"    \u002F\u002F port int, timeout int → port, timeout int (обидва int)\n",[4005,32989,32990,32992,32995,32997,33000,33002,33005,33007,33009,33011,33013,33015,33018,33020,33023,33025,33027,33029,33031,33033,33035,33037,33039],{"class":4007,"line":4098},[4005,32991,5260],{"class":4836},[4005,32993,32994],{"class":4174}," fmt",[4005,32996,3769],{"class":4182},[4005,32998,32999],{"class":4302},"Sprintf",[4005,33001,4611],{"class":4182},[4005,33003,33004],{"class":4330},"\"Підключення до ",[4005,33006,16775],{"class":4174},[4005,33008,4761],{"class":4330},[4005,33010,16775],{"class":4174},[4005,33012,4159],{"class":4330},[4005,33014,7959],{"class":4174},[4005,33016,33017],{"class":4330}," з таймаутом ",[4005,33019,7959],{"class":4174},[4005,33021,33022],{"class":4330},"s\"",[4005,33024,3836],{"class":4182},[4005,33026,4408],{"class":4174},[4005,33028,3836],{"class":4182},[4005,33030,32958],{"class":4174},[4005,33032,3836],{"class":4182},[4005,33034,4413],{"class":4174},[4005,33036,3836],{"class":4182},[4005,33038,32969],{"class":4174},[4005,33040,4482],{"class":4182},[4005,33042,33043],{"class":4007,"line":4104},[4005,33044,4078],{"class":4182},[4005,33046,33047],{"class":4007,"line":4110},[4005,33048,4036],{"emptyLinePlaceholder":4035},[4005,33050,33051,33053,33055],{"class":4007,"line":4937},[4005,33052,4299],{"class":4171},[4005,33054,5764],{"class":4302},[4005,33056,4306],{"class":4182},[4005,33058,33059,33062,33064,33067,33069,33071,33073,33075],{"class":4007,"line":4942},[4005,33060,33061],{"class":4174},"    res",[4005,33063,4314],{"class":4182},[4005,33065,33066],{"class":4302},"multiply",[4005,33068,4611],{"class":4182},[4005,33070,26030],{"class":4186},[4005,33072,3836],{"class":4182},[4005,33074,13258],{"class":4186},[4005,33076,4482],{"class":4182},[4005,33078,33079,33082,33084,33087,33089,33092,33094,33097,33099,33102,33104,33106],{"class":4007,"line":4947},[4005,33080,33081],{"class":4174},"    connStr",[4005,33083,4314],{"class":4182},[4005,33085,33086],{"class":4302},"createConnection",[4005,33088,4611],{"class":4182},[4005,33090,33091],{"class":4330},"\"api.production\"",[4005,33093,3836],{"class":4182},[4005,33095,33096],{"class":4330},"\"10.0.0.1\"",[4005,33098,3836],{"class":4182},[4005,33100,33101],{"class":4186},"443",[4005,33103,3836],{"class":4182},[4005,33105,4276],{"class":4186},[4005,33107,4482],{"class":4182},[4005,33109,33110],{"class":4007,"line":4953},[4005,33111,4036],{"emptyLinePlaceholder":4035},[4005,33113,33114,33116,33118,33120,33122,33125,33127,33130],{"class":4007,"line":4960},[4005,33115,5370],{"class":4174},[4005,33117,3769],{"class":4182},[4005,33119,5348],{"class":4302},[4005,33121,4611],{"class":4182},[4005,33123,33124],{"class":4330},"\"Результат множення:\"",[4005,33126,3836],{"class":4182},[4005,33128,33129],{"class":4174},"res",[4005,33131,4482],{"class":4182},[4005,33133,33134,33136,33138,33140,33142,33145,33147,33150],{"class":4007,"line":4973},[4005,33135,5370],{"class":4174},[4005,33137,3769],{"class":4182},[4005,33139,5348],{"class":4302},[4005,33141,4611],{"class":4182},[4005,33143,33144],{"class":4330},"\"Конфігурація:\"",[4005,33146,3836],{"class":4182},[4005,33148,33149],{"class":4174},"connStr",[4005,33151,4482],{"class":4182},[4005,33153,33154],{"class":4007,"line":4985},[4005,33155,4078],{"class":4182},[4484,33157,33158,33163,33167,33235,33240,33262,33267,33272,33351,33356,33522,33527,33541],{"icon":4750},[3908,33159,33160],{},[3871,33161,33162],{},"Скорочений синтаксис параметрів: чи варто використовувати?",[3908,33164,33165],{},[3871,33166,4787],{},[3984,33168,33170],{"className":4162,"code":33169,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Повний запис:\nfunc example(a int, b int, c int) { }\n\n\u002F\u002F Скорочений запис (для параметрів одного типу):\nfunc example(a, b, c int) { }\n",[3753,33171,33172,33177,33204,33208,33213],{"__ignoreMap":3992},[4005,33173,33174],{"class":4007,"line":4008},[4005,33175,33176],{"class":4190},"\u002F\u002F Повний запис:\n",[4005,33178,33179,33181,33183,33185,33187,33189,33191,33193,33195,33197,33199,33201],{"class":4007,"line":4014},[4005,33180,4299],{"class":4171},[4005,33182,5298],{"class":4302},[4005,33184,4611],{"class":4182},[4005,33186,9306],{"class":4174},[4005,33188,4224],{"class":4178},[4005,33190,3836],{"class":4182},[4005,33192,4381],{"class":4174},[4005,33194,4224],{"class":4178},[4005,33196,3836],{"class":4182},[4005,33198,4386],{"class":4174},[4005,33200,4224],{"class":4178},[4005,33202,33203],{"class":4182},") { }\n",[4005,33205,33206],{"class":4007,"line":4020},[4005,33207,4036],{"emptyLinePlaceholder":4035},[4005,33209,33210],{"class":4007,"line":4026},[4005,33211,33212],{"class":4190},"\u002F\u002F Скорочений запис (для параметрів одного типу):\n",[4005,33214,33215,33217,33219,33221,33223,33225,33227,33229,33231,33233],{"class":4007,"line":4032},[4005,33216,4299],{"class":4171},[4005,33218,5298],{"class":4302},[4005,33220,4611],{"class":4182},[4005,33222,9306],{"class":4174},[4005,33224,3836],{"class":4182},[4005,33226,4381],{"class":4174},[4005,33228,3836],{"class":4182},[4005,33230,4386],{"class":4174},[4005,33232,4224],{"class":4178},[4005,33234,33203],{"class":4182},[3908,33236,33237],{},[3871,33238,33239],{},"Правила:",[4781,33241,33242,33249,33256],{},[3749,33243,33244,33245,33248],{},"Параметри повинні йти ",[3871,33246,33247],{},"підряд"," (без переривання іншими типами)",[3749,33250,33251,33252,33255],{},"Тип пишеться ",[3871,33253,33254],{},"один раз наприкінці"," групи",[3749,33257,33258,33259],{},"Можна мішати різні групи: ",[3753,33260,33261],{},"func test(a, b int, c string, d, e float64)",[3908,33263,33264],{},[3871,33265,33266],{},"Популярність і прийнятість:",[3908,33268,27644,33269],{},[3871,33270,33271],{},"Коли це прийнято і читабельно:",[3984,33273,33275],{"className":4162,"code":33274,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Добре — зрозуміло, що координати:\nfunc move(x, y int) { }\n\n\u002F\u002F Добре — очевидно пов'язані параметри:\nfunc resize(width, height int) { }\nfunc setRange(min, max float64) { }\n",[3753,33276,33277,33282,33301,33305,33310,33330],{"__ignoreMap":3992},[4005,33278,33279],{"class":4007,"line":4008},[4005,33280,33281],{"class":4190},"\u002F\u002F Добре — зрозуміло, що координати:\n",[4005,33283,33284,33286,33289,33291,33293,33295,33297,33299],{"class":4007,"line":4014},[4005,33285,4299],{"class":4171},[4005,33287,33288],{"class":4302}," move",[4005,33290,4611],{"class":4182},[4005,33292,4621],{"class":4174},[4005,33294,3836],{"class":4182},[4005,33296,4626],{"class":4174},[4005,33298,4224],{"class":4178},[4005,33300,33203],{"class":4182},[4005,33302,33303],{"class":4007,"line":4020},[4005,33304,4036],{"emptyLinePlaceholder":4035},[4005,33306,33307],{"class":4007,"line":4026},[4005,33308,33309],{"class":4190},"\u002F\u002F Добре — очевидно пов'язані параметри:\n",[4005,33311,33312,33314,33317,33319,33322,33324,33326,33328],{"class":4007,"line":4032},[4005,33313,4299],{"class":4171},[4005,33315,33316],{"class":4302}," resize",[4005,33318,4611],{"class":4182},[4005,33320,33321],{"class":4174},"width",[4005,33323,3836],{"class":4182},[4005,33325,22219],{"class":4174},[4005,33327,4224],{"class":4178},[4005,33329,33203],{"class":4182},[4005,33331,33332,33334,33337,33339,33342,33344,33347,33349],{"class":4007,"line":4039},[4005,33333,4299],{"class":4171},[4005,33335,33336],{"class":4302}," setRange",[4005,33338,4611],{"class":4182},[4005,33340,33341],{"class":4174},"min",[4005,33343,3836],{"class":4182},[4005,33345,33346],{"class":4174},"max",[4005,33348,5907],{"class":4178},[4005,33350,33203],{"class":4182},[3908,33352,4341,33353],{},[3871,33354,33355],{},"Коли краще уникати:",[3984,33357,33359],{"className":4162,"code":33358,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Погано — багато параметрів, важко читати:\nfunc configure(host, ip, username, password, database string) { }\n\n\u002F\u002F Краще — явно вказати типи для ясності:\nfunc configure(host string, ip string, username string, password string, database string) { }\n\n\u002F\u002F Або ще краще — використати структуру:\ntype Config struct {\n    Host     string\n    IP       string\n    Username string\n    Password string\n    Database string\n}\nfunc configure(cfg Config) { }\n",[3753,33360,33361,33366,33400,33404,33409,33447,33451,33456,33467,33474,33482,33489,33496,33503,33507],{"__ignoreMap":3992},[4005,33362,33363],{"class":4007,"line":4008},[4005,33364,33365],{"class":4190},"\u002F\u002F Погано — багато параметрів, важко читати:\n",[4005,33367,33368,33370,33373,33375,33377,33379,33381,33383,33386,33388,33391,33393,33396,33398],{"class":4007,"line":4014},[4005,33369,4299],{"class":4171},[4005,33371,33372],{"class":4302}," configure",[4005,33374,4611],{"class":4182},[4005,33376,4408],{"class":4174},[4005,33378,3836],{"class":4182},[4005,33380,32958],{"class":4174},[4005,33382,3836],{"class":4182},[4005,33384,33385],{"class":4174},"username",[4005,33387,3836],{"class":4182},[4005,33389,33390],{"class":4174},"password",[4005,33392,3836],{"class":4182},[4005,33394,33395],{"class":4174},"database",[4005,33397,4237],{"class":4178},[4005,33399,33203],{"class":4182},[4005,33401,33402],{"class":4007,"line":4020},[4005,33403,4036],{"emptyLinePlaceholder":4035},[4005,33405,33406],{"class":4007,"line":4026},[4005,33407,33408],{"class":4190},"\u002F\u002F Краще — явно вказати типи для ясності:\n",[4005,33410,33411,33413,33415,33417,33419,33421,33423,33425,33427,33429,33431,33433,33435,33437,33439,33441,33443,33445],{"class":4007,"line":4032},[4005,33412,4299],{"class":4171},[4005,33414,33372],{"class":4302},[4005,33416,4611],{"class":4182},[4005,33418,4408],{"class":4174},[4005,33420,4237],{"class":4178},[4005,33422,3836],{"class":4182},[4005,33424,32958],{"class":4174},[4005,33426,4237],{"class":4178},[4005,33428,3836],{"class":4182},[4005,33430,33385],{"class":4174},[4005,33432,4237],{"class":4178},[4005,33434,3836],{"class":4182},[4005,33436,33390],{"class":4174},[4005,33438,4237],{"class":4178},[4005,33440,3836],{"class":4182},[4005,33442,33395],{"class":4174},[4005,33444,4237],{"class":4178},[4005,33446,33203],{"class":4182},[4005,33448,33449],{"class":4007,"line":4039},[4005,33450,4036],{"emptyLinePlaceholder":4035},[4005,33452,33453],{"class":4007,"line":4045},[4005,33454,33455],{"class":4190},"\u002F\u002F Або ще краще — використати структуру:\n",[4005,33457,33458,33460,33463,33465],{"class":4007,"line":4051},[4005,33459,4809],{"class":4171},[4005,33461,33462],{"class":4178}," Config",[4005,33464,10957],{"class":4171},[4005,33466,5073],{"class":4182},[4005,33468,33469,33472],{"class":4007,"line":4057},[4005,33470,33471],{"class":4174},"    Host",[4005,33473,4934],{"class":4178},[4005,33475,33476,33479],{"class":4007,"line":4063},[4005,33477,33478],{"class":4174},"    IP",[4005,33480,33481],{"class":4178},"       string\n",[4005,33483,33484,33487],{"class":4007,"line":4069},[4005,33485,33486],{"class":4174},"    Username",[4005,33488,20772],{"class":4178},[4005,33490,33491,33494],{"class":4007,"line":4075},[4005,33492,33493],{"class":4174},"    Password",[4005,33495,20772],{"class":4178},[4005,33497,33498,33501],{"class":4007,"line":4081},[4005,33499,33500],{"class":4174},"    Database",[4005,33502,20772],{"class":4178},[4005,33504,33505],{"class":4007,"line":4086},[4005,33506,4078],{"class":4182},[4005,33508,33509,33511,33513,33515,33518,33520],{"class":4007,"line":4092},[4005,33510,4299],{"class":4171},[4005,33512,33372],{"class":4302},[4005,33514,4611],{"class":4182},[4005,33516,33517],{"class":4174},"cfg",[4005,33519,33462],{"class":4178},[4005,33521,33203],{"class":4182},[3908,33523,33524],{},[3871,33525,33526],{},"Рекомендації зі стандартної бібліотеки Go:",[3746,33528,33529,33535,33538],{},[3749,33530,33531,33532],{},"У Go стандартній бібліотеці використовується ",[3871,33533,33534],{},"рідко",[3749,33536,33537],{},"Переважно для коротких функцій з 2-3 параметрами",[3749,33539,33540],{},"Якщо параметрів більше 3 — краще явно вказати типи або використати структуру",[3908,33542,33543,33545,33546,33549],{},[3871,33544,6383],{}," Використовуйте скорочений запис для ",[3871,33547,33548],{},"2-3 параметрів, що логічно пов'язані"," (координати, розміри, діапазони). Для більшої кількості параметрів — пишіть типи явно або рефакторте на структуру.",[3900,33551],{},[3976,33553,33555,33556,33559],{"id":33554},"варіативні-функції-t-variadic-functions","Варіативні функції (",[3753,33557,33558],{},"...T"," — Variadic Functions)",[3908,33561,33562,33565],{},[3871,33563,33564],{},"Варіативна функція"," — це функція, яка може приймати довільну (змінну) кількість аргументів одного типу.",[3746,33567,33568,33574,33583],{},[3749,33569,33570,33571,3769],{},"У списку параметрів перед типом вказуються три крапки: ",[3753,33572,33573],{},"...Type",[3749,33575,33576,33577,3769],{},"Всередині тіла функції варіативний параметр стає звичайним ",[3871,33578,33579,33580],{},"зрізом ",[3753,33581,33582],{},"[]Type",[3749,33584,33585,33588,33589,33592,33593,33596],{},[3871,33586,33587],{},"Залізне правило:"," у функції може бути ",[3871,33590,33591],{},"лише один"," варіативний параметр, і він ",[3871,33594,33595],{},"зобов'язаний бути останнім"," у списку параметрів.",[3984,33598,33600],{"className":4162,"code":33599,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Варіативна функція розрахунку суми будь-якої кількості чисел\nfunc calculateSum(prefix string, numbers ...int) string {\n    total := 0\n    \u002F\u002F numbers всередині функції є зрізом []int\n    for _, n := range numbers {\n        total += n\n    }\n    return fmt.Sprintf(\"%s: %d\", prefix, total)\n}\n\nfunc main() {\n    \u002F\u002F 1. Виклик без чисел (numbers буде порожнім зрізом nil \u002F len=0)\n    fmt.Println(calculateSum(\"Порожня сума\"))\n\n    \u002F\u002F 2. Передача довільної кількості аргументів через кому\n    fmt.Println(calculateSum(\"Сума трьох чисел\", 10, 20, 30))\n    fmt.Println(calculateSum(\"Сума п'яти чисел\", 1, 2, 3, 4, 5))\n\n    \u002F\u002F 3. Розпакування зрізу за допомогою синтаксису slice...\n    userScores := []int{85, 92, 78, 96}\n    fmt.Println(calculateSum(\"Загальний бал\", userScores...))\n    \u002F\u002F userScores... означає \"розпакувати зріз на окремі аргументи\"\n    \u002F\u002F Це еквівалентно: calculateSum(\"Загальний бал\", 85, 92, 78, 96)\n}\n",[3753,33601,33602,33608,33612,33618,33622,33627,33655,33663,33668,33686,33695,33699,33731,33735,33739,33747,33752,33772,33776,33781,33812,33851,33855,33860,33888,33913,33918,33923],{"__ignoreMap":3992},[4005,33603,33604,33606],{"class":4007,"line":4008},[4005,33605,5739],{"class":4171},[4005,33607,5742],{"class":4178},[4005,33609,33610],{"class":4007,"line":4014},[4005,33611,4036],{"emptyLinePlaceholder":4035},[4005,33613,33614,33616],{"class":4007,"line":4020},[4005,33615,3917],{"class":4836},[4005,33617,7656],{"class":4330},[4005,33619,33620],{"class":4007,"line":4026},[4005,33621,4036],{"emptyLinePlaceholder":4035},[4005,33623,33624],{"class":4007,"line":4032},[4005,33625,33626],{"class":4190},"\u002F\u002F Варіативна функція розрахунку суми будь-якої кількості чисел\n",[4005,33628,33629,33631,33634,33636,33638,33640,33642,33644,33647,33649,33651,33653],{"class":4007,"line":4039},[4005,33630,4299],{"class":4171},[4005,33632,33633],{"class":4302}," calculateSum",[4005,33635,4611],{"class":4182},[4005,33637,13318],{"class":4174},[4005,33639,4237],{"class":4178},[4005,33641,3836],{"class":4182},[4005,33643,29814],{"class":4174},[4005,33645,33646],{"class":4182}," ...",[4005,33648,4158],{"class":4178},[4005,33650,4498],{"class":4182},[4005,33652,7004],{"class":4178},[4005,33654,5073],{"class":4182},[4005,33656,33657,33659,33661],{"class":4007,"line":4045},[4005,33658,29052],{"class":4174},[4005,33660,4314],{"class":4182},[4005,33662,8013],{"class":4186},[4005,33664,33665],{"class":4007,"line":4051},[4005,33666,33667],{"class":4190},"    \u002F\u002F numbers всередині функції є зрізом []int\n",[4005,33669,33670,33672,33674,33676,33678,33680,33682,33684],{"class":4007,"line":4057},[4005,33671,12138],{"class":4836},[4005,33673,17642],{"class":4174},[4005,33675,3836],{"class":4182},[4005,33677,11101],{"class":4174},[4005,33679,4314],{"class":4182},[4005,33681,12151],{"class":4836},[4005,33683,29774],{"class":4174},[4005,33685,5073],{"class":4182},[4005,33687,33688,33690,33692],{"class":4007,"line":4063},[4005,33689,29079],{"class":4174},[4005,33691,23417],{"class":4182},[4005,33693,33694],{"class":4174},"n\n",[4005,33696,33697],{"class":4007,"line":4069},[4005,33698,5127],{"class":4182},[4005,33700,33701,33703,33705,33707,33709,33711,33713,33715,33717,33719,33721,33723,33725,33727,33729],{"class":4007,"line":4075},[4005,33702,5260],{"class":4836},[4005,33704,32994],{"class":4174},[4005,33706,3769],{"class":4182},[4005,33708,32999],{"class":4302},[4005,33710,4611],{"class":4182},[4005,33712,7968],{"class":4330},[4005,33714,16775],{"class":4174},[4005,33716,11172],{"class":4330},[4005,33718,7959],{"class":4174},[4005,33720,7968],{"class":4330},[4005,33722,3836],{"class":4182},[4005,33724,13318],{"class":4174},[4005,33726,3836],{"class":4182},[4005,33728,29102],{"class":4174},[4005,33730,4482],{"class":4182},[4005,33732,33733],{"class":4007,"line":4081},[4005,33734,4078],{"class":4182},[4005,33736,33737],{"class":4007,"line":4086},[4005,33738,4036],{"emptyLinePlaceholder":4035},[4005,33740,33741,33743,33745],{"class":4007,"line":4092},[4005,33742,4299],{"class":4171},[4005,33744,5764],{"class":4302},[4005,33746,4306],{"class":4182},[4005,33748,33749],{"class":4007,"line":4098},[4005,33750,33751],{"class":4190},"    \u002F\u002F 1. Виклик без чисел (numbers буде порожнім зрізом nil \u002F len=0)\n",[4005,33753,33754,33756,33758,33760,33762,33765,33767,33770],{"class":4007,"line":4104},[4005,33755,5370],{"class":4174},[4005,33757,3769],{"class":4182},[4005,33759,5348],{"class":4302},[4005,33761,4611],{"class":4182},[4005,33763,33764],{"class":4302},"calculateSum",[4005,33766,4611],{"class":4182},[4005,33768,33769],{"class":4330},"\"Порожня сума\"",[4005,33771,25552],{"class":4182},[4005,33773,33774],{"class":4007,"line":4110},[4005,33775,4036],{"emptyLinePlaceholder":4035},[4005,33777,33778],{"class":4007,"line":4937},[4005,33779,33780],{"class":4190},"    \u002F\u002F 2. Передача довільної кількості аргументів через кому\n",[4005,33782,33783,33785,33787,33789,33791,33793,33795,33798,33800,33802,33804,33806,33808,33810],{"class":4007,"line":4942},[4005,33784,5370],{"class":4174},[4005,33786,3769],{"class":4182},[4005,33788,5348],{"class":4302},[4005,33790,4611],{"class":4182},[4005,33792,33764],{"class":4302},[4005,33794,4611],{"class":4182},[4005,33796,33797],{"class":4330},"\"Сума трьох чисел\"",[4005,33799,3836],{"class":4182},[4005,33801,4631],{"class":4186},[4005,33803,3836],{"class":4182},[4005,33805,5335],{"class":4186},[4005,33807,3836],{"class":4182},[4005,33809,4276],{"class":4186},[4005,33811,25552],{"class":4182},[4005,33813,33814,33816,33818,33820,33822,33824,33826,33829,33831,33833,33835,33837,33839,33841,33843,33845,33847,33849],{"class":4007,"line":4947},[4005,33815,5370],{"class":4174},[4005,33817,3769],{"class":4182},[4005,33819,5348],{"class":4302},[4005,33821,4611],{"class":4182},[4005,33823,33764],{"class":4302},[4005,33825,4611],{"class":4182},[4005,33827,33828],{"class":4330},"\"Сума п'яти чисел\"",[4005,33830,3836],{"class":4182},[4005,33832,4393],{"class":4186},[4005,33834,3836],{"class":4182},[4005,33836,4398],{"class":4186},[4005,33838,3836],{"class":4182},[4005,33840,6286],{"class":4186},[4005,33842,3836],{"class":4182},[4005,33844,8245],{"class":4186},[4005,33846,3836],{"class":4182},[4005,33848,5869],{"class":4186},[4005,33850,25552],{"class":4182},[4005,33852,33853],{"class":4007,"line":4953},[4005,33854,4036],{"emptyLinePlaceholder":4035},[4005,33856,33857],{"class":4007,"line":4960},[4005,33858,33859],{"class":4190},"    \u002F\u002F 3. Розпакування зрізу за допомогою синтаксису slice...\n",[4005,33861,33862,33865,33867,33869,33871,33873,33875,33877,33879,33881,33883,33886],{"class":4007,"line":4973},[4005,33863,33864],{"class":4174},"    userScores",[4005,33866,11583],{"class":4182},[4005,33868,4158],{"class":4178},[4005,33870,16268],{"class":4182},[4005,33872,28929],{"class":4186},[4005,33874,3836],{"class":4182},[4005,33876,28934],{"class":4186},[4005,33878,3836],{"class":4182},[4005,33880,28939],{"class":4186},[4005,33882,3836],{"class":4182},[4005,33884,33885],{"class":4186},"96",[4005,33887,4078],{"class":4182},[4005,33889,33890,33892,33894,33896,33898,33900,33902,33905,33907,33910],{"class":4007,"line":4985},[4005,33891,5370],{"class":4174},[4005,33893,3769],{"class":4182},[4005,33895,5348],{"class":4302},[4005,33897,4611],{"class":4182},[4005,33899,33764],{"class":4302},[4005,33901,4611],{"class":4182},[4005,33903,33904],{"class":4330},"\"Загальний бал\"",[4005,33906,3836],{"class":4182},[4005,33908,33909],{"class":4174},"userScores",[4005,33911,33912],{"class":4182},"...))\n",[4005,33914,33915],{"class":4007,"line":7813},[4005,33916,33917],{"class":4190},"    \u002F\u002F userScores... означає \"розпакувати зріз на окремі аргументи\"\n",[4005,33919,33920],{"class":4007,"line":7819},[4005,33921,33922],{"class":4190},"    \u002F\u002F Це еквівалентно: calculateSum(\"Загальний бал\", 85, 92, 78, 96)\n",[4005,33924,33925],{"class":4007,"line":7826},[4005,33926,4078],{"class":4182},[4748,33928,33929,33937,33947,33951,34050,34054,34078,34082,34136,34140,34159,34163,34451,34455,34593,34597,34688],{"icon":4750},[3908,33930,33931],{},[3871,33932,33933,33934,33936],{},"Синтаксис ",[3753,33935,30101],{}," (три крапки): два різні значення!",[3908,33938,33939,33940,33942,33943,33946],{},"У Go три крапки ",[3753,33941,30101],{}," мають ",[3871,33944,33945],{},"два різні значення"," залежно від контексту:",[3976,33948,33950],{"id":33949},"_1-у-сигнатурі-функції-варіативний-параметр-приймання","1. У сигнатурі функції: варіативний параметр (приймання)",[3984,33952,33954],{"className":4162,"code":33953,"language":4164,"meta":3992,"style":3992},"func sum(numbers ...int) int {\n    \u002F\u002F numbers — це зріз []int\n    \u002F\u002F Функція може прийняти будь-яку кількість int аргументів\n}\n\nsum(1, 2, 3)        \u002F\u002F OK\nsum(10, 20, 30, 40) \u002F\u002F OK\nsum()               \u002F\u002F OK (порожній зріз)\n",[3753,33955,33956,33977,33982,33987,33991,33995,34016,34040],{"__ignoreMap":3992},[4005,33957,33958,33960,33963,33965,33967,33969,33971,33973,33975],{"class":4007,"line":4008},[4005,33959,4299],{"class":4171},[4005,33961,33962],{"class":4302}," sum",[4005,33964,4611],{"class":4182},[4005,33966,29814],{"class":4174},[4005,33968,33646],{"class":4182},[4005,33970,4158],{"class":4178},[4005,33972,4498],{"class":4182},[4005,33974,4158],{"class":4178},[4005,33976,5073],{"class":4182},[4005,33978,33979],{"class":4007,"line":4014},[4005,33980,33981],{"class":4190},"    \u002F\u002F numbers — це зріз []int\n",[4005,33983,33984],{"class":4007,"line":4020},[4005,33985,33986],{"class":4190},"    \u002F\u002F Функція може прийняти будь-яку кількість int аргументів\n",[4005,33988,33989],{"class":4007,"line":4026},[4005,33990,4078],{"class":4182},[4005,33992,33993],{"class":4007,"line":4032},[4005,33994,4036],{"emptyLinePlaceholder":4035},[4005,33996,33997,33999,34001,34003,34005,34007,34009,34011,34013],{"class":4007,"line":4039},[4005,33998,9671],{"class":4302},[4005,34000,4611],{"class":4182},[4005,34002,4393],{"class":4186},[4005,34004,3836],{"class":4182},[4005,34006,4398],{"class":4186},[4005,34008,3836],{"class":4182},[4005,34010,6286],{"class":4186},[4005,34012,16007],{"class":4182},[4005,34014,34015],{"class":4190},"\u002F\u002F OK\n",[4005,34017,34018,34020,34022,34024,34026,34028,34030,34032,34034,34036,34038],{"class":4007,"line":4045},[4005,34019,9671],{"class":4302},[4005,34021,4611],{"class":4182},[4005,34023,4631],{"class":4186},[4005,34025,3836],{"class":4182},[4005,34027,5335],{"class":4186},[4005,34029,3836],{"class":4182},[4005,34031,4276],{"class":4186},[4005,34033,3836],{"class":4182},[4005,34035,30569],{"class":4186},[4005,34037,4498],{"class":4182},[4005,34039,34015],{"class":4190},[4005,34041,34042,34044,34047],{"class":4007,"line":4051},[4005,34043,9671],{"class":4302},[4005,34045,34046],{"class":4182},"()               ",[4005,34048,34049],{"class":4190},"\u002F\u002F OK (порожній зріз)\n",[3908,34051,34052],{},[3871,34053,33239],{},[3746,34055,34056,34064,34071],{},[3749,34057,34058,34059,11172,34062],{},"Вказується ",[3871,34060,34061],{},"перед типом",[3753,34063,33573],{},[3749,34065,34066,34067,34070],{},"Може бути тільки ",[3871,34068,34069],{},"один"," варіативний параметр",[3749,34072,34073,34074,34077],{},"Повинен бути ",[3871,34075,34076],{},"останнім"," у списку параметрів",[3976,34079,34081],{"id":34080},"_2-при-виклику-функції-розпакування-зрізу-передача","2. При виклику функції: розпакування зрізу (передача)",[3984,34083,34085],{"className":4162,"code":34084,"language":4164,"meta":3992,"style":3992},"numbers := []int{1, 2, 3, 4, 5}\nsum(numbers...)  \u002F\u002F Розпаковує зріз на окремі аргументи\n\u002F\u002F Еквівалентно: sum(1, 2, 3, 4, 5)\n",[3753,34086,34087,34117,34131],{"__ignoreMap":3992},[4005,34088,34089,34091,34093,34095,34097,34099,34101,34103,34105,34107,34109,34111,34113,34115],{"class":4007,"line":4008},[4005,34090,29814],{"class":4174},[4005,34092,11583],{"class":4182},[4005,34094,4158],{"class":4178},[4005,34096,16268],{"class":4182},[4005,34098,4393],{"class":4186},[4005,34100,3836],{"class":4182},[4005,34102,4398],{"class":4186},[4005,34104,3836],{"class":4182},[4005,34106,6286],{"class":4186},[4005,34108,3836],{"class":4182},[4005,34110,8245],{"class":4186},[4005,34112,3836],{"class":4182},[4005,34114,5869],{"class":4186},[4005,34116,4078],{"class":4182},[4005,34118,34119,34121,34123,34125,34128],{"class":4007,"line":4014},[4005,34120,9671],{"class":4302},[4005,34122,4611],{"class":4182},[4005,34124,29814],{"class":4174},[4005,34126,34127],{"class":4182},"...)  ",[4005,34129,34130],{"class":4190},"\u002F\u002F Розпаковує зріз на окремі аргументи\n",[4005,34132,34133],{"class":4007,"line":4020},[4005,34134,34135],{"class":4190},"\u002F\u002F Еквівалентно: sum(1, 2, 3, 4, 5)\n",[3908,34137,34138],{},[3871,34139,33239],{},[3746,34141,34142,34150,34156],{},[3749,34143,34058,34144,11172,34147],{},[3871,34145,34146],{},"після змінної",[3753,34148,34149],{},"slice...",[3749,34151,34152,34153],{},"Можна використовувати тільки зі ",[3871,34154,34155],{},"зрізами",[3749,34157,34158],{},"Тип елементів зрізу повинен збігатися з типом параметра функції",[3976,34160,34162],{"id":34161},"практичні-приклади-1","Практичні приклади:",[3984,34164,34166],{"className":4162,"code":34165,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Варіативна функція\nfunc printAll(items ...string) {\n    for i, item := range items {\n        fmt.Printf(\"%d: %s\\n\", i+1, item)\n    }\n}\n\nfunc main() {\n    \u002F\u002F Спосіб 1: передача аргументів окремо\n    printAll(\"яблуко\", \"банан\", \"апельсин\")\n    \n    \u002F\u002F Спосіб 2: розпакування зрізу\n    fruits := []string{\"яблуко\", \"банан\", \"апельсин\"}\n    printAll(fruits...)  \u002F\u002F Те саме, що й спосіб 1\n    \n    \u002F\u002F Спосіб 3: комбінація (НЕ працює!)\n    \u002F\u002F printAll(\"груша\", fruits...)  \u002F\u002F ❌ Помилка компіляції!\n    \u002F\u002F Варіативний параметр може бути тільки останнім\n    \n    \u002F\u002F Спосіб 4: об'єднання зрізів\n    moreFruits := []string{\"манго\", \"ківі\"}\n    allFruits := append(fruits, moreFruits...)  \u002F\u002F Розпаковуємо другий зріз\n    printAll(allFruits...)\n}\n",[3753,34167,34168,34174,34178,34184,34188,34193,34211,34231,34267,34271,34275,34279,34287,34292,34314,34318,34323,34346,34360,34364,34369,34377,34382,34386,34391,34412,34435,34447],{"__ignoreMap":3992},[4005,34169,34170,34172],{"class":4007,"line":4008},[4005,34171,5739],{"class":4171},[4005,34173,5742],{"class":4178},[4005,34175,34176],{"class":4007,"line":4014},[4005,34177,4036],{"emptyLinePlaceholder":4035},[4005,34179,34180,34182],{"class":4007,"line":4020},[4005,34181,3917],{"class":4836},[4005,34183,7656],{"class":4330},[4005,34185,34186],{"class":4007,"line":4026},[4005,34187,4036],{"emptyLinePlaceholder":4035},[4005,34189,34190],{"class":4007,"line":4032},[4005,34191,34192],{"class":4190},"\u002F\u002F Варіативна функція\n",[4005,34194,34195,34197,34200,34202,34205,34207,34209],{"class":4007,"line":4039},[4005,34196,4299],{"class":4171},[4005,34198,34199],{"class":4302}," printAll",[4005,34201,4611],{"class":4182},[4005,34203,34204],{"class":4174},"items",[4005,34206,33646],{"class":4182},[4005,34208,7004],{"class":4178},[4005,34210,12789],{"class":4182},[4005,34212,34213,34215,34217,34219,34222,34224,34226,34229],{"class":4007,"line":4045},[4005,34214,12138],{"class":4836},[4005,34216,6592],{"class":4174},[4005,34218,3836],{"class":4182},[4005,34220,34221],{"class":4174},"item",[4005,34223,4314],{"class":4182},[4005,34225,12151],{"class":4836},[4005,34227,34228],{"class":4174}," items",[4005,34230,5073],{"class":4182},[4005,34232,34233,34235,34237,34239,34241,34243,34245,34247,34249,34251,34253,34255,34257,34259,34261,34263,34265],{"class":4007,"line":4051},[4005,34234,5343],{"class":4174},[4005,34236,3769],{"class":4182},[4005,34238,7945],{"class":4302},[4005,34240,4611],{"class":4182},[4005,34242,7968],{"class":4330},[4005,34244,7959],{"class":4174},[4005,34246,11172],{"class":4330},[4005,34248,16775],{"class":4174},[4005,34250,7965],{"class":7964},[4005,34252,7968],{"class":4330},[4005,34254,3836],{"class":4182},[4005,34256,27826],{"class":4174},[4005,34258,14837],{"class":4182},[4005,34260,4393],{"class":4186},[4005,34262,3836],{"class":4182},[4005,34264,34221],{"class":4174},[4005,34266,4482],{"class":4182},[4005,34268,34269],{"class":4007,"line":4057},[4005,34270,5127],{"class":4182},[4005,34272,34273],{"class":4007,"line":4063},[4005,34274,4078],{"class":4182},[4005,34276,34277],{"class":4007,"line":4069},[4005,34278,4036],{"emptyLinePlaceholder":4035},[4005,34280,34281,34283,34285],{"class":4007,"line":4075},[4005,34282,4299],{"class":4171},[4005,34284,5764],{"class":4302},[4005,34286,4306],{"class":4182},[4005,34288,34289],{"class":4007,"line":4081},[4005,34290,34291],{"class":4190},"    \u002F\u002F Спосіб 1: передача аргументів окремо\n",[4005,34293,34294,34297,34299,34302,34304,34307,34309,34312],{"class":4007,"line":4086},[4005,34295,34296],{"class":4302},"    printAll",[4005,34298,4611],{"class":4182},[4005,34300,34301],{"class":4330},"\"яблуко\"",[4005,34303,3836],{"class":4182},[4005,34305,34306],{"class":4330},"\"банан\"",[4005,34308,3836],{"class":4182},[4005,34310,34311],{"class":4330},"\"апельсин\"",[4005,34313,4482],{"class":4182},[4005,34315,34316],{"class":4007,"line":4092},[4005,34317,5214],{"class":4182},[4005,34319,34320],{"class":4007,"line":4098},[4005,34321,34322],{"class":4190},"    \u002F\u002F Спосіб 2: розпакування зрізу\n",[4005,34324,34325,34328,34330,34332,34334,34336,34338,34340,34342,34344],{"class":4007,"line":4104},[4005,34326,34327],{"class":4174},"    fruits",[4005,34329,11583],{"class":4182},[4005,34331,7004],{"class":4178},[4005,34333,16268],{"class":4182},[4005,34335,34301],{"class":4330},[4005,34337,3836],{"class":4182},[4005,34339,34306],{"class":4330},[4005,34341,3836],{"class":4182},[4005,34343,34311],{"class":4330},[4005,34345,4078],{"class":4182},[4005,34347,34348,34350,34352,34355,34357],{"class":4007,"line":4110},[4005,34349,34296],{"class":4302},[4005,34351,4611],{"class":4182},[4005,34353,34354],{"class":4174},"fruits",[4005,34356,34127],{"class":4182},[4005,34358,34359],{"class":4190},"\u002F\u002F Те саме, що й спосіб 1\n",[4005,34361,34362],{"class":4007,"line":4937},[4005,34363,5214],{"class":4182},[4005,34365,34366],{"class":4007,"line":4942},[4005,34367,34368],{"class":4190},"    \u002F\u002F Спосіб 3: комбінація (НЕ працює!)\n",[4005,34370,34371,34374],{"class":4007,"line":4947},[4005,34372,34373],{"class":4190},"    \u002F\u002F printAll(\"груша\", fruits...)",[4005,34375,34376],{"class":4190},"  \u002F\u002F ❌ Помилка компіляції!\n",[4005,34378,34379],{"class":4007,"line":4953},[4005,34380,34381],{"class":4190},"    \u002F\u002F Варіативний параметр може бути тільки останнім\n",[4005,34383,34384],{"class":4007,"line":4960},[4005,34385,5214],{"class":4182},[4005,34387,34388],{"class":4007,"line":4973},[4005,34389,34390],{"class":4190},"    \u002F\u002F Спосіб 4: об'єднання зрізів\n",[4005,34392,34393,34396,34398,34400,34402,34405,34407,34410],{"class":4007,"line":4985},[4005,34394,34395],{"class":4174},"    moreFruits",[4005,34397,11583],{"class":4182},[4005,34399,7004],{"class":4178},[4005,34401,16268],{"class":4182},[4005,34403,34404],{"class":4330},"\"манго\"",[4005,34406,3836],{"class":4182},[4005,34408,34409],{"class":4330},"\"ківі\"",[4005,34411,4078],{"class":4182},[4005,34413,34414,34417,34419,34421,34423,34425,34427,34430,34432],{"class":4007,"line":7813},[4005,34415,34416],{"class":4174},"    allFruits",[4005,34418,4314],{"class":4182},[4005,34420,17678],{"class":4302},[4005,34422,4611],{"class":4182},[4005,34424,34354],{"class":4174},[4005,34426,3836],{"class":4182},[4005,34428,34429],{"class":4174},"moreFruits",[4005,34431,34127],{"class":4182},[4005,34433,34434],{"class":4190},"\u002F\u002F Розпаковуємо другий зріз\n",[4005,34436,34437,34439,34441,34444],{"class":4007,"line":7819},[4005,34438,34296],{"class":4302},[4005,34440,4611],{"class":4182},[4005,34442,34443],{"class":4174},"allFruits",[4005,34445,34446],{"class":4182},"...)\n",[4005,34448,34449],{"class":4007,"line":7826},[4005,34450,4078],{"class":4182},[3976,34452,34454],{"id":34453},"типові-помилки","Типові помилки:",[3984,34456,34458],{"className":4162,"code":34457,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ❌ ПОМИЛКА: ... не в кінці списку параметрів\nfunc wrong(a ...int, b string) { }\n\n\u002F\u002F ❌ ПОМИЛКА: два варіативних параметри\nfunc wrong(a ...int, b ...string) { }\n\n\u002F\u002F ❌ ПОМИЛКА: розпакування не-зрізу\nnumbers := 42\nsum(numbers...)  \u002F\u002F Не працює! numbers — не зріз\n\n\u002F\u002F ❌ ПОМИЛКА: неправильний тип\nfloats := []float64{1.5, 2.5}\nsum(floats...)  \u002F\u002F Не працює! sum приймає ...int, а не float64\n",[3753,34459,34460,34465,34488,34492,34497,34521,34525,34530,34538,34551,34555,34560,34580],{"__ignoreMap":3992},[4005,34461,34462],{"class":4007,"line":4008},[4005,34463,34464],{"class":4190},"\u002F\u002F ❌ ПОМИЛКА: ... не в кінці списку параметрів\n",[4005,34466,34467,34469,34472,34474,34476,34478,34480,34482,34484,34486],{"class":4007,"line":4014},[4005,34468,4299],{"class":4171},[4005,34470,34471],{"class":4302}," wrong",[4005,34473,4611],{"class":4182},[4005,34475,9306],{"class":4174},[4005,34477,33646],{"class":4182},[4005,34479,4158],{"class":4178},[4005,34481,3836],{"class":4182},[4005,34483,4381],{"class":4174},[4005,34485,4237],{"class":4178},[4005,34487,33203],{"class":4182},[4005,34489,34490],{"class":4007,"line":4020},[4005,34491,4036],{"emptyLinePlaceholder":4035},[4005,34493,34494],{"class":4007,"line":4026},[4005,34495,34496],{"class":4190},"\u002F\u002F ❌ ПОМИЛКА: два варіативних параметри\n",[4005,34498,34499,34501,34503,34505,34507,34509,34511,34513,34515,34517,34519],{"class":4007,"line":4032},[4005,34500,4299],{"class":4171},[4005,34502,34471],{"class":4302},[4005,34504,4611],{"class":4182},[4005,34506,9306],{"class":4174},[4005,34508,33646],{"class":4182},[4005,34510,4158],{"class":4178},[4005,34512,3836],{"class":4182},[4005,34514,4381],{"class":4174},[4005,34516,33646],{"class":4182},[4005,34518,7004],{"class":4178},[4005,34520,33203],{"class":4182},[4005,34522,34523],{"class":4007,"line":4039},[4005,34524,4036],{"emptyLinePlaceholder":4035},[4005,34526,34527],{"class":4007,"line":4045},[4005,34528,34529],{"class":4190},"\u002F\u002F ❌ ПОМИЛКА: розпакування не-зрізу\n",[4005,34531,34532,34534,34536],{"class":4007,"line":4051},[4005,34533,29814],{"class":4174},[4005,34535,4314],{"class":4182},[4005,34537,7153],{"class":4186},[4005,34539,34540,34542,34544,34546,34548],{"class":4007,"line":4057},[4005,34541,9671],{"class":4302},[4005,34543,4611],{"class":4182},[4005,34545,29814],{"class":4174},[4005,34547,34127],{"class":4182},[4005,34549,34550],{"class":4190},"\u002F\u002F Не працює! numbers — не зріз\n",[4005,34552,34553],{"class":4007,"line":4063},[4005,34554,4036],{"emptyLinePlaceholder":4035},[4005,34556,34557],{"class":4007,"line":4069},[4005,34558,34559],{"class":4190},"\u002F\u002F ❌ ПОМИЛКА: неправильний тип\n",[4005,34561,34562,34565,34567,34569,34571,34574,34576,34578],{"class":4007,"line":4075},[4005,34563,34564],{"class":4174},"floats",[4005,34566,11583],{"class":4182},[4005,34568,8437],{"class":4178},[4005,34570,16268],{"class":4182},[4005,34572,34573],{"class":4186},"1.5",[4005,34575,3836],{"class":4182},[4005,34577,22753],{"class":4186},[4005,34579,4078],{"class":4182},[4005,34581,34582,34584,34586,34588,34590],{"class":4007,"line":4081},[4005,34583,9671],{"class":4302},[4005,34585,4611],{"class":4182},[4005,34587,34564],{"class":4174},[4005,34589,34127],{"class":4182},[4005,34591,34592],{"class":4190},"\u002F\u002F Не працює! sum приймає ...int, а не float64\n",[3976,34594,34596],{"id":34595},"порівняння-з-іншими-мовами-1","Порівняння з іншими мовами:",[5991,34598,34599,34611],{},[5994,34600,34601],{},[5997,34602,34603,34605,34608],{},[6000,34604,30142],{},[6000,34606,34607],{},"Варіативні параметри",[6000,34609,34610],{},"Розпакування",[6010,34612,34613,34629,34645,34661,34675],{},[5997,34614,34615,34619,34624],{},[6015,34616,34617],{},[3871,34618,12539],{},[6015,34620,34621],{},[3753,34622,34623],{},"func f(args ...int)",[6015,34625,34626],{},[3753,34627,34628],{},"f(slice...)",[5997,34630,34631,34635,34640],{},[6015,34632,34633],{},[3871,34634,1913],{},[6015,34636,34637],{},[3753,34638,34639],{},"function f(...args)",[6015,34641,34642],{},[3753,34643,34644],{},"f(...array)",[5997,34646,34647,34651,34656],{},[6015,34648,34649],{},[3871,34650,2548],{},[6015,34652,34653],{},[3753,34654,34655],{},"def f(*args)",[6015,34657,34658],{},[3753,34659,34660],{},"f(*list)",[5997,34662,34663,34667,34672],{},[6015,34664,34665],{},[3871,34666,2367],{},[6015,34668,34669],{},[3753,34670,34671],{},"void f(int... args)",[6015,34673,34674],{},"❌ Немає",[5997,34676,34677,34681,34686],{},[6015,34678,34679],{},[3871,34680,5],{},[6015,34682,34683],{},[3753,34684,34685],{},"void f(params int[] args)",[6015,34687,34674],{},[3908,34689,34690,3880,34692,34694,34695,34697],{},[3871,34691,6383],{},[3753,34693,30101],{}," перед типом = прийом багатьох аргументів, ",[3753,34696,30101],{}," після змінної = розпакування зрізу.",[3900,34699],{},[3976,34701,34703],{"id":34702},"повернення-результатів-множинні-та-іменовані-значення","Повернення результатів: множинні та іменовані значення",[3908,34705,34706,34707,34710,34711,3769],{},"На відміну від C++, Java або Python, де функції повертають лише одне значення (змушуючи кидати важкі винятки ",[3753,34708,34709],{},"try\u002Fcatch"," або пакувати дані в класи-обгортки), ",[3871,34712,34713],{},"у Go функції можуть повертати кілька незалежних значень одночасно",[9014,34715,34717],{"id":34716},"множинне-повернення-multiple-return-values","Множинне повернення (Multiple Return Values)",[3908,34719,34720,34721,5831],{},"Ключова архітектурна особливість Go — повернення пари ",[3753,34722,34723],{},"(Результат, Помилка)",[3984,34725,34727],{"className":4162,"code":34726,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"errors\"\n    \"fmt\"\n)\n\n\u002F\u002F Функція безпечного ділення: повертає результат ТА помилку\nfunc safeDivide(dividend, divisor float64) (float64, error) {\n    if divisor == 0 {\n        return 0, errors.New(\"помилка математики: ділення на нуль неможливе\")\n    }\n    return dividend \u002F divisor, nil \u002F\u002F nil означає відсутність помилки\n}\n\nfunc main() {\n    \u002F\u002F Отримання двох результатів\n    res, err := safeDivide(10, 2)\n    if err != nil {\n        fmt.Println(\"Помилка:\", err)\n        return\n    }\n    fmt.Printf(\"Результат ділення: %.2f\\n\", res)\n\n    \u002F\u002F Ігнорування результату або помилки через Blank Identifier (_)\n    _, errDivZero := safeDivide(10, 0)\n    if errDivZero != nil {\n        fmt.Println(\"Очікувано перехоплено помилку:\", errDivZero)\n    }\n}\n",[3753,34728,34729,34735,34739,34745,34750,34754,34758,34762,34767,34797,34810,34834,34838,34856,34860,34864,34872,34877,34900,34912,34931,34936,34940,34965,34969,34974,34997,35010,35029,35033],{"__ignoreMap":3992},[4005,34730,34731,34733],{"class":4007,"line":4008},[4005,34732,5739],{"class":4171},[4005,34734,5742],{"class":4178},[4005,34736,34737],{"class":4007,"line":4014},[4005,34738,4036],{"emptyLinePlaceholder":4035},[4005,34740,34741,34743],{"class":4007,"line":4020},[4005,34742,3917],{"class":4836},[4005,34744,4439],{"class":4182},[4005,34746,34747],{"class":4007,"line":4026},[4005,34748,34749],{"class":4330},"    \"errors\"\n",[4005,34751,34752],{"class":4007,"line":4032},[4005,34753,4843],{"class":4330},[4005,34755,34756],{"class":4007,"line":4039},[4005,34757,4482],{"class":4182},[4005,34759,34760],{"class":4007,"line":4045},[4005,34761,4036],{"emptyLinePlaceholder":4035},[4005,34763,34764],{"class":4007,"line":4051},[4005,34765,34766],{"class":4190},"\u002F\u002F Функція безпечного ділення: повертає результат ТА помилку\n",[4005,34768,34769,34771,34774,34776,34779,34781,34784,34786,34789,34791,34793,34795],{"class":4007,"line":4057},[4005,34770,4299],{"class":4171},[4005,34772,34773],{"class":4302}," safeDivide",[4005,34775,4611],{"class":4182},[4005,34777,34778],{"class":4174},"dividend",[4005,34780,3836],{"class":4182},[4005,34782,34783],{"class":4174},"divisor",[4005,34785,5907],{"class":4178},[4005,34787,34788],{"class":4182},") (",[4005,34790,8437],{"class":4178},[4005,34792,3836],{"class":4182},[4005,34794,3857],{"class":4178},[4005,34796,12789],{"class":4182},[4005,34798,34799,34801,34804,34806,34808],{"class":4007,"line":4063},[4005,34800,5104],{"class":4836},[4005,34802,34803],{"class":4174}," divisor",[4005,34805,5473],{"class":4182},[4005,34807,4200],{"class":4186},[4005,34809,5073],{"class":4182},[4005,34811,34812,34814,34817,34819,34822,34824,34827,34829,34832],{"class":4007,"line":4069},[4005,34813,5119],{"class":4836},[4005,34815,34816],{"class":4186}," 0",[4005,34818,3836],{"class":4182},[4005,34820,34821],{"class":4174},"errors",[4005,34823,3769],{"class":4182},[4005,34825,34826],{"class":4302},"New",[4005,34828,4611],{"class":4182},[4005,34830,34831],{"class":4330},"\"помилка математики: ділення на нуль неможливе\"",[4005,34833,4482],{"class":4182},[4005,34835,34836],{"class":4007,"line":4075},[4005,34837,5127],{"class":4182},[4005,34839,34840,34842,34845,34847,34849,34851,34853],{"class":4007,"line":4081},[4005,34841,5260],{"class":4836},[4005,34843,34844],{"class":4174}," dividend",[4005,34846,15549],{"class":4182},[4005,34848,34783],{"class":4174},[4005,34850,3836],{"class":4182},[4005,34852,4209],{"class":4171},[4005,34854,34855],{"class":4190}," \u002F\u002F nil означає відсутність помилки\n",[4005,34857,34858],{"class":4007,"line":4086},[4005,34859,4078],{"class":4182},[4005,34861,34862],{"class":4007,"line":4092},[4005,34863,4036],{"emptyLinePlaceholder":4035},[4005,34865,34866,34868,34870],{"class":4007,"line":4098},[4005,34867,4299],{"class":4171},[4005,34869,5764],{"class":4302},[4005,34871,4306],{"class":4182},[4005,34873,34874],{"class":4007,"line":4104},[4005,34875,34876],{"class":4190},"    \u002F\u002F Отримання двох результатів\n",[4005,34878,34879,34881,34883,34885,34887,34890,34892,34894,34896,34898],{"class":4007,"line":4110},[4005,34880,33061],{"class":4174},[4005,34882,3836],{"class":4182},[4005,34884,4598],{"class":4174},[4005,34886,4314],{"class":4182},[4005,34888,34889],{"class":4302},"safeDivide",[4005,34891,4611],{"class":4182},[4005,34893,4631],{"class":4186},[4005,34895,3836],{"class":4182},[4005,34897,4398],{"class":4186},[4005,34899,4482],{"class":4182},[4005,34901,34902,34904,34906,34908,34910],{"class":4007,"line":4937},[4005,34903,5104],{"class":4836},[4005,34905,5107],{"class":4174},[4005,34907,5110],{"class":4182},[4005,34909,4209],{"class":4171},[4005,34911,5073],{"class":4182},[4005,34913,34914,34916,34918,34920,34922,34925,34927,34929],{"class":4007,"line":4942},[4005,34915,5343],{"class":4174},[4005,34917,3769],{"class":4182},[4005,34919,5348],{"class":4302},[4005,34921,4611],{"class":4182},[4005,34923,34924],{"class":4330},"\"Помилка:\"",[4005,34926,3836],{"class":4182},[4005,34928,4598],{"class":4174},[4005,34930,4482],{"class":4182},[4005,34932,34933],{"class":4007,"line":4947},[4005,34934,34935],{"class":4836},"        return\n",[4005,34937,34938],{"class":4007,"line":4953},[4005,34939,5127],{"class":4182},[4005,34941,34942,34944,34946,34948,34950,34953,34955,34957,34959,34961,34963],{"class":4007,"line":4960},[4005,34943,5370],{"class":4174},[4005,34945,3769],{"class":4182},[4005,34947,7945],{"class":4302},[4005,34949,4611],{"class":4182},[4005,34951,34952],{"class":4330},"\"Результат ділення: ",[4005,34954,10654],{"class":4174},[4005,34956,7965],{"class":7964},[4005,34958,7968],{"class":4330},[4005,34960,3836],{"class":4182},[4005,34962,33129],{"class":4174},[4005,34964,4482],{"class":4182},[4005,34966,34967],{"class":4007,"line":4973},[4005,34968,4036],{"emptyLinePlaceholder":4035},[4005,34970,34971],{"class":4007,"line":4985},[4005,34972,34973],{"class":4190},"    \u002F\u002F Ігнорування результату або помилки через Blank Identifier (_)\n",[4005,34975,34976,34978,34980,34983,34985,34987,34989,34991,34993,34995],{"class":4007,"line":7813},[4005,34977,7689],{"class":4174},[4005,34979,3836],{"class":4182},[4005,34981,34982],{"class":4174},"errDivZero",[4005,34984,4314],{"class":4182},[4005,34986,34889],{"class":4302},[4005,34988,4611],{"class":4182},[4005,34990,4631],{"class":4186},[4005,34992,3836],{"class":4182},[4005,34994,4200],{"class":4186},[4005,34996,4482],{"class":4182},[4005,34998,34999,35001,35004,35006,35008],{"class":4007,"line":7819},[4005,35000,5104],{"class":4836},[4005,35002,35003],{"class":4174}," errDivZero",[4005,35005,5110],{"class":4182},[4005,35007,4209],{"class":4171},[4005,35009,5073],{"class":4182},[4005,35011,35012,35014,35016,35018,35020,35023,35025,35027],{"class":4007,"line":7826},[4005,35013,5343],{"class":4174},[4005,35015,3769],{"class":4182},[4005,35017,5348],{"class":4302},[4005,35019,4611],{"class":4182},[4005,35021,35022],{"class":4330},"\"Очікувано перехоплено помилку:\"",[4005,35024,3836],{"class":4182},[4005,35026,34982],{"class":4174},[4005,35028,4482],{"class":4182},[4005,35030,35031],{"class":4007,"line":7839},[4005,35032,5127],{"class":4182},[4005,35034,35035],{"class":4007,"line":7864},[4005,35036,4078],{"class":4182},[3900,35038],{},[9014,35040,35042],{"id":35041},"іменовані-результати-повернення-named-return-values","Іменовані результати повернення (Named Return Values)",[3908,35044,35045],{},"Ви можете дати імена змінним, які функція повертає, прямо в її заголовку:",[3984,35047,35049],{"className":4162,"code":35048,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Змінні width, height та area автоматично створюються компілятором\n\u002F\u002F із нульовими значеннями (0) на початку виконання функції:\nfunc calculateRectangle(w, h int) (width, height, area int) {\n    width = w\n    height = h\n    area = w * h\n\n    \u002F\u002F \"Голий\" return (Naked return) автоматично повертає width, height, area\n    return\n}\n\nfunc main() {\n    w, h, a := calculateRectangle(5, 10)\n    fmt.Printf(\"Ширина: %d, Висота: %d, Площа: %d кв.од.\\n\", w, h, a)\n}\n",[3753,35050,35051,35057,35061,35067,35071,35076,35081,35117,35127,35136,35149,35153,35158,35163,35167,35171,35179,35207,35253],{"__ignoreMap":3992},[4005,35052,35053,35055],{"class":4007,"line":4008},[4005,35054,5739],{"class":4171},[4005,35056,5742],{"class":4178},[4005,35058,35059],{"class":4007,"line":4014},[4005,35060,4036],{"emptyLinePlaceholder":4035},[4005,35062,35063,35065],{"class":4007,"line":4020},[4005,35064,3917],{"class":4836},[4005,35066,7656],{"class":4330},[4005,35068,35069],{"class":4007,"line":4026},[4005,35070,4036],{"emptyLinePlaceholder":4035},[4005,35072,35073],{"class":4007,"line":4032},[4005,35074,35075],{"class":4190},"\u002F\u002F Змінні width, height та area автоматично створюються компілятором\n",[4005,35077,35078],{"class":4007,"line":4039},[4005,35079,35080],{"class":4190},"\u002F\u002F із нульовими значеннями (0) на початку виконання функції:\n",[4005,35082,35083,35085,35088,35090,35093,35095,35098,35100,35102,35104,35106,35108,35110,35113,35115],{"class":4007,"line":4045},[4005,35084,4299],{"class":4171},[4005,35086,35087],{"class":4302}," calculateRectangle",[4005,35089,4611],{"class":4182},[4005,35091,35092],{"class":4174},"w",[4005,35094,3836],{"class":4182},[4005,35096,35097],{"class":4174},"h",[4005,35099,4224],{"class":4178},[4005,35101,34788],{"class":4182},[4005,35103,33321],{"class":4174},[4005,35105,3836],{"class":4182},[4005,35107,22219],{"class":4174},[4005,35109,3836],{"class":4182},[4005,35111,35112],{"class":4174},"area",[4005,35114,4224],{"class":4178},[4005,35116,12789],{"class":4182},[4005,35118,35119,35122,35124],{"class":4007,"line":4051},[4005,35120,35121],{"class":4174},"    width",[4005,35123,4183],{"class":4182},[4005,35125,35126],{"class":4174},"w\n",[4005,35128,35129,35131,35133],{"class":4007,"line":4057},[4005,35130,22102],{"class":4174},[4005,35132,4183],{"class":4182},[4005,35134,35135],{"class":4174},"h\n",[4005,35137,35138,35141,35143,35145,35147],{"class":4007,"line":4063},[4005,35139,35140],{"class":4174},"    area",[4005,35142,4183],{"class":4182},[4005,35144,35092],{"class":4174},[4005,35146,6735],{"class":4182},[4005,35148,35135],{"class":4174},[4005,35150,35151],{"class":4007,"line":4069},[4005,35152,4036],{"emptyLinePlaceholder":4035},[4005,35154,35155],{"class":4007,"line":4075},[4005,35156,35157],{"class":4190},"    \u002F\u002F \"Голий\" return (Naked return) автоматично повертає width, height, area\n",[4005,35159,35160],{"class":4007,"line":4081},[4005,35161,35162],{"class":4836},"    return\n",[4005,35164,35165],{"class":4007,"line":4086},[4005,35166,4078],{"class":4182},[4005,35168,35169],{"class":4007,"line":4092},[4005,35170,4036],{"emptyLinePlaceholder":4035},[4005,35172,35173,35175,35177],{"class":4007,"line":4098},[4005,35174,4299],{"class":4171},[4005,35176,5764],{"class":4302},[4005,35178,4306],{"class":4182},[4005,35180,35181,35184,35186,35188,35190,35192,35194,35197,35199,35201,35203,35205],{"class":4007,"line":4104},[4005,35182,35183],{"class":4174},"    w",[4005,35185,3836],{"class":4182},[4005,35187,35097],{"class":4174},[4005,35189,3836],{"class":4182},[4005,35191,9306],{"class":4174},[4005,35193,4314],{"class":4182},[4005,35195,35196],{"class":4302},"calculateRectangle",[4005,35198,4611],{"class":4182},[4005,35200,5869],{"class":4186},[4005,35202,3836],{"class":4182},[4005,35204,4631],{"class":4186},[4005,35206,4482],{"class":4182},[4005,35208,35209,35211,35213,35215,35217,35220,35222,35225,35227,35230,35232,35235,35237,35239,35241,35243,35245,35247,35249,35251],{"class":4007,"line":4110},[4005,35210,5370],{"class":4174},[4005,35212,3769],{"class":4182},[4005,35214,7945],{"class":4302},[4005,35216,4611],{"class":4182},[4005,35218,35219],{"class":4330},"\"Ширина: ",[4005,35221,7959],{"class":4174},[4005,35223,35224],{"class":4330},", Висота: ",[4005,35226,7959],{"class":4174},[4005,35228,35229],{"class":4330},", Площа: ",[4005,35231,7959],{"class":4174},[4005,35233,35234],{"class":4330}," кв.од.",[4005,35236,7965],{"class":7964},[4005,35238,7968],{"class":4330},[4005,35240,3836],{"class":4182},[4005,35242,35092],{"class":4174},[4005,35244,3836],{"class":4182},[4005,35246,35097],{"class":4174},[4005,35248,3836],{"class":4182},[4005,35250,9306],{"class":4174},[4005,35252,4482],{"class":4182},[4005,35254,35255],{"class":4007,"line":4937},[4005,35256,4078],{"class":4182},[4748,35258,35259,35262,35263,35266,35267,35270],{},[3871,35260,35261],{},"Рекомендація щодо Naked Return:","\nВикористовуйте \"голий\" ",[3753,35264,35265],{},"return"," тільки в дуже коротких і простих функціях (до 5 рядків). У великих функціях завжди пишіть явний ",[3753,35268,35269],{},"return width, height, area",", щоб не змушувати читача коду шукати по всій функції, що саме зараз записано в іменовані змінні.",[3900,35272],{},[3976,35274,35276],{"id":35275},"функції-першого-класу-функціональний-тип-та-передача-функцій","Функції першого класу: функціональний тип та передача функцій",[9014,35278,35280],{"id":35279},"що-таке-функції-першого-класу","Що таке \"функції першого класу\"?",[3908,35282,35283,4761,35286,35289],{},[3871,35284,35285],{},"Функції першого класу",[3758,35287,35288],{},"first-class functions",") означає, що функції в мові програмування — це повноцінні значення, як числа чи рядки. Їх можна:",[3746,35291,35292,35295,35298,35301],{},[3749,35293,35294],{},"Зберігати в змінних",[3749,35296,35297],{},"Передавати як аргументи іншим функціям",[3749,35299,35300],{},"Повертати з функцій як результат",[3749,35302,35303],{},"Зберігати в структурах даних (масиви, мапи, структури)",[3908,35305,35306,35307,35310],{},"У Go функція ",[3871,35308,35309],{},"має свій тип",", який визначається сигнатурою (параметри + повернені значення).",[9014,35312,35314],{"id":35313},"тип-функції","Тип функції",[3908,35316,35317],{},[3871,35318,35319],{},"Синтаксис типу функції:",[3984,35321,35323],{"className":4162,"code":35322,"language":4164,"meta":3992,"style":3992},"func(параметри) повертає\n",[3753,35324,35325],{"__ignoreMap":3992},[4005,35326,35327,35329,35331,35334,35336],{"class":4007,"line":4008},[4005,35328,4299],{"class":4171},[4005,35330,4611],{"class":4182},[4005,35332,35333],{"class":4178},"параметри",[4005,35335,4498],{"class":4182},[4005,35337,35338],{"class":4174},"повертає\n",[3908,35340,35341],{},[3871,35342,35343],{},"Приклади типів функцій:",[5991,35345,35346,35358],{},[5994,35347,35348],{},[5997,35349,35350,35353,35355],{},[6000,35351,35352],{},"Сигнатура функції",[6000,35354,35314],{},[6000,35356,35357],{},"Пояснення",[6010,35359,35360,35375,35390,35405],{},[5997,35361,35362,35367,35372],{},[6015,35363,35364],{},[3753,35365,35366],{},"func add(a, b int) int",[6015,35368,35369],{},[3753,35370,35371],{},"func(int, int) int",[6015,35373,35374],{},"Приймає 2 int, повертає int",[5997,35376,35377,35382,35387],{},[6015,35378,35379],{},[3753,35380,35381],{},"func greet(name string)",[6015,35383,35384],{},[3753,35385,35386],{},"func(string)",[6015,35388,35389],{},"Приймає string, нічого не повертає",[5997,35391,35392,35397,35402],{},[6015,35393,35394],{},[3753,35395,35396],{},"func getData() (int, error)",[6015,35398,35399],{},[3753,35400,35401],{},"func() (int, error)",[6015,35403,35404],{},"Без параметрів, повертає int і error",[5997,35406,35407,35412,35417],{},[6015,35408,35409],{},[3753,35410,35411],{},"func process(data []byte) bool",[6015,35413,35414],{},[3753,35415,35416],{},"func([]byte) bool",[6015,35418,35419],{},"Приймає зріз байтів, повертає bool",[4748,35421,35422,35427,35435,35441],{"icon":4750},[3908,35423,35424],{},[3871,35425,35426],{},"Дві функції мають однаковий тип, якщо:",[4781,35428,35429,35432],{},[3749,35430,35431],{},"Однакова кількість та типи параметрів (у тому ж порядку)",[3749,35433,35434],{},"Однакова кількість та типи повернених значень (у тому ж порядку)",[3908,35436,35437,35440],{},[3871,35438,35439],{},"Імена параметрів та змінних НЕ важливі"," для типу:",[3984,35442,35444],{"className":4162,"code":35443,"language":4164,"meta":3992,"style":3992},"func add(x, y int) int { return x + y }\nfunc sum(a, b int) int { return a + b }\n\n\u002F\u002F Обидві функції мають ТИП: func(int, int) int\n",[3753,35445,35446,35481,35513,35517],{"__ignoreMap":3992},[4005,35447,35448,35450,35453,35455,35457,35459,35461,35463,35465,35467,35470,35472,35474,35476,35478],{"class":4007,"line":4008},[4005,35449,4299],{"class":4171},[4005,35451,35452],{"class":4302}," add",[4005,35454,4611],{"class":4182},[4005,35456,4621],{"class":4174},[4005,35458,3836],{"class":4182},[4005,35460,4626],{"class":4174},[4005,35462,4224],{"class":4178},[4005,35464,4498],{"class":4182},[4005,35466,4158],{"class":4178},[4005,35468,35469],{"class":4182}," { ",[4005,35471,35265],{"class":4836},[4005,35473,6141],{"class":4174},[4005,35475,6289],{"class":4182},[4005,35477,4626],{"class":4174},[4005,35479,35480],{"class":4182}," }\n",[4005,35482,35483,35485,35487,35489,35491,35493,35495,35497,35499,35501,35503,35505,35507,35509,35511],{"class":4007,"line":4014},[4005,35484,4299],{"class":4171},[4005,35486,33962],{"class":4302},[4005,35488,4611],{"class":4182},[4005,35490,9306],{"class":4174},[4005,35492,3836],{"class":4182},[4005,35494,4381],{"class":4174},[4005,35496,4224],{"class":4178},[4005,35498,4498],{"class":4182},[4005,35500,4158],{"class":4178},[4005,35502,35469],{"class":4182},[4005,35504,35265],{"class":4836},[4005,35506,4376],{"class":4174},[4005,35508,6289],{"class":4182},[4005,35510,4381],{"class":4174},[4005,35512,35480],{"class":4182},[4005,35514,35515],{"class":4007,"line":4020},[4005,35516,4036],{"emptyLinePlaceholder":4035},[4005,35518,35519],{"class":4007,"line":4026},[4005,35520,35521],{"class":4190},"\u002F\u002F Обидві функції мають ТИП: func(int, int) int\n",[9014,35523,35525],{"id":35524},"приклад-1-зберігання-функції-в-змінній","Приклад 1: Зберігання функції в змінній",[3984,35527,35529],{"className":4162,"code":35528,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc add(a, b int) int {\n    return a + b\n}\n\nfunc main() {\n    \u002F\u002F Присвоюємо функцію змінній\n    var operation func(int, int) int\n    operation = add\n    \n    result := operation(5, 3)\n    fmt.Println(\"Результат:\", result)  \u002F\u002F 8\n    \n    \u002F\u002F Короткий запис:\n    calc := add\n    fmt.Println(\"Через calc:\", calc(10, 20))  \u002F\u002F 30\n}\n",[3753,35530,35531,35537,35541,35547,35551,35573,35584,35588,35592,35600,35605,35626,35636,35640,35659,35681,35685,35690,35699,35730],{"__ignoreMap":3992},[4005,35532,35533,35535],{"class":4007,"line":4008},[4005,35534,5739],{"class":4171},[4005,35536,5742],{"class":4178},[4005,35538,35539],{"class":4007,"line":4014},[4005,35540,4036],{"emptyLinePlaceholder":4035},[4005,35542,35543,35545],{"class":4007,"line":4020},[4005,35544,3917],{"class":4836},[4005,35546,7656],{"class":4330},[4005,35548,35549],{"class":4007,"line":4026},[4005,35550,4036],{"emptyLinePlaceholder":4035},[4005,35552,35553,35555,35557,35559,35561,35563,35565,35567,35569,35571],{"class":4007,"line":4032},[4005,35554,4299],{"class":4171},[4005,35556,35452],{"class":4302},[4005,35558,4611],{"class":4182},[4005,35560,9306],{"class":4174},[4005,35562,3836],{"class":4182},[4005,35564,4381],{"class":4174},[4005,35566,4224],{"class":4178},[4005,35568,4498],{"class":4182},[4005,35570,4158],{"class":4178},[4005,35572,5073],{"class":4182},[4005,35574,35575,35577,35579,35581],{"class":4007,"line":4039},[4005,35576,5260],{"class":4836},[4005,35578,4376],{"class":4174},[4005,35580,6289],{"class":4182},[4005,35582,35583],{"class":4174},"b\n",[4005,35585,35586],{"class":4007,"line":4045},[4005,35587,4078],{"class":4182},[4005,35589,35590],{"class":4007,"line":4051},[4005,35591,4036],{"emptyLinePlaceholder":4035},[4005,35593,35594,35596,35598],{"class":4007,"line":4057},[4005,35595,4299],{"class":4171},[4005,35597,5764],{"class":4302},[4005,35599,4306],{"class":4182},[4005,35601,35602],{"class":4007,"line":4063},[4005,35603,35604],{"class":4190},"    \u002F\u002F Присвоюємо функцію змінній\n",[4005,35606,35607,35609,35612,35614,35616,35618,35620,35622,35624],{"class":4007,"line":4069},[4005,35608,9412],{"class":4171},[4005,35610,35611],{"class":4174}," operation",[4005,35613,20015],{"class":4171},[4005,35615,4611],{"class":4182},[4005,35617,4158],{"class":4178},[4005,35619,3836],{"class":4182},[4005,35621,4158],{"class":4178},[4005,35623,4498],{"class":4182},[4005,35625,14224],{"class":4178},[4005,35627,35628,35631,35633],{"class":4007,"line":4075},[4005,35629,35630],{"class":4174},"    operation",[4005,35632,4183],{"class":4182},[4005,35634,35635],{"class":4174},"add\n",[4005,35637,35638],{"class":4007,"line":4081},[4005,35639,5214],{"class":4182},[4005,35641,35642,35644,35646,35649,35651,35653,35655,35657],{"class":4007,"line":4086},[4005,35643,15757],{"class":4174},[4005,35645,4314],{"class":4182},[4005,35647,35648],{"class":4302},"operation",[4005,35650,4611],{"class":4182},[4005,35652,5869],{"class":4186},[4005,35654,3836],{"class":4182},[4005,35656,6286],{"class":4186},[4005,35658,4482],{"class":4182},[4005,35660,35661,35663,35665,35667,35669,35672,35674,35676,35678],{"class":4007,"line":4092},[4005,35662,5370],{"class":4174},[4005,35664,3769],{"class":4182},[4005,35666,5348],{"class":4302},[4005,35668,4611],{"class":4182},[4005,35670,35671],{"class":4330},"\"Результат:\"",[4005,35673,3836],{"class":4182},[4005,35675,5695],{"class":4174},[4005,35677,5196],{"class":4182},[4005,35679,35680],{"class":4190},"\u002F\u002F 8\n",[4005,35682,35683],{"class":4007,"line":4098},[4005,35684,5214],{"class":4182},[4005,35686,35687],{"class":4007,"line":4104},[4005,35688,35689],{"class":4190},"    \u002F\u002F Короткий запис:\n",[4005,35691,35692,35695,35697],{"class":4007,"line":4110},[4005,35693,35694],{"class":4174},"    calc",[4005,35696,4314],{"class":4182},[4005,35698,35635],{"class":4174},[4005,35700,35701,35703,35705,35707,35709,35712,35714,35717,35719,35721,35723,35725,35727],{"class":4007,"line":4937},[4005,35702,5370],{"class":4174},[4005,35704,3769],{"class":4182},[4005,35706,5348],{"class":4302},[4005,35708,4611],{"class":4182},[4005,35710,35711],{"class":4330},"\"Через calc:\"",[4005,35713,3836],{"class":4182},[4005,35715,35716],{"class":4302},"calc",[4005,35718,4611],{"class":4182},[4005,35720,4631],{"class":4186},[4005,35722,3836],{"class":4182},[4005,35724,5335],{"class":4186},[4005,35726,11472],{"class":4182},[4005,35728,35729],{"class":4190},"\u002F\u002F 30\n",[4005,35731,35732],{"class":4007,"line":4942},[4005,35733,4078],{"class":4182},[9014,35735,35737],{"id":35736},"приклад-2-оголошення-власного-функціонального-типу","Приклад 2: Оголошення власного функціонального типу",[3908,35739,35740,35741,5831],{},"Для зручності можна створити аліас типу функції через ",[3753,35742,4809],{},[3984,35744,35746],{"className":4162,"code":35745,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Оголошуємо власний тип для математичних операцій\ntype MathOperation func(int, int) int\n\nfunc add(a, b int) int      { return a + b }\nfunc subtract(a, b int) int { return a - b }\nfunc multiply(a, b int) int { return a * b }\n\nfunc main() {\n    \u002F\u002F Використовуємо власний тип\n    var op MathOperation\n    \n    op = add\n    fmt.Println(\"Додавання:\", op(10, 5))  \u002F\u002F 15\n    \n    op = multiply\n    fmt.Println(\"Множення:\", op(10, 5))   \u002F\u002F 50\n}\n",[3753,35747,35748,35754,35758,35764,35768,35773,35794,35798,35831,35864,35896,35900,35908,35913,35923,35927,35936,35966,35970,35979,36009],{"__ignoreMap":3992},[4005,35749,35750,35752],{"class":4007,"line":4008},[4005,35751,5739],{"class":4171},[4005,35753,5742],{"class":4178},[4005,35755,35756],{"class":4007,"line":4014},[4005,35757,4036],{"emptyLinePlaceholder":4035},[4005,35759,35760,35762],{"class":4007,"line":4020},[4005,35761,3917],{"class":4836},[4005,35763,7656],{"class":4330},[4005,35765,35766],{"class":4007,"line":4026},[4005,35767,4036],{"emptyLinePlaceholder":4035},[4005,35769,35770],{"class":4007,"line":4032},[4005,35771,35772],{"class":4190},"\u002F\u002F Оголошуємо власний тип для математичних операцій\n",[4005,35774,35775,35777,35780,35782,35784,35786,35788,35790,35792],{"class":4007,"line":4039},[4005,35776,4809],{"class":4171},[4005,35778,35779],{"class":4178}," MathOperation",[4005,35781,20015],{"class":4171},[4005,35783,4611],{"class":4182},[4005,35785,4158],{"class":4178},[4005,35787,3836],{"class":4182},[4005,35789,4158],{"class":4178},[4005,35791,4498],{"class":4182},[4005,35793,14224],{"class":4178},[4005,35795,35796],{"class":4007,"line":4045},[4005,35797,4036],{"emptyLinePlaceholder":4035},[4005,35799,35800,35802,35804,35806,35808,35810,35812,35814,35816,35818,35821,35823,35825,35827,35829],{"class":4007,"line":4051},[4005,35801,4299],{"class":4171},[4005,35803,35452],{"class":4302},[4005,35805,4611],{"class":4182},[4005,35807,9306],{"class":4174},[4005,35809,3836],{"class":4182},[4005,35811,4381],{"class":4174},[4005,35813,4224],{"class":4178},[4005,35815,4498],{"class":4182},[4005,35817,4158],{"class":4178},[4005,35819,35820],{"class":4182},"      { ",[4005,35822,35265],{"class":4836},[4005,35824,4376],{"class":4174},[4005,35826,6289],{"class":4182},[4005,35828,4381],{"class":4174},[4005,35830,35480],{"class":4182},[4005,35832,35833,35835,35838,35840,35842,35844,35846,35848,35850,35852,35854,35856,35858,35860,35862],{"class":4007,"line":4057},[4005,35834,4299],{"class":4171},[4005,35836,35837],{"class":4302}," subtract",[4005,35839,4611],{"class":4182},[4005,35841,9306],{"class":4174},[4005,35843,3836],{"class":4182},[4005,35845,4381],{"class":4174},[4005,35847,4224],{"class":4178},[4005,35849,4498],{"class":4182},[4005,35851,4158],{"class":4178},[4005,35853,35469],{"class":4182},[4005,35855,35265],{"class":4836},[4005,35857,4376],{"class":4174},[4005,35859,14546],{"class":4182},[4005,35861,4381],{"class":4174},[4005,35863,35480],{"class":4182},[4005,35865,35866,35868,35870,35872,35874,35876,35878,35880,35882,35884,35886,35888,35890,35892,35894],{"class":4007,"line":4063},[4005,35867,4299],{"class":4171},[4005,35869,32890],{"class":4302},[4005,35871,4611],{"class":4182},[4005,35873,9306],{"class":4174},[4005,35875,3836],{"class":4182},[4005,35877,4381],{"class":4174},[4005,35879,4224],{"class":4178},[4005,35881,4498],{"class":4182},[4005,35883,4158],{"class":4178},[4005,35885,35469],{"class":4182},[4005,35887,35265],{"class":4836},[4005,35889,4376],{"class":4174},[4005,35891,6735],{"class":4182},[4005,35893,4381],{"class":4174},[4005,35895,35480],{"class":4182},[4005,35897,35898],{"class":4007,"line":4069},[4005,35899,4036],{"emptyLinePlaceholder":4035},[4005,35901,35902,35904,35906],{"class":4007,"line":4075},[4005,35903,4299],{"class":4171},[4005,35905,5764],{"class":4302},[4005,35907,4306],{"class":4182},[4005,35909,35910],{"class":4007,"line":4081},[4005,35911,35912],{"class":4190},"    \u002F\u002F Використовуємо власний тип\n",[4005,35914,35915,35917,35920],{"class":4007,"line":4086},[4005,35916,9412],{"class":4171},[4005,35918,35919],{"class":4174}," op",[4005,35921,35922],{"class":4178}," MathOperation\n",[4005,35924,35925],{"class":4007,"line":4092},[4005,35926,5214],{"class":4182},[4005,35928,35929,35932,35934],{"class":4007,"line":4098},[4005,35930,35931],{"class":4174},"    op",[4005,35933,4183],{"class":4182},[4005,35935,35635],{"class":4174},[4005,35937,35938,35940,35942,35944,35946,35949,35951,35954,35956,35958,35960,35962,35964],{"class":4007,"line":4104},[4005,35939,5370],{"class":4174},[4005,35941,3769],{"class":4182},[4005,35943,5348],{"class":4302},[4005,35945,4611],{"class":4182},[4005,35947,35948],{"class":4330},"\"Додавання:\"",[4005,35950,3836],{"class":4182},[4005,35952,35953],{"class":4302},"op",[4005,35955,4611],{"class":4182},[4005,35957,4631],{"class":4186},[4005,35959,3836],{"class":4182},[4005,35961,5869],{"class":4186},[4005,35963,11472],{"class":4182},[4005,35965,23811],{"class":4190},[4005,35967,35968],{"class":4007,"line":4110},[4005,35969,5214],{"class":4182},[4005,35971,35972,35974,35976],{"class":4007,"line":4937},[4005,35973,35931],{"class":4174},[4005,35975,4183],{"class":4182},[4005,35977,35978],{"class":4174},"multiply\n",[4005,35980,35981,35983,35985,35987,35989,35992,35994,35996,35998,36000,36002,36004,36006],{"class":4007,"line":4942},[4005,35982,5370],{"class":4174},[4005,35984,3769],{"class":4182},[4005,35986,5348],{"class":4302},[4005,35988,4611],{"class":4182},[4005,35990,35991],{"class":4330},"\"Множення:\"",[4005,35993,3836],{"class":4182},[4005,35995,35953],{"class":4302},[4005,35997,4611],{"class":4182},[4005,35999,4631],{"class":4186},[4005,36001,3836],{"class":4182},[4005,36003,5869],{"class":4186},[4005,36005,19118],{"class":4182},[4005,36007,36008],{"class":4190},"\u002F\u002F 50\n",[4005,36010,36011],{"class":4007,"line":4947},[4005,36012,4078],{"class":4182},[9014,36014,36016],{"id":36015},"приклад-3-функції-вищого-порядку-higher-order-functions","Приклад 3: Функції вищого порядку (Higher-Order Functions)",[3908,36018,36019,36022],{},[3871,36020,36021],{},"Функція вищого порядку"," — це функція, яка:",[3746,36024,36025,36028],{},[3749,36026,36027],{},"Приймає іншу функцію як параметр, АБО",[3749,36029,36030],{},"Повертає функцію як результат",[3908,36032,36033],{},[3871,36034,36035],{},"A. Функція, що приймає функцію (Callback Pattern):",[3984,36037,36039],{"className":4162,"code":36038,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Operation func(int, int) int\n\n\u002F\u002F Функція вищого порядку — приймає функцію як параметр\nfunc calculate(x, y int, op Operation) int {\n    fmt.Printf(\"Виконуємо операцію над %d та %d\\n\", x, y)\n    return op(x, y)\n}\n\nfunc add(a, b int) int      { return a + b }\nfunc multiply(a, b int) int { return a * b }\n\nfunc main() {\n    \u002F\u002F Передаємо різні функції як аргумент\n    result1 := calculate(10, 5, add)\n    fmt.Println(\"Результат додавання:\", result1)  \u002F\u002F 15\n    \n    result2 := calculate(10, 5, multiply)\n    fmt.Println(\"Результат множення:\", result2)   \u002F\u002F 50\n}\n",[3753,36040,36041,36047,36051,36057,36061,36082,36086,36091,36120,36153,36169,36173,36177,36209,36241,36245,36253,36258,36283,36304,36308,36331,36351],{"__ignoreMap":3992},[4005,36042,36043,36045],{"class":4007,"line":4008},[4005,36044,5739],{"class":4171},[4005,36046,5742],{"class":4178},[4005,36048,36049],{"class":4007,"line":4014},[4005,36050,4036],{"emptyLinePlaceholder":4035},[4005,36052,36053,36055],{"class":4007,"line":4020},[4005,36054,3917],{"class":4836},[4005,36056,7656],{"class":4330},[4005,36058,36059],{"class":4007,"line":4026},[4005,36060,4036],{"emptyLinePlaceholder":4035},[4005,36062,36063,36065,36068,36070,36072,36074,36076,36078,36080],{"class":4007,"line":4032},[4005,36064,4809],{"class":4171},[4005,36066,36067],{"class":4178}," Operation",[4005,36069,20015],{"class":4171},[4005,36071,4611],{"class":4182},[4005,36073,4158],{"class":4178},[4005,36075,3836],{"class":4182},[4005,36077,4158],{"class":4178},[4005,36079,4498],{"class":4182},[4005,36081,14224],{"class":4178},[4005,36083,36084],{"class":4007,"line":4039},[4005,36085,4036],{"emptyLinePlaceholder":4035},[4005,36087,36088],{"class":4007,"line":4045},[4005,36089,36090],{"class":4190},"\u002F\u002F Функція вищого порядку — приймає функцію як параметр\n",[4005,36092,36093,36095,36098,36100,36102,36104,36106,36108,36110,36112,36114,36116,36118],{"class":4007,"line":4051},[4005,36094,4299],{"class":4171},[4005,36096,36097],{"class":4302}," calculate",[4005,36099,4611],{"class":4182},[4005,36101,4621],{"class":4174},[4005,36103,3836],{"class":4182},[4005,36105,4626],{"class":4174},[4005,36107,4224],{"class":4178},[4005,36109,3836],{"class":4182},[4005,36111,35953],{"class":4174},[4005,36113,36067],{"class":4178},[4005,36115,4498],{"class":4182},[4005,36117,4158],{"class":4178},[4005,36119,5073],{"class":4182},[4005,36121,36122,36124,36126,36128,36130,36133,36135,36137,36139,36141,36143,36145,36147,36149,36151],{"class":4007,"line":4057},[4005,36123,5370],{"class":4174},[4005,36125,3769],{"class":4182},[4005,36127,7945],{"class":4302},[4005,36129,4611],{"class":4182},[4005,36131,36132],{"class":4330},"\"Виконуємо операцію над ",[4005,36134,7959],{"class":4174},[4005,36136,8157],{"class":4330},[4005,36138,7959],{"class":4174},[4005,36140,7965],{"class":7964},[4005,36142,7968],{"class":4330},[4005,36144,3836],{"class":4182},[4005,36146,4621],{"class":4174},[4005,36148,3836],{"class":4182},[4005,36150,4626],{"class":4174},[4005,36152,4482],{"class":4182},[4005,36154,36155,36157,36159,36161,36163,36165,36167],{"class":4007,"line":4063},[4005,36156,5260],{"class":4836},[4005,36158,35919],{"class":4302},[4005,36160,4611],{"class":4182},[4005,36162,4621],{"class":4174},[4005,36164,3836],{"class":4182},[4005,36166,4626],{"class":4174},[4005,36168,4482],{"class":4182},[4005,36170,36171],{"class":4007,"line":4069},[4005,36172,4078],{"class":4182},[4005,36174,36175],{"class":4007,"line":4075},[4005,36176,4036],{"emptyLinePlaceholder":4035},[4005,36178,36179,36181,36183,36185,36187,36189,36191,36193,36195,36197,36199,36201,36203,36205,36207],{"class":4007,"line":4081},[4005,36180,4299],{"class":4171},[4005,36182,35452],{"class":4302},[4005,36184,4611],{"class":4182},[4005,36186,9306],{"class":4174},[4005,36188,3836],{"class":4182},[4005,36190,4381],{"class":4174},[4005,36192,4224],{"class":4178},[4005,36194,4498],{"class":4182},[4005,36196,4158],{"class":4178},[4005,36198,35820],{"class":4182},[4005,36200,35265],{"class":4836},[4005,36202,4376],{"class":4174},[4005,36204,6289],{"class":4182},[4005,36206,4381],{"class":4174},[4005,36208,35480],{"class":4182},[4005,36210,36211,36213,36215,36217,36219,36221,36223,36225,36227,36229,36231,36233,36235,36237,36239],{"class":4007,"line":4086},[4005,36212,4299],{"class":4171},[4005,36214,32890],{"class":4302},[4005,36216,4611],{"class":4182},[4005,36218,9306],{"class":4174},[4005,36220,3836],{"class":4182},[4005,36222,4381],{"class":4174},[4005,36224,4224],{"class":4178},[4005,36226,4498],{"class":4182},[4005,36228,4158],{"class":4178},[4005,36230,35469],{"class":4182},[4005,36232,35265],{"class":4836},[4005,36234,4376],{"class":4174},[4005,36236,6735],{"class":4182},[4005,36238,4381],{"class":4174},[4005,36240,35480],{"class":4182},[4005,36242,36243],{"class":4007,"line":4092},[4005,36244,4036],{"emptyLinePlaceholder":4035},[4005,36246,36247,36249,36251],{"class":4007,"line":4098},[4005,36248,4299],{"class":4171},[4005,36250,5764],{"class":4302},[4005,36252,4306],{"class":4182},[4005,36254,36255],{"class":4007,"line":4104},[4005,36256,36257],{"class":4190},"    \u002F\u002F Передаємо різні функції як аргумент\n",[4005,36259,36260,36263,36265,36268,36270,36272,36274,36276,36278,36281],{"class":4007,"line":4110},[4005,36261,36262],{"class":4174},"    result1",[4005,36264,4314],{"class":4182},[4005,36266,36267],{"class":4302},"calculate",[4005,36269,4611],{"class":4182},[4005,36271,4631],{"class":4186},[4005,36273,3836],{"class":4182},[4005,36275,5869],{"class":4186},[4005,36277,3836],{"class":4182},[4005,36279,36280],{"class":4174},"add",[4005,36282,4482],{"class":4182},[4005,36284,36285,36287,36289,36291,36293,36296,36298,36300,36302],{"class":4007,"line":4937},[4005,36286,5370],{"class":4174},[4005,36288,3769],{"class":4182},[4005,36290,5348],{"class":4302},[4005,36292,4611],{"class":4182},[4005,36294,36295],{"class":4330},"\"Результат додавання:\"",[4005,36297,3836],{"class":4182},[4005,36299,10206],{"class":4174},[4005,36301,5196],{"class":4182},[4005,36303,23811],{"class":4190},[4005,36305,36306],{"class":4007,"line":4942},[4005,36307,5214],{"class":4182},[4005,36309,36310,36313,36315,36317,36319,36321,36323,36325,36327,36329],{"class":4007,"line":4947},[4005,36311,36312],{"class":4174},"    result2",[4005,36314,4314],{"class":4182},[4005,36316,36267],{"class":4302},[4005,36318,4611],{"class":4182},[4005,36320,4631],{"class":4186},[4005,36322,3836],{"class":4182},[4005,36324,5869],{"class":4186},[4005,36326,3836],{"class":4182},[4005,36328,33066],{"class":4174},[4005,36330,4482],{"class":4182},[4005,36332,36333,36335,36337,36339,36341,36343,36345,36347,36349],{"class":4007,"line":4953},[4005,36334,5370],{"class":4174},[4005,36336,3769],{"class":4182},[4005,36338,5348],{"class":4302},[4005,36340,4611],{"class":4182},[4005,36342,33124],{"class":4330},[4005,36344,3836],{"class":4182},[4005,36346,10223],{"class":4174},[4005,36348,5381],{"class":4182},[4005,36350,36008],{"class":4190},[4005,36352,36353],{"class":4007,"line":4960},[4005,36354,4078],{"class":4182},[3908,36356,36357],{},[3871,36358,36359],{},"Практичне застосування — обробка колекцій:",[3984,36361,36363],{"className":4162,"code":36362,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Функція застосовує transform до кожного елемента зрізу\nfunc mapSlice(numbers []int, transform func(int) int) []int {\n    result := make([]int, len(numbers))\n    for i, num := range numbers {\n        result[i] = transform(num)\n    }\n    return result\n}\n\nfunc main() {\n    numbers := []int{1, 2, 3, 4, 5}\n    \n    \u002F\u002F Подвоїти кожне число\n    doubled := mapSlice(numbers, func(x int) int {\n        return x * 2\n    })\n    fmt.Println(\"Подвоєні:\", doubled)  \u002F\u002F [2 4 6 8 10]\n    \n    \u002F\u002F Піднести до квадрату\n    squared := mapSlice(numbers, func(x int) int {\n        return x * x\n    })\n    fmt.Println(\"Квадрати:\", squared)  \u002F\u002F [1 4 9 16 25]\n}\n",[3753,36364,36365,36371,36375,36381,36385,36390,36427,36449,36467,36485,36489,36496,36500,36504,36512,36542,36546,36551,36581,36591,36595,36618,36622,36627,36656,36667,36671,36694],{"__ignoreMap":3992},[4005,36366,36367,36369],{"class":4007,"line":4008},[4005,36368,5739],{"class":4171},[4005,36370,5742],{"class":4178},[4005,36372,36373],{"class":4007,"line":4014},[4005,36374,4036],{"emptyLinePlaceholder":4035},[4005,36376,36377,36379],{"class":4007,"line":4020},[4005,36378,3917],{"class":4836},[4005,36380,7656],{"class":4330},[4005,36382,36383],{"class":4007,"line":4026},[4005,36384,4036],{"emptyLinePlaceholder":4035},[4005,36386,36387],{"class":4007,"line":4032},[4005,36388,36389],{"class":4190},"\u002F\u002F Функція застосовує transform до кожного елемента зрізу\n",[4005,36391,36392,36394,36397,36399,36401,36403,36405,36407,36410,36412,36414,36416,36418,36420,36423,36425],{"class":4007,"line":4039},[4005,36393,4299],{"class":4171},[4005,36395,36396],{"class":4302}," mapSlice",[4005,36398,4611],{"class":4182},[4005,36400,29814],{"class":4174},[4005,36402,26632],{"class":4182},[4005,36404,4158],{"class":4178},[4005,36406,3836],{"class":4182},[4005,36408,36409],{"class":4174},"transform",[4005,36411,20015],{"class":4171},[4005,36413,4611],{"class":4182},[4005,36415,4158],{"class":4178},[4005,36417,4498],{"class":4182},[4005,36419,4158],{"class":4178},[4005,36421,36422],{"class":4182},") []",[4005,36424,4158],{"class":4178},[4005,36426,5073],{"class":4182},[4005,36428,36429,36431,36433,36435,36437,36439,36441,36443,36445,36447],{"class":4007,"line":4045},[4005,36430,15757],{"class":4174},[4005,36432,4314],{"class":4182},[4005,36434,3764],{"class":4302},[4005,36436,5159],{"class":4182},[4005,36438,4158],{"class":4178},[4005,36440,3836],{"class":4182},[4005,36442,11465],{"class":4302},[4005,36444,4611],{"class":4182},[4005,36446,29814],{"class":4174},[4005,36448,25552],{"class":4182},[4005,36450,36451,36453,36455,36457,36459,36461,36463,36465],{"class":4007,"line":4051},[4005,36452,12138],{"class":4836},[4005,36454,6592],{"class":4174},[4005,36456,3836],{"class":4182},[4005,36458,21103],{"class":4174},[4005,36460,4314],{"class":4182},[4005,36462,12151],{"class":4836},[4005,36464,29774],{"class":4174},[4005,36466,5073],{"class":4182},[4005,36468,36469,36471,36473,36475,36477,36479,36481,36483],{"class":4007,"line":4057},[4005,36470,17673],{"class":4174},[4005,36472,11561],{"class":4182},[4005,36474,27826],{"class":4174},[4005,36476,12081],{"class":4182},[4005,36478,36409],{"class":4302},[4005,36480,4611],{"class":4182},[4005,36482,21103],{"class":4174},[4005,36484,4482],{"class":4182},[4005,36486,36487],{"class":4007,"line":4063},[4005,36488,5127],{"class":4182},[4005,36490,36491,36493],{"class":4007,"line":4069},[4005,36492,5260],{"class":4836},[4005,36494,36495],{"class":4174}," result\n",[4005,36497,36498],{"class":4007,"line":4075},[4005,36499,4078],{"class":4182},[4005,36501,36502],{"class":4007,"line":4081},[4005,36503,4036],{"emptyLinePlaceholder":4035},[4005,36505,36506,36508,36510],{"class":4007,"line":4086},[4005,36507,4299],{"class":4171},[4005,36509,5764],{"class":4302},[4005,36511,4306],{"class":4182},[4005,36513,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540],{"class":4007,"line":4092},[4005,36515,29722],{"class":4174},[4005,36517,11583],{"class":4182},[4005,36519,4158],{"class":4178},[4005,36521,16268],{"class":4182},[4005,36523,4393],{"class":4186},[4005,36525,3836],{"class":4182},[4005,36527,4398],{"class":4186},[4005,36529,3836],{"class":4182},[4005,36531,6286],{"class":4186},[4005,36533,3836],{"class":4182},[4005,36535,8245],{"class":4186},[4005,36537,3836],{"class":4182},[4005,36539,5869],{"class":4186},[4005,36541,4078],{"class":4182},[4005,36543,36544],{"class":4007,"line":4098},[4005,36545,5214],{"class":4182},[4005,36547,36548],{"class":4007,"line":4104},[4005,36549,36550],{"class":4190},"    \u002F\u002F Подвоїти кожне число\n",[4005,36552,36553,36556,36558,36561,36563,36565,36567,36569,36571,36573,36575,36577,36579],{"class":4007,"line":4110},[4005,36554,36555],{"class":4174},"    doubled",[4005,36557,4314],{"class":4182},[4005,36559,36560],{"class":4302},"mapSlice",[4005,36562,4611],{"class":4182},[4005,36564,29814],{"class":4174},[4005,36566,3836],{"class":4182},[4005,36568,4299],{"class":4171},[4005,36570,4611],{"class":4182},[4005,36572,4621],{"class":4174},[4005,36574,4224],{"class":4178},[4005,36576,4498],{"class":4182},[4005,36578,4158],{"class":4178},[4005,36580,5073],{"class":4182},[4005,36582,36583,36585,36587,36589],{"class":4007,"line":4937},[4005,36584,5119],{"class":4836},[4005,36586,6141],{"class":4174},[4005,36588,6735],{"class":4182},[4005,36590,24389],{"class":4186},[4005,36592,36593],{"class":4007,"line":4942},[4005,36594,19681],{"class":4182},[4005,36596,36597,36599,36601,36603,36605,36608,36610,36613,36615],{"class":4007,"line":4947},[4005,36598,5370],{"class":4174},[4005,36600,3769],{"class":4182},[4005,36602,5348],{"class":4302},[4005,36604,4611],{"class":4182},[4005,36606,36607],{"class":4330},"\"Подвоєні:\"",[4005,36609,3836],{"class":4182},[4005,36611,36612],{"class":4174},"doubled",[4005,36614,5196],{"class":4182},[4005,36616,36617],{"class":4190},"\u002F\u002F [2 4 6 8 10]\n",[4005,36619,36620],{"class":4007,"line":4953},[4005,36621,5214],{"class":4182},[4005,36623,36624],{"class":4007,"line":4960},[4005,36625,36626],{"class":4190},"    \u002F\u002F Піднести до квадрату\n",[4005,36628,36629,36632,36634,36636,36638,36640,36642,36644,36646,36648,36650,36652,36654],{"class":4007,"line":4973},[4005,36630,36631],{"class":4174},"    squared",[4005,36633,4314],{"class":4182},[4005,36635,36560],{"class":4302},[4005,36637,4611],{"class":4182},[4005,36639,29814],{"class":4174},[4005,36641,3836],{"class":4182},[4005,36643,4299],{"class":4171},[4005,36645,4611],{"class":4182},[4005,36647,4621],{"class":4174},[4005,36649,4224],{"class":4178},[4005,36651,4498],{"class":4182},[4005,36653,4158],{"class":4178},[4005,36655,5073],{"class":4182},[4005,36657,36658,36660,36662,36664],{"class":4007,"line":4985},[4005,36659,5119],{"class":4836},[4005,36661,6141],{"class":4174},[4005,36663,6735],{"class":4182},[4005,36665,36666],{"class":4174},"x\n",[4005,36668,36669],{"class":4007,"line":7813},[4005,36670,19681],{"class":4182},[4005,36672,36673,36675,36677,36679,36681,36684,36686,36689,36691],{"class":4007,"line":7819},[4005,36674,5370],{"class":4174},[4005,36676,3769],{"class":4182},[4005,36678,5348],{"class":4302},[4005,36680,4611],{"class":4182},[4005,36682,36683],{"class":4330},"\"Квадрати:\"",[4005,36685,3836],{"class":4182},[4005,36687,36688],{"class":4174},"squared",[4005,36690,5196],{"class":4182},[4005,36692,36693],{"class":4190},"\u002F\u002F [1 4 9 16 25]\n",[4005,36695,36696],{"class":4007,"line":7826},[4005,36697,4078],{"class":4182},[3908,36699,36700],{},[3871,36701,36702],{},"B. Функція, що повертає функцію (Factory Pattern):",[3984,36704,36706],{"className":4162,"code":36705,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Operation func(int, int) int\n\n\u002F\u002F Функція-фабрика — повертає функцію залежно від параметра\nfunc getOperation(opType string) Operation {\n    switch opType {\n    case \"add\":\n        return func(a, b int) int { return a + b }\n    case \"sub\":\n        return func(a, b int) int { return a - b }\n    case \"mul\":\n        return func(a, b int) int { return a * b }\n    default:\n        return func(a, b int) int { return 0 }\n    }\n}\n\nfunc main() {\n    \u002F\u002F Отримуємо потрібну операцію\n    addOp := getOperation(\"add\")\n    fmt.Println(\"Додавання:\", addOp(10, 5))  \u002F\u002F 15\n    \n    mulOp := getOperation(\"mul\")\n    fmt.Println(\"Множення:\", mulOp(10, 5))   \u002F\u002F 50\n}\n",[3753,36707,36708,36714,36718,36724,36728,36748,36752,36757,36778,36787,36796,36828,36837,36869,36878,36910,36916,36944,36948,36952,36956,36964,36969,36986,37015,37019,37035,37064],{"__ignoreMap":3992},[4005,36709,36710,36712],{"class":4007,"line":4008},[4005,36711,5739],{"class":4171},[4005,36713,5742],{"class":4178},[4005,36715,36716],{"class":4007,"line":4014},[4005,36717,4036],{"emptyLinePlaceholder":4035},[4005,36719,36720,36722],{"class":4007,"line":4020},[4005,36721,3917],{"class":4836},[4005,36723,7656],{"class":4330},[4005,36725,36726],{"class":4007,"line":4026},[4005,36727,4036],{"emptyLinePlaceholder":4035},[4005,36729,36730,36732,36734,36736,36738,36740,36742,36744,36746],{"class":4007,"line":4032},[4005,36731,4809],{"class":4171},[4005,36733,36067],{"class":4178},[4005,36735,20015],{"class":4171},[4005,36737,4611],{"class":4182},[4005,36739,4158],{"class":4178},[4005,36741,3836],{"class":4182},[4005,36743,4158],{"class":4178},[4005,36745,4498],{"class":4182},[4005,36747,14224],{"class":4178},[4005,36749,36750],{"class":4007,"line":4039},[4005,36751,4036],{"emptyLinePlaceholder":4035},[4005,36753,36754],{"class":4007,"line":4045},[4005,36755,36756],{"class":4190},"\u002F\u002F Функція-фабрика — повертає функцію залежно від параметра\n",[4005,36758,36759,36761,36764,36766,36769,36771,36773,36776],{"class":4007,"line":4051},[4005,36760,4299],{"class":4171},[4005,36762,36763],{"class":4302}," getOperation",[4005,36765,4611],{"class":4182},[4005,36767,36768],{"class":4174},"opType",[4005,36770,4237],{"class":4178},[4005,36772,4498],{"class":4182},[4005,36774,36775],{"class":4178},"Operation",[4005,36777,5073],{"class":4182},[4005,36779,36780,36782,36785],{"class":4007,"line":4057},[4005,36781,7355],{"class":4836},[4005,36783,36784],{"class":4174}," opType",[4005,36786,5073],{"class":4182},[4005,36788,36789,36791,36794],{"class":4007,"line":4063},[4005,36790,7365],{"class":4836},[4005,36792,36793],{"class":4330}," \"add\"",[4005,36795,7370],{"class":4182},[4005,36797,36798,36800,36802,36804,36806,36808,36810,36812,36814,36816,36818,36820,36822,36824,36826],{"class":4007,"line":4069},[4005,36799,5119],{"class":4836},[4005,36801,20015],{"class":4171},[4005,36803,4611],{"class":4182},[4005,36805,9306],{"class":4174},[4005,36807,3836],{"class":4182},[4005,36809,4381],{"class":4174},[4005,36811,4224],{"class":4178},[4005,36813,4498],{"class":4182},[4005,36815,4158],{"class":4178},[4005,36817,35469],{"class":4182},[4005,36819,35265],{"class":4836},[4005,36821,4376],{"class":4174},[4005,36823,6289],{"class":4182},[4005,36825,4381],{"class":4174},[4005,36827,35480],{"class":4182},[4005,36829,36830,36832,36835],{"class":4007,"line":4075},[4005,36831,7365],{"class":4836},[4005,36833,36834],{"class":4330}," \"sub\"",[4005,36836,7370],{"class":4182},[4005,36838,36839,36841,36843,36845,36847,36849,36851,36853,36855,36857,36859,36861,36863,36865,36867],{"class":4007,"line":4081},[4005,36840,5119],{"class":4836},[4005,36842,20015],{"class":4171},[4005,36844,4611],{"class":4182},[4005,36846,9306],{"class":4174},[4005,36848,3836],{"class":4182},[4005,36850,4381],{"class":4174},[4005,36852,4224],{"class":4178},[4005,36854,4498],{"class":4182},[4005,36856,4158],{"class":4178},[4005,36858,35469],{"class":4182},[4005,36860,35265],{"class":4836},[4005,36862,4376],{"class":4174},[4005,36864,14546],{"class":4182},[4005,36866,4381],{"class":4174},[4005,36868,35480],{"class":4182},[4005,36870,36871,36873,36876],{"class":4007,"line":4086},[4005,36872,7365],{"class":4836},[4005,36874,36875],{"class":4330}," \"mul\"",[4005,36877,7370],{"class":4182},[4005,36879,36880,36882,36884,36886,36888,36890,36892,36894,36896,36898,36900,36902,36904,36906,36908],{"class":4007,"line":4092},[4005,36881,5119],{"class":4836},[4005,36883,20015],{"class":4171},[4005,36885,4611],{"class":4182},[4005,36887,9306],{"class":4174},[4005,36889,3836],{"class":4182},[4005,36891,4381],{"class":4174},[4005,36893,4224],{"class":4178},[4005,36895,4498],{"class":4182},[4005,36897,4158],{"class":4178},[4005,36899,35469],{"class":4182},[4005,36901,35265],{"class":4836},[4005,36903,4376],{"class":4174},[4005,36905,6735],{"class":4182},[4005,36907,4381],{"class":4174},[4005,36909,35480],{"class":4182},[4005,36911,36912,36914],{"class":4007,"line":4098},[4005,36913,7430],{"class":4836},[4005,36915,7370],{"class":4182},[4005,36917,36918,36920,36922,36924,36926,36928,36930,36932,36934,36936,36938,36940,36942],{"class":4007,"line":4104},[4005,36919,5119],{"class":4836},[4005,36921,20015],{"class":4171},[4005,36923,4611],{"class":4182},[4005,36925,9306],{"class":4174},[4005,36927,3836],{"class":4182},[4005,36929,4381],{"class":4174},[4005,36931,4224],{"class":4178},[4005,36933,4498],{"class":4182},[4005,36935,4158],{"class":4178},[4005,36937,35469],{"class":4182},[4005,36939,35265],{"class":4836},[4005,36941,34816],{"class":4186},[4005,36943,35480],{"class":4182},[4005,36945,36946],{"class":4007,"line":4110},[4005,36947,5127],{"class":4182},[4005,36949,36950],{"class":4007,"line":4937},[4005,36951,4078],{"class":4182},[4005,36953,36954],{"class":4007,"line":4942},[4005,36955,4036],{"emptyLinePlaceholder":4035},[4005,36957,36958,36960,36962],{"class":4007,"line":4947},[4005,36959,4299],{"class":4171},[4005,36961,5764],{"class":4302},[4005,36963,4306],{"class":4182},[4005,36965,36966],{"class":4007,"line":4953},[4005,36967,36968],{"class":4190},"    \u002F\u002F Отримуємо потрібну операцію\n",[4005,36970,36971,36974,36976,36979,36981,36984],{"class":4007,"line":4960},[4005,36972,36973],{"class":4174},"    addOp",[4005,36975,4314],{"class":4182},[4005,36977,36978],{"class":4302},"getOperation",[4005,36980,4611],{"class":4182},[4005,36982,36983],{"class":4330},"\"add\"",[4005,36985,4482],{"class":4182},[4005,36987,36988,36990,36992,36994,36996,36998,37000,37003,37005,37007,37009,37011,37013],{"class":4007,"line":4973},[4005,36989,5370],{"class":4174},[4005,36991,3769],{"class":4182},[4005,36993,5348],{"class":4302},[4005,36995,4611],{"class":4182},[4005,36997,35948],{"class":4330},[4005,36999,3836],{"class":4182},[4005,37001,37002],{"class":4302},"addOp",[4005,37004,4611],{"class":4182},[4005,37006,4631],{"class":4186},[4005,37008,3836],{"class":4182},[4005,37010,5869],{"class":4186},[4005,37012,11472],{"class":4182},[4005,37014,23811],{"class":4190},[4005,37016,37017],{"class":4007,"line":4985},[4005,37018,5214],{"class":4182},[4005,37020,37021,37024,37026,37028,37030,37033],{"class":4007,"line":7813},[4005,37022,37023],{"class":4174},"    mulOp",[4005,37025,4314],{"class":4182},[4005,37027,36978],{"class":4302},[4005,37029,4611],{"class":4182},[4005,37031,37032],{"class":4330},"\"mul\"",[4005,37034,4482],{"class":4182},[4005,37036,37037,37039,37041,37043,37045,37047,37049,37052,37054,37056,37058,37060,37062],{"class":4007,"line":7819},[4005,37038,5370],{"class":4174},[4005,37040,3769],{"class":4182},[4005,37042,5348],{"class":4302},[4005,37044,4611],{"class":4182},[4005,37046,35991],{"class":4330},[4005,37048,3836],{"class":4182},[4005,37050,37051],{"class":4302},"mulOp",[4005,37053,4611],{"class":4182},[4005,37055,4631],{"class":4186},[4005,37057,3836],{"class":4182},[4005,37059,5869],{"class":4186},[4005,37061,19118],{"class":4182},[4005,37063,36008],{"class":4190},[4005,37065,37066],{"class":4007,"line":7826},[4005,37067,4078],{"class":4182},[9014,37069,37071],{"id":37070},"приклад-4-зберігання-функцій-у-структурах","Приклад 4: Зберігання функцій у структурах",[3984,37073,37075],{"className":4162,"code":37074,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Calculator struct {\n    Operation func(int, int) int\n    Name      string\n}\n\nfunc main() {\n    \u002F\u002F Створюємо калькулятор з функцією додавання\n    addCalc := Calculator{\n        Operation: func(a, b int) int { return a + b },\n        Name:      \"Додавання\",\n    }\n    \n    fmt.Printf(\"%s: %d\\n\", addCalc.Name, addCalc.Operation(5, 3))  \u002F\u002F Додавання: 8\n    \n    \u002F\u002F Змінюємо операцію на множення\n    addCalc.Operation = func(a, b int) int { return a * b }\n    addCalc.Name = \"Множення\"\n    \n    fmt.Printf(\"%s: %d\\n\", addCalc.Name, addCalc.Operation(5, 3))  \u002F\u002F Множення: 15\n}\n",[3753,37076,37077,37083,37087,37093,37097,37108,37127,37134,37138,37142,37150,37155,37167,37203,37216,37220,37224,37276,37280,37285,37323,37336,37340,37391],{"__ignoreMap":3992},[4005,37078,37079,37081],{"class":4007,"line":4008},[4005,37080,5739],{"class":4171},[4005,37082,5742],{"class":4178},[4005,37084,37085],{"class":4007,"line":4014},[4005,37086,4036],{"emptyLinePlaceholder":4035},[4005,37088,37089,37091],{"class":4007,"line":4020},[4005,37090,3917],{"class":4836},[4005,37092,7656],{"class":4330},[4005,37094,37095],{"class":4007,"line":4026},[4005,37096,4036],{"emptyLinePlaceholder":4035},[4005,37098,37099,37101,37104,37106],{"class":4007,"line":4032},[4005,37100,4809],{"class":4171},[4005,37102,37103],{"class":4178}," Calculator",[4005,37105,10957],{"class":4171},[4005,37107,5073],{"class":4182},[4005,37109,37110,37113,37115,37117,37119,37121,37123,37125],{"class":4007,"line":4039},[4005,37111,37112],{"class":4174},"    Operation",[4005,37114,20015],{"class":4171},[4005,37116,4611],{"class":4182},[4005,37118,4158],{"class":4178},[4005,37120,3836],{"class":4182},[4005,37122,4158],{"class":4178},[4005,37124,4498],{"class":4182},[4005,37126,14224],{"class":4178},[4005,37128,37129,37131],{"class":4007,"line":4045},[4005,37130,20769],{"class":4174},[4005,37132,37133],{"class":4178},"      string\n",[4005,37135,37136],{"class":4007,"line":4051},[4005,37137,4078],{"class":4182},[4005,37139,37140],{"class":4007,"line":4057},[4005,37141,4036],{"emptyLinePlaceholder":4035},[4005,37143,37144,37146,37148],{"class":4007,"line":4063},[4005,37145,4299],{"class":4171},[4005,37147,5764],{"class":4302},[4005,37149,4306],{"class":4182},[4005,37151,37152],{"class":4007,"line":4069},[4005,37153,37154],{"class":4190},"    \u002F\u002F Створюємо калькулятор з функцією додавання\n",[4005,37156,37157,37160,37162,37165],{"class":4007,"line":4075},[4005,37158,37159],{"class":4174},"    addCalc",[4005,37161,4314],{"class":4182},[4005,37163,37164],{"class":4178},"Calculator",[4005,37166,29461],{"class":4182},[4005,37168,37169,37172,37174,37176,37178,37180,37182,37184,37186,37188,37190,37192,37194,37196,37198,37200],{"class":4007,"line":4081},[4005,37170,37171],{"class":4174},"        Operation",[4005,37173,11172],{"class":4182},[4005,37175,4299],{"class":4171},[4005,37177,4611],{"class":4182},[4005,37179,9306],{"class":4174},[4005,37181,3836],{"class":4182},[4005,37183,4381],{"class":4174},[4005,37185,4224],{"class":4178},[4005,37187,4498],{"class":4182},[4005,37189,4158],{"class":4178},[4005,37191,35469],{"class":4182},[4005,37193,35265],{"class":4836},[4005,37195,4376],{"class":4174},[4005,37197,6289],{"class":4182},[4005,37199,4381],{"class":4174},[4005,37201,37202],{"class":4182}," },\n",[4005,37204,37205,37208,37211,37214],{"class":4007,"line":4086},[4005,37206,37207],{"class":4174},"        Name",[4005,37209,37210],{"class":4182},":      ",[4005,37212,37213],{"class":4330},"\"Додавання\"",[4005,37215,29475],{"class":4182},[4005,37217,37218],{"class":4007,"line":4092},[4005,37219,5127],{"class":4182},[4005,37221,37222],{"class":4007,"line":4098},[4005,37223,5214],{"class":4182},[4005,37225,37226,37228,37230,37232,37234,37236,37238,37240,37242,37244,37246,37248,37251,37253,37255,37257,37259,37261,37263,37265,37267,37269,37271,37273],{"class":4007,"line":4104},[4005,37227,5370],{"class":4174},[4005,37229,3769],{"class":4182},[4005,37231,7945],{"class":4302},[4005,37233,4611],{"class":4182},[4005,37235,7968],{"class":4330},[4005,37237,16775],{"class":4174},[4005,37239,11172],{"class":4330},[4005,37241,7959],{"class":4174},[4005,37243,7965],{"class":7964},[4005,37245,7968],{"class":4330},[4005,37247,3836],{"class":4182},[4005,37249,37250],{"class":4174},"addCalc",[4005,37252,3769],{"class":4182},[4005,37254,20803],{"class":4174},[4005,37256,3836],{"class":4182},[4005,37258,37250],{"class":4174},[4005,37260,3769],{"class":4182},[4005,37262,36775],{"class":4302},[4005,37264,4611],{"class":4182},[4005,37266,5869],{"class":4186},[4005,37268,3836],{"class":4182},[4005,37270,6286],{"class":4186},[4005,37272,11472],{"class":4182},[4005,37274,37275],{"class":4190},"\u002F\u002F Додавання: 8\n",[4005,37277,37278],{"class":4007,"line":4110},[4005,37279,5214],{"class":4182},[4005,37281,37282],{"class":4007,"line":4937},[4005,37283,37284],{"class":4190},"    \u002F\u002F Змінюємо операцію на множення\n",[4005,37286,37287,37289,37291,37293,37295,37297,37299,37301,37303,37305,37307,37309,37311,37313,37315,37317,37319,37321],{"class":4007,"line":4942},[4005,37288,37159],{"class":4174},[4005,37290,3769],{"class":4182},[4005,37292,36775],{"class":4174},[4005,37294,4183],{"class":4182},[4005,37296,4299],{"class":4171},[4005,37298,4611],{"class":4182},[4005,37300,9306],{"class":4174},[4005,37302,3836],{"class":4182},[4005,37304,4381],{"class":4174},[4005,37306,4224],{"class":4178},[4005,37308,4498],{"class":4182},[4005,37310,4158],{"class":4178},[4005,37312,35469],{"class":4182},[4005,37314,35265],{"class":4836},[4005,37316,4376],{"class":4174},[4005,37318,6735],{"class":4182},[4005,37320,4381],{"class":4174},[4005,37322,35480],{"class":4182},[4005,37324,37325,37327,37329,37331,37333],{"class":4007,"line":4947},[4005,37326,37159],{"class":4174},[4005,37328,3769],{"class":4182},[4005,37330,20803],{"class":4174},[4005,37332,4183],{"class":4182},[4005,37334,37335],{"class":4330},"\"Множення\"\n",[4005,37337,37338],{"class":4007,"line":4953},[4005,37339,5214],{"class":4182},[4005,37341,37342,37344,37346,37348,37350,37352,37354,37356,37358,37360,37362,37364,37366,37368,37370,37372,37374,37376,37378,37380,37382,37384,37386,37388],{"class":4007,"line":4960},[4005,37343,5370],{"class":4174},[4005,37345,3769],{"class":4182},[4005,37347,7945],{"class":4302},[4005,37349,4611],{"class":4182},[4005,37351,7968],{"class":4330},[4005,37353,16775],{"class":4174},[4005,37355,11172],{"class":4330},[4005,37357,7959],{"class":4174},[4005,37359,7965],{"class":7964},[4005,37361,7968],{"class":4330},[4005,37363,3836],{"class":4182},[4005,37365,37250],{"class":4174},[4005,37367,3769],{"class":4182},[4005,37369,20803],{"class":4174},[4005,37371,3836],{"class":4182},[4005,37373,37250],{"class":4174},[4005,37375,3769],{"class":4182},[4005,37377,36775],{"class":4302},[4005,37379,4611],{"class":4182},[4005,37381,5869],{"class":4186},[4005,37383,3836],{"class":4182},[4005,37385,6286],{"class":4186},[4005,37387,11472],{"class":4182},[4005,37389,37390],{"class":4190},"\u002F\u002F Множення: 15\n",[4005,37392,37393],{"class":4007,"line":4973},[4005,37394,4078],{"class":4182},[9014,37396,37398],{"id":37397},"практичне-застосування-middleware-в-веб-серверах","Практичне застосування: middleware в веб-серверах",[3984,37400,37402],{"className":4162,"code":37401,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\ntype Handler func(string) string\n\n\u002F\u002F Middleware — функція, яка обгортає іншу функцію\nfunc loggingMiddleware(next Handler) Handler {\n    return func(input string) string {\n        start := time.Now()\n        fmt.Printf(\"[LOG] Початок обробки: %s\\n\", input)\n        \n        result := next(input)  \u002F\u002F Викликаємо оригінальну функцію\n        \n        fmt.Printf(\"[LOG] Завершено за %v\\n\", time.Since(start))\n        return result\n    }\n}\n\nfunc processRequest(data string) string {\n    time.Sleep(100 * time.Millisecond)  \u002F\u002F Імітація роботи\n    return \"Оброблено: \" + data\n}\n\nfunc main() {\n    \u002F\u002F Обгортаємо функцію в middleware\n    handler := loggingMiddleware(processRequest)\n    \n    result := handler(\"test-data\")\n    fmt.Println(\"Результат:\", result)\n}\n",[3753,37403,37404,37410,37414,37420,37424,37428,37432,37436,37453,37457,37462,37483,37502,37517,37542,37546,37563,37567,37602,37608,37612,37616,37620,37639,37667,37679,37683,37687,37695,37700,37717,37721,37737,37755],{"__ignoreMap":3992},[4005,37405,37406,37408],{"class":4007,"line":4008},[4005,37407,5739],{"class":4171},[4005,37409,5742],{"class":4178},[4005,37411,37412],{"class":4007,"line":4014},[4005,37413,4036],{"emptyLinePlaceholder":4035},[4005,37415,37416,37418],{"class":4007,"line":4020},[4005,37417,3917],{"class":4836},[4005,37419,4439],{"class":4182},[4005,37421,37422],{"class":4007,"line":4026},[4005,37423,4843],{"class":4330},[4005,37425,37426],{"class":4007,"line":4032},[4005,37427,25973],{"class":4330},[4005,37429,37430],{"class":4007,"line":4039},[4005,37431,4482],{"class":4182},[4005,37433,37434],{"class":4007,"line":4045},[4005,37435,4036],{"emptyLinePlaceholder":4035},[4005,37437,37438,37440,37443,37445,37447,37449,37451],{"class":4007,"line":4051},[4005,37439,4809],{"class":4171},[4005,37441,37442],{"class":4178}," Handler",[4005,37444,20015],{"class":4171},[4005,37446,4611],{"class":4182},[4005,37448,7004],{"class":4178},[4005,37450,4498],{"class":4182},[4005,37452,7495],{"class":4178},[4005,37454,37455],{"class":4007,"line":4057},[4005,37456,4036],{"emptyLinePlaceholder":4035},[4005,37458,37459],{"class":4007,"line":4063},[4005,37460,37461],{"class":4190},"\u002F\u002F Middleware — функція, яка обгортає іншу функцію\n",[4005,37463,37464,37466,37469,37471,37474,37476,37478,37481],{"class":4007,"line":4069},[4005,37465,4299],{"class":4171},[4005,37467,37468],{"class":4302}," loggingMiddleware",[4005,37470,4611],{"class":4182},[4005,37472,37473],{"class":4174},"next",[4005,37475,37442],{"class":4178},[4005,37477,4498],{"class":4182},[4005,37479,37480],{"class":4178},"Handler",[4005,37482,5073],{"class":4182},[4005,37484,37485,37487,37489,37491,37494,37496,37498,37500],{"class":4007,"line":4075},[4005,37486,5260],{"class":4836},[4005,37488,20015],{"class":4171},[4005,37490,4611],{"class":4182},[4005,37492,37493],{"class":4174},"input",[4005,37495,4237],{"class":4178},[4005,37497,4498],{"class":4182},[4005,37499,7004],{"class":4178},[4005,37501,5073],{"class":4182},[4005,37503,37504,37507,37509,37511,37513,37515],{"class":4007,"line":4081},[4005,37505,37506],{"class":4174},"        start",[4005,37508,4314],{"class":4182},[4005,37510,26006],{"class":4174},[4005,37512,3769],{"class":4182},[4005,37514,26011],{"class":4302},[4005,37516,5143],{"class":4182},[4005,37518,37519,37521,37523,37525,37527,37530,37532,37534,37536,37538,37540],{"class":4007,"line":4086},[4005,37520,5343],{"class":4174},[4005,37522,3769],{"class":4182},[4005,37524,7945],{"class":4302},[4005,37526,4611],{"class":4182},[4005,37528,37529],{"class":4330},"\"[LOG] Початок обробки: ",[4005,37531,16775],{"class":4174},[4005,37533,7965],{"class":7964},[4005,37535,7968],{"class":4330},[4005,37537,3836],{"class":4182},[4005,37539,37493],{"class":4174},[4005,37541,4482],{"class":4182},[4005,37543,37544],{"class":4007,"line":4092},[4005,37545,12810],{"class":4182},[4005,37547,37548,37550,37552,37554,37556,37558,37560],{"class":4007,"line":4098},[4005,37549,17673],{"class":4174},[4005,37551,4314],{"class":4182},[4005,37553,37473],{"class":4302},[4005,37555,4611],{"class":4182},[4005,37557,37493],{"class":4174},[4005,37559,5196],{"class":4182},[4005,37561,37562],{"class":4190},"\u002F\u002F Викликаємо оригінальну функцію\n",[4005,37564,37565],{"class":4007,"line":4104},[4005,37566,12810],{"class":4182},[4005,37568,37569,37571,37573,37575,37577,37580,37582,37584,37586,37588,37590,37592,37595,37597,37600],{"class":4007,"line":4110},[4005,37570,5343],{"class":4174},[4005,37572,3769],{"class":4182},[4005,37574,7945],{"class":4302},[4005,37576,4611],{"class":4182},[4005,37578,37579],{"class":4330},"\"[LOG] Завершено за ",[4005,37581,10666],{"class":4174},[4005,37583,7965],{"class":7964},[4005,37585,7968],{"class":4330},[4005,37587,3836],{"class":4182},[4005,37589,26006],{"class":4174},[4005,37591,3769],{"class":4182},[4005,37593,37594],{"class":4302},"Since",[4005,37596,4611],{"class":4182},[4005,37598,37599],{"class":4174},"start",[4005,37601,25552],{"class":4182},[4005,37603,37604,37606],{"class":4007,"line":4937},[4005,37605,5119],{"class":4836},[4005,37607,36495],{"class":4174},[4005,37609,37610],{"class":4007,"line":4942},[4005,37611,5127],{"class":4182},[4005,37613,37614],{"class":4007,"line":4947},[4005,37615,4078],{"class":4182},[4005,37617,37618],{"class":4007,"line":4953},[4005,37619,4036],{"emptyLinePlaceholder":4035},[4005,37621,37622,37624,37627,37629,37631,37633,37635,37637],{"class":4007,"line":4960},[4005,37623,4299],{"class":4171},[4005,37625,37626],{"class":4302}," processRequest",[4005,37628,4611],{"class":4182},[4005,37630,5193],{"class":4174},[4005,37632,4237],{"class":4178},[4005,37634,4498],{"class":4182},[4005,37636,7004],{"class":4178},[4005,37638,5073],{"class":4182},[4005,37640,37641,37644,37646,37649,37651,37653,37655,37657,37659,37662,37664],{"class":4007,"line":4973},[4005,37642,37643],{"class":4174},"    time",[4005,37645,3769],{"class":4182},[4005,37647,37648],{"class":4302},"Sleep",[4005,37650,4611],{"class":4182},[4005,37652,6478],{"class":4186},[4005,37654,6735],{"class":4182},[4005,37656,26006],{"class":4174},[4005,37658,3769],{"class":4182},[4005,37660,37661],{"class":4174},"Millisecond",[4005,37663,5196],{"class":4182},[4005,37665,37666],{"class":4190},"\u002F\u002F Імітація роботи\n",[4005,37668,37669,37671,37674,37676],{"class":4007,"line":4985},[4005,37670,5260],{"class":4836},[4005,37672,37673],{"class":4330}," \"Оброблено: \"",[4005,37675,6289],{"class":4182},[4005,37677,37678],{"class":4174},"data\n",[4005,37680,37681],{"class":4007,"line":7813},[4005,37682,4078],{"class":4182},[4005,37684,37685],{"class":4007,"line":7819},[4005,37686,4036],{"emptyLinePlaceholder":4035},[4005,37688,37689,37691,37693],{"class":4007,"line":7826},[4005,37690,4299],{"class":4171},[4005,37692,5764],{"class":4302},[4005,37694,4306],{"class":4182},[4005,37696,37697],{"class":4007,"line":7839},[4005,37698,37699],{"class":4190},"    \u002F\u002F Обгортаємо функцію в middleware\n",[4005,37701,37702,37705,37707,37710,37712,37715],{"class":4007,"line":7864},[4005,37703,37704],{"class":4174},"    handler",[4005,37706,4314],{"class":4182},[4005,37708,37709],{"class":4302},"loggingMiddleware",[4005,37711,4611],{"class":4182},[4005,37713,37714],{"class":4174},"processRequest",[4005,37716,4482],{"class":4182},[4005,37718,37719],{"class":4007,"line":7872},[4005,37720,5214],{"class":4182},[4005,37722,37723,37725,37727,37730,37732,37735],{"class":4007,"line":7881},[4005,37724,15757],{"class":4174},[4005,37726,4314],{"class":4182},[4005,37728,37729],{"class":4302},"handler",[4005,37731,4611],{"class":4182},[4005,37733,37734],{"class":4330},"\"test-data\"",[4005,37736,4482],{"class":4182},[4005,37738,37739,37741,37743,37745,37747,37749,37751,37753],{"class":4007,"line":7890},[4005,37740,5370],{"class":4174},[4005,37742,3769],{"class":4182},[4005,37744,5348],{"class":4302},[4005,37746,4611],{"class":4182},[4005,37748,35671],{"class":4330},[4005,37750,3836],{"class":4182},[4005,37752,5695],{"class":4174},[4005,37754,4482],{"class":4182},[4005,37756,37757],{"class":4007,"line":7895},[4005,37758,4078],{"class":4182},[3900,37760],{},[3976,37762,37764],{"id":37763},"анонімні-функції-anonymous-functions-lambdas","Анонімні функції (Anonymous Functions \u002F Lambdas)",[9014,37766,37768],{"id":37767},"що-таке-анонімна-функція","Що таке анонімна функція?",[3908,37770,37771,37774,37775,8512,37778,3769],{},[3871,37772,37773],{},"Анонімна функція"," — це функція без імені, визначена безпосередньо в коді (inline). У деяких мовах їх називають ",[3871,37776,37777],{},"lambda-функціями",[3871,37779,37780],{},"літералами функцій",[3908,37782,37783],{},[3871,37784,4787],{},[3984,37786,37788],{"className":4162,"code":37787,"language":4164,"meta":3992,"style":3992},"func(параметри) тип_результату {\n    \u002F\u002F тіло функції\n}\n",[3753,37789,37790,37805,37810],{"__ignoreMap":3992},[4005,37791,37792,37794,37796,37798,37800,37803],{"class":4007,"line":4008},[4005,37793,4299],{"class":4171},[4005,37795,4611],{"class":4182},[4005,37797,35333],{"class":4178},[4005,37799,4498],{"class":4182},[4005,37801,37802],{"class":4174},"тип_результату",[4005,37804,5073],{"class":4182},[4005,37806,37807],{"class":4007,"line":4014},[4005,37808,37809],{"class":4190},"    \u002F\u002F тіло функції\n",[4005,37811,37812],{"class":4007,"line":4020},[4005,37813,4078],{"class":4182},[9014,37815,37817],{"id":37816},"приклад-1-анонімна-функція-в-змінній","Приклад 1: Анонімна функція в змінній",[3984,37819,37821],{"className":4162,"code":37820,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Створюємо анонімну функцію та зберігаємо в змінній\n    greet := func(name string) string {\n        return \"Привіт, \" + name + \"!\"\n    }\n    \n    \u002F\u002F Викликаємо через змінну\n    message := greet(\"Олена\")\n    fmt.Println(message)  \u002F\u002F Привіт, Олена!\n    \n    \u002F\u002F Можна викликати напряму:\n    fmt.Println(greet(\"Іван\"))  \u002F\u002F Привіт, Іван!\n}\n",[3753,37822,37823,37829,37833,37839,37843,37851,37856,37877,37893,37897,37901,37906,37923,37940,37944,37949,37971],{"__ignoreMap":3992},[4005,37824,37825,37827],{"class":4007,"line":4008},[4005,37826,5739],{"class":4171},[4005,37828,5742],{"class":4178},[4005,37830,37831],{"class":4007,"line":4014},[4005,37832,4036],{"emptyLinePlaceholder":4035},[4005,37834,37835,37837],{"class":4007,"line":4020},[4005,37836,3917],{"class":4836},[4005,37838,7656],{"class":4330},[4005,37840,37841],{"class":4007,"line":4026},[4005,37842,4036],{"emptyLinePlaceholder":4035},[4005,37844,37845,37847,37849],{"class":4007,"line":4032},[4005,37846,4299],{"class":4171},[4005,37848,5764],{"class":4302},[4005,37850,4306],{"class":4182},[4005,37852,37853],{"class":4007,"line":4039},[4005,37854,37855],{"class":4190},"    \u002F\u002F Створюємо анонімну функцію та зберігаємо в змінній\n",[4005,37857,37858,37861,37863,37865,37867,37869,37871,37873,37875],{"class":4007,"line":4045},[4005,37859,37860],{"class":4174},"    greet",[4005,37862,4314],{"class":4182},[4005,37864,4299],{"class":4171},[4005,37866,4611],{"class":4182},[4005,37868,4650],{"class":4174},[4005,37870,4237],{"class":4178},[4005,37872,4498],{"class":4182},[4005,37874,7004],{"class":4178},[4005,37876,5073],{"class":4182},[4005,37878,37879,37881,37884,37886,37888,37890],{"class":4007,"line":4051},[4005,37880,5119],{"class":4836},[4005,37882,37883],{"class":4330}," \"Привіт, \"",[4005,37885,6289],{"class":4182},[4005,37887,4650],{"class":4174},[4005,37889,6289],{"class":4182},[4005,37891,37892],{"class":4330},"\"!\"\n",[4005,37894,37895],{"class":4007,"line":4057},[4005,37896,5127],{"class":4182},[4005,37898,37899],{"class":4007,"line":4063},[4005,37900,5214],{"class":4182},[4005,37902,37903],{"class":4007,"line":4069},[4005,37904,37905],{"class":4190},"    \u002F\u002F Викликаємо через змінну\n",[4005,37907,37908,37911,37913,37916,37918,37921],{"class":4007,"line":4075},[4005,37909,37910],{"class":4174},"    message",[4005,37912,4314],{"class":4182},[4005,37914,37915],{"class":4302},"greet",[4005,37917,4611],{"class":4182},[4005,37919,37920],{"class":4330},"\"Олена\"",[4005,37922,4482],{"class":4182},[4005,37924,37925,37927,37929,37931,37933,37935,37937],{"class":4007,"line":4081},[4005,37926,5370],{"class":4174},[4005,37928,3769],{"class":4182},[4005,37930,5348],{"class":4302},[4005,37932,4611],{"class":4182},[4005,37934,11167],{"class":4174},[4005,37936,5196],{"class":4182},[4005,37938,37939],{"class":4190},"\u002F\u002F Привіт, Олена!\n",[4005,37941,37942],{"class":4007,"line":4086},[4005,37943,5214],{"class":4182},[4005,37945,37946],{"class":4007,"line":4092},[4005,37947,37948],{"class":4190},"    \u002F\u002F Можна викликати напряму:\n",[4005,37950,37951,37953,37955,37957,37959,37961,37963,37966,37968],{"class":4007,"line":4098},[4005,37952,5370],{"class":4174},[4005,37954,3769],{"class":4182},[4005,37956,5348],{"class":4302},[4005,37958,4611],{"class":4182},[4005,37960,37915],{"class":4302},[4005,37962,4611],{"class":4182},[4005,37964,37965],{"class":4330},"\"Іван\"",[4005,37967,11472],{"class":4182},[4005,37969,37970],{"class":4190},"\u002F\u002F Привіт, Іван!\n",[4005,37972,37973],{"class":4007,"line":4104},[4005,37974,4078],{"class":4182},[9014,37976,37978],{"id":37977},"приклад-2-iife-immediately-invoked-function-expression","Приклад 2: IIFE (Immediately Invoked Function Expression)",[3908,37980,37981,37984],{},[3871,37982,37983],{},"IIFE"," — це анонімна функція, яка викликається одразу після оголошення:",[3984,37986,37988],{"className":4162,"code":37987,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Оголошуємо і одразу викликаємо\n    func() {\n        fmt.Println(\"Це IIFE — виконалась одразу!\")\n    }()  \u002F\u002F ← Дужки () викликають функцію\n    \n    \u002F\u002F IIFE з параметрами та результатом\n    result := func(a, b int) int {\n        return a + b\n    }(5, 10)  \u002F\u002F ← Передаємо аргументи\n    \n    fmt.Println(\"Сума:\", result)  \u002F\u002F 15\n}\n",[3753,37989,37990,37996,38000,38006,38010,38018,38023,38030,38045,38053,38057,38062,38086,38096,38112,38116,38137],{"__ignoreMap":3992},[4005,37991,37992,37994],{"class":4007,"line":4008},[4005,37993,5739],{"class":4171},[4005,37995,5742],{"class":4178},[4005,37997,37998],{"class":4007,"line":4014},[4005,37999,4036],{"emptyLinePlaceholder":4035},[4005,38001,38002,38004],{"class":4007,"line":4020},[4005,38003,3917],{"class":4836},[4005,38005,7656],{"class":4330},[4005,38007,38008],{"class":4007,"line":4026},[4005,38009,4036],{"emptyLinePlaceholder":4035},[4005,38011,38012,38014,38016],{"class":4007,"line":4032},[4005,38013,4299],{"class":4171},[4005,38015,5764],{"class":4302},[4005,38017,4306],{"class":4182},[4005,38019,38020],{"class":4007,"line":4039},[4005,38021,38022],{"class":4190},"    \u002F\u002F Оголошуємо і одразу викликаємо\n",[4005,38024,38025,38028],{"class":4007,"line":4045},[4005,38026,38027],{"class":4171},"    func",[4005,38029,4306],{"class":4182},[4005,38031,38032,38034,38036,38038,38040,38043],{"class":4007,"line":4051},[4005,38033,5343],{"class":4174},[4005,38035,3769],{"class":4182},[4005,38037,5348],{"class":4302},[4005,38039,4611],{"class":4182},[4005,38041,38042],{"class":4330},"\"Це IIFE — виконалась одразу!\"",[4005,38044,4482],{"class":4182},[4005,38046,38047,38050],{"class":4007,"line":4057},[4005,38048,38049],{"class":4182},"    }()  ",[4005,38051,38052],{"class":4190},"\u002F\u002F ← Дужки () викликають функцію\n",[4005,38054,38055],{"class":4007,"line":4063},[4005,38056,5214],{"class":4182},[4005,38058,38059],{"class":4007,"line":4069},[4005,38060,38061],{"class":4190},"    \u002F\u002F IIFE з параметрами та результатом\n",[4005,38063,38064,38066,38068,38070,38072,38074,38076,38078,38080,38082,38084],{"class":4007,"line":4075},[4005,38065,15757],{"class":4174},[4005,38067,4314],{"class":4182},[4005,38069,4299],{"class":4171},[4005,38071,4611],{"class":4182},[4005,38073,9306],{"class":4174},[4005,38075,3836],{"class":4182},[4005,38077,4381],{"class":4174},[4005,38079,4224],{"class":4178},[4005,38081,4498],{"class":4182},[4005,38083,4158],{"class":4178},[4005,38085,5073],{"class":4182},[4005,38087,38088,38090,38092,38094],{"class":4007,"line":4081},[4005,38089,5119],{"class":4836},[4005,38091,4376],{"class":4174},[4005,38093,6289],{"class":4182},[4005,38095,35583],{"class":4174},[4005,38097,38098,38101,38103,38105,38107,38109],{"class":4007,"line":4086},[4005,38099,38100],{"class":4182},"    }(",[4005,38102,5869],{"class":4186},[4005,38104,3836],{"class":4182},[4005,38106,4631],{"class":4186},[4005,38108,5196],{"class":4182},[4005,38110,38111],{"class":4190},"\u002F\u002F ← Передаємо аргументи\n",[4005,38113,38114],{"class":4007,"line":4092},[4005,38115,5214],{"class":4182},[4005,38117,38118,38120,38122,38124,38126,38129,38131,38133,38135],{"class":4007,"line":4098},[4005,38119,5370],{"class":4174},[4005,38121,3769],{"class":4182},[4005,38123,5348],{"class":4302},[4005,38125,4611],{"class":4182},[4005,38127,38128],{"class":4330},"\"Сума:\"",[4005,38130,3836],{"class":4182},[4005,38132,5695],{"class":4174},[4005,38134,5196],{"class":4182},[4005,38136,23811],{"class":4190},[4005,38138,38139],{"class":4007,"line":4104},[4005,38140,4078],{"class":4182},[3908,38142,38143],{},[3871,38144,38145],{},"Практичне застосування IIFE:",[3984,38147,38149],{"className":4162,"code":38148,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Ініціалізація з валідацією\n    config := func() map[string]string {\n        cfg := make(map[string]string)\n        cfg[\"host\"] = \"localhost\"\n        cfg[\"port\"] = \"8080\"\n        \n        \u002F\u002F Валідація\n        if cfg[\"host\"] == \"\" {\n            cfg[\"host\"] = \"0.0.0.0\"\n        }\n        \n        return cfg\n    }()  \u002F\u002F Одразу викликаємо і отримуємо результат\n    \n    fmt.Println(\"Config:\", config)\n}\n",[3753,38150,38151,38157,38161,38167,38171,38179,38184,38207,38230,38243,38257,38261,38266,38283,38296,38300,38304,38311,38318,38322,38342],{"__ignoreMap":3992},[4005,38152,38153,38155],{"class":4007,"line":4008},[4005,38154,5739],{"class":4171},[4005,38156,5742],{"class":4178},[4005,38158,38159],{"class":4007,"line":4014},[4005,38160,4036],{"emptyLinePlaceholder":4035},[4005,38162,38163,38165],{"class":4007,"line":4020},[4005,38164,3917],{"class":4836},[4005,38166,7656],{"class":4330},[4005,38168,38169],{"class":4007,"line":4026},[4005,38170,4036],{"emptyLinePlaceholder":4035},[4005,38172,38173,38175,38177],{"class":4007,"line":4032},[4005,38174,4299],{"class":4171},[4005,38176,5764],{"class":4302},[4005,38178,4306],{"class":4182},[4005,38180,38181],{"class":4007,"line":4039},[4005,38182,38183],{"class":4190},"    \u002F\u002F Ініціалізація з валідацією\n",[4005,38185,38186,38189,38191,38193,38195,38197,38199,38201,38203,38205],{"class":4007,"line":4045},[4005,38187,38188],{"class":4174},"    config",[4005,38190,4314],{"class":4182},[4005,38192,4299],{"class":4171},[4005,38194,7346],{"class":4182},[4005,38196,8793],{"class":4171},[4005,38198,11561],{"class":4182},[4005,38200,7004],{"class":4178},[4005,38202,28540],{"class":4182},[4005,38204,7004],{"class":4178},[4005,38206,5073],{"class":4182},[4005,38208,38209,38212,38214,38216,38218,38220,38222,38224,38226,38228],{"class":4007,"line":4051},[4005,38210,38211],{"class":4174},"        cfg",[4005,38213,4314],{"class":4182},[4005,38215,3764],{"class":4302},[4005,38217,4611],{"class":4182},[4005,38219,8793],{"class":4171},[4005,38221,11561],{"class":4182},[4005,38223,7004],{"class":4178},[4005,38225,28540],{"class":4182},[4005,38227,7004],{"class":4178},[4005,38229,4482],{"class":4182},[4005,38231,38232,38234,38236,38239,38241],{"class":4007,"line":4057},[4005,38233,38211],{"class":4174},[4005,38235,11561],{"class":4182},[4005,38237,38238],{"class":4330},"\"host\"",[4005,38240,12081],{"class":4182},[4005,38242,4970],{"class":4330},[4005,38244,38245,38247,38249,38252,38254],{"class":4007,"line":4063},[4005,38246,38211],{"class":4174},[4005,38248,11561],{"class":4182},[4005,38250,38251],{"class":4330},"\"port\"",[4005,38253,12081],{"class":4182},[4005,38255,38256],{"class":4330},"\"8080\"\n",[4005,38258,38259],{"class":4007,"line":4069},[4005,38260,12810],{"class":4182},[4005,38262,38263],{"class":4007,"line":4075},[4005,38264,38265],{"class":4190},"        \u002F\u002F Валідація\n",[4005,38267,38268,38270,38273,38275,38277,38279,38281],{"class":4007,"line":4081},[4005,38269,12892],{"class":4836},[4005,38271,38272],{"class":4174}," cfg",[4005,38274,11561],{"class":4182},[4005,38276,38238],{"class":4330},[4005,38278,13710],{"class":4182},[4005,38280,4203],{"class":4330},[4005,38282,5073],{"class":4182},[4005,38284,38285,38288,38290,38292,38294],{"class":4007,"line":4086},[4005,38286,38287],{"class":4174},"            cfg",[4005,38289,11561],{"class":4182},[4005,38291,38238],{"class":4330},[4005,38293,12081],{"class":4182},[4005,38295,4451],{"class":4330},[4005,38297,38298],{"class":4007,"line":4092},[4005,38299,12937],{"class":4182},[4005,38301,38302],{"class":4007,"line":4098},[4005,38303,12810],{"class":4182},[4005,38305,38306,38308],{"class":4007,"line":4104},[4005,38307,5119],{"class":4836},[4005,38309,38310],{"class":4174}," cfg\n",[4005,38312,38313,38315],{"class":4007,"line":4110},[4005,38314,38049],{"class":4182},[4005,38316,38317],{"class":4190},"\u002F\u002F Одразу викликаємо і отримуємо результат\n",[4005,38319,38320],{"class":4007,"line":4937},[4005,38321,5214],{"class":4182},[4005,38323,38324,38326,38328,38330,38332,38335,38337,38340],{"class":4007,"line":4942},[4005,38325,5370],{"class":4174},[4005,38327,3769],{"class":4182},[4005,38329,5348],{"class":4302},[4005,38331,4611],{"class":4182},[4005,38333,38334],{"class":4330},"\"Config:\"",[4005,38336,3836],{"class":4182},[4005,38338,38339],{"class":4174},"config",[4005,38341,4482],{"class":4182},[4005,38343,38344],{"class":4007,"line":4947},[4005,38345,4078],{"class":4182},[9014,38347,38349],{"id":38348},"приклад-3-анонімні-функції-як-аргументи","Приклад 3: Анонімні функції як аргументи",[3984,38351,38353],{"className":4162,"code":38352,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"sort\"\n)\n\nfunc main() {\n    users := []struct {\n        Name string\n        Age  int\n    }{\n        {\"Олена\", 25},\n        {\"Іван\", 30},\n        {\"Марія\", 22},\n    }\n    \n    \u002F\u002F Сортуємо за віком, використовуючи анонімну функцію\n    sort.Slice(users, func(i, j int) bool {\n        return users[i].Age \u003C users[j].Age  \u002F\u002F Від молодшого до старшого\n    })\n    \n    fmt.Println(\"Відсортовані за віком:\", users)\n    \u002F\u002F [{Марія 22} {Олена 25} {Іван 30}]\n}\n",[3753,38354,38355,38361,38365,38371,38375,38380,38384,38388,38396,38407,38413,38420,38425,38438,38450,38463,38467,38471,38476,38512,38543,38547,38551,38570,38575],{"__ignoreMap":3992},[4005,38356,38357,38359],{"class":4007,"line":4008},[4005,38358,5739],{"class":4171},[4005,38360,5742],{"class":4178},[4005,38362,38363],{"class":4007,"line":4014},[4005,38364,4036],{"emptyLinePlaceholder":4035},[4005,38366,38367,38369],{"class":4007,"line":4020},[4005,38368,3917],{"class":4836},[4005,38370,4439],{"class":4182},[4005,38372,38373],{"class":4007,"line":4026},[4005,38374,4843],{"class":4330},[4005,38376,38377],{"class":4007,"line":4032},[4005,38378,38379],{"class":4330},"    \"sort\"\n",[4005,38381,38382],{"class":4007,"line":4039},[4005,38383,4482],{"class":4182},[4005,38385,38386],{"class":4007,"line":4045},[4005,38387,4036],{"emptyLinePlaceholder":4035},[4005,38389,38390,38392,38394],{"class":4007,"line":4051},[4005,38391,4299],{"class":4171},[4005,38393,5764],{"class":4302},[4005,38395,4306],{"class":4182},[4005,38397,38398,38401,38403,38405],{"class":4007,"line":4057},[4005,38399,38400],{"class":4174},"    users",[4005,38402,11583],{"class":4182},[4005,38404,8957],{"class":4171},[4005,38406,5073],{"class":4182},[4005,38408,38409,38411],{"class":4007,"line":4063},[4005,38410,37207],{"class":4174},[4005,38412,20772],{"class":4178},[4005,38414,38415,38418],{"class":4007,"line":4069},[4005,38416,38417],{"class":4174},"        Age",[4005,38419,20780],{"class":4178},[4005,38421,38422],{"class":4007,"line":4075},[4005,38423,38424],{"class":4182},"    }{\n",[4005,38426,38427,38429,38431,38433,38435],{"class":4007,"line":4081},[4005,38428,31463],{"class":4182},[4005,38430,37920],{"class":4330},[4005,38432,3836],{"class":4182},[4005,38434,20817],{"class":4186},[4005,38436,38437],{"class":4182},"},\n",[4005,38439,38440,38442,38444,38446,38448],{"class":4007,"line":4086},[4005,38441,31463],{"class":4182},[4005,38443,37965],{"class":4330},[4005,38445,3836],{"class":4182},[4005,38447,4276],{"class":4186},[4005,38449,38437],{"class":4182},[4005,38451,38452,38454,38457,38459,38461],{"class":4007,"line":4092},[4005,38453,31463],{"class":4182},[4005,38455,38456],{"class":4330},"\"Марія\"",[4005,38458,3836],{"class":4182},[4005,38460,26114],{"class":4186},[4005,38462,38437],{"class":4182},[4005,38464,38465],{"class":4007,"line":4098},[4005,38466,5127],{"class":4182},[4005,38468,38469],{"class":4007,"line":4104},[4005,38470,5214],{"class":4182},[4005,38472,38473],{"class":4007,"line":4110},[4005,38474,38475],{"class":4190},"    \u002F\u002F Сортуємо за віком, використовуючи анонімну функцію\n",[4005,38477,38478,38481,38483,38486,38488,38491,38493,38495,38497,38499,38501,38504,38506,38508,38510],{"class":4007,"line":4937},[4005,38479,38480],{"class":4174},"    sort",[4005,38482,3769],{"class":4182},[4005,38484,38485],{"class":4302},"Slice",[4005,38487,4611],{"class":4182},[4005,38489,38490],{"class":4174},"users",[4005,38492,3836],{"class":4182},[4005,38494,4299],{"class":4171},[4005,38496,4611],{"class":4182},[4005,38498,27826],{"class":4174},[4005,38500,3836],{"class":4182},[4005,38502,38503],{"class":4174},"j",[4005,38505,4224],{"class":4178},[4005,38507,4498],{"class":4182},[4005,38509,8505],{"class":4178},[4005,38511,5073],{"class":4182},[4005,38513,38514,38516,38519,38521,38523,38526,38528,38530,38532,38534,38536,38538,38540],{"class":4007,"line":4942},[4005,38515,5119],{"class":4836},[4005,38517,38518],{"class":4174}," users",[4005,38520,11561],{"class":4182},[4005,38522,27826],{"class":4174},[4005,38524,38525],{"class":4182},"].",[4005,38527,20812],{"class":4174},[4005,38529,10331],{"class":4182},[4005,38531,38490],{"class":4174},[4005,38533,11561],{"class":4182},[4005,38535,38503],{"class":4174},[4005,38537,38525],{"class":4182},[4005,38539,20812],{"class":4174},[4005,38541,38542],{"class":4190},"  \u002F\u002F Від молодшого до старшого\n",[4005,38544,38545],{"class":4007,"line":4947},[4005,38546,19681],{"class":4182},[4005,38548,38549],{"class":4007,"line":4953},[4005,38550,5214],{"class":4182},[4005,38552,38553,38555,38557,38559,38561,38564,38566,38568],{"class":4007,"line":4960},[4005,38554,5370],{"class":4174},[4005,38556,3769],{"class":4182},[4005,38558,5348],{"class":4302},[4005,38560,4611],{"class":4182},[4005,38562,38563],{"class":4330},"\"Відсортовані за віком:\"",[4005,38565,3836],{"class":4182},[4005,38567,38490],{"class":4174},[4005,38569,4482],{"class":4182},[4005,38571,38572],{"class":4007,"line":4973},[4005,38573,38574],{"class":4190},"    \u002F\u002F [{Марія 22} {Олена 25} {Іван 30}]\n",[4005,38576,38577],{"class":4007,"line":4985},[4005,38578,4078],{"class":4182},[9014,38580,38582],{"id":38581},"приклад-4-анонімні-функції-для-обробки-подій-callbacks","Приклад 4: Анонімні функції для обробки подій (callbacks)",[3984,38584,38586],{"className":4162,"code":38585,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\ntype Server struct {\n    OnStart func()\n    OnStop  func()\n}\n\nfunc (s *Server) Start() {\n    fmt.Println(\"Запуск сервера...\")\n    if s.OnStart != nil {\n        s.OnStart()  \u002F\u002F Викликаємо callback\n    }\n}\n\nfunc (s *Server) Stop() {\n    fmt.Println(\"Зупинка сервера...\")\n    if s.OnStop != nil {\n        s.OnStop()  \u002F\u002F Викликаємо callback\n    }\n}\n\nfunc main() {\n    server := Server{\n        \u002F\u002F Анонімна функція як обробник події\n        OnStart: func() {\n            fmt.Println(\"✓ Сервер запущено!\")\n            fmt.Println(\"✓ З'єднання з базою даних встановлено\")\n        },\n        OnStop: func() {\n            fmt.Println(\"✓ Збережено стан\")\n            fmt.Println(\"✓ З'єднання закрито\")\n        },\n    }\n    \n    server.Start()\n    time.Sleep(1 * time.Second)\n    server.Stop()\n}\n",[3753,38587,38588,38594,38598,38604,38608,38612,38616,38620,38631,38640,38650,38654,38658,38677,38692,38709,38723,38727,38731,38735,38754,38769,38786,38798,38802,38806,38810,38818,38829,38834,38845,38860,38875,38880,38891,38906,38921,38925,38929,38933,38943,38966,38976],{"__ignoreMap":3992},[4005,38589,38590,38592],{"class":4007,"line":4008},[4005,38591,5739],{"class":4171},[4005,38593,5742],{"class":4178},[4005,38595,38596],{"class":4007,"line":4014},[4005,38597,4036],{"emptyLinePlaceholder":4035},[4005,38599,38600,38602],{"class":4007,"line":4020},[4005,38601,3917],{"class":4836},[4005,38603,4439],{"class":4182},[4005,38605,38606],{"class":4007,"line":4026},[4005,38607,4843],{"class":4330},[4005,38609,38610],{"class":4007,"line":4032},[4005,38611,25973],{"class":4330},[4005,38613,38614],{"class":4007,"line":4039},[4005,38615,4482],{"class":4182},[4005,38617,38618],{"class":4007,"line":4045},[4005,38619,4036],{"emptyLinePlaceholder":4035},[4005,38621,38622,38624,38627,38629],{"class":4007,"line":4051},[4005,38623,4809],{"class":4171},[4005,38625,38626],{"class":4178}," Server",[4005,38628,10957],{"class":4171},[4005,38630,5073],{"class":4182},[4005,38632,38633,38636,38638],{"class":4007,"line":4057},[4005,38634,38635],{"class":4174},"    OnStart",[4005,38637,20015],{"class":4171},[4005,38639,5143],{"class":4182},[4005,38641,38642,38645,38648],{"class":4007,"line":4063},[4005,38643,38644],{"class":4174},"    OnStop",[4005,38646,38647],{"class":4171},"  func",[4005,38649,5143],{"class":4182},[4005,38651,38652],{"class":4007,"line":4069},[4005,38653,4078],{"class":4182},[4005,38655,38656],{"class":4007,"line":4075},[4005,38657,4036],{"emptyLinePlaceholder":4035},[4005,38659,38660,38662,38664,38666,38668,38671,38673,38675],{"class":4007,"line":4081},[4005,38661,4299],{"class":4171},[4005,38663,4761],{"class":4182},[4005,38665,7335],{"class":4174},[4005,38667,8128],{"class":4182},[4005,38669,38670],{"class":4178},"Server",[4005,38672,4498],{"class":4182},[4005,38674,25318],{"class":4302},[4005,38676,4306],{"class":4182},[4005,38678,38679,38681,38683,38685,38687,38690],{"class":4007,"line":4086},[4005,38680,5370],{"class":4174},[4005,38682,3769],{"class":4182},[4005,38684,5348],{"class":4302},[4005,38686,4611],{"class":4182},[4005,38688,38689],{"class":4330},"\"Запуск сервера...\"",[4005,38691,4482],{"class":4182},[4005,38693,38694,38696,38698,38700,38703,38705,38707],{"class":4007,"line":4092},[4005,38695,5104],{"class":4836},[4005,38697,7358],{"class":4174},[4005,38699,3769],{"class":4182},[4005,38701,38702],{"class":4174},"OnStart",[4005,38704,5110],{"class":4182},[4005,38706,4209],{"class":4171},[4005,38708,5073],{"class":4182},[4005,38710,38711,38714,38716,38718,38720],{"class":4007,"line":4098},[4005,38712,38713],{"class":4174},"        s",[4005,38715,3769],{"class":4182},[4005,38717,38702],{"class":4302},[4005,38719,5491],{"class":4182},[4005,38721,38722],{"class":4190},"\u002F\u002F Викликаємо callback\n",[4005,38724,38725],{"class":4007,"line":4104},[4005,38726,5127],{"class":4182},[4005,38728,38729],{"class":4007,"line":4110},[4005,38730,4078],{"class":4182},[4005,38732,38733],{"class":4007,"line":4937},[4005,38734,4036],{"emptyLinePlaceholder":4035},[4005,38736,38737,38739,38741,38743,38745,38747,38749,38752],{"class":4007,"line":4942},[4005,38738,4299],{"class":4171},[4005,38740,4761],{"class":4182},[4005,38742,7335],{"class":4174},[4005,38744,8128],{"class":4182},[4005,38746,38670],{"class":4178},[4005,38748,4498],{"class":4182},[4005,38750,38751],{"class":4302},"Stop",[4005,38753,4306],{"class":4182},[4005,38755,38756,38758,38760,38762,38764,38767],{"class":4007,"line":4947},[4005,38757,5370],{"class":4174},[4005,38759,3769],{"class":4182},[4005,38761,5348],{"class":4302},[4005,38763,4611],{"class":4182},[4005,38765,38766],{"class":4330},"\"Зупинка сервера...\"",[4005,38768,4482],{"class":4182},[4005,38770,38771,38773,38775,38777,38780,38782,38784],{"class":4007,"line":4953},[4005,38772,5104],{"class":4836},[4005,38774,7358],{"class":4174},[4005,38776,3769],{"class":4182},[4005,38778,38779],{"class":4174},"OnStop",[4005,38781,5110],{"class":4182},[4005,38783,4209],{"class":4171},[4005,38785,5073],{"class":4182},[4005,38787,38788,38790,38792,38794,38796],{"class":4007,"line":4960},[4005,38789,38713],{"class":4174},[4005,38791,3769],{"class":4182},[4005,38793,38779],{"class":4302},[4005,38795,5491],{"class":4182},[4005,38797,38722],{"class":4190},[4005,38799,38800],{"class":4007,"line":4973},[4005,38801,5127],{"class":4182},[4005,38803,38804],{"class":4007,"line":4985},[4005,38805,4078],{"class":4182},[4005,38807,38808],{"class":4007,"line":7813},[4005,38809,4036],{"emptyLinePlaceholder":4035},[4005,38811,38812,38814,38816],{"class":4007,"line":7819},[4005,38813,4299],{"class":4171},[4005,38815,5764],{"class":4302},[4005,38817,4306],{"class":4182},[4005,38819,38820,38823,38825,38827],{"class":4007,"line":7826},[4005,38821,38822],{"class":4174},"    server",[4005,38824,4314],{"class":4182},[4005,38826,38670],{"class":4178},[4005,38828,29461],{"class":4182},[4005,38830,38831],{"class":4007,"line":7839},[4005,38832,38833],{"class":4190},"        \u002F\u002F Анонімна функція як обробник події\n",[4005,38835,38836,38839,38841,38843],{"class":4007,"line":7864},[4005,38837,38838],{"class":4174},"        OnStart",[4005,38840,11172],{"class":4182},[4005,38842,4299],{"class":4171},[4005,38844,4306],{"class":4182},[4005,38846,38847,38849,38851,38853,38855,38858],{"class":4007,"line":7872},[4005,38848,26586],{"class":4174},[4005,38850,3769],{"class":4182},[4005,38852,5348],{"class":4302},[4005,38854,4611],{"class":4182},[4005,38856,38857],{"class":4330},"\"✓ Сервер запущено!\"",[4005,38859,4482],{"class":4182},[4005,38861,38862,38864,38866,38868,38870,38873],{"class":4007,"line":7881},[4005,38863,26586],{"class":4174},[4005,38865,3769],{"class":4182},[4005,38867,5348],{"class":4302},[4005,38869,4611],{"class":4182},[4005,38871,38872],{"class":4330},"\"✓ З'єднання з базою даних встановлено\"",[4005,38874,4482],{"class":4182},[4005,38876,38877],{"class":4007,"line":7890},[4005,38878,38879],{"class":4182},"        },\n",[4005,38881,38882,38885,38887,38889],{"class":4007,"line":7895},[4005,38883,38884],{"class":4174},"        OnStop",[4005,38886,11172],{"class":4182},[4005,38888,4299],{"class":4171},[4005,38890,4306],{"class":4182},[4005,38892,38893,38895,38897,38899,38901,38904],{"class":4007,"line":7900},[4005,38894,26586],{"class":4174},[4005,38896,3769],{"class":4182},[4005,38898,5348],{"class":4302},[4005,38900,4611],{"class":4182},[4005,38902,38903],{"class":4330},"\"✓ Збережено стан\"",[4005,38905,4482],{"class":4182},[4005,38907,38908,38910,38912,38914,38916,38919],{"class":4007,"line":7909},[4005,38909,26586],{"class":4174},[4005,38911,3769],{"class":4182},[4005,38913,5348],{"class":4302},[4005,38915,4611],{"class":4182},[4005,38917,38918],{"class":4330},"\"✓ З'єднання закрито\"",[4005,38920,4482],{"class":4182},[4005,38922,38923],{"class":4007,"line":7915},[4005,38924,38879],{"class":4182},[4005,38926,38927],{"class":4007,"line":7921},[4005,38928,5127],{"class":4182},[4005,38930,38931],{"class":4007,"line":7938},[4005,38932,5214],{"class":4182},[4005,38934,38935,38937,38939,38941],{"class":4007,"line":7982},[4005,38936,38822],{"class":4174},[4005,38938,3769],{"class":4182},[4005,38940,25318],{"class":4302},[4005,38942,5143],{"class":4182},[4005,38944,38945,38947,38949,38951,38953,38955,38957,38959,38961,38964],{"class":4007,"line":7987},[4005,38946,37643],{"class":4174},[4005,38948,3769],{"class":4182},[4005,38950,37648],{"class":4302},[4005,38952,4611],{"class":4182},[4005,38954,4393],{"class":4186},[4005,38956,6735],{"class":4182},[4005,38958,26006],{"class":4174},[4005,38960,3769],{"class":4182},[4005,38962,38963],{"class":4174},"Second",[4005,38965,4482],{"class":4182},[4005,38967,38968,38970,38972,38974],{"class":4007,"line":7993},[4005,38969,38822],{"class":4174},[4005,38971,3769],{"class":4182},[4005,38973,38751],{"class":4302},[4005,38975,5143],{"class":4182},[4005,38977,38978],{"class":4007,"line":8016},[4005,38979,4078],{"class":4182},[9014,38981,38983],{"id":38982},"приклад-5-декоратори-функцій","Приклад 5: Декоратори функцій",[3984,38985,38987],{"className":4162,"code":38986,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\n\u002F\u002F Декоратор — функція, яка приймає і повертає функцію\nfunc measureTime(fn func()) func() {\n    return func() {\n        start := time.Now()\n        fn()  \u002F\u002F Викликаємо оригінальну функцію\n        fmt.Printf(\"Час виконання: %v\\n\", time.Since(start))\n    }\n}\n\nfunc slowTask() {\n    fmt.Println(\"Виконую складну задачу...\")\n    time.Sleep(200 * time.Millisecond)\n    fmt.Println(\"Задачу виконано!\")\n}\n\nfunc main() {\n    \u002F\u002F Обгортаємо функцію декоратором\n    measuredTask := measureTime(slowTask)\n    measuredTask()\n}\n",[3753,38988,38989,38995,38999,39005,39009,39013,39017,39021,39026,39047,39055,39069,39078,39111,39115,39119,39123,39132,39147,39169,39184,39188,39192,39200,39205,39222,39228],{"__ignoreMap":3992},[4005,38990,38991,38993],{"class":4007,"line":4008},[4005,38992,5739],{"class":4171},[4005,38994,5742],{"class":4178},[4005,38996,38997],{"class":4007,"line":4014},[4005,38998,4036],{"emptyLinePlaceholder":4035},[4005,39000,39001,39003],{"class":4007,"line":4020},[4005,39002,3917],{"class":4836},[4005,39004,4439],{"class":4182},[4005,39006,39007],{"class":4007,"line":4026},[4005,39008,4843],{"class":4330},[4005,39010,39011],{"class":4007,"line":4032},[4005,39012,25973],{"class":4330},[4005,39014,39015],{"class":4007,"line":4039},[4005,39016,4482],{"class":4182},[4005,39018,39019],{"class":4007,"line":4045},[4005,39020,4036],{"emptyLinePlaceholder":4035},[4005,39022,39023],{"class":4007,"line":4051},[4005,39024,39025],{"class":4190},"\u002F\u002F Декоратор — функція, яка приймає і повертає функцію\n",[4005,39027,39028,39030,39033,39035,39038,39040,39043,39045],{"class":4007,"line":4057},[4005,39029,4299],{"class":4171},[4005,39031,39032],{"class":4302}," measureTime",[4005,39034,4611],{"class":4182},[4005,39036,39037],{"class":4174},"fn",[4005,39039,20015],{"class":4171},[4005,39041,39042],{"class":4182},"()) ",[4005,39044,4299],{"class":4171},[4005,39046,4306],{"class":4182},[4005,39048,39049,39051,39053],{"class":4007,"line":4063},[4005,39050,5260],{"class":4836},[4005,39052,20015],{"class":4171},[4005,39054,4306],{"class":4182},[4005,39056,39057,39059,39061,39063,39065,39067],{"class":4007,"line":4069},[4005,39058,37506],{"class":4174},[4005,39060,4314],{"class":4182},[4005,39062,26006],{"class":4174},[4005,39064,3769],{"class":4182},[4005,39066,26011],{"class":4302},[4005,39068,5143],{"class":4182},[4005,39070,39071,39074,39076],{"class":4007,"line":4075},[4005,39072,39073],{"class":4302},"        fn",[4005,39075,5491],{"class":4182},[4005,39077,37562],{"class":4190},[4005,39079,39080,39082,39084,39086,39088,39091,39093,39095,39097,39099,39101,39103,39105,39107,39109],{"class":4007,"line":4081},[4005,39081,5343],{"class":4174},[4005,39083,3769],{"class":4182},[4005,39085,7945],{"class":4302},[4005,39087,4611],{"class":4182},[4005,39089,39090],{"class":4330},"\"Час виконання: ",[4005,39092,10666],{"class":4174},[4005,39094,7965],{"class":7964},[4005,39096,7968],{"class":4330},[4005,39098,3836],{"class":4182},[4005,39100,26006],{"class":4174},[4005,39102,3769],{"class":4182},[4005,39104,37594],{"class":4302},[4005,39106,4611],{"class":4182},[4005,39108,37599],{"class":4174},[4005,39110,25552],{"class":4182},[4005,39112,39113],{"class":4007,"line":4086},[4005,39114,5127],{"class":4182},[4005,39116,39117],{"class":4007,"line":4092},[4005,39118,4078],{"class":4182},[4005,39120,39121],{"class":4007,"line":4098},[4005,39122,4036],{"emptyLinePlaceholder":4035},[4005,39124,39125,39127,39130],{"class":4007,"line":4104},[4005,39126,4299],{"class":4171},[4005,39128,39129],{"class":4302}," slowTask",[4005,39131,4306],{"class":4182},[4005,39133,39134,39136,39138,39140,39142,39145],{"class":4007,"line":4110},[4005,39135,5370],{"class":4174},[4005,39137,3769],{"class":4182},[4005,39139,5348],{"class":4302},[4005,39141,4611],{"class":4182},[4005,39143,39144],{"class":4330},"\"Виконую складну задачу...\"",[4005,39146,4482],{"class":4182},[4005,39148,39149,39151,39153,39155,39157,39159,39161,39163,39165,39167],{"class":4007,"line":4937},[4005,39150,37643],{"class":4174},[4005,39152,3769],{"class":4182},[4005,39154,37648],{"class":4302},[4005,39156,4611],{"class":4182},[4005,39158,4317],{"class":4186},[4005,39160,6735],{"class":4182},[4005,39162,26006],{"class":4174},[4005,39164,3769],{"class":4182},[4005,39166,37661],{"class":4174},[4005,39168,4482],{"class":4182},[4005,39170,39171,39173,39175,39177,39179,39182],{"class":4007,"line":4942},[4005,39172,5370],{"class":4174},[4005,39174,3769],{"class":4182},[4005,39176,5348],{"class":4302},[4005,39178,4611],{"class":4182},[4005,39180,39181],{"class":4330},"\"Задачу виконано!\"",[4005,39183,4482],{"class":4182},[4005,39185,39186],{"class":4007,"line":4947},[4005,39187,4078],{"class":4182},[4005,39189,39190],{"class":4007,"line":4953},[4005,39191,4036],{"emptyLinePlaceholder":4035},[4005,39193,39194,39196,39198],{"class":4007,"line":4960},[4005,39195,4299],{"class":4171},[4005,39197,5764],{"class":4302},[4005,39199,4306],{"class":4182},[4005,39201,39202],{"class":4007,"line":4973},[4005,39203,39204],{"class":4190},"    \u002F\u002F Обгортаємо функцію декоратором\n",[4005,39206,39207,39210,39212,39215,39217,39220],{"class":4007,"line":4985},[4005,39208,39209],{"class":4174},"    measuredTask",[4005,39211,4314],{"class":4182},[4005,39213,39214],{"class":4302},"measureTime",[4005,39216,4611],{"class":4182},[4005,39218,39219],{"class":4174},"slowTask",[4005,39221,4482],{"class":4182},[4005,39223,39224,39226],{"class":4007,"line":7813},[4005,39225,39209],{"class":4302},[4005,39227,5143],{"class":4182},[4005,39229,39230],{"class":4007,"line":7819},[4005,39231,4078],{"class":4182},[3908,39233,39234],{},[3871,39235,11778],{},[3984,39237,39240],{"className":39238,"code":39239,"language":3989},[3987],"Виконую складну задачу...\nЗадачу виконано!\nЧас виконання: 200ms\n",[3753,39241,39239],{"__ignoreMap":3992},[9014,39243,30133],{"id":39244},"порівняння-з-іншими-мовами-2",[5991,39246,39247,39257],{},[5994,39248,39249],{},[5997,39250,39251,39253,39255],{},[6000,39252,30142],{},[6000,39254,37773],{},[6000,39256,6005],{},[6010,39258,39259,39275,39292,39306,39320,39333],{},[5997,39260,39261,39265,39270],{},[6015,39262,39263],{},[3871,39264,12539],{},[6015,39266,39267,39269],{},[3753,39268,4299],{}," без імені",[6015,39271,39272],{},[3753,39273,39274],{},"func(x int) int { return x * 2 }",[5997,39276,39277,39281,39284],{},[6015,39278,39279],{},[3871,39280,1913],{},[6015,39282,39283],{},"Arrow function \u002F function expression",[6015,39285,39286,8512,39289],{},[3753,39287,39288],{},"(x) => x * 2",[3753,39290,39291],{},"function(x) { return x * 2; }",[5997,39293,39294,39298,39301],{},[6015,39295,39296],{},[3871,39297,2548],{},[6015,39299,39300],{},"lambda",[6015,39302,39303],{},[3753,39304,39305],{},"lambda x: x * 2",[5997,39307,39308,39312,39315],{},[6015,39309,39310],{},[3871,39311,2367],{},[6015,39313,39314],{},"Lambda (з Java 8+)",[6015,39316,39317],{},[3753,39318,39319],{},"(x) -> x * 2",[5997,39321,39322,39326,39329],{},[6015,39323,39324],{},[3871,39325,5],{},[6015,39327,39328],{},"Lambda",[6015,39330,39331],{},[3753,39332,39288],{},[5997,39334,39335,39339,39341],{},[6015,39336,39337],{},[3871,39338,1708],{},[6015,39340,39328],{},[6015,39342,39343],{},[3753,39344,39345],{},"[](int x) { return x * 2; }",[3900,39347],{},[3976,39349,39351],{"id":39350},"замикання-closures-стан-та-захоплення-змінних","Замикання (Closures): стан та захоплення змінних",[9014,39353,39355],{"id":39354},"що-таке-замикання","Що таке замикання?",[3908,39357,39358,39364],{},[3871,39359,39360,39361,5032],{},"Замикання (",[3758,39362,39363],{},"Closure"," — це функція, яка \"запам'ятовує\" і має доступ до змінних з зовнішньої області видимості (scope), навіть після того, як зовнішня функція завершила роботу.",[3908,39366,39367,39370],{},[3871,39368,39369],{},"Простими словами:"," замикання = функція + оточення (змінні, до яких вона має доступ)",[9014,39372,39374],{"id":39373},"як-працює-замикання","Як працює замикання?",[4781,39376,39377,39384,39391,39398],{},[3749,39378,39379,39380,39383],{},"Внутрішня функція ",[3871,39381,39382],{},"\"захоплює\""," (capture) змінні з зовнішньої функції",[3749,39385,39386,39387,39390],{},"Ці змінні ",[3871,39388,39389],{},"переміщуються з стеку в купу"," (heap)",[3749,39392,39393,39394,39397],{},"Змінні ",[3871,39395,39396],{},"живуть доти, доки існує посилання"," на внутрішню функцію",[3749,39399,39400,39401,39404],{},"Кожне замикання має ",[3871,39402,39403],{},"свою ізольовану копію"," захоплених змінних",[4748,39406,39407,39412],{"icon":4750},[3908,39408,39409],{},[3871,39410,39411],{},"Відмінність від звичайних функцій:",[5991,39413,39414,39424],{},[5994,39415,39416],{},[5997,39417,39418,39421],{},[6000,39419,39420],{},"Звичайна функція",[6000,39422,39423],{},"Замикання",[6010,39425,39426,39434,39442],{},[5997,39427,39428,39431],{},[6015,39429,39430],{},"Має доступ тільки до своїх параметрів і глобальних змінних",[6015,39432,39433],{},"Має доступ до змінних зовнішньої функції",[5997,39435,39436,39439],{},[6015,39437,39438],{},"Не зберігає стан між викликами",[6015,39440,39441],{},"Зберігає стан у захоплених змінних",[5997,39443,39444,39447],{},[6015,39445,39446],{},"Всі виклики незалежні",[6015,39448,39449],{},"Кожен виклик впливає на загальний стан",[9014,39451,39453],{"id":39452},"приклад-1-базове-замикання-лічильник","Приклад 1: Базове замикання — лічильник",[3984,39455,39457],{"className":4162,"code":39456,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Функція створює замикання, яке \"запам'ятовує\" count\nfunc createCounter() func() int {\n    count := 0  \u002F\u002F Ця змінна буде захоплена замиканням\n    \n    \u002F\u002F Повертаємо анонімну функцію (замикання)\n    return func() int {\n        count++  \u002F\u002F Маємо доступ до count з зовнішньої функції!\n        return count\n    }\n}\n\nfunc main() {\n    \u002F\u002F Створюємо лічильник\n    counter := createCounter()\n    \n    \u002F\u002F Кожен виклик збільшує count\n    fmt.Println(counter())  \u002F\u002F 1\n    fmt.Println(counter())  \u002F\u002F 2\n    fmt.Println(counter())  \u002F\u002F 3\n    \n    \u002F\u002F Створюємо другий незалежний лічильник\n    counter2 := createCounter()\n    fmt.Println(counter2())  \u002F\u002F 1 (свій власний count!)\n    fmt.Println(counter2())  \u002F\u002F 2\n    \n    \u002F\u002F Перший лічильник не залежить від другого\n    fmt.Println(counter())   \u002F\u002F 4 (продовжує свій підрахунок)\n}\n",[3753,39458,39459,39465,39469,39475,39479,39484,39501,39512,39516,39521,39533,39543,39550,39554,39558,39562,39570,39575,39586,39590,39595,39613,39629,39645,39649,39654,39665,39683,39699,39703,39708,39726],{"__ignoreMap":3992},[4005,39460,39461,39463],{"class":4007,"line":4008},[4005,39462,5739],{"class":4171},[4005,39464,5742],{"class":4178},[4005,39466,39467],{"class":4007,"line":4014},[4005,39468,4036],{"emptyLinePlaceholder":4035},[4005,39470,39471,39473],{"class":4007,"line":4020},[4005,39472,3917],{"class":4836},[4005,39474,7656],{"class":4330},[4005,39476,39477],{"class":4007,"line":4026},[4005,39478,4036],{"emptyLinePlaceholder":4035},[4005,39480,39481],{"class":4007,"line":4032},[4005,39482,39483],{"class":4190},"\u002F\u002F Функція створює замикання, яке \"запам'ятовує\" count\n",[4005,39485,39486,39488,39491,39493,39495,39497,39499],{"class":4007,"line":4039},[4005,39487,4299],{"class":4171},[4005,39489,39490],{"class":4302}," createCounter",[4005,39492,7346],{"class":4182},[4005,39494,4299],{"class":4171},[4005,39496,7346],{"class":4182},[4005,39498,4158],{"class":4178},[4005,39500,5073],{"class":4182},[4005,39502,39503,39505,39507,39509],{"class":4007,"line":4045},[4005,39504,14072],{"class":4174},[4005,39506,4314],{"class":4182},[4005,39508,4200],{"class":4186},[4005,39510,39511],{"class":4190},"  \u002F\u002F Ця змінна буде захоплена замиканням\n",[4005,39513,39514],{"class":4007,"line":4051},[4005,39515,5214],{"class":4182},[4005,39517,39518],{"class":4007,"line":4057},[4005,39519,39520],{"class":4190},"    \u002F\u002F Повертаємо анонімну функцію (замикання)\n",[4005,39522,39523,39525,39527,39529,39531],{"class":4007,"line":4063},[4005,39524,5260],{"class":4836},[4005,39526,20015],{"class":4171},[4005,39528,7346],{"class":4182},[4005,39530,4158],{"class":4178},[4005,39532,5073],{"class":4182},[4005,39534,39535,39537,39540],{"class":4007,"line":4069},[4005,39536,30081],{"class":4174},[4005,39538,39539],{"class":4182},"++  ",[4005,39541,39542],{"class":4190},"\u002F\u002F Маємо доступ до count з зовнішньої функції!\n",[4005,39544,39545,39547],{"class":4007,"line":4075},[4005,39546,5119],{"class":4836},[4005,39548,39549],{"class":4174}," count\n",[4005,39551,39552],{"class":4007,"line":4081},[4005,39553,5127],{"class":4182},[4005,39555,39556],{"class":4007,"line":4086},[4005,39557,4078],{"class":4182},[4005,39559,39560],{"class":4007,"line":4092},[4005,39561,4036],{"emptyLinePlaceholder":4035},[4005,39563,39564,39566,39568],{"class":4007,"line":4098},[4005,39565,4299],{"class":4171},[4005,39567,5764],{"class":4302},[4005,39569,4306],{"class":4182},[4005,39571,39572],{"class":4007,"line":4104},[4005,39573,39574],{"class":4190},"    \u002F\u002F Створюємо лічильник\n",[4005,39576,39577,39579,39581,39584],{"class":4007,"line":4110},[4005,39578,28126],{"class":4174},[4005,39580,4314],{"class":4182},[4005,39582,39583],{"class":4302},"createCounter",[4005,39585,5143],{"class":4182},[4005,39587,39588],{"class":4007,"line":4937},[4005,39589,5214],{"class":4182},[4005,39591,39592],{"class":4007,"line":4942},[4005,39593,39594],{"class":4190},"    \u002F\u002F Кожен виклик збільшує count\n",[4005,39596,39597,39599,39601,39603,39605,39607,39610],{"class":4007,"line":4947},[4005,39598,5370],{"class":4174},[4005,39600,3769],{"class":4182},[4005,39602,5348],{"class":4302},[4005,39604,4611],{"class":4182},[4005,39606,28253],{"class":4302},[4005,39608,39609],{"class":4182},"())  ",[4005,39611,39612],{"class":4190},"\u002F\u002F 1\n",[4005,39614,39615,39617,39619,39621,39623,39625,39627],{"class":4007,"line":4953},[4005,39616,5370],{"class":4174},[4005,39618,3769],{"class":4182},[4005,39620,5348],{"class":4302},[4005,39622,4611],{"class":4182},[4005,39624,28253],{"class":4302},[4005,39626,39609],{"class":4182},[4005,39628,11727],{"class":4190},[4005,39630,39631,39633,39635,39637,39639,39641,39643],{"class":4007,"line":4960},[4005,39632,5370],{"class":4174},[4005,39634,3769],{"class":4182},[4005,39636,5348],{"class":4302},[4005,39638,4611],{"class":4182},[4005,39640,28253],{"class":4302},[4005,39642,39609],{"class":4182},[4005,39644,14122],{"class":4190},[4005,39646,39647],{"class":4007,"line":4973},[4005,39648,5214],{"class":4182},[4005,39650,39651],{"class":4007,"line":4985},[4005,39652,39653],{"class":4190},"    \u002F\u002F Створюємо другий незалежний лічильник\n",[4005,39655,39656,39659,39661,39663],{"class":4007,"line":7813},[4005,39657,39658],{"class":4174},"    counter2",[4005,39660,4314],{"class":4182},[4005,39662,39583],{"class":4302},[4005,39664,5143],{"class":4182},[4005,39666,39667,39669,39671,39673,39675,39678,39680],{"class":4007,"line":7819},[4005,39668,5370],{"class":4174},[4005,39670,3769],{"class":4182},[4005,39672,5348],{"class":4302},[4005,39674,4611],{"class":4182},[4005,39676,39677],{"class":4302},"counter2",[4005,39679,39609],{"class":4182},[4005,39681,39682],{"class":4190},"\u002F\u002F 1 (свій власний count!)\n",[4005,39684,39685,39687,39689,39691,39693,39695,39697],{"class":4007,"line":7826},[4005,39686,5370],{"class":4174},[4005,39688,3769],{"class":4182},[4005,39690,5348],{"class":4302},[4005,39692,4611],{"class":4182},[4005,39694,39677],{"class":4302},[4005,39696,39609],{"class":4182},[4005,39698,11727],{"class":4190},[4005,39700,39701],{"class":4007,"line":7839},[4005,39702,5214],{"class":4182},[4005,39704,39705],{"class":4007,"line":7864},[4005,39706,39707],{"class":4190},"    \u002F\u002F Перший лічильник не залежить від другого\n",[4005,39709,39710,39712,39714,39716,39718,39720,39723],{"class":4007,"line":7872},[4005,39711,5370],{"class":4174},[4005,39713,3769],{"class":4182},[4005,39715,5348],{"class":4302},[4005,39717,4611],{"class":4182},[4005,39719,28253],{"class":4302},[4005,39721,39722],{"class":4182},"())   ",[4005,39724,39725],{"class":4190},"\u002F\u002F 4 (продовжує свій підрахунок)\n",[4005,39727,39728],{"class":4007,"line":7881},[4005,39729,4078],{"class":4182},[3908,39731,39732],{},[3871,39733,11778],{},[3984,39735,39738],{"className":39736,"code":39737,"language":3989},[3987],"1\n2\n3\n1\n2\n4\n",[3753,39739,39737],{"__ignoreMap":3992},[9014,39741,39743],{"id":39742},"візуалізація-роботи-замикання","Візуалізація роботи замикання",[3984,39745,39748],{"className":39746,"code":39747,"language":3989},[3987],"┌─── createCounter() викликається ───┐\n│                                     │\n│  count := 0  ← Локальна змінна     │\n│                                     │\n│  return func() int {                │\n│      count++   ← Захоплює count    │\n│      return count                   │\n│  }                                  │\n│                                     │\n└─────────────────────────────────────┘\n         │\n         ├─→ counter := ... (копія A: count = 0)\n         └─→ counter2 := ... (копія B: count = 0)\n\nКожне замикання має свою ВЛАСНУ копію count!\n",[3753,39749,39747],{"__ignoreMap":3992},[9014,39751,39753],{"id":39752},"приклад-2-замикання-з-параметрами","Приклад 2: Замикання з параметрами",[3984,39755,39757],{"className":4162,"code":39756,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Створюємо лічильник з початковим значенням\nfunc createCounter(start int) func() int {\n    current := start\n    \n    return func() int {\n        current++\n        return current\n    }\n}\n\nfunc main() {\n    counter1 := createCounter(0)\n    counter2 := createCounter(100)\n    \n    fmt.Println(\"Counter1:\", counter1())  \u002F\u002F 1\n    fmt.Println(\"Counter1:\", counter1())  \u002F\u002F 2\n    \n    fmt.Println(\"Counter2:\", counter2())  \u002F\u002F 101\n    fmt.Println(\"Counter2:\", counter2())  \u002F\u002F 102\n}\n",[3753,39758,39759,39765,39769,39775,39779,39784,39806,39816,39820,39832,39839,39846,39850,39854,39858,39866,39881,39895,39899,39921,39941,39945,39967,39988],{"__ignoreMap":3992},[4005,39760,39761,39763],{"class":4007,"line":4008},[4005,39762,5739],{"class":4171},[4005,39764,5742],{"class":4178},[4005,39766,39767],{"class":4007,"line":4014},[4005,39768,4036],{"emptyLinePlaceholder":4035},[4005,39770,39771,39773],{"class":4007,"line":4020},[4005,39772,3917],{"class":4836},[4005,39774,7656],{"class":4330},[4005,39776,39777],{"class":4007,"line":4026},[4005,39778,4036],{"emptyLinePlaceholder":4035},[4005,39780,39781],{"class":4007,"line":4032},[4005,39782,39783],{"class":4190},"\u002F\u002F Створюємо лічильник з початковим значенням\n",[4005,39785,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804],{"class":4007,"line":4039},[4005,39787,4299],{"class":4171},[4005,39789,39490],{"class":4302},[4005,39791,4611],{"class":4182},[4005,39793,37599],{"class":4174},[4005,39795,4224],{"class":4178},[4005,39797,4498],{"class":4182},[4005,39799,4299],{"class":4171},[4005,39801,7346],{"class":4182},[4005,39803,4158],{"class":4178},[4005,39805,5073],{"class":4182},[4005,39807,39808,39811,39813],{"class":4007,"line":4045},[4005,39809,39810],{"class":4174},"    current",[4005,39812,4314],{"class":4182},[4005,39814,39815],{"class":4174},"start\n",[4005,39817,39818],{"class":4007,"line":4051},[4005,39819,5214],{"class":4182},[4005,39821,39822,39824,39826,39828,39830],{"class":4007,"line":4057},[4005,39823,5260],{"class":4836},[4005,39825,20015],{"class":4171},[4005,39827,7346],{"class":4182},[4005,39829,4158],{"class":4178},[4005,39831,5073],{"class":4182},[4005,39833,39834,39837],{"class":4007,"line":4063},[4005,39835,39836],{"class":4174},"        current",[4005,39838,28148],{"class":4182},[4005,39840,39841,39843],{"class":4007,"line":4069},[4005,39842,5119],{"class":4836},[4005,39844,39845],{"class":4174}," current\n",[4005,39847,39848],{"class":4007,"line":4075},[4005,39849,5127],{"class":4182},[4005,39851,39852],{"class":4007,"line":4081},[4005,39853,4078],{"class":4182},[4005,39855,39856],{"class":4007,"line":4086},[4005,39857,4036],{"emptyLinePlaceholder":4035},[4005,39859,39860,39862,39864],{"class":4007,"line":4092},[4005,39861,4299],{"class":4171},[4005,39863,5764],{"class":4302},[4005,39865,4306],{"class":4182},[4005,39867,39868,39871,39873,39875,39877,39879],{"class":4007,"line":4098},[4005,39869,39870],{"class":4174},"    counter1",[4005,39872,4314],{"class":4182},[4005,39874,39583],{"class":4302},[4005,39876,4611],{"class":4182},[4005,39878,4200],{"class":4186},[4005,39880,4482],{"class":4182},[4005,39882,39883,39885,39887,39889,39891,39893],{"class":4007,"line":4104},[4005,39884,39658],{"class":4174},[4005,39886,4314],{"class":4182},[4005,39888,39583],{"class":4302},[4005,39890,4611],{"class":4182},[4005,39892,6478],{"class":4186},[4005,39894,4482],{"class":4182},[4005,39896,39897],{"class":4007,"line":4110},[4005,39898,5214],{"class":4182},[4005,39900,39901,39903,39905,39907,39909,39912,39914,39917,39919],{"class":4007,"line":4937},[4005,39902,5370],{"class":4174},[4005,39904,3769],{"class":4182},[4005,39906,5348],{"class":4302},[4005,39908,4611],{"class":4182},[4005,39910,39911],{"class":4330},"\"Counter1:\"",[4005,39913,3836],{"class":4182},[4005,39915,39916],{"class":4302},"counter1",[4005,39918,39609],{"class":4182},[4005,39920,39612],{"class":4190},[4005,39922,39923,39925,39927,39929,39931,39933,39935,39937,39939],{"class":4007,"line":4942},[4005,39924,5370],{"class":4174},[4005,39926,3769],{"class":4182},[4005,39928,5348],{"class":4302},[4005,39930,4611],{"class":4182},[4005,39932,39911],{"class":4330},[4005,39934,3836],{"class":4182},[4005,39936,39916],{"class":4302},[4005,39938,39609],{"class":4182},[4005,39940,11727],{"class":4190},[4005,39942,39943],{"class":4007,"line":4947},[4005,39944,5214],{"class":4182},[4005,39946,39947,39949,39951,39953,39955,39958,39960,39962,39964],{"class":4007,"line":4953},[4005,39948,5370],{"class":4174},[4005,39950,3769],{"class":4182},[4005,39952,5348],{"class":4302},[4005,39954,4611],{"class":4182},[4005,39956,39957],{"class":4330},"\"Counter2:\"",[4005,39959,3836],{"class":4182},[4005,39961,39677],{"class":4302},[4005,39963,39609],{"class":4182},[4005,39965,39966],{"class":4190},"\u002F\u002F 101\n",[4005,39968,39969,39971,39973,39975,39977,39979,39981,39983,39985],{"class":4007,"line":4960},[4005,39970,5370],{"class":4174},[4005,39972,3769],{"class":4182},[4005,39974,5348],{"class":4302},[4005,39976,4611],{"class":4182},[4005,39978,39957],{"class":4330},[4005,39980,3836],{"class":4182},[4005,39982,39677],{"class":4302},[4005,39984,39609],{"class":4182},[4005,39986,39987],{"class":4190},"\u002F\u002F 102\n",[4005,39989,39990],{"class":4007,"line":4973},[4005,39991,4078],{"class":4182},[9014,39993,39995],{"id":39994},"приклад-3-замикання-для-збереження-конфігурації","Приклад 3: Замикання для збереження конфігурації",[3984,39997,39999],{"className":4162,"code":39998,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Створює функцію привітання з префіксом\nfunc createGreeter(prefix string) func(string) string {\n    return func(name string) string {\n        return prefix + \", \" + name + \"!\"\n    }\n}\n\nfunc main() {\n    \u002F\u002F Різні привітання з різними префіксами\n    englishGreet := createGreeter(\"Hello\")\n    ukrainianGreet := createGreeter(\"Привіт\")\n    spanishGreet := createGreeter(\"Hola\")\n    \n    fmt.Println(englishGreet(\"John\"))     \u002F\u002F Hello, John!\n    fmt.Println(ukrainianGreet(\"Олена\"))  \u002F\u002F Привіт, Олена!\n    fmt.Println(spanishGreet(\"Carlos\"))   \u002F\u002F Hola, Carlos!\n}\n",[3753,40000,40001,40007,40011,40017,40021,40026,40053,40071,40091,40095,40099,40103,40111,40116,40132,40147,40163,40167,40191,40212,40235],{"__ignoreMap":3992},[4005,40002,40003,40005],{"class":4007,"line":4008},[4005,40004,5739],{"class":4171},[4005,40006,5742],{"class":4178},[4005,40008,40009],{"class":4007,"line":4014},[4005,40010,4036],{"emptyLinePlaceholder":4035},[4005,40012,40013,40015],{"class":4007,"line":4020},[4005,40014,3917],{"class":4836},[4005,40016,7656],{"class":4330},[4005,40018,40019],{"class":4007,"line":4026},[4005,40020,4036],{"emptyLinePlaceholder":4035},[4005,40022,40023],{"class":4007,"line":4032},[4005,40024,40025],{"class":4190},"\u002F\u002F Створює функцію привітання з префіксом\n",[4005,40027,40028,40030,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051],{"class":4007,"line":4039},[4005,40029,4299],{"class":4171},[4005,40031,40032],{"class":4302}," createGreeter",[4005,40034,4611],{"class":4182},[4005,40036,13318],{"class":4174},[4005,40038,4237],{"class":4178},[4005,40040,4498],{"class":4182},[4005,40042,4299],{"class":4171},[4005,40044,4611],{"class":4182},[4005,40046,7004],{"class":4178},[4005,40048,4498],{"class":4182},[4005,40050,7004],{"class":4178},[4005,40052,5073],{"class":4182},[4005,40054,40055,40057,40059,40061,40063,40065,40067,40069],{"class":4007,"line":4045},[4005,40056,5260],{"class":4836},[4005,40058,20015],{"class":4171},[4005,40060,4611],{"class":4182},[4005,40062,4650],{"class":4174},[4005,40064,4237],{"class":4178},[4005,40066,4498],{"class":4182},[4005,40068,7004],{"class":4178},[4005,40070,5073],{"class":4182},[4005,40072,40073,40075,40078,40080,40083,40085,40087,40089],{"class":4007,"line":4051},[4005,40074,5119],{"class":4836},[4005,40076,40077],{"class":4174}," prefix",[4005,40079,6289],{"class":4182},[4005,40081,40082],{"class":4330},"\", \"",[4005,40084,6289],{"class":4182},[4005,40086,4650],{"class":4174},[4005,40088,6289],{"class":4182},[4005,40090,37892],{"class":4330},[4005,40092,40093],{"class":4007,"line":4057},[4005,40094,5127],{"class":4182},[4005,40096,40097],{"class":4007,"line":4063},[4005,40098,4078],{"class":4182},[4005,40100,40101],{"class":4007,"line":4069},[4005,40102,4036],{"emptyLinePlaceholder":4035},[4005,40104,40105,40107,40109],{"class":4007,"line":4075},[4005,40106,4299],{"class":4171},[4005,40108,5764],{"class":4302},[4005,40110,4306],{"class":4182},[4005,40112,40113],{"class":4007,"line":4081},[4005,40114,40115],{"class":4190},"    \u002F\u002F Різні привітання з різними префіксами\n",[4005,40117,40118,40121,40123,40126,40128,40130],{"class":4007,"line":4086},[4005,40119,40120],{"class":4174},"    englishGreet",[4005,40122,4314],{"class":4182},[4005,40124,40125],{"class":4302},"createGreeter",[4005,40127,4611],{"class":4182},[4005,40129,11329],{"class":4330},[4005,40131,4482],{"class":4182},[4005,40133,40134,40137,40139,40141,40143,40145],{"class":4007,"line":4092},[4005,40135,40136],{"class":4174},"    ukrainianGreet",[4005,40138,4314],{"class":4182},[4005,40140,40125],{"class":4302},[4005,40142,4611],{"class":4182},[4005,40144,11871],{"class":4330},[4005,40146,4482],{"class":4182},[4005,40148,40149,40152,40154,40156,40158,40161],{"class":4007,"line":4098},[4005,40150,40151],{"class":4174},"    spanishGreet",[4005,40153,4314],{"class":4182},[4005,40155,40125],{"class":4302},[4005,40157,4611],{"class":4182},[4005,40159,40160],{"class":4330},"\"Hola\"",[4005,40162,4482],{"class":4182},[4005,40164,40165],{"class":4007,"line":4104},[4005,40166,5214],{"class":4182},[4005,40168,40169,40171,40173,40175,40177,40180,40182,40185,40188],{"class":4007,"line":4110},[4005,40170,5370],{"class":4174},[4005,40172,3769],{"class":4182},[4005,40174,5348],{"class":4302},[4005,40176,4611],{"class":4182},[4005,40178,40179],{"class":4302},"englishGreet",[4005,40181,4611],{"class":4182},[4005,40183,40184],{"class":4330},"\"John\"",[4005,40186,40187],{"class":4182},"))     ",[4005,40189,40190],{"class":4190},"\u002F\u002F Hello, John!\n",[4005,40192,40193,40195,40197,40199,40201,40204,40206,40208,40210],{"class":4007,"line":4937},[4005,40194,5370],{"class":4174},[4005,40196,3769],{"class":4182},[4005,40198,5348],{"class":4302},[4005,40200,4611],{"class":4182},[4005,40202,40203],{"class":4302},"ukrainianGreet",[4005,40205,4611],{"class":4182},[4005,40207,37920],{"class":4330},[4005,40209,11472],{"class":4182},[4005,40211,37939],{"class":4190},[4005,40213,40214,40216,40218,40220,40222,40225,40227,40230,40232],{"class":4007,"line":4942},[4005,40215,5370],{"class":4174},[4005,40217,3769],{"class":4182},[4005,40219,5348],{"class":4302},[4005,40221,4611],{"class":4182},[4005,40223,40224],{"class":4302},"spanishGreet",[4005,40226,4611],{"class":4182},[4005,40228,40229],{"class":4330},"\"Carlos\"",[4005,40231,19118],{"class":4182},[4005,40233,40234],{"class":4190},"\u002F\u002F Hola, Carlos!\n",[4005,40236,40237],{"class":4007,"line":4947},[4005,40238,4078],{"class":4182},[9014,40240,40242],{"id":40241},"приклад-4-замикання-з-множинними-захопленими-змінними","Приклад 4: Замикання з множинними захопленими змінними",[3984,40244,40246],{"className":4162,"code":40245,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Створює калькулятор з історією операцій\nfunc createCalculator() (add func(int), sub func(int), getTotal func() int) {\n    total := 0  \u002F\u002F Захоплюється всіма трьома функціями!\n    \n    add = func(x int) {\n        total += x\n        fmt.Printf(\"Додано %d, загалом: %d\\n\", x, total)\n    }\n    \n    sub = func(x int) {\n        total -= x\n        fmt.Printf(\"Віднято %d, загалом: %d\\n\", x, total)\n    }\n    \n    getTotal = func() int {\n        return total\n    }\n    \n    return add, sub, getTotal\n}\n\nfunc main() {\n    add, sub, getTotal := createCalculator()\n    \n    add(10)       \u002F\u002F Додано 10, загалом: 10\n    add(5)        \u002F\u002F Додано 5, загалом: 15\n    sub(3)        \u002F\u002F Віднято 3, загалом: 12\n    \n    fmt.Println(\"Фінальний результат:\", getTotal())  \u002F\u002F 12\n}\n",[3753,40247,40248,40254,40258,40264,40268,40273,40315,40326,40330,40347,40355,40389,40393,40397,40414,40422,40455,40459,40463,40478,40485,40489,40493,40508,40512,40516,40524,40543,40547,40560,40573,40586,40590,40612],{"__ignoreMap":3992},[4005,40249,40250,40252],{"class":4007,"line":4008},[4005,40251,5739],{"class":4171},[4005,40253,5742],{"class":4178},[4005,40255,40256],{"class":4007,"line":4014},[4005,40257,4036],{"emptyLinePlaceholder":4035},[4005,40259,40260,40262],{"class":4007,"line":4020},[4005,40261,3917],{"class":4836},[4005,40263,7656],{"class":4330},[4005,40265,40266],{"class":4007,"line":4026},[4005,40267,4036],{"emptyLinePlaceholder":4035},[4005,40269,40270],{"class":4007,"line":4032},[4005,40271,40272],{"class":4190},"\u002F\u002F Створює калькулятор з історією операцій\n",[4005,40274,40275,40277,40280,40283,40285,40287,40289,40291,40293,40296,40298,40300,40302,40304,40307,40309,40311,40313],{"class":4007,"line":4039},[4005,40276,4299],{"class":4171},[4005,40278,40279],{"class":4302}," createCalculator",[4005,40281,40282],{"class":4182},"() (",[4005,40284,36280],{"class":4174},[4005,40286,20015],{"class":4171},[4005,40288,4611],{"class":4182},[4005,40290,4158],{"class":4178},[4005,40292,31601],{"class":4182},[4005,40294,40295],{"class":4174},"sub",[4005,40297,20015],{"class":4171},[4005,40299,4611],{"class":4182},[4005,40301,4158],{"class":4178},[4005,40303,31601],{"class":4182},[4005,40305,40306],{"class":4174},"getTotal",[4005,40308,20015],{"class":4171},[4005,40310,7346],{"class":4182},[4005,40312,4158],{"class":4178},[4005,40314,12789],{"class":4182},[4005,40316,40317,40319,40321,40323],{"class":4007,"line":4045},[4005,40318,29052],{"class":4174},[4005,40320,4314],{"class":4182},[4005,40322,4200],{"class":4186},[4005,40324,40325],{"class":4190},"  \u002F\u002F Захоплюється всіма трьома функціями!\n",[4005,40327,40328],{"class":4007,"line":4051},[4005,40329,5214],{"class":4182},[4005,40331,40332,40335,40337,40339,40341,40343,40345],{"class":4007,"line":4057},[4005,40333,40334],{"class":4174},"    add",[4005,40336,4183],{"class":4182},[4005,40338,4299],{"class":4171},[4005,40340,4611],{"class":4182},[4005,40342,4621],{"class":4174},[4005,40344,4224],{"class":4178},[4005,40346,12789],{"class":4182},[4005,40348,40349,40351,40353],{"class":4007,"line":4063},[4005,40350,29079],{"class":4174},[4005,40352,23417],{"class":4182},[4005,40354,36666],{"class":4174},[4005,40356,40357,40359,40361,40363,40365,40368,40370,40373,40375,40377,40379,40381,40383,40385,40387],{"class":4007,"line":4069},[4005,40358,5343],{"class":4174},[4005,40360,3769],{"class":4182},[4005,40362,7945],{"class":4302},[4005,40364,4611],{"class":4182},[4005,40366,40367],{"class":4330},"\"Додано ",[4005,40369,7959],{"class":4174},[4005,40371,40372],{"class":4330},", загалом: ",[4005,40374,7959],{"class":4174},[4005,40376,7965],{"class":7964},[4005,40378,7968],{"class":4330},[4005,40380,3836],{"class":4182},[4005,40382,4621],{"class":4174},[4005,40384,3836],{"class":4182},[4005,40386,29102],{"class":4174},[4005,40388,4482],{"class":4182},[4005,40390,40391],{"class":4007,"line":4075},[4005,40392,5127],{"class":4182},[4005,40394,40395],{"class":4007,"line":4081},[4005,40396,5214],{"class":4182},[4005,40398,40399,40402,40404,40406,40408,40410,40412],{"class":4007,"line":4086},[4005,40400,40401],{"class":4174},"    sub",[4005,40403,4183],{"class":4182},[4005,40405,4299],{"class":4171},[4005,40407,4611],{"class":4182},[4005,40409,4621],{"class":4174},[4005,40411,4224],{"class":4178},[4005,40413,12789],{"class":4182},[4005,40415,40416,40418,40420],{"class":4007,"line":4092},[4005,40417,29079],{"class":4174},[4005,40419,23429],{"class":4182},[4005,40421,36666],{"class":4174},[4005,40423,40424,40426,40428,40430,40432,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453],{"class":4007,"line":4098},[4005,40425,5343],{"class":4174},[4005,40427,3769],{"class":4182},[4005,40429,7945],{"class":4302},[4005,40431,4611],{"class":4182},[4005,40433,40434],{"class":4330},"\"Віднято ",[4005,40436,7959],{"class":4174},[4005,40438,40372],{"class":4330},[4005,40440,7959],{"class":4174},[4005,40442,7965],{"class":7964},[4005,40444,7968],{"class":4330},[4005,40446,3836],{"class":4182},[4005,40448,4621],{"class":4174},[4005,40450,3836],{"class":4182},[4005,40452,29102],{"class":4174},[4005,40454,4482],{"class":4182},[4005,40456,40457],{"class":4007,"line":4104},[4005,40458,5127],{"class":4182},[4005,40460,40461],{"class":4007,"line":4110},[4005,40462,5214],{"class":4182},[4005,40464,40465,40468,40470,40472,40474,40476],{"class":4007,"line":4937},[4005,40466,40467],{"class":4174},"    getTotal",[4005,40469,4183],{"class":4182},[4005,40471,4299],{"class":4171},[4005,40473,7346],{"class":4182},[4005,40475,4158],{"class":4178},[4005,40477,5073],{"class":4182},[4005,40479,40480,40482],{"class":4007,"line":4942},[4005,40481,5119],{"class":4836},[4005,40483,40484],{"class":4174}," total\n",[4005,40486,40487],{"class":4007,"line":4947},[4005,40488,5127],{"class":4182},[4005,40490,40491],{"class":4007,"line":4953},[4005,40492,5214],{"class":4182},[4005,40494,40495,40497,40499,40501,40503,40505],{"class":4007,"line":4960},[4005,40496,5260],{"class":4836},[4005,40498,35452],{"class":4174},[4005,40500,3836],{"class":4182},[4005,40502,40295],{"class":4174},[4005,40504,3836],{"class":4182},[4005,40506,40507],{"class":4174},"getTotal\n",[4005,40509,40510],{"class":4007,"line":4973},[4005,40511,4078],{"class":4182},[4005,40513,40514],{"class":4007,"line":4985},[4005,40515,4036],{"emptyLinePlaceholder":4035},[4005,40517,40518,40520,40522],{"class":4007,"line":7813},[4005,40519,4299],{"class":4171},[4005,40521,5764],{"class":4302},[4005,40523,4306],{"class":4182},[4005,40525,40526,40528,40530,40532,40534,40536,40538,40541],{"class":4007,"line":7819},[4005,40527,40334],{"class":4174},[4005,40529,3836],{"class":4182},[4005,40531,40295],{"class":4174},[4005,40533,3836],{"class":4182},[4005,40535,40306],{"class":4174},[4005,40537,4314],{"class":4182},[4005,40539,40540],{"class":4302},"createCalculator",[4005,40542,5143],{"class":4182},[4005,40544,40545],{"class":4007,"line":7826},[4005,40546,5214],{"class":4182},[4005,40548,40549,40551,40553,40555,40557],{"class":4007,"line":7839},[4005,40550,40334],{"class":4302},[4005,40552,4611],{"class":4182},[4005,40554,4631],{"class":4186},[4005,40556,10007],{"class":4182},[4005,40558,40559],{"class":4190},"\u002F\u002F Додано 10, загалом: 10\n",[4005,40561,40562,40564,40566,40568,40570],{"class":4007,"line":7864},[4005,40563,40334],{"class":4302},[4005,40565,4611],{"class":4182},[4005,40567,5869],{"class":4186},[4005,40569,16007],{"class":4182},[4005,40571,40572],{"class":4190},"\u002F\u002F Додано 5, загалом: 15\n",[4005,40574,40575,40577,40579,40581,40583],{"class":4007,"line":7872},[4005,40576,40401],{"class":4302},[4005,40578,4611],{"class":4182},[4005,40580,6286],{"class":4186},[4005,40582,16007],{"class":4182},[4005,40584,40585],{"class":4190},"\u002F\u002F Віднято 3, загалом: 12\n",[4005,40587,40588],{"class":4007,"line":7881},[4005,40589,5214],{"class":4182},[4005,40591,40592,40594,40596,40598,40600,40603,40605,40607,40609],{"class":4007,"line":7890},[4005,40593,5370],{"class":4174},[4005,40595,3769],{"class":4182},[4005,40597,5348],{"class":4302},[4005,40599,4611],{"class":4182},[4005,40601,40602],{"class":4330},"\"Фінальний результат:\"",[4005,40604,3836],{"class":4182},[4005,40606,40306],{"class":4302},[4005,40608,39609],{"class":4182},[4005,40610,40611],{"class":4190},"\u002F\u002F 12\n",[4005,40613,40614],{"class":4007,"line":7895},[4005,40615,4078],{"class":4182},[9014,40617,40619],{"id":40618},"приклад-5-практичне-застосування-rate-limiter","Приклад 5: Практичне застосування — Rate Limiter",[3984,40621,40623],{"className":4162,"code":40622,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\n\u002F\u002F Створює функцію, яка обмежує частоту викликів\nfunc createRateLimiter(maxCalls int, duration time.Duration) func() bool {\n    calls := 0\n    lastReset := time.Now()\n    \n    return func() bool {\n        now := time.Now()\n        \n        \u002F\u002F Скидаємо лічильник, якщо минув час\n        if now.Sub(lastReset) > duration {\n            calls = 0\n            lastReset = now\n        }\n        \n        \u002F\u002F Перевіряємо ліміт\n        if calls \u003C maxCalls {\n            calls++\n            return true  \u002F\u002F Дозволяємо виклик\n        }\n        \n        return false  \u002F\u002F Блокуємо виклик\n    }\n}\n\nfunc main() {\n    \u002F\u002F Максимум 3 виклики за секунду\n    canCall := createRateLimiter(3, 1*time.Second)\n    \n    for i := 1; i \u003C= 5; i++ {\n        if canCall() {\n            fmt.Printf(\"Запит %d: ✓ Дозволено\\n\", i)\n        } else {\n            fmt.Printf(\"Запит %d: ✗ Заблоковано (перевищено ліміт)\\n\", i)\n        }\n    }\n    \n    \u002F\u002F Чекаємо секунду\n    time.Sleep(1 * time.Second)\n    fmt.Println(\"\\n--- Після паузи ---\")\n    \n    if canCall() {\n        fmt.Println(\"Запит 6: ✓ Дозволено (ліміт скинувся)\")\n    }\n}\n",[3753,40624,40625,40631,40635,40641,40645,40649,40653,40657,40662,40697,40706,40721,40725,40737,40752,40756,40761,40785,40794,40804,40808,40812,40817,40830,40836,40846,40850,40854,40864,40868,40872,40876,40884,40889,40917,40921,40945,40954,40982,40990,41017,41021,41025,41029,41034,41056,41075,41079,41087,41102,41107],{"__ignoreMap":3992},[4005,40626,40627,40629],{"class":4007,"line":4008},[4005,40628,5739],{"class":4171},[4005,40630,5742],{"class":4178},[4005,40632,40633],{"class":4007,"line":4014},[4005,40634,4036],{"emptyLinePlaceholder":4035},[4005,40636,40637,40639],{"class":4007,"line":4020},[4005,40638,3917],{"class":4836},[4005,40640,4439],{"class":4182},[4005,40642,40643],{"class":4007,"line":4026},[4005,40644,4843],{"class":4330},[4005,40646,40647],{"class":4007,"line":4032},[4005,40648,25973],{"class":4330},[4005,40650,40651],{"class":4007,"line":4039},[4005,40652,4482],{"class":4182},[4005,40654,40655],{"class":4007,"line":4045},[4005,40656,4036],{"emptyLinePlaceholder":4035},[4005,40658,40659],{"class":4007,"line":4051},[4005,40660,40661],{"class":4190},"\u002F\u002F Створює функцію, яка обмежує частоту викликів\n",[4005,40663,40664,40666,40669,40671,40674,40676,40678,40681,40683,40685,40687,40689,40691,40693,40695],{"class":4007,"line":4057},[4005,40665,4299],{"class":4171},[4005,40667,40668],{"class":4302}," createRateLimiter",[4005,40670,4611],{"class":4182},[4005,40672,40673],{"class":4174},"maxCalls",[4005,40675,4224],{"class":4178},[4005,40677,3836],{"class":4182},[4005,40679,40680],{"class":4174},"duration",[4005,40682,5939],{"class":4178},[4005,40684,3769],{"class":4182},[4005,40686,5944],{"class":4178},[4005,40688,4498],{"class":4182},[4005,40690,4299],{"class":4171},[4005,40692,7346],{"class":4182},[4005,40694,8505],{"class":4178},[4005,40696,5073],{"class":4182},[4005,40698,40699,40702,40704],{"class":4007,"line":4063},[4005,40700,40701],{"class":4174},"    calls",[4005,40703,4314],{"class":4182},[4005,40705,8013],{"class":4186},[4005,40707,40708,40711,40713,40715,40717,40719],{"class":4007,"line":4069},[4005,40709,40710],{"class":4174},"    lastReset",[4005,40712,4314],{"class":4182},[4005,40714,26006],{"class":4174},[4005,40716,3769],{"class":4182},[4005,40718,26011],{"class":4302},[4005,40720,5143],{"class":4182},[4005,40722,40723],{"class":4007,"line":4075},[4005,40724,5214],{"class":4182},[4005,40726,40727,40729,40731,40733,40735],{"class":4007,"line":4081},[4005,40728,5260],{"class":4836},[4005,40730,20015],{"class":4171},[4005,40732,7346],{"class":4182},[4005,40734,8505],{"class":4178},[4005,40736,5073],{"class":4182},[4005,40738,40739,40742,40744,40746,40748,40750],{"class":4007,"line":4086},[4005,40740,40741],{"class":4174},"        now",[4005,40743,4314],{"class":4182},[4005,40745,26006],{"class":4174},[4005,40747,3769],{"class":4182},[4005,40749,26011],{"class":4302},[4005,40751,5143],{"class":4182},[4005,40753,40754],{"class":4007,"line":4092},[4005,40755,12810],{"class":4182},[4005,40757,40758],{"class":4007,"line":4098},[4005,40759,40760],{"class":4190},"        \u002F\u002F Скидаємо лічильник, якщо минув час\n",[4005,40762,40763,40765,40768,40770,40773,40775,40778,40781,40783],{"class":4007,"line":4104},[4005,40764,12892],{"class":4836},[4005,40766,40767],{"class":4174}," now",[4005,40769,3769],{"class":4182},[4005,40771,40772],{"class":4302},"Sub",[4005,40774,4611],{"class":4182},[4005,40776,40777],{"class":4174},"lastReset",[4005,40779,40780],{"class":4182},") > ",[4005,40782,40680],{"class":4174},[4005,40784,5073],{"class":4182},[4005,40786,40787,40790,40792],{"class":4007,"line":4110},[4005,40788,40789],{"class":4174},"            calls",[4005,40791,4183],{"class":4182},[4005,40793,8013],{"class":4186},[4005,40795,40796,40799,40801],{"class":4007,"line":4937},[4005,40797,40798],{"class":4174},"            lastReset",[4005,40800,4183],{"class":4182},[4005,40802,40803],{"class":4174},"now\n",[4005,40805,40806],{"class":4007,"line":4942},[4005,40807,12937],{"class":4182},[4005,40809,40810],{"class":4007,"line":4947},[4005,40811,12810],{"class":4182},[4005,40813,40814],{"class":4007,"line":4953},[4005,40815,40816],{"class":4190},"        \u002F\u002F Перевіряємо ліміт\n",[4005,40818,40819,40821,40824,40826,40828],{"class":4007,"line":4960},[4005,40820,12892],{"class":4836},[4005,40822,40823],{"class":4174}," calls",[4005,40825,10331],{"class":4182},[4005,40827,40673],{"class":4174},[4005,40829,5073],{"class":4182},[4005,40831,40832,40834],{"class":4007,"line":4973},[4005,40833,40789],{"class":4174},[4005,40835,28148],{"class":4182},[4005,40837,40838,40841,40843],{"class":4007,"line":4985},[4005,40839,40840],{"class":4836},"            return",[4005,40842,5323],{"class":4171},[4005,40844,40845],{"class":4190},"  \u002F\u002F Дозволяємо виклик\n",[4005,40847,40848],{"class":4007,"line":7813},[4005,40849,12937],{"class":4182},[4005,40851,40852],{"class":4007,"line":7819},[4005,40853,12810],{"class":4182},[4005,40855,40856,40858,40861],{"class":4007,"line":7826},[4005,40857,5119],{"class":4836},[4005,40859,40860],{"class":4171}," false",[4005,40862,40863],{"class":4190},"  \u002F\u002F Блокуємо виклик\n",[4005,40865,40866],{"class":4007,"line":7839},[4005,40867,5127],{"class":4182},[4005,40869,40870],{"class":4007,"line":7864},[4005,40871,4078],{"class":4182},[4005,40873,40874],{"class":4007,"line":7872},[4005,40875,4036],{"emptyLinePlaceholder":4035},[4005,40877,40878,40880,40882],{"class":4007,"line":7881},[4005,40879,4299],{"class":4171},[4005,40881,5764],{"class":4302},[4005,40883,4306],{"class":4182},[4005,40885,40886],{"class":4007,"line":7890},[4005,40887,40888],{"class":4190},"    \u002F\u002F Максимум 3 виклики за секунду\n",[4005,40890,40891,40894,40896,40899,40901,40903,40905,40907,40909,40911,40913,40915],{"class":4007,"line":7895},[4005,40892,40893],{"class":4174},"    canCall",[4005,40895,4314],{"class":4182},[4005,40897,40898],{"class":4302},"createRateLimiter",[4005,40900,4611],{"class":4182},[4005,40902,6286],{"class":4186},[4005,40904,3836],{"class":4182},[4005,40906,4393],{"class":4186},[4005,40908,8128],{"class":4182},[4005,40910,26006],{"class":4174},[4005,40912,3769],{"class":4182},[4005,40914,38963],{"class":4174},[4005,40916,4482],{"class":4182},[4005,40918,40919],{"class":4007,"line":7900},[4005,40920,5214],{"class":4182},[4005,40922,40923,40925,40927,40929,40931,40933,40935,40937,40939,40941,40943],{"class":4007,"line":7909},[4005,40924,12138],{"class":4836},[4005,40926,6592],{"class":4174},[4005,40928,4314],{"class":4182},[4005,40930,4393],{"class":4186},[4005,40932,23796],{"class":4182},[4005,40934,27826],{"class":4174},[4005,40936,10375],{"class":4182},[4005,40938,5869],{"class":4186},[4005,40940,23796],{"class":4182},[4005,40942,27826],{"class":4174},[4005,40944,27837],{"class":4182},[4005,40946,40947,40949,40952],{"class":4007,"line":7915},[4005,40948,12892],{"class":4836},[4005,40950,40951],{"class":4302}," canCall",[4005,40953,4306],{"class":4182},[4005,40955,40956,40958,40960,40962,40964,40967,40969,40972,40974,40976,40978,40980],{"class":4007,"line":7921},[4005,40957,26586],{"class":4174},[4005,40959,3769],{"class":4182},[4005,40961,7945],{"class":4302},[4005,40963,4611],{"class":4182},[4005,40965,40966],{"class":4330},"\"Запит ",[4005,40968,7959],{"class":4174},[4005,40970,40971],{"class":4330},": ✓ Дозволено",[4005,40973,7965],{"class":7964},[4005,40975,7968],{"class":4330},[4005,40977,3836],{"class":4182},[4005,40979,27826],{"class":4174},[4005,40981,4482],{"class":4182},[4005,40983,40984,40986,40988],{"class":4007,"line":7938},[4005,40985,26602],{"class":4182},[4005,40987,24962],{"class":4836},[4005,40989,5073],{"class":4182},[4005,40991,40992,40994,40996,40998,41000,41002,41004,41007,41009,41011,41013,41015],{"class":4007,"line":7982},[4005,40993,26586],{"class":4174},[4005,40995,3769],{"class":4182},[4005,40997,7945],{"class":4302},[4005,40999,4611],{"class":4182},[4005,41001,40966],{"class":4330},[4005,41003,7959],{"class":4174},[4005,41005,41006],{"class":4330},": ✗ Заблоковано (перевищено ліміт)",[4005,41008,7965],{"class":7964},[4005,41010,7968],{"class":4330},[4005,41012,3836],{"class":4182},[4005,41014,27826],{"class":4174},[4005,41016,4482],{"class":4182},[4005,41018,41019],{"class":4007,"line":7987},[4005,41020,12937],{"class":4182},[4005,41022,41023],{"class":4007,"line":7993},[4005,41024,5127],{"class":4182},[4005,41026,41027],{"class":4007,"line":8016},[4005,41028,5214],{"class":4182},[4005,41030,41031],{"class":4007,"line":8035},[4005,41032,41033],{"class":4190},"    \u002F\u002F Чекаємо секунду\n",[4005,41035,41036,41038,41040,41042,41044,41046,41048,41050,41052,41054],{"class":4007,"line":8063},[4005,41037,37643],{"class":4174},[4005,41039,3769],{"class":4182},[4005,41041,37648],{"class":4302},[4005,41043,4611],{"class":4182},[4005,41045,4393],{"class":4186},[4005,41047,6735],{"class":4182},[4005,41049,26006],{"class":4174},[4005,41051,3769],{"class":4182},[4005,41053,38963],{"class":4174},[4005,41055,4482],{"class":4182},[4005,41057,41058,41060,41062,41064,41066,41068,41070,41073],{"class":4007,"line":8090},[4005,41059,5370],{"class":4174},[4005,41061,3769],{"class":4182},[4005,41063,5348],{"class":4302},[4005,41065,4611],{"class":4182},[4005,41067,7968],{"class":4330},[4005,41069,7965],{"class":7964},[4005,41071,41072],{"class":4330},"--- Після паузи ---\"",[4005,41074,4482],{"class":4182},[4005,41076,41077],{"class":4007,"line":8095},[4005,41078,5214],{"class":4182},[4005,41080,41081,41083,41085],{"class":4007,"line":8101},[4005,41082,5104],{"class":4836},[4005,41084,40951],{"class":4302},[4005,41086,4306],{"class":4182},[4005,41088,41089,41091,41093,41095,41097,41100],{"class":4007,"line":8135},[4005,41090,5343],{"class":4174},[4005,41092,3769],{"class":4182},[4005,41094,5348],{"class":4302},[4005,41096,4611],{"class":4182},[4005,41098,41099],{"class":4330},"\"Запит 6: ✓ Дозволено (ліміт скинувся)\"",[4005,41101,4482],{"class":4182},[4005,41103,41105],{"class":4007,"line":41104},50,[4005,41106,5127],{"class":4182},[4005,41108,41110],{"class":4007,"line":41109},51,[4005,41111,4078],{"class":4182},[3908,41113,41114],{},[3871,41115,11778],{},[3984,41117,41120],{"className":41118,"code":41119,"language":3989},[3987],"Запит 1: ✓ Дозволено\nЗапит 2: ✓ Дозволено\nЗапит 3: ✓ Дозволено\nЗапит 4: ✗ Заблоковано (перевищено ліміт)\nЗапит 5: ✗ Заблоковано (перевищено ліміт)\n\n--- Після паузи ---\nЗапит 6: ✓ Дозволено (ліміт скинувся)\n",[3753,41121,41119],{"__ignoreMap":3992},[9014,41123,41125],{"id":41124},"приклад-6-замикання-в-циклах-поширена-пастка","Приклад 6: Замикання в циклах — поширена пастка!",[3908,41127,41128],{},[3871,41129,41130],{},"❌ Неправильно:",[3984,41132,41134],{"className":4162,"code":41133,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\nfunc main() {\n    funcs := []func(){}\n    \n    for i := 0; i \u003C 3; i++ {\n        funcs = append(funcs, func() {\n            fmt.Println(i)  \u002F\u002F Захоплює ЗМІННУ i, а не значення!\n        })\n    }\n    \n    for _, fn := range funcs {\n        fn()  \u002F\u002F Всі виведуть 3!\n    }\n}\n",[3753,41135,41136,41142,41146,41152,41156,41160,41164,41168,41176,41188,41192,41216,41236,41253,41258,41262,41266,41285,41294,41298],{"__ignoreMap":3992},[4005,41137,41138,41140],{"class":4007,"line":4008},[4005,41139,5739],{"class":4171},[4005,41141,5742],{"class":4178},[4005,41143,41144],{"class":4007,"line":4014},[4005,41145,4036],{"emptyLinePlaceholder":4035},[4005,41147,41148,41150],{"class":4007,"line":4020},[4005,41149,3917],{"class":4836},[4005,41151,4439],{"class":4182},[4005,41153,41154],{"class":4007,"line":4026},[4005,41155,4843],{"class":4330},[4005,41157,41158],{"class":4007,"line":4032},[4005,41159,25973],{"class":4330},[4005,41161,41162],{"class":4007,"line":4039},[4005,41163,4482],{"class":4182},[4005,41165,41166],{"class":4007,"line":4045},[4005,41167,4036],{"emptyLinePlaceholder":4035},[4005,41169,41170,41172,41174],{"class":4007,"line":4051},[4005,41171,4299],{"class":4171},[4005,41173,5764],{"class":4302},[4005,41175,4306],{"class":4182},[4005,41177,41178,41181,41183,41185],{"class":4007,"line":4057},[4005,41179,41180],{"class":4174},"    funcs",[4005,41182,11583],{"class":4182},[4005,41184,4299],{"class":4171},[4005,41186,41187],{"class":4182},"(){}\n",[4005,41189,41190],{"class":4007,"line":4063},[4005,41191,5214],{"class":4182},[4005,41193,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214],{"class":4007,"line":4069},[4005,41195,12138],{"class":4836},[4005,41197,6592],{"class":4174},[4005,41199,4314],{"class":4182},[4005,41201,4200],{"class":4186},[4005,41203,23796],{"class":4182},[4005,41205,27826],{"class":4174},[4005,41207,10331],{"class":4182},[4005,41209,6286],{"class":4186},[4005,41211,23796],{"class":4182},[4005,41213,27826],{"class":4174},[4005,41215,27837],{"class":4182},[4005,41217,41218,41221,41223,41225,41227,41230,41232,41234],{"class":4007,"line":4075},[4005,41219,41220],{"class":4174},"        funcs",[4005,41222,4183],{"class":4182},[4005,41224,17678],{"class":4302},[4005,41226,4611],{"class":4182},[4005,41228,41229],{"class":4174},"funcs",[4005,41231,3836],{"class":4182},[4005,41233,4299],{"class":4171},[4005,41235,4306],{"class":4182},[4005,41237,41238,41240,41242,41244,41246,41248,41250],{"class":4007,"line":4081},[4005,41239,26586],{"class":4174},[4005,41241,3769],{"class":4182},[4005,41243,5348],{"class":4302},[4005,41245,4611],{"class":4182},[4005,41247,27826],{"class":4174},[4005,41249,5196],{"class":4182},[4005,41251,41252],{"class":4190},"\u002F\u002F Захоплює ЗМІННУ i, а не значення!\n",[4005,41254,41255],{"class":4007,"line":4086},[4005,41256,41257],{"class":4182},"        })\n",[4005,41259,41260],{"class":4007,"line":4092},[4005,41261,5127],{"class":4182},[4005,41263,41264],{"class":4007,"line":4098},[4005,41265,5214],{"class":4182},[4005,41267,41268,41270,41272,41274,41276,41278,41280,41283],{"class":4007,"line":4104},[4005,41269,12138],{"class":4836},[4005,41271,17642],{"class":4174},[4005,41273,3836],{"class":4182},[4005,41275,39037],{"class":4174},[4005,41277,4314],{"class":4182},[4005,41279,12151],{"class":4836},[4005,41281,41282],{"class":4174}," funcs",[4005,41284,5073],{"class":4182},[4005,41286,41287,41289,41291],{"class":4007,"line":4110},[4005,41288,39073],{"class":4302},[4005,41290,5491],{"class":4182},[4005,41292,41293],{"class":4190},"\u002F\u002F Всі виведуть 3!\n",[4005,41295,41296],{"class":4007,"line":4937},[4005,41297,5127],{"class":4182},[4005,41299,41300],{"class":4007,"line":4942},[4005,41301,4078],{"class":4182},[3908,41303,41304],{},[3871,41305,41306],{},"Вивід (несподіваний!):",[3984,41308,41311],{"className":41309,"code":41310,"language":3989},[3987],"3\n3\n3\n",[3753,41312,41310],{"__ignoreMap":3992},[3908,41314,41315],{},[3871,41316,41317],{},"✅ Правильно — передати значення як параметр:",[3984,41319,41321],{"className":4162,"code":41320,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    funcs := []func(){}\n    \n    for i := 0; i \u003C 3; i++ {\n        i := i  \u002F\u002F Створюємо локальну копію для кожної ітерації!\n        funcs = append(funcs, func() {\n            fmt.Println(i)\n        })\n    }\n    \n    for _, fn := range funcs {\n        fn()\n    }\n}\n",[3753,41322,41323,41329,41333,41339,41343,41351,41361,41365,41389,41401,41419,41433,41437,41441,41445,41463,41469,41473],{"__ignoreMap":3992},[4005,41324,41325,41327],{"class":4007,"line":4008},[4005,41326,5739],{"class":4171},[4005,41328,5742],{"class":4178},[4005,41330,41331],{"class":4007,"line":4014},[4005,41332,4036],{"emptyLinePlaceholder":4035},[4005,41334,41335,41337],{"class":4007,"line":4020},[4005,41336,3917],{"class":4836},[4005,41338,7656],{"class":4330},[4005,41340,41341],{"class":4007,"line":4026},[4005,41342,4036],{"emptyLinePlaceholder":4035},[4005,41344,41345,41347,41349],{"class":4007,"line":4032},[4005,41346,4299],{"class":4171},[4005,41348,5764],{"class":4302},[4005,41350,4306],{"class":4182},[4005,41352,41353,41355,41357,41359],{"class":4007,"line":4039},[4005,41354,41180],{"class":4174},[4005,41356,11583],{"class":4182},[4005,41358,4299],{"class":4171},[4005,41360,41187],{"class":4182},[4005,41362,41363],{"class":4007,"line":4045},[4005,41364,5214],{"class":4182},[4005,41366,41367,41369,41371,41373,41375,41377,41379,41381,41383,41385,41387],{"class":4007,"line":4051},[4005,41368,12138],{"class":4836},[4005,41370,6592],{"class":4174},[4005,41372,4314],{"class":4182},[4005,41374,4200],{"class":4186},[4005,41376,23796],{"class":4182},[4005,41378,27826],{"class":4174},[4005,41380,10331],{"class":4182},[4005,41382,6286],{"class":4186},[4005,41384,23796],{"class":4182},[4005,41386,27826],{"class":4174},[4005,41388,27837],{"class":4182},[4005,41390,41391,41394,41396,41398],{"class":4007,"line":4057},[4005,41392,41393],{"class":4174},"        i",[4005,41395,4314],{"class":4182},[4005,41397,27826],{"class":4174},[4005,41399,41400],{"class":4190},"  \u002F\u002F Створюємо локальну копію для кожної ітерації!\n",[4005,41402,41403,41405,41407,41409,41411,41413,41415,41417],{"class":4007,"line":4063},[4005,41404,41220],{"class":4174},[4005,41406,4183],{"class":4182},[4005,41408,17678],{"class":4302},[4005,41410,4611],{"class":4182},[4005,41412,41229],{"class":4174},[4005,41414,3836],{"class":4182},[4005,41416,4299],{"class":4171},[4005,41418,4306],{"class":4182},[4005,41420,41421,41423,41425,41427,41429,41431],{"class":4007,"line":4069},[4005,41422,26586],{"class":4174},[4005,41424,3769],{"class":4182},[4005,41426,5348],{"class":4302},[4005,41428,4611],{"class":4182},[4005,41430,27826],{"class":4174},[4005,41432,4482],{"class":4182},[4005,41434,41435],{"class":4007,"line":4075},[4005,41436,41257],{"class":4182},[4005,41438,41439],{"class":4007,"line":4081},[4005,41440,5127],{"class":4182},[4005,41442,41443],{"class":4007,"line":4086},[4005,41444,5214],{"class":4182},[4005,41446,41447,41449,41451,41453,41455,41457,41459,41461],{"class":4007,"line":4092},[4005,41448,12138],{"class":4836},[4005,41450,17642],{"class":4174},[4005,41452,3836],{"class":4182},[4005,41454,39037],{"class":4174},[4005,41456,4314],{"class":4182},[4005,41458,12151],{"class":4836},[4005,41460,41282],{"class":4174},[4005,41462,5073],{"class":4182},[4005,41464,41465,41467],{"class":4007,"line":4098},[4005,41466,39073],{"class":4302},[4005,41468,5143],{"class":4182},[4005,41470,41471],{"class":4007,"line":4104},[4005,41472,5127],{"class":4182},[4005,41474,41475],{"class":4007,"line":4110},[4005,41476,4078],{"class":4182},[3908,41478,41479],{},[3871,41480,41481],{},"Вивід (правильний):",[3984,41483,41486],{"className":41484,"code":41485,"language":3989},[3987],"0\n1\n2\n",[3753,41487,41485],{"__ignoreMap":3992},[9014,41489,41491],{"id":41490},"замикання-та-память-escape-analysis","Замикання та пам'ять: Escape Analysis",[4484,41493,41494,41499,41502,41522,41586,41593,41599],{"icon":255},[3908,41495,41496],{},[3871,41497,41498],{},"Що відбувається в пам'яті?",[3908,41500,41501],{},"Коли компілятор Go бачить замикання, він автоматично:",[4781,41503,41504,41510,41516],{},[3749,41505,41506,41509],{},[3871,41507,41508],{},"Аналізує"," які змінні захоплюються",[3749,41511,41512,41515],{},[3871,41513,41514],{},"Переміщує"," ці змінні зі стеку в купу (heap)",[3749,41517,41518,41521],{},[3871,41519,41520],{},"Зберігає"," посилання на ці змінні в структурі замикання",[3984,41523,41525],{"className":4162,"code":41524,"language":4164,"meta":3992,"style":3992},"func createCounter() func() int {\n    count := 0  \u002F\u002F ← Компілятор переміщує в heap!\n    return func() int {\n        count++\n        return count\n    }\n}\n",[3753,41526,41527,41543,41554,41566,41572,41578,41582],{"__ignoreMap":3992},[4005,41528,41529,41531,41533,41535,41537,41539,41541],{"class":4007,"line":4008},[4005,41530,4299],{"class":4171},[4005,41532,39490],{"class":4302},[4005,41534,7346],{"class":4182},[4005,41536,4299],{"class":4171},[4005,41538,7346],{"class":4182},[4005,41540,4158],{"class":4178},[4005,41542,5073],{"class":4182},[4005,41544,41545,41547,41549,41551],{"class":4007,"line":4014},[4005,41546,14072],{"class":4174},[4005,41548,4314],{"class":4182},[4005,41550,4200],{"class":4186},[4005,41552,41553],{"class":4190},"  \u002F\u002F ← Компілятор переміщує в heap!\n",[4005,41555,41556,41558,41560,41562,41564],{"class":4007,"line":4020},[4005,41557,5260],{"class":4836},[4005,41559,20015],{"class":4171},[4005,41561,7346],{"class":4182},[4005,41563,4158],{"class":4178},[4005,41565,5073],{"class":4182},[4005,41567,41568,41570],{"class":4007,"line":4026},[4005,41569,30081],{"class":4174},[4005,41571,28148],{"class":4182},[4005,41573,41574,41576],{"class":4007,"line":4032},[4005,41575,5119],{"class":4836},[4005,41577,39549],{"class":4174},[4005,41579,41580],{"class":4007,"line":4039},[4005,41581,5127],{"class":4182},[4005,41583,41584],{"class":4007,"line":4045},[4005,41585,4078],{"class":4182},[3908,41587,41588],{},[3871,41589,41590,41591,5831],{},"Перевірка через ",[3753,41592,3883],{},[3984,41594,41597],{"className":41595,"code":41596,"language":3989},[3987],".\u002Fmain.go:4:2: moved to heap: count\n.\u002Fmain.go:6:9: func literal escapes to heap\n",[3753,41598,41596],{"__ignoreMap":3992},[3908,41600,41601,41602,41604],{},"Це означає, що ",[3753,41603,7189],{}," живе в купі, а не на стеку.",[9014,41606,30133],{"id":41607},"порівняння-з-іншими-мовами-3",[5991,41609,41610,41621],{},[5994,41611,41612],{},[5997,41613,41614,41616,41619],{},[6000,41615,30142],{},[6000,41617,41618],{},"Підтримка замикань",[6000,41620,17083],{},[6010,41622,41623,41634,41645,41660,41676,41696],{},[5997,41624,41625,41629,41631],{},[6015,41626,41627],{},[3871,41628,12539],{},[6015,41630,10877],{},[6015,41632,41633],{},"Автоматичне переміщення в heap",[5997,41635,41636,41640,41642],{},[6015,41637,41638],{},[3871,41639,1913],{},[6015,41641,10877],{},[6015,41643,41644],{},"Класичні замикання, та ж пастка в циклах",[5997,41646,41647,41651,41653],{},[6015,41648,41649],{},[3871,41650,2548],{},[6015,41652,10877],{},[6015,41654,41655,41656,41659],{},"Потребує ",[3753,41657,41658],{},"nonlocal"," для зміни зовнішніх змінних",[5997,41661,41662,41666,41669],{},[6015,41663,41664],{},[3871,41665,2367],{},[6015,41667,41668],{},"✅ Так (з Java 8+)",[6015,41670,41671,41672,41675],{},"Захоплені змінні мають бути ",[3753,41673,41674],{},"final"," або effectively final",[5997,41677,41678,41682,41685],{},[6015,41679,41680],{},[3871,41681,1708],{},[6015,41683,41684],{},"✅ Так (lambda)",[6015,41686,41687,41688,41691,41692,41695],{},"Явне вказання: ",[3753,41689,41690],{},"[&]"," (по посиланню) або ",[3753,41693,41694],{},"[=]"," (по значенню)",[5997,41697,41698,41703,41706],{},[6015,41699,41700],{},[3871,41701,41702],{},"C",[6015,41704,41705],{},"❌ Ні",[6015,41707,41708],{},"Немає замикань (можна емулювати через структури)",[9014,41710,41712],{"id":41711},"практичні-застосування-замикань","Практичні застосування замикань",[4781,41714,41715,41721,41727,41733,41739,41745],{},[3749,41716,41717,41720],{},[3871,41718,41719],{},"Інкапсуляція стану"," — приховування внутрішніх змінних",[3749,41722,41723,41726],{},[3871,41724,41725],{},"Створення приватних змінних"," — імітація приватних полів",[3749,41728,41729,41732],{},[3871,41730,41731],{},"Декоратори та middleware"," — обгортання функцій з додатковою логікою",[3749,41734,41735,41738],{},[3871,41736,41737],{},"Callbacks з контекстом"," — передача функцій з доступом до зовнішніх даних",[3749,41740,41741,41744],{},[3871,41742,41743],{},"Lazy evaluation"," — відкладене обчислення значень",[3749,41746,41747,41750],{},[3871,41748,41749],{},"Memoization"," — кешування результатів обчислень",[9014,41752,41754],{"id":41753},"резюме-коли-використовувати-замикання","Резюме: коли використовувати замикання?",[3908,41756,41757],{},[3871,41758,41759],{},"✅ Використовуйте замикання коли:",[3746,41761,41762,41765,41768,41771],{},[3749,41763,41764],{},"Потрібно зберегти стан між викликами",[3749,41766,41767],{},"Потрібна приватна змінна",[3749,41769,41770],{},"Створюєте callback з контекстом",[3749,41772,41773],{},"Реалізуєте декоратор\u002Fmiddleware",[3908,41775,41776],{},[3871,41777,41778],{},"⚠️ Будьте обережні:",[3746,41780,41781,41784,41787],{},[3749,41782,41783],{},"З замиканнями в циклах (захоплюють змінну, а не значення)",[3749,41785,41786],{},"З великою кількістю замикань (використовують heap)",[3749,41788,41789],{},"Не забувайте про витоки пам'яті (захоплені змінні живуть доки живе замикання)",[3900,41791],{},[3976,41793,41795],{"id":41794},"рекурсивні-функції-базовий-випадок-та-стек-викликів","Рекурсивні функції: базовий випадок та стек викликів",[3908,41797,41798,41801],{},[3871,41799,41800],{},"Рекурсивна функція"," — це функція, яка в процесі виконання викликає саму себе з новими вхідними параметрами.",[24920,41803,41804,41809],{},[3908,41805,41806],{},[3871,41807,41808],{},"Анатомія будь-якої коректної рекурсії:",[4781,41810,41811,41820],{},[3749,41812,41813,41816,41817,3826],{},[3871,41814,41815],{},"Базовий випадок (Base Case \u002F Умова зупинки):"," обов'язкова умова, при якій функція повертає конкретне значення без подальших рекурсивних викликів. Без базового випадку виникне нескінченна рекурсія і переповнення пам'яті стека (",[3758,41818,41819],{},"Stack Overflow",[3749,41821,41822,41825],{},[3871,41823,41824],{},"Крок рекурсії (Recursive Step):"," виклик функцією самої себе, де аргументи з кожним кроком наближаються до базового випадку.",[3984,41827,41829],{"className":4162,"code":41828,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F 1. Обчислення факторіалу числа N! = N * (N-1)!\n\u002F\u002F Приклад для N=3: factorial(3) = 3 * factorial(2) -> 2 * factorial(1) -> 1 => 6\nfunc factorial(n uint64) uint64 {\n    if n \u003C= 1 {\n        return 1 \u002F\u002F Базовий випадок: 0! = 1 та 1! = 1\n    }\n    return n * factorial(n-1) \u002F\u002F Крок рекурсії\n}\n\n\u002F\u002F 2. Обчислення чисел послідовності Фібоначчі: F(n) = F(n-1) + F(n-2)\nfunc fibonacci(n int) int {\n    if n \u003C= 0 {\n        return 0 \u002F\u002F Базовий випадок 1\n    }\n    if n == 1 {\n        return 1 \u002F\u002F Базовий випадок 2\n    }\n    return fibonacci(n-1) + fibonacci(n-2) \u002F\u002F Подвійний рекурсивний крок\n}\n\nfunc main() {\n    fmt.Printf(\"Факторіал 5! = %d\\n\", factorial(5)) \u002F\u002F 120\n    fmt.Printf(\"Факторіал 6! = %d\\n\", factorial(6)) \u002F\u002F 720\n\n    fmt.Println(\"\\nПерші 7 чисел Фібоначчі:\")\n    for i := 0; i \u003C 7; i++ {\n        fmt.Printf(\"F(%d) = %d\\n\", i, fibonacci(i))\n    }\n}\n",[3753,41830,41831,41837,41841,41847,41851,41856,41861,41880,41893,41902,41906,41930,41934,41938,41943,41962,41974,41983,41987,41999,42008,42012,42044,42048,42052,42060,42093,42125,42129,42148,42172,42210,42214],{"__ignoreMap":3992},[4005,41832,41833,41835],{"class":4007,"line":4008},[4005,41834,5739],{"class":4171},[4005,41836,5742],{"class":4178},[4005,41838,41839],{"class":4007,"line":4014},[4005,41840,4036],{"emptyLinePlaceholder":4035},[4005,41842,41843,41845],{"class":4007,"line":4020},[4005,41844,3917],{"class":4836},[4005,41846,7656],{"class":4330},[4005,41848,41849],{"class":4007,"line":4026},[4005,41850,4036],{"emptyLinePlaceholder":4035},[4005,41852,41853],{"class":4007,"line":4032},[4005,41854,41855],{"class":4190},"\u002F\u002F 1. Обчислення факторіалу числа N! = N * (N-1)!\n",[4005,41857,41858],{"class":4007,"line":4039},[4005,41859,41860],{"class":4190},"\u002F\u002F Приклад для N=3: factorial(3) = 3 * factorial(2) -> 2 * factorial(1) -> 1 => 6\n",[4005,41862,41863,41865,41868,41870,41872,41874,41876,41878],{"class":4007,"line":4045},[4005,41864,4299],{"class":4171},[4005,41866,41867],{"class":4302}," factorial",[4005,41869,4611],{"class":4182},[4005,41871,11101],{"class":4174},[4005,41873,6727],{"class":4178},[4005,41875,4498],{"class":4182},[4005,41877,6523],{"class":4178},[4005,41879,5073],{"class":4182},[4005,41881,41882,41884,41887,41889,41891],{"class":4007,"line":4051},[4005,41883,5104],{"class":4836},[4005,41885,41886],{"class":4174}," n",[4005,41888,10375],{"class":4182},[4005,41890,4393],{"class":4186},[4005,41892,5073],{"class":4182},[4005,41894,41895,41897,41899],{"class":4007,"line":4057},[4005,41896,5119],{"class":4836},[4005,41898,27284],{"class":4186},[4005,41900,41901],{"class":4190}," \u002F\u002F Базовий випадок: 0! = 1 та 1! = 1\n",[4005,41903,41904],{"class":4007,"line":4063},[4005,41905,5127],{"class":4182},[4005,41907,41908,41910,41912,41914,41917,41919,41921,41923,41925,41927],{"class":4007,"line":4069},[4005,41909,5260],{"class":4836},[4005,41911,41886],{"class":4174},[4005,41913,6735],{"class":4182},[4005,41915,41916],{"class":4302},"factorial",[4005,41918,4611],{"class":4182},[4005,41920,11101],{"class":4174},[4005,41922,22692],{"class":4182},[4005,41924,4393],{"class":4186},[4005,41926,4498],{"class":4182},[4005,41928,41929],{"class":4190},"\u002F\u002F Крок рекурсії\n",[4005,41931,41932],{"class":4007,"line":4075},[4005,41933,4078],{"class":4182},[4005,41935,41936],{"class":4007,"line":4081},[4005,41937,4036],{"emptyLinePlaceholder":4035},[4005,41939,41940],{"class":4007,"line":4086},[4005,41941,41942],{"class":4190},"\u002F\u002F 2. Обчислення чисел послідовності Фібоначчі: F(n) = F(n-1) + F(n-2)\n",[4005,41944,41945,41947,41950,41952,41954,41956,41958,41960],{"class":4007,"line":4092},[4005,41946,4299],{"class":4171},[4005,41948,41949],{"class":4302}," fibonacci",[4005,41951,4611],{"class":4182},[4005,41953,11101],{"class":4174},[4005,41955,4224],{"class":4178},[4005,41957,4498],{"class":4182},[4005,41959,4158],{"class":4178},[4005,41961,5073],{"class":4182},[4005,41963,41964,41966,41968,41970,41972],{"class":4007,"line":4098},[4005,41965,5104],{"class":4836},[4005,41967,41886],{"class":4174},[4005,41969,10375],{"class":4182},[4005,41971,4200],{"class":4186},[4005,41973,5073],{"class":4182},[4005,41975,41976,41978,41980],{"class":4007,"line":4104},[4005,41977,5119],{"class":4836},[4005,41979,34816],{"class":4186},[4005,41981,41982],{"class":4190}," \u002F\u002F Базовий випадок 1\n",[4005,41984,41985],{"class":4007,"line":4110},[4005,41986,5127],{"class":4182},[4005,41988,41989,41991,41993,41995,41997],{"class":4007,"line":4937},[4005,41990,5104],{"class":4836},[4005,41992,41886],{"class":4174},[4005,41994,5473],{"class":4182},[4005,41996,4393],{"class":4186},[4005,41998,5073],{"class":4182},[4005,42000,42001,42003,42005],{"class":4007,"line":4942},[4005,42002,5119],{"class":4836},[4005,42004,27284],{"class":4186},[4005,42006,42007],{"class":4190}," \u002F\u002F Базовий випадок 2\n",[4005,42009,42010],{"class":4007,"line":4947},[4005,42011,5127],{"class":4182},[4005,42013,42014,42016,42018,42020,42022,42024,42026,42028,42031,42033,42035,42037,42039,42041],{"class":4007,"line":4953},[4005,42015,5260],{"class":4836},[4005,42017,41949],{"class":4302},[4005,42019,4611],{"class":4182},[4005,42021,11101],{"class":4174},[4005,42023,22692],{"class":4182},[4005,42025,4393],{"class":4186},[4005,42027,9630],{"class":4182},[4005,42029,42030],{"class":4302},"fibonacci",[4005,42032,4611],{"class":4182},[4005,42034,11101],{"class":4174},[4005,42036,22692],{"class":4182},[4005,42038,4398],{"class":4186},[4005,42040,4498],{"class":4182},[4005,42042,42043],{"class":4190},"\u002F\u002F Подвійний рекурсивний крок\n",[4005,42045,42046],{"class":4007,"line":4960},[4005,42047,4078],{"class":4182},[4005,42049,42050],{"class":4007,"line":4973},[4005,42051,4036],{"emptyLinePlaceholder":4035},[4005,42053,42054,42056,42058],{"class":4007,"line":4985},[4005,42055,4299],{"class":4171},[4005,42057,5764],{"class":4302},[4005,42059,4306],{"class":4182},[4005,42061,42062,42064,42066,42068,42070,42073,42075,42077,42079,42081,42083,42085,42087,42090],{"class":4007,"line":7813},[4005,42063,5370],{"class":4174},[4005,42065,3769],{"class":4182},[4005,42067,7945],{"class":4302},[4005,42069,4611],{"class":4182},[4005,42071,42072],{"class":4330},"\"Факторіал 5! = ",[4005,42074,7959],{"class":4174},[4005,42076,7965],{"class":7964},[4005,42078,7968],{"class":4330},[4005,42080,3836],{"class":4182},[4005,42082,41916],{"class":4302},[4005,42084,4611],{"class":4182},[4005,42086,5869],{"class":4186},[4005,42088,42089],{"class":4182},")) ",[4005,42091,42092],{"class":4190},"\u002F\u002F 120\n",[4005,42094,42095,42097,42099,42101,42103,42106,42108,42110,42112,42114,42116,42118,42120,42122],{"class":4007,"line":7819},[4005,42096,5370],{"class":4174},[4005,42098,3769],{"class":4182},[4005,42100,7945],{"class":4302},[4005,42102,4611],{"class":4182},[4005,42104,42105],{"class":4330},"\"Факторіал 6! = ",[4005,42107,7959],{"class":4174},[4005,42109,7965],{"class":7964},[4005,42111,7968],{"class":4330},[4005,42113,3836],{"class":4182},[4005,42115,41916],{"class":4302},[4005,42117,4611],{"class":4182},[4005,42119,26030],{"class":4186},[4005,42121,42089],{"class":4182},[4005,42123,42124],{"class":4190},"\u002F\u002F 720\n",[4005,42126,42127],{"class":4007,"line":7826},[4005,42128,4036],{"emptyLinePlaceholder":4035},[4005,42130,42131,42133,42135,42137,42139,42141,42143,42146],{"class":4007,"line":7839},[4005,42132,5370],{"class":4174},[4005,42134,3769],{"class":4182},[4005,42136,5348],{"class":4302},[4005,42138,4611],{"class":4182},[4005,42140,7968],{"class":4330},[4005,42142,7965],{"class":7964},[4005,42144,42145],{"class":4330},"Перші 7 чисел Фібоначчі:\"",[4005,42147,4482],{"class":4182},[4005,42149,42150,42152,42154,42156,42158,42160,42162,42164,42166,42168,42170],{"class":4007,"line":7864},[4005,42151,12138],{"class":4836},[4005,42153,6592],{"class":4174},[4005,42155,4314],{"class":4182},[4005,42157,4200],{"class":4186},[4005,42159,23796],{"class":4182},[4005,42161,27826],{"class":4174},[4005,42163,10331],{"class":4182},[4005,42165,13258],{"class":4186},[4005,42167,23796],{"class":4182},[4005,42169,27826],{"class":4174},[4005,42171,27837],{"class":4182},[4005,42173,42174,42176,42178,42180,42182,42185,42187,42190,42192,42194,42196,42198,42200,42202,42204,42206,42208],{"class":4007,"line":7872},[4005,42175,5343],{"class":4174},[4005,42177,3769],{"class":4182},[4005,42179,7945],{"class":4302},[4005,42181,4611],{"class":4182},[4005,42183,42184],{"class":4330},"\"F(",[4005,42186,7959],{"class":4174},[4005,42188,42189],{"class":4330},") = ",[4005,42191,7959],{"class":4174},[4005,42193,7965],{"class":7964},[4005,42195,7968],{"class":4330},[4005,42197,3836],{"class":4182},[4005,42199,27826],{"class":4174},[4005,42201,3836],{"class":4182},[4005,42203,42030],{"class":4302},[4005,42205,4611],{"class":4182},[4005,42207,27826],{"class":4174},[4005,42209,25552],{"class":4182},[4005,42211,42212],{"class":4007,"line":7881},[4005,42213,5127],{"class":4182},[4005,42215,42216],{"class":4007,"line":7890},[4005,42217,4078],{"class":4182},[4748,42219,42220,42223,42224,42226],{},[3871,42221,42222],{},"Рекурсія проти циклів у продуктивному коді:","\nКожен рекурсивний виклик створює новий стек-фрейм у пам'яті. Якщо глибина рекурсії сягає десятків тисяч кроків, перевагу слід надавати звичайним циклам ",[3753,42225,3808],{},", які виконуються швидше та використовують константний обсяг пам'яті $O(1)$.",[3900,42228],{},[3903,42230,42232],{"id":42231},"покажчики-pointers-та-безпека-роботи-з-памяттю","Покажчики (Pointers) та безпека роботи з пам’яттю",[3908,42234,42235,42236,4761,42238,3826],{},"У системному програмуванні для досягнення максимальної швидкодії необхідно безпосередньо керувати розташуванням даних у пам'яті та уникати зайвого копіювання великих структур. Головним інструментом для цього є ",[3871,42237,21698],{},[3758,42239,42240],{},"Pointers",[3900,42242],{},[3976,42244,42246],{"id":42245},"що-таке-покажчик-фізична-адресація-в-ram","Що таке покажчик: фізична адресація в RAM",[3908,42248,42249,42250,42253,42254,42257,42258,3826],{},"Коли ви оголошуєте будь-яку змінну (наприклад, ",[3753,42251,42252],{},"var x int = 42","), середовище виконання Go виділяє для неї комірку в системній оперативній пам'яті. Кожна така комірка має свою унікальну числову ",[3871,42255,42256],{},"фізичну адресу",", яка записується у шістнадцятковому форматі (наприклад, ",[3753,42259,3928],{},[3908,42261,42262,42268,42269,3769],{},[3871,42263,42264,42265,5032],{},"Покажчик (",[3758,42266,42267],{},"Pointer"," — це спеціальна змінна, значенням якої є ",[3871,42270,42271],{},"адреса іншої змінної в пам'яті",[3994,42273,42275],{"alt":42274},"Механіка адресації покажчика в оперативній пам'яті",[3984,42276,42278],{"className":3999,"code":42277,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 12\n\npackage \"Оперативна пам'ять процесу (RAM)\" #F8FAFC {\n    rectangle \"Змінна x (тип int)\\n• Фізична адреса: 0x00c000014088\\n• Збережене значення: 42\" as VarX #DCFCE7\n    rectangle \"Покажчик p (тип *int)\\n• Фізична адреса: 0x00c000014090\\n• Збережене значення: 0x00c000014088\" as PtrP #DBEAFE\n\n    PtrP -right-> VarX : Зберігає адресу &x (вказує на x)\n}\n@enduml\n",[3753,42279,42280,42284,42288,42292,42296,42300,42305,42310,42315,42319,42324,42328],{"__ignoreMap":3992},[4005,42281,42282],{"class":4007,"line":4008},[4005,42283,4011],{},[4005,42285,42286],{"class":4007,"line":4014},[4005,42287,4017],{},[4005,42289,42290],{"class":4007,"line":4020},[4005,42291,4023],{},[4005,42293,42294],{"class":4007,"line":4026},[4005,42295,30872],{},[4005,42297,42298],{"class":4007,"line":4032},[4005,42299,4036],{"emptyLinePlaceholder":4035},[4005,42301,42302],{"class":4007,"line":4039},[4005,42303,42304],{},"package \"Оперативна пам'ять процесу (RAM)\" #F8FAFC {\n",[4005,42306,42307],{"class":4007,"line":4045},[4005,42308,42309],{},"    rectangle \"Змінна x (тип int)\\n• Фізична адреса: 0x00c000014088\\n• Збережене значення: 42\" as VarX #DCFCE7\n",[4005,42311,42312],{"class":4007,"line":4051},[4005,42313,42314],{},"    rectangle \"Покажчик p (тип *int)\\n• Фізична адреса: 0x00c000014090\\n• Збережене значення: 0x00c000014088\" as PtrP #DBEAFE\n",[4005,42316,42317],{"class":4007,"line":4057},[4005,42318,4036],{"emptyLinePlaceholder":4035},[4005,42320,42321],{"class":4007,"line":4063},[4005,42322,42323],{},"    PtrP -right-> VarX : Зберігає адресу &x (вказує на x)\n",[4005,42325,42326],{"class":4007,"line":4069},[4005,42327,4078],{},[4005,42329,42330],{"class":4007,"line":4075},[4005,42331,4113],{},[3908,42333,42334,42335,42338,42339,42342,42343,42346,42347,7537,42349,3769],{},"Покажчики в Go є ",[3871,42336,42337],{},"строго типізованими",": тип покажчика залежить від типу змінної, на яку він вказує. Покажчик на ціле число має тип ",[3753,42340,42341],{},"*int",", покажчик на рядок — ",[3753,42344,42345],{},"*string",", а покажчик на структуру ",[3753,42348,20798],{},[3753,42350,42351],{},"*User",[3900,42353],{},[3976,42355,42357,42358,42360,42361],{"id":42356},"оператори-взяття-адреси-та-розіменування","Оператори взяття адреси ",[3753,42359,23002],{}," та розіменування ",[3753,42362,8128],{},[3908,42364,42365],{},"Для роботи з покажчиками Go надає два фундаментальні унарні оператори:",[4781,42367,42368,42379],{},[3749,42369,42370,42375,42376,3826],{},[3871,42371,42372,42373,4159],{},"Оператор взяття адреси (",[3753,42374,23002],{}," ставиться перед іменем змінної та повертає її адресу в пам'яті (",[3753,42377,42378],{},"&x",[3749,42380,42381,42386,42387,8512,42390,42393,42394,3826],{},[3871,42382,42383,42384,4159],{},"Оператор розіменування (",[3753,42385,8128],{}," ставиться перед змінною-покажчиком і дозволяє ",[3871,42388,42389],{},"прочитати",[3871,42391,42392],{},"змінити"," значення в тій комірці пам'яті, на яку цей покажчик вказує (",[3753,42395,42396],{},"*p = 100",[3984,42398,42400],{"className":4162,"code":42399,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    var x int = 42\n\n    \u002F\u002F 1. Оголошуємо покажчик типу *int та записуємо в нього адресу змінної x:\n    var p *int = &x\n\n    fmt.Printf(\"1. Значення змінної x:              %d\\n\", x)\n    fmt.Printf(\"2. Фізична адреса змінної x (&x):    %p\\n\", &x)\n    fmt.Printf(\"3. Значення покажчика p (адреса):    %p\\n\", p)\n    fmt.Printf(\"4. Власна адреса покажчика p (&p):   %p\\n\", &p)\n\n    \u002F\u002F 5. Розіменування покажчика для читання значення:\n    fmt.Printf(\"5. Читання значення через *p:        %d\\n\", *p)\n\n    \u002F\u002F 6. Розіменування покажчика для зміни значення в пам'яті:\n    *p = 100\n    fmt.Printf(\"6. Нове значення x після *p = 100:   %d\\n\", x) \u002F\u002F x тепер дорівнює 100!\n}\n",[3753,42401,42402,42408,42412,42418,42422,42430,42442,42446,42451,42466,42470,42495,42520,42545,42570,42574,42579,42605,42609,42614,42625,42653],{"__ignoreMap":3992},[4005,42403,42404,42406],{"class":4007,"line":4008},[4005,42405,5739],{"class":4171},[4005,42407,5742],{"class":4178},[4005,42409,42410],{"class":4007,"line":4014},[4005,42411,4036],{"emptyLinePlaceholder":4035},[4005,42413,42414,42416],{"class":4007,"line":4020},[4005,42415,3917],{"class":4836},[4005,42417,7656],{"class":4330},[4005,42419,42420],{"class":4007,"line":4026},[4005,42421,4036],{"emptyLinePlaceholder":4035},[4005,42423,42424,42426,42428],{"class":4007,"line":4032},[4005,42425,4299],{"class":4171},[4005,42427,5764],{"class":4302},[4005,42429,4306],{"class":4182},[4005,42431,42432,42434,42436,42438,42440],{"class":4007,"line":4039},[4005,42433,9412],{"class":4171},[4005,42435,6141],{"class":4174},[4005,42437,4224],{"class":4178},[4005,42439,4183],{"class":4182},[4005,42441,7153],{"class":4186},[4005,42443,42444],{"class":4007,"line":4045},[4005,42445,4036],{"emptyLinePlaceholder":4035},[4005,42447,42448],{"class":4007,"line":4051},[4005,42449,42450],{"class":4190},"    \u002F\u002F 1. Оголошуємо покажчик типу *int та записуємо в нього адресу змінної x:\n",[4005,42452,42453,42455,42457,42459,42461,42464],{"class":4007,"line":4057},[4005,42454,9412],{"class":4171},[4005,42456,17662],{"class":4174},[4005,42458,5520],{"class":4182},[4005,42460,4158],{"class":4178},[4005,42462,42463],{"class":4182}," = &",[4005,42465,36666],{"class":4174},[4005,42467,42468],{"class":4007,"line":4063},[4005,42469,4036],{"emptyLinePlaceholder":4035},[4005,42471,42472,42474,42476,42478,42480,42483,42485,42487,42489,42491,42493],{"class":4007,"line":4069},[4005,42473,5370],{"class":4174},[4005,42475,3769],{"class":4182},[4005,42477,7945],{"class":4302},[4005,42479,4611],{"class":4182},[4005,42481,42482],{"class":4330},"\"1. Значення змінної x:              ",[4005,42484,7959],{"class":4174},[4005,42486,7965],{"class":7964},[4005,42488,7968],{"class":4330},[4005,42490,3836],{"class":4182},[4005,42492,4621],{"class":4174},[4005,42494,4482],{"class":4182},[4005,42496,42497,42499,42501,42503,42505,42508,42510,42512,42514,42516,42518],{"class":4007,"line":4075},[4005,42498,5370],{"class":4174},[4005,42500,3769],{"class":4182},[4005,42502,7945],{"class":4302},[4005,42504,4611],{"class":4182},[4005,42506,42507],{"class":4330},"\"2. Фізична адреса змінної x (&x):    ",[4005,42509,21720],{"class":4174},[4005,42511,7965],{"class":7964},[4005,42513,7968],{"class":4330},[4005,42515,9182],{"class":4182},[4005,42517,4621],{"class":4174},[4005,42519,4482],{"class":4182},[4005,42521,42522,42524,42526,42528,42530,42533,42535,42537,42539,42541,42543],{"class":4007,"line":4081},[4005,42523,5370],{"class":4174},[4005,42525,3769],{"class":4182},[4005,42527,7945],{"class":4302},[4005,42529,4611],{"class":4182},[4005,42531,42532],{"class":4330},"\"3. Значення покажчика p (адреса):    ",[4005,42534,21720],{"class":4174},[4005,42536,7965],{"class":7964},[4005,42538,7968],{"class":4330},[4005,42540,3836],{"class":4182},[4005,42542,3908],{"class":4174},[4005,42544,4482],{"class":4182},[4005,42546,42547,42549,42551,42553,42555,42558,42560,42562,42564,42566,42568],{"class":4007,"line":4086},[4005,42548,5370],{"class":4174},[4005,42550,3769],{"class":4182},[4005,42552,7945],{"class":4302},[4005,42554,4611],{"class":4182},[4005,42556,42557],{"class":4330},"\"4. Власна адреса покажчика p (&p):   ",[4005,42559,21720],{"class":4174},[4005,42561,7965],{"class":7964},[4005,42563,7968],{"class":4330},[4005,42565,9182],{"class":4182},[4005,42567,3908],{"class":4174},[4005,42569,4482],{"class":4182},[4005,42571,42572],{"class":4007,"line":4092},[4005,42573,4036],{"emptyLinePlaceholder":4035},[4005,42575,42576],{"class":4007,"line":4098},[4005,42577,42578],{"class":4190},"    \u002F\u002F 5. Розіменування покажчика для читання значення:\n",[4005,42580,42581,42583,42585,42587,42589,42592,42594,42596,42598,42601,42603],{"class":4007,"line":4104},[4005,42582,5370],{"class":4174},[4005,42584,3769],{"class":4182},[4005,42586,7945],{"class":4302},[4005,42588,4611],{"class":4182},[4005,42590,42591],{"class":4330},"\"5. Читання значення через *p:        ",[4005,42593,7959],{"class":4174},[4005,42595,7965],{"class":7964},[4005,42597,7968],{"class":4330},[4005,42599,42600],{"class":4182},", *",[4005,42602,3908],{"class":4174},[4005,42604,4482],{"class":4182},[4005,42606,42607],{"class":4007,"line":4110},[4005,42608,4036],{"emptyLinePlaceholder":4035},[4005,42610,42611],{"class":4007,"line":4937},[4005,42612,42613],{"class":4190},"    \u002F\u002F 6. Розіменування покажчика для зміни значення в пам'яті:\n",[4005,42615,42616,42619,42621,42623],{"class":4007,"line":4942},[4005,42617,42618],{"class":4182},"    *",[4005,42620,3908],{"class":4174},[4005,42622,4183],{"class":4182},[4005,42624,6064],{"class":4186},[4005,42626,42627,42629,42631,42633,42635,42638,42640,42642,42644,42646,42648,42650],{"class":4007,"line":4947},[4005,42628,5370],{"class":4174},[4005,42630,3769],{"class":4182},[4005,42632,7945],{"class":4302},[4005,42634,4611],{"class":4182},[4005,42636,42637],{"class":4330},"\"6. Нове значення x після *p = 100:   ",[4005,42639,7959],{"class":4174},[4005,42641,7965],{"class":7964},[4005,42643,7968],{"class":4330},[4005,42645,3836],{"class":4182},[4005,42647,4621],{"class":4174},[4005,42649,4498],{"class":4182},[4005,42651,42652],{"class":4190},"\u002F\u002F x тепер дорівнює 100!\n",[4005,42654,42655],{"class":4007,"line":4953},[4005,42656,4078],{"class":4182},[3900,42658],{},[3976,42660,42662,42663,42665],{"id":42661},"нульовий-покажчик-nil-та-небезпека-nil-pointer-dereference","Нульовий покажчик ",[3753,42664,4209],{}," та небезпека Nil Pointer Dereference",[3908,42667,42668,42669,42671,42672,42676,42677,3826],{},"Якщо покажчик оголошено, але йому не присвоєно адресу конкретної змінної, його нульовим значенням (",[3758,42670,8844],{},") є ",[3871,42673,42674],{},[3753,42675,4209],{}," (покажчик, який вказує на нульову адресу ",[3753,42678,42679],{},"0x0",[5427,42681,42682,42690,42721,42729],{},[3908,42683,42684],{},[3871,42685,42686,42687,42689],{},"Спроба розіменувати ",[3753,42688,4209],{},"-покажчик викликає фатальну паніку:",[3984,42691,42693],{"className":4162,"code":42692,"language":4164,"meta":3992,"style":3992},"var p *int \u002F\u002F p дорівнює nil\n*p = 50    \u002F\u002F 💥 panic: runtime error: invalid memory address or nil pointer dereference\n",[3753,42694,42695,42708],{"__ignoreMap":3992},[4005,42696,42697,42699,42701,42703,42705],{"class":4007,"line":4008},[4005,42698,3963],{"class":4171},[4005,42700,17662],{"class":4174},[4005,42702,5520],{"class":4182},[4005,42704,4158],{"class":4178},[4005,42706,42707],{"class":4190}," \u002F\u002F p дорівнює nil\n",[4005,42709,42710,42712,42714,42716,42718],{"class":4007,"line":4014},[4005,42711,8128],{"class":4182},[4005,42713,3908],{"class":4174},[4005,42715,4183],{"class":4182},[4005,42717,26330],{"class":4186},[4005,42719,42720],{"class":4190},"    \u002F\u002F 💥 panic: runtime error: invalid memory address or nil pointer dereference\n",[3908,42722,42723,42726,42727,5831],{},[3871,42724,42725],{},"Захисний патерн:"," Перед розіменуванням невідомого або отриманого ззовні покажчика завжди перевіряйте його на ",[3753,42728,4209],{},[3984,42730,42732],{"className":4162,"code":42731,"language":4164,"meta":3992,"style":3992},"if p != nil {\n    fmt.Println(\"Значення:\", *p)\n} else {\n    fmt.Println(\"Покажчик не ініціалізовано (nil)\")\n}\n",[3753,42733,42734,42746,42765,42773,42788],{"__ignoreMap":3992},[4005,42735,42736,42738,42740,42742,42744],{"class":4007,"line":4008},[4005,42737,3800],{"class":4836},[4005,42739,17662],{"class":4174},[4005,42741,5110],{"class":4182},[4005,42743,4209],{"class":4171},[4005,42745,5073],{"class":4182},[4005,42747,42748,42750,42752,42754,42756,42759,42761,42763],{"class":4007,"line":4014},[4005,42749,5370],{"class":4174},[4005,42751,3769],{"class":4182},[4005,42753,5348],{"class":4302},[4005,42755,4611],{"class":4182},[4005,42757,42758],{"class":4330},"\"Значення:\"",[4005,42760,42600],{"class":4182},[4005,42762,3908],{"class":4174},[4005,42764,4482],{"class":4182},[4005,42766,42767,42769,42771],{"class":4007,"line":4020},[4005,42768,25516],{"class":4182},[4005,42770,24962],{"class":4836},[4005,42772,5073],{"class":4182},[4005,42774,42775,42777,42779,42781,42783,42786],{"class":4007,"line":4026},[4005,42776,5370],{"class":4174},[4005,42778,3769],{"class":4182},[4005,42780,5348],{"class":4302},[4005,42782,4611],{"class":4182},[4005,42784,42785],{"class":4330},"\"Покажчик не ініціалізовано (nil)\"",[4005,42787,4482],{"class":4182},[4005,42789,42790],{"class":4007,"line":4032},[4005,42791,4078],{"class":4182},[3900,42793],{},[3976,42795,42797,42798],{"id":42796},"вбудована-функція-new","Вбудована функція ",[3753,42799,42800],{},"new()",[3908,42802,42803,42804,5831],{},"Для швидкого виділення пам'яті під безіменну змінну Go надає вбудовану функцію ",[3871,42805,42806],{},[3753,42807,42808],{},"new(T)",[3746,42810,42811,42816,42821,42826],{},[3749,42812,42813,42814,3769],{},"Вона приймає тип ",[3753,42815,8560],{},[3749,42817,42818,42819,3769],{},"Виділяє в пам'яті ділянку, достатню для збереження значення типу ",[3753,42820,8560],{},[3749,42822,42823,42824,3826],{},"Гарантовано занулює цю пам'ять (",[3758,42825,8844],{},[3749,42827,42828,42829,42833],{},"Повертає типізований покажчик ",[3871,42830,42831],{},[3753,42832,8552],{}," на виділену пам'ять.",[3984,42835,42837],{"className":4162,"code":42836,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Створює ціле число зі значенням 0 і повертає *int:\n    numPtr := new(int)\n\n    fmt.Printf(\"Адреса: %p, Значення за замовчуванням: %d\\n\", numPtr, *numPtr)\n\n    *numPtr = 777\n    fmt.Printf(\"Оновлене значення: %d\\n\", *numPtr)\n}\n",[3753,42838,42839,42845,42849,42855,42859,42867,42872,42887,42891,42926,42930,42941,42966],{"__ignoreMap":3992},[4005,42840,42841,42843],{"class":4007,"line":4008},[4005,42842,5739],{"class":4171},[4005,42844,5742],{"class":4178},[4005,42846,42847],{"class":4007,"line":4014},[4005,42848,4036],{"emptyLinePlaceholder":4035},[4005,42850,42851,42853],{"class":4007,"line":4020},[4005,42852,3917],{"class":4836},[4005,42854,7656],{"class":4330},[4005,42856,42857],{"class":4007,"line":4026},[4005,42858,4036],{"emptyLinePlaceholder":4035},[4005,42860,42861,42863,42865],{"class":4007,"line":4032},[4005,42862,4299],{"class":4171},[4005,42864,5764],{"class":4302},[4005,42866,4306],{"class":4182},[4005,42868,42869],{"class":4007,"line":4039},[4005,42870,42871],{"class":4190},"    \u002F\u002F Створює ціле число зі значенням 0 і повертає *int:\n",[4005,42873,42874,42877,42879,42881,42883,42885],{"class":4007,"line":4045},[4005,42875,42876],{"class":4174},"    numPtr",[4005,42878,4314],{"class":4182},[4005,42880,3768],{"class":4302},[4005,42882,4611],{"class":4182},[4005,42884,4158],{"class":4178},[4005,42886,4482],{"class":4182},[4005,42888,42889],{"class":4007,"line":4051},[4005,42890,4036],{"emptyLinePlaceholder":4035},[4005,42892,42893,42895,42897,42899,42901,42904,42906,42909,42911,42913,42915,42917,42920,42922,42924],{"class":4007,"line":4057},[4005,42894,5370],{"class":4174},[4005,42896,3769],{"class":4182},[4005,42898,7945],{"class":4302},[4005,42900,4611],{"class":4182},[4005,42902,42903],{"class":4330},"\"Адреса: ",[4005,42905,21720],{"class":4174},[4005,42907,42908],{"class":4330},", Значення за замовчуванням: ",[4005,42910,7959],{"class":4174},[4005,42912,7965],{"class":7964},[4005,42914,7968],{"class":4330},[4005,42916,3836],{"class":4182},[4005,42918,42919],{"class":4174},"numPtr",[4005,42921,42600],{"class":4182},[4005,42923,42919],{"class":4174},[4005,42925,4482],{"class":4182},[4005,42927,42928],{"class":4007,"line":4063},[4005,42929,4036],{"emptyLinePlaceholder":4035},[4005,42931,42932,42934,42936,42938],{"class":4007,"line":4069},[4005,42933,42618],{"class":4182},[4005,42935,42919],{"class":4174},[4005,42937,4183],{"class":4182},[4005,42939,42940],{"class":4186},"777\n",[4005,42942,42943,42945,42947,42949,42951,42954,42956,42958,42960,42962,42964],{"class":4007,"line":4075},[4005,42944,5370],{"class":4174},[4005,42946,3769],{"class":4182},[4005,42948,7945],{"class":4302},[4005,42950,4611],{"class":4182},[4005,42952,42953],{"class":4330},"\"Оновлене значення: ",[4005,42955,7959],{"class":4174},[4005,42957,7965],{"class":7964},[4005,42959,7968],{"class":4330},[4005,42961,42600],{"class":4182},[4005,42963,42919],{"class":4174},[4005,42965,4482],{"class":4182},[4005,42967,42968],{"class":4007,"line":4081},[4005,42969,4078],{"class":4182},[3900,42971],{},[3976,42973,42975],{"id":42974},"складні-форми-покажчики-на-покажчики-та-покажчики-на-масиви","Складні форми: покажчики на покажчики та покажчики на масиви",[3940,42977,42978,3880,42981,42983,42984,42987,42988,42991],{},[3871,42979,42980],{},"Поки що достатньо:",[3753,42982,42378],{}," — взяти адресу, ",[3753,42985,42986],{},"*p"," — прочитати за адресою. ",[3753,42989,42990],{},"**int"," нижче — для допитливих, можна пропустити на першому читанні.",[3984,42993,42995],{"className":4162,"code":42994,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F 1. Покажчик на покажчик (**T) — багаторівнева непряма адресація (рідко в прикладному коді)\n    var a int = 10\n    var p *int = &a    \u002F\u002F p вказує на a\n    var pp **int = &p  \u002F\u002F pp вказує на покажчик p\n\n    fmt.Printf(\"a: %d, через *p: %d, через **pp: %d\\n\", a, *p, **pp)\n\n    **pp = 500 \u002F\u002F Зміна a через подвійне розіменування\n    fmt.Println(\"Нове значення a:\", a) \u002F\u002F 500\n\n    \u002F\u002F 2. Покажчик на статичний масив (*[N]T)\n    var numbers [3]int = [3]int{10, 20, 30}\n    var arrPtr *[3]int = &numbers\n\n    \u002F\u002F Go дозволяє звертатися до елементів масиву через покажчик без явного (*arrPtr)[0]:\n    arrPtr[0] = 999 \u002F\u002F Автоматичне розіменування компілятором\n    fmt.Println(\"Масив після зміни через покажчик:\", numbers) \u002F\u002F [999, 20, 30]\n}\n",[3753,42996,42997,43003,43007,43013,43017,43025,43030,43042,43059,43078,43082,43126,43130,43144,43166,43170,43175,43211,43231,43235,43240,43256,43277],{"__ignoreMap":3992},[4005,42998,42999,43001],{"class":4007,"line":4008},[4005,43000,5739],{"class":4171},[4005,43002,5742],{"class":4178},[4005,43004,43005],{"class":4007,"line":4014},[4005,43006,4036],{"emptyLinePlaceholder":4035},[4005,43008,43009,43011],{"class":4007,"line":4020},[4005,43010,3917],{"class":4836},[4005,43012,7656],{"class":4330},[4005,43014,43015],{"class":4007,"line":4026},[4005,43016,4036],{"emptyLinePlaceholder":4035},[4005,43018,43019,43021,43023],{"class":4007,"line":4032},[4005,43020,4299],{"class":4171},[4005,43022,5764],{"class":4302},[4005,43024,4306],{"class":4182},[4005,43026,43027],{"class":4007,"line":4039},[4005,43028,43029],{"class":4190},"    \u002F\u002F 1. Покажчик на покажчик (**T) — багаторівнева непряма адресація (рідко в прикладному коді)\n",[4005,43031,43032,43034,43036,43038,43040],{"class":4007,"line":4045},[4005,43033,9412],{"class":4171},[4005,43035,4376],{"class":4174},[4005,43037,4224],{"class":4178},[4005,43039,4183],{"class":4182},[4005,43041,7167],{"class":4186},[4005,43043,43044,43046,43048,43050,43052,43054,43056],{"class":4007,"line":4051},[4005,43045,9412],{"class":4171},[4005,43047,17662],{"class":4174},[4005,43049,5520],{"class":4182},[4005,43051,4158],{"class":4178},[4005,43053,42463],{"class":4182},[4005,43055,9306],{"class":4174},[4005,43057,43058],{"class":4190},"    \u002F\u002F p вказує на a\n",[4005,43060,43061,43063,43066,43069,43071,43073,43075],{"class":4007,"line":4057},[4005,43062,9412],{"class":4171},[4005,43064,43065],{"class":4174}," pp",[4005,43067,43068],{"class":4182}," **",[4005,43070,4158],{"class":4178},[4005,43072,42463],{"class":4182},[4005,43074,3908],{"class":4174},[4005,43076,43077],{"class":4190},"  \u002F\u002F pp вказує на покажчик p\n",[4005,43079,43080],{"class":4007,"line":4063},[4005,43081,4036],{"emptyLinePlaceholder":4035},[4005,43083,43084,43086,43088,43090,43092,43094,43096,43099,43101,43104,43106,43108,43110,43112,43114,43116,43118,43121,43124],{"class":4007,"line":4069},[4005,43085,5370],{"class":4174},[4005,43087,3769],{"class":4182},[4005,43089,7945],{"class":4302},[4005,43091,4611],{"class":4182},[4005,43093,23170],{"class":4330},[4005,43095,7959],{"class":4174},[4005,43097,43098],{"class":4330},", через *p: ",[4005,43100,7959],{"class":4174},[4005,43102,43103],{"class":4330},", через **pp: ",[4005,43105,7959],{"class":4174},[4005,43107,7965],{"class":7964},[4005,43109,7968],{"class":4330},[4005,43111,3836],{"class":4182},[4005,43113,9306],{"class":4174},[4005,43115,42600],{"class":4182},[4005,43117,3908],{"class":4174},[4005,43119,43120],{"class":4182},", **",[4005,43122,43123],{"class":4174},"pp",[4005,43125,4482],{"class":4182},[4005,43127,43128],{"class":4007,"line":4075},[4005,43129,4036],{"emptyLinePlaceholder":4035},[4005,43131,43132,43135,43137,43139,43141],{"class":4007,"line":4081},[4005,43133,43134],{"class":4182},"    **",[4005,43136,43123],{"class":4174},[4005,43138,4183],{"class":4182},[4005,43140,6732],{"class":4186},[4005,43142,43143],{"class":4190}," \u002F\u002F Зміна a через подвійне розіменування\n",[4005,43145,43146,43148,43150,43152,43154,43157,43159,43161,43163],{"class":4007,"line":4086},[4005,43147,5370],{"class":4174},[4005,43149,3769],{"class":4182},[4005,43151,5348],{"class":4302},[4005,43153,4611],{"class":4182},[4005,43155,43156],{"class":4330},"\"Нове значення a:\"",[4005,43158,3836],{"class":4182},[4005,43160,9306],{"class":4174},[4005,43162,4498],{"class":4182},[4005,43164,43165],{"class":4190},"\u002F\u002F 500\n",[4005,43167,43168],{"class":4007,"line":4092},[4005,43169,4036],{"emptyLinePlaceholder":4035},[4005,43171,43172],{"class":4007,"line":4098},[4005,43173,43174],{"class":4190},"    \u002F\u002F 2. Покажчик на статичний масив (*[N]T)\n",[4005,43176,43177,43179,43181,43183,43185,43187,43189,43191,43193,43195,43197,43199,43201,43203,43205,43207,43209],{"class":4007,"line":4104},[4005,43178,9412],{"class":4171},[4005,43180,29774],{"class":4174},[4005,43182,27738],{"class":4182},[4005,43184,6286],{"class":4186},[4005,43186,28540],{"class":4182},[4005,43188,4158],{"class":4178},[4005,43190,30545],{"class":4182},[4005,43192,6286],{"class":4186},[4005,43194,28540],{"class":4182},[4005,43196,4158],{"class":4178},[4005,43198,16268],{"class":4182},[4005,43200,4631],{"class":4186},[4005,43202,3836],{"class":4182},[4005,43204,5335],{"class":4186},[4005,43206,3836],{"class":4182},[4005,43208,4276],{"class":4186},[4005,43210,4078],{"class":4182},[4005,43212,43213,43215,43218,43220,43222,43224,43226,43228],{"class":4007,"line":4110},[4005,43214,9412],{"class":4171},[4005,43216,43217],{"class":4174}," arrPtr",[4005,43219,32219],{"class":4182},[4005,43221,6286],{"class":4186},[4005,43223,28540],{"class":4182},[4005,43225,4158],{"class":4178},[4005,43227,42463],{"class":4182},[4005,43229,43230],{"class":4174},"numbers\n",[4005,43232,43233],{"class":4007,"line":4937},[4005,43234,4036],{"emptyLinePlaceholder":4035},[4005,43236,43237],{"class":4007,"line":4942},[4005,43238,43239],{"class":4190},"    \u002F\u002F Go дозволяє звертатися до елементів масиву через покажчик без явного (*arrPtr)[0]:\n",[4005,43241,43242,43245,43247,43249,43251,43253],{"class":4007,"line":4947},[4005,43243,43244],{"class":4174},"    arrPtr",[4005,43246,11561],{"class":4182},[4005,43248,4200],{"class":4186},[4005,43250,12081],{"class":4182},[4005,43252,27172],{"class":4186},[4005,43254,43255],{"class":4190}," \u002F\u002F Автоматичне розіменування компілятором\n",[4005,43257,43258,43260,43262,43264,43266,43269,43271,43273,43275],{"class":4007,"line":4953},[4005,43259,5370],{"class":4174},[4005,43261,3769],{"class":4182},[4005,43263,5348],{"class":4302},[4005,43265,4611],{"class":4182},[4005,43267,43268],{"class":4330},"\"Масив після зміни через покажчик:\"",[4005,43270,3836],{"class":4182},[4005,43272,29814],{"class":4174},[4005,43274,4498],{"class":4182},[4005,43276,32191],{"class":4190},[4005,43278,43279],{"class":4007,"line":4960},[4005,43280,4078],{"class":4182},[3900,43282],{},[3976,43284,43286],{"id":43285},"покажчики-та-функції-мутація-параметрів-та-уникнення-копіювання","Покажчики та функції: мутація параметрів та уникнення копіювання",[3908,43288,43289,43290,4761,43293,43296],{},"За замовчуванням усі аргументи передаються у функції ",[3871,43291,43292],{},"за значенням",[3758,43294,43295],{},"Pass by Value",") — створюється їхня повна локальна копія. Якщо функція повинна змінити оригінальну змінну викликача або уникнути важкого копіювання пам'яті, параметр оголошується як покажчик:",[3984,43298,43300],{"className":4162,"code":43299,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F 1. Передача за значенням: копіюється число, оригінал НЕ змінюється\nfunc squareByValue(val int) {\n    val = val * val\n}\n\n\u002F\u002F 2. Передача за покажчиком: функція змінює значення за фізичною адресою\nfunc squareByPointer(valPtr *int) {\n    if valPtr != nil {\n        *valPtr = (*valPtr) * (*valPtr)\n    }\n}\n\nfunc main() {\n    number := 5\n\n    squareByValue(number)\n    fmt.Println(\"Після squareByValue:\", number) \u002F\u002F 5 (без змін)\n\n    squareByPointer(&number)\n    fmt.Println(\"Після squareByPointer:\", number) \u002F\u002F 25 (оригінал змінено!)\n}\n",[3753,43301,43302,43308,43312,43318,43322,43327,43343,43357,43361,43365,43370,43388,43401,43420,43424,43428,43432,43440,43448,43452,43463,43485,43489,43500,43522],{"__ignoreMap":3992},[4005,43303,43304,43306],{"class":4007,"line":4008},[4005,43305,5739],{"class":4171},[4005,43307,5742],{"class":4178},[4005,43309,43310],{"class":4007,"line":4014},[4005,43311,4036],{"emptyLinePlaceholder":4035},[4005,43313,43314,43316],{"class":4007,"line":4020},[4005,43315,3917],{"class":4836},[4005,43317,7656],{"class":4330},[4005,43319,43320],{"class":4007,"line":4026},[4005,43321,4036],{"emptyLinePlaceholder":4035},[4005,43323,43324],{"class":4007,"line":4032},[4005,43325,43326],{"class":4190},"\u002F\u002F 1. Передача за значенням: копіюється число, оригінал НЕ змінюється\n",[4005,43328,43329,43331,43334,43336,43339,43341],{"class":4007,"line":4039},[4005,43330,4299],{"class":4171},[4005,43332,43333],{"class":4302}," squareByValue",[4005,43335,4611],{"class":4182},[4005,43337,43338],{"class":4174},"val",[4005,43340,4224],{"class":4178},[4005,43342,12789],{"class":4182},[4005,43344,43345,43348,43350,43352,43354],{"class":4007,"line":4045},[4005,43346,43347],{"class":4174},"    val",[4005,43349,4183],{"class":4182},[4005,43351,43338],{"class":4174},[4005,43353,6735],{"class":4182},[4005,43355,43356],{"class":4174},"val\n",[4005,43358,43359],{"class":4007,"line":4051},[4005,43360,4078],{"class":4182},[4005,43362,43363],{"class":4007,"line":4057},[4005,43364,4036],{"emptyLinePlaceholder":4035},[4005,43366,43367],{"class":4007,"line":4063},[4005,43368,43369],{"class":4190},"\u002F\u002F 2. Передача за покажчиком: функція змінює значення за фізичною адресою\n",[4005,43371,43372,43374,43377,43379,43382,43384,43386],{"class":4007,"line":4069},[4005,43373,4299],{"class":4171},[4005,43375,43376],{"class":4302}," squareByPointer",[4005,43378,4611],{"class":4182},[4005,43380,43381],{"class":4174},"valPtr",[4005,43383,5520],{"class":4182},[4005,43385,4158],{"class":4178},[4005,43387,12789],{"class":4182},[4005,43389,43390,43392,43395,43397,43399],{"class":4007,"line":4075},[4005,43391,5104],{"class":4836},[4005,43393,43394],{"class":4174}," valPtr",[4005,43396,5110],{"class":4182},[4005,43398,4209],{"class":4171},[4005,43400,5073],{"class":4182},[4005,43402,43403,43406,43408,43411,43413,43416,43418],{"class":4007,"line":4081},[4005,43404,43405],{"class":4182},"        *",[4005,43407,43381],{"class":4174},[4005,43409,43410],{"class":4182}," = (*",[4005,43412,43381],{"class":4174},[4005,43414,43415],{"class":4182},") * (*",[4005,43417,43381],{"class":4174},[4005,43419,4482],{"class":4182},[4005,43421,43422],{"class":4007,"line":4086},[4005,43423,5127],{"class":4182},[4005,43425,43426],{"class":4007,"line":4092},[4005,43427,4078],{"class":4182},[4005,43429,43430],{"class":4007,"line":4098},[4005,43431,4036],{"emptyLinePlaceholder":4035},[4005,43433,43434,43436,43438],{"class":4007,"line":4104},[4005,43435,4299],{"class":4171},[4005,43437,5764],{"class":4302},[4005,43439,4306],{"class":4182},[4005,43441,43442,43444,43446],{"class":4007,"line":4110},[4005,43443,18012],{"class":4174},[4005,43445,4314],{"class":4182},[4005,43447,10266],{"class":4186},[4005,43449,43450],{"class":4007,"line":4937},[4005,43451,4036],{"emptyLinePlaceholder":4035},[4005,43453,43454,43457,43459,43461],{"class":4007,"line":4942},[4005,43455,43456],{"class":4302},"    squareByValue",[4005,43458,4611],{"class":4182},[4005,43460,18044],{"class":4174},[4005,43462,4482],{"class":4182},[4005,43464,43465,43467,43469,43471,43473,43476,43478,43480,43482],{"class":4007,"line":4947},[4005,43466,5370],{"class":4174},[4005,43468,3769],{"class":4182},[4005,43470,5348],{"class":4302},[4005,43472,4611],{"class":4182},[4005,43474,43475],{"class":4330},"\"Після squareByValue:\"",[4005,43477,3836],{"class":4182},[4005,43479,18044],{"class":4174},[4005,43481,4498],{"class":4182},[4005,43483,43484],{"class":4190},"\u002F\u002F 5 (без змін)\n",[4005,43486,43487],{"class":4007,"line":4953},[4005,43488,4036],{"emptyLinePlaceholder":4035},[4005,43490,43491,43494,43496,43498],{"class":4007,"line":4960},[4005,43492,43493],{"class":4302},"    squareByPointer",[4005,43495,32446],{"class":4182},[4005,43497,18044],{"class":4174},[4005,43499,4482],{"class":4182},[4005,43501,43502,43504,43506,43508,43510,43513,43515,43517,43519],{"class":4007,"line":4973},[4005,43503,5370],{"class":4174},[4005,43505,3769],{"class":4182},[4005,43507,5348],{"class":4302},[4005,43509,4611],{"class":4182},[4005,43511,43512],{"class":4330},"\"Після squareByPointer:\"",[4005,43514,3836],{"class":4182},[4005,43516,18044],{"class":4174},[4005,43518,4498],{"class":4182},[4005,43520,43521],{"class":4190},"\u002F\u002F 25 (оригінал змінено!)\n",[4005,43523,43524],{"class":4007,"line":4985},[4005,43525,4078],{"class":4182},[4748,43527,43528,43533],{},[3908,43529,43530],{},[3871,43531,43532],{},"Чому покажчики в Go безпечні (на відміну від C\u002FC++):",[4781,43534,43535,43548,43568],{},[3749,43536,43537,43540,43541,27715,43544,43547],{},[3871,43538,43539],{},"Відсутність адресної арифметики:"," у Go заборонено писати ",[3753,43542,43543],{},"ptr++",[3753,43545,43546],{},"ptr + 4",". Ви не можете випадково вийти за межі дозволеної пам'яті та пошкодити чужі дані процесу.",[3749,43549,43550,43553,43554,8512,43557,43560,43561,43564,43565,3826],{},[3871,43551,43552],{},"Автоматичний збирач сміття (Garbage Collector):"," вам не потрібно вручну викликати ",[3753,43555,43556],{},"free()",[3753,43558,43559],{},"delete",". Пам'ять звільняється автоматично, виключаючи витоки пам'яті (",[3758,43562,43563],{},"Memory Leaks",") та повторне звільнення (",[3758,43566,43567],{},"Double Free",[3749,43569,43570],{},[3871,43571,43572],{},"Абсолютна безпека повернення локальних адрес завдяки Escape Analysis.",[3900,43574],{},[3903,43576,43578,3765,43580,43582],{"id":43577},"make-vs-new-vs-літерал-хто-виділяє-память-і-що-повертає",[3753,43579,3764],{},[3753,43581,3768],{}," vs літерал: хто виділяє пам'ять і що повертає",[3908,43584,43585],{},[3871,43586,43587],{},"Важливе правило для роботи з різними типами даних:",[3908,43589,43590,43591,43594],{},"Не всі типи даних у Go створюються однаково. Деякі можна просто оголосити (",[3753,43592,43593],{},"var x int","), а інші потребують спеціальної ініціалізації:",[3984,43596,43598],{"className":4162,"code":43597,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Прості типи — просто оголошуємо:\nvar number int          \u002F\u002F ✅ Готово до використання (значення: 0)\nvar text string         \u002F\u002F ✅ Готово до використання (значення: \"\")\n\n\u002F\u002F Зрізи — можна додавати без ініціалізації:\nvar numbers []int       \u002F\u002F nil, але append працює!\nnumbers = append(numbers, 1, 2, 3)  \u002F\u002F ✅ Працює\n\n\u002F\u002F Мапи — ПОТРЕБУЮТЬ ініціалізації:\nvar userData map[string]int  \u002F\u002F nil, писати ЗАБОРОНЕНО!\n\u002F\u002F userData[\"age\"] = 25      \u002F\u002F ❌ PANIC! Assignment to entry in nil map\nuserData = make(map[string]int)  \u002F\u002F ✅ Тепер можна писати\nuserData[\"age\"] = 25             \u002F\u002F ✅ Працює\n",[3753,43599,43600,43605,43616,43627,43631,43636,43649,43678,43682,43687,43708,43716,43742],{"__ignoreMap":3992},[4005,43601,43602],{"class":4007,"line":4008},[4005,43603,43604],{"class":4190},"\u002F\u002F Прості типи — просто оголошуємо:\n",[4005,43606,43607,43609,43611,43613],{"class":4007,"line":4014},[4005,43608,3963],{"class":4171},[4005,43610,18647],{"class":4174},[4005,43612,4224],{"class":4178},[4005,43614,43615],{"class":4190},"          \u002F\u002F ✅ Готово до використання (значення: 0)\n",[4005,43617,43618,43620,43622,43624],{"class":4007,"line":4020},[4005,43619,3963],{"class":4171},[4005,43621,12354],{"class":4174},[4005,43623,4237],{"class":4178},[4005,43625,43626],{"class":4190},"         \u002F\u002F ✅ Готово до використання (значення: \"\")\n",[4005,43628,43629],{"class":4007,"line":4026},[4005,43630,4036],{"emptyLinePlaceholder":4035},[4005,43632,43633],{"class":4007,"line":4032},[4005,43634,43635],{"class":4190},"\u002F\u002F Зрізи — можна додавати без ініціалізації:\n",[4005,43637,43638,43640,43642,43644,43646],{"class":4007,"line":4039},[4005,43639,3963],{"class":4171},[4005,43641,29774],{"class":4174},[4005,43643,26632],{"class":4182},[4005,43645,4158],{"class":4178},[4005,43647,43648],{"class":4190},"       \u002F\u002F nil, але append працює!\n",[4005,43650,43651,43653,43655,43657,43659,43661,43663,43665,43667,43669,43671,43673,43675],{"class":4007,"line":4045},[4005,43652,29814],{"class":4174},[4005,43654,4183],{"class":4182},[4005,43656,17678],{"class":4302},[4005,43658,4611],{"class":4182},[4005,43660,29814],{"class":4174},[4005,43662,3836],{"class":4182},[4005,43664,4393],{"class":4186},[4005,43666,3836],{"class":4182},[4005,43668,4398],{"class":4186},[4005,43670,3836],{"class":4182},[4005,43672,6286],{"class":4186},[4005,43674,5196],{"class":4182},[4005,43676,43677],{"class":4190},"\u002F\u002F ✅ Працює\n",[4005,43679,43680],{"class":4007,"line":4051},[4005,43681,4036],{"emptyLinePlaceholder":4035},[4005,43683,43684],{"class":4007,"line":4057},[4005,43685,43686],{"class":4190},"\u002F\u002F Мапи — ПОТРЕБУЮТЬ ініціалізації:\n",[4005,43688,43689,43691,43694,43697,43699,43701,43703,43705],{"class":4007,"line":4063},[4005,43690,3963],{"class":4171},[4005,43692,43693],{"class":4174}," userData",[4005,43695,43696],{"class":4171}," map",[4005,43698,11561],{"class":4182},[4005,43700,7004],{"class":4178},[4005,43702,28540],{"class":4182},[4005,43704,4158],{"class":4178},[4005,43706,43707],{"class":4190},"  \u002F\u002F nil, писати ЗАБОРОНЕНО!\n",[4005,43709,43710,43713],{"class":4007,"line":4069},[4005,43711,43712],{"class":4190},"\u002F\u002F userData[\"age\"] = 25",[4005,43714,43715],{"class":4190},"      \u002F\u002F ❌ PANIC! Assignment to entry in nil map\n",[4005,43717,43718,43721,43723,43725,43727,43729,43731,43733,43735,43737,43739],{"class":4007,"line":4075},[4005,43719,43720],{"class":4174},"userData",[4005,43722,4183],{"class":4182},[4005,43724,3764],{"class":4302},[4005,43726,4611],{"class":4182},[4005,43728,8793],{"class":4171},[4005,43730,11561],{"class":4182},[4005,43732,7004],{"class":4178},[4005,43734,28540],{"class":4182},[4005,43736,4158],{"class":4178},[4005,43738,5196],{"class":4182},[4005,43740,43741],{"class":4190},"\u002F\u002F ✅ Тепер можна писати\n",[4005,43743,43744,43746,43748,43751,43753,43755],{"class":4007,"line":4081},[4005,43745,43720],{"class":4174},[4005,43747,11561],{"class":4182},[4005,43749,43750],{"class":4330},"\"age\"",[4005,43752,12081],{"class":4182},[4005,43754,20817],{"class":4186},[4005,43756,43757],{"class":4190},"             \u002F\u002F ✅ Працює\n",[3908,43759,43760],{},[3871,43761,43762],{},"Ключова відмінність:",[3746,43764,43765,43777,43788],{},[3749,43766,43767,43771,43772,43774,43775],{},[3871,43768,8930,43769,4159],{},[3753,43770,8577],{}," можна використовувати ",[3753,43773,17678],{}," навіть з ",[3753,43776,4209],{},[3749,43778,43779,43784,43785,43787],{},[3871,43780,43781,43782,4159],{},"Мапи (",[3753,43783,8629],{}," ОБОВ'ЯЗКОВО потрібен ",[3753,43786,3764],{}," перед записом",[3749,43789,43790,43795,43796,43798],{},[3871,43791,43792,43793,4159],{},"Канали (",[3753,43794,8674],{}," також потрібен ",[3753,43797,3764],{}," (детальніше в наступних лекціях)",[3908,43800,43801,43804,43805,3769],{},[3871,43802,43803],{},"Контекст:"," Go має три способи створення значень, і їх плутанина — джерело ",[3753,43806,43807],{},"nil panic",[3908,43809,43810],{},[3871,43811,9062],{},[5991,43813,43814,43833],{},[5994,43815,43816],{},[5997,43817,43818,43821,43824,43827,43830],{},[6000,43819,43820],{"align":8837},"Спосіб",[6000,43822,43823],{"align":8837},"Що робить",[6000,43825,43826],{"align":8837},"Що повертає",[6000,43828,43829],{"align":8837},"Де пам'ять",[6000,43831,43832],{"align":8837},"Коли використовувати",[6010,43834,43835,43862,43885,43920,43946],{},[5997,43836,43837,43841,43848,43853,43856],{},[6015,43838,43839],{"align":8837},[3753,43840,42808],{},[6015,43842,43843,43844,43847],{"align":8837},"Виділяє ",[3753,43845,43846],{},"sizeof(T)"," нулів",[6015,43849,43850,43852],{"align":8837},[3753,43851,8552],{}," (покажчик)",[6015,43854,43855],{"align":8837},"Купа (втікає)",[6015,43857,43858,43859,43861],{"align":8837},"Рідко; лише коли потрібен ",[3753,43860,8552],{}," на zero value без літералу",[5997,43863,43864,43869,43872,43876,43879],{},[6015,43865,43866],{"align":8837},[3753,43867,43868],{},"&T{...}",[6015,43870,43871],{"align":8837},"Виділяє + ініціалізує поля",[6015,43873,43874],{"align":8837},[3753,43875,8552],{},[6015,43877,43878],{"align":8837},"Купа (якщо втікає)",[6015,43880,43881,43882],{"align":8837},"Рекомендований конструктор ",[3753,43883,43884],{},"NewUser",[5997,43886,43887,43898,43905,43914,43917],{},[6015,43888,43889,15549,43892,15549,43895],{"align":8837},[3753,43890,43891],{},"make([]T, len, cap)",[3753,43893,43894],{},"make(map[K]V)",[3753,43896,43897],{},"make(chan T)",[6015,43899,43900,43901,43904],{"align":8837},"Створює ",[3871,43902,43903],{},"ініціалізований дескриптор"," (SliceHeader\u002Fhmap\u002Fканал)",[6015,43906,43907,15549,43909,15549,43911,43913],{"align":8837},[3753,43908,8577],{},[3753,43910,8629],{},[3753,43912,8674],{}," (не покажчик!)",[6015,43915,43916],{"align":8837},"Купа для бакетів\u002Fбуфера",[6015,43918,43919],{"align":8837},"Єдиний спосіб створити мапу\u002Fканал для запису",[5997,43921,43922,43931,43934,43940,43943],{},[6015,43923,43924,43925,15549,43928],{"align":8837},"Літерал ",[3753,43926,43927],{},"[]int{1,2}",[3753,43929,43930],{},"map[string]int{\"a\":1}",[6015,43932,43933],{"align":8837},"Виділяє + копіює елементи",[6015,43935,43936,15549,43938],{"align":8837},[3753,43937,8577],{},[3753,43939,8629],{},[6015,43941,43942],{"align":8837},"Купа",[6015,43944,43945],{"align":8837},"Коли початкові дані відомі",[5997,43947,43948,43955,43958,43963,43965],{},[6015,43949,43950,15549,43953],{"align":8837},[3753,43951,43952],{},"var s []int",[3753,43954,8984],{},[6015,43956,43957],{"align":8837},"Нічого не виділяє",[6015,43959,43960,43962],{"align":8837},[3753,43961,4209],{}," дескриптор",[6015,43964,17143],{"align":8837},[6015,43966,43967,43968,3836,43971,43973,43974],{"align":8837},"Читати можна (",[3753,43969,43970],{},"len(nil)==0",[3753,43972,8988],{}," → zero), писати — ",[3871,43975,43976],{},"паніка",[3984,43978,43980],{"className":4162,"code":43979,"language":4164,"meta":3992,"style":3992},"var s []int              \u002F\u002F nil slice: len=0 cap=0 ptr=nil — append працює!\ns = append(s, 42)        \u002F\u002F OK: growslice виділить масив\nfmt.Println(s[0])\n\nvar m map[string]int     \u002F\u002F nil map\nfmt.Println(m[\"missing\"]) \u002F\u002F 0 — читання OK\n\u002F\u002F m[\"new\"] = 1          \u002F\u002F ❌ panic: assignment to entry in nil map\nm = make(map[string]int) \u002F\u002F ініціалізація\nm[\"new\"] = 1             \u002F\u002F OK\n\np1 := new(int)           \u002F\u002F *int -> 0\np2 := &int{}             \u002F\u002F ідентично, але дозволяє &User{ID:42}\n",[3753,43981,43982,43995,44016,44034,44038,44058,44081,44089,44114,44130,44134,44152],{"__ignoreMap":3992},[4005,43983,43984,43986,43988,43990,43992],{"class":4007,"line":4008},[4005,43985,3963],{"class":4171},[4005,43987,7358],{"class":4174},[4005,43989,26632],{"class":4182},[4005,43991,4158],{"class":4178},[4005,43993,43994],{"class":4190},"              \u002F\u002F nil slice: len=0 cap=0 ptr=nil — append працює!\n",[4005,43996,43997,43999,44001,44003,44005,44007,44009,44011,44013],{"class":4007,"line":4014},[4005,43998,7550],{"class":4174},[4005,44000,4183],{"class":4182},[4005,44002,17678],{"class":4302},[4005,44004,4611],{"class":4182},[4005,44006,7550],{"class":4174},[4005,44008,3836],{"class":4182},[4005,44010,9440],{"class":4186},[4005,44012,16007],{"class":4182},[4005,44014,44015],{"class":4190},"\u002F\u002F OK: growslice виділить масив\n",[4005,44017,44018,44020,44022,44024,44026,44028,44030,44032],{"class":4007,"line":4020},[4005,44019,3785],{"class":4174},[4005,44021,3769],{"class":4182},[4005,44023,5348],{"class":4302},[4005,44025,4611],{"class":4182},[4005,44027,7550],{"class":4174},[4005,44029,11561],{"class":4182},[4005,44031,4200],{"class":4186},[4005,44033,11566],{"class":4182},[4005,44035,44036],{"class":4007,"line":4026},[4005,44037,4036],{"emptyLinePlaceholder":4035},[4005,44039,44040,44042,44045,44047,44049,44051,44053,44055],{"class":4007,"line":4032},[4005,44041,3963],{"class":4171},[4005,44043,44044],{"class":4174}," m",[4005,44046,43696],{"class":4171},[4005,44048,11561],{"class":4182},[4005,44050,7004],{"class":4178},[4005,44052,28540],{"class":4182},[4005,44054,4158],{"class":4178},[4005,44056,44057],{"class":4190},"     \u002F\u002F nil map\n",[4005,44059,44060,44062,44064,44066,44068,44071,44073,44076,44078],{"class":4007,"line":4039},[4005,44061,3785],{"class":4174},[4005,44063,3769],{"class":4182},[4005,44065,5348],{"class":4302},[4005,44067,4611],{"class":4182},[4005,44069,44070],{"class":4174},"m",[4005,44072,11561],{"class":4182},[4005,44074,44075],{"class":4330},"\"missing\"",[4005,44077,31683],{"class":4182},[4005,44079,44080],{"class":4190},"\u002F\u002F 0 — читання OK\n",[4005,44082,44083,44086],{"class":4007,"line":4045},[4005,44084,44085],{"class":4190},"\u002F\u002F m[\"new\"] = 1",[4005,44087,44088],{"class":4190},"          \u002F\u002F ❌ panic: assignment to entry in nil map\n",[4005,44090,44091,44093,44095,44097,44099,44101,44103,44105,44107,44109,44111],{"class":4007,"line":4051},[4005,44092,44070],{"class":4174},[4005,44094,4183],{"class":4182},[4005,44096,3764],{"class":4302},[4005,44098,4611],{"class":4182},[4005,44100,8793],{"class":4171},[4005,44102,11561],{"class":4182},[4005,44104,7004],{"class":4178},[4005,44106,28540],{"class":4182},[4005,44108,4158],{"class":4178},[4005,44110,4498],{"class":4182},[4005,44112,44113],{"class":4190},"\u002F\u002F ініціалізація\n",[4005,44115,44116,44118,44120,44123,44125,44127],{"class":4007,"line":4057},[4005,44117,44070],{"class":4174},[4005,44119,11561],{"class":4182},[4005,44121,44122],{"class":4330},"\"new\"",[4005,44124,12081],{"class":4182},[4005,44126,4393],{"class":4186},[4005,44128,44129],{"class":4190},"             \u002F\u002F OK\n",[4005,44131,44132],{"class":4007,"line":4063},[4005,44133,4036],{"emptyLinePlaceholder":4035},[4005,44135,44136,44139,44141,44143,44145,44147,44149],{"class":4007,"line":4069},[4005,44137,44138],{"class":4174},"p1",[4005,44140,4314],{"class":4182},[4005,44142,3768],{"class":4302},[4005,44144,4611],{"class":4182},[4005,44146,4158],{"class":4178},[4005,44148,21251],{"class":4182},[4005,44150,44151],{"class":4190},"\u002F\u002F *int -> 0\n",[4005,44153,44154,44157,44160,44162,44165],{"class":4007,"line":4075},[4005,44155,44156],{"class":4174},"p2",[4005,44158,44159],{"class":4182}," := &",[4005,44161,4158],{"class":4178},[4005,44163,44164],{"class":4182},"{}             ",[4005,44166,44167],{"class":4190},"\u002F\u002F ідентично, але дозволяє &User{ID:42}\n",[44169,44170,44171,3880,44177,22892,44180,44183,44184,8512,44187,3769],"warning",{},[3871,44172,44173,44174,44176],{},"Пастка ",[3753,44175,3768],{}," для мап\u002Fзрізів:",[3753,44178,44179],{},"new(map[string]int)",[3753,44181,44182],{},"*map[string]int"," (покажчик на nil мапу) — майже ніколи не потрібно! Використовуйте ",[3753,44185,44186],{},"make(map[string]int)",[3753,44188,44189],{},"map[string]int{}",[3908,44191,44192,3880,44195,44197,44198,4761,44201,44203,44204,44207,44208,44210,44211,8996,44214,44216,44217,8512,44220,7537,44222,44225,44226,4761,44228,44230,44231,44234,44235,8981,44238,8996,44241,44243,44244,44246,44247,44249,44250,44253],{},[3871,44193,44194],{},"Простою мовою — «відсутня коробка vs порожня коробка»:",[3753,44196,8984],{}," — у вас ",[3758,44199,44200],{},"немає коробки",[3753,44202,4209],{},"). Запитати «що в коробці під ключем ",[3753,44205,44206],{},"k","?» → ",[3753,44209,4200],{}," (покажуть порожньо), але покласти ",[3753,44212,44213],{},"m[k]=1",[3871,44215,43976],{},", бо класти нікуди. ",[3753,44218,44219],{},"make(map...)",[3753,44221,44189],{},[3758,44223,44224],{},"дали порожню коробку з полицями"," — класти можна. Для зрізів різниця критична для JSON: ",[3753,44227,43952],{},[3753,44229,4209],{},") → ",[3753,44232,44233],{},"json.Marshal"," дає ",[3753,44236,44237],{},"null",[3753,44239,44240],{},"s:=[]int{}",[3753,44242,12266],{},". Клієнт очікує ",[3753,44245,12266],{}," — віддайте порожній, інакше ",[3753,44248,44237],{}," зламає ",[3753,44251,44252],{},"for ... of"," у JS.",[3900,44255],{},[3903,44257,44259],{"id":44258},"модель-памяті-процесу-стек-купа-та-escape-analysis","Модель пам’яті процесу: Стек, Купа та Escape Analysis",[3908,44261,44262,44263,8157,44269,3769],{},"Для того щоб писати високонавантажені бекенд-сервіси, інженер повинен чітко розуміти, де фізично розташовуються змінні його програми. Адресний простір Go-процесу розділений на дві фундаментальні області пам'яті: ",[3871,44264,44265,44266,5032],{},"Стек (",[3758,44267,44268],{},"Stack",[3871,44270,44271,44272,5032],{},"Купу (",[3758,44273,44274],{},"Heap",[3994,44276,44278],{"alt":44277},"Організація пам'яті процесу: Стек та Купа",[3984,44279,44281],{"className":3999,"code":44280,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 12\n\npackage \"Адресний простір Go-процесу\" #F8FAFC {\n    package \"Стек горутини (Stack Memory)\" #DBEAFE {\n        rectangle \"Фрейм функції main()\\n• Локальні примітиви\\n• Блискавичне виділення (зсув RSP)\\n• Знищується миттєво при виході\" as F1 #BFDBFE\n        rectangle \"Фрейм функції calculate()\\n• Тимчасові змінні\" as F2 #93C5FD\n        F1 -down-> F2\n    }\n\n    package \"Купа (Heap Memory)\" #DCFCE7 {\n        storage \"Об'єкт User (Втік у купу)\" as Obj1 #BBF7D0\n        storage \"Динамічний буфер []byte\" as Obj2 #BBF7D0\n        note bottom of Obj1 #FFFFFF\n          Керується збирачем сміття (GC).\n          Живе доти, доки існує хоча б одне\n          посилання на об'єкт.\n        end note\n    }\n\n    F1 ..> Obj1 : Зберігає покажчик (*User)\n}\n@enduml\n",[3753,44282,44283,44287,44291,44295,44299,44303,44308,44313,44318,44323,44328,44332,44336,44341,44346,44351,44356,44361,44366,44371,44376,44380,44384,44389,44393],{"__ignoreMap":3992},[4005,44284,44285],{"class":4007,"line":4008},[4005,44286,4011],{},[4005,44288,44289],{"class":4007,"line":4014},[4005,44290,4017],{},[4005,44292,44293],{"class":4007,"line":4020},[4005,44294,4023],{},[4005,44296,44297],{"class":4007,"line":4026},[4005,44298,30872],{},[4005,44300,44301],{"class":4007,"line":4032},[4005,44302,4036],{"emptyLinePlaceholder":4035},[4005,44304,44305],{"class":4007,"line":4039},[4005,44306,44307],{},"package \"Адресний простір Go-процесу\" #F8FAFC {\n",[4005,44309,44310],{"class":4007,"line":4045},[4005,44311,44312],{},"    package \"Стек горутини (Stack Memory)\" #DBEAFE {\n",[4005,44314,44315],{"class":4007,"line":4051},[4005,44316,44317],{},"        rectangle \"Фрейм функції main()\\n• Локальні примітиви\\n• Блискавичне виділення (зсув RSP)\\n• Знищується миттєво при виході\" as F1 #BFDBFE\n",[4005,44319,44320],{"class":4007,"line":4057},[4005,44321,44322],{},"        rectangle \"Фрейм функції calculate()\\n• Тимчасові змінні\" as F2 #93C5FD\n",[4005,44324,44325],{"class":4007,"line":4063},[4005,44326,44327],{},"        F1 -down-> F2\n",[4005,44329,44330],{"class":4007,"line":4069},[4005,44331,5127],{},[4005,44333,44334],{"class":4007,"line":4075},[4005,44335,4036],{"emptyLinePlaceholder":4035},[4005,44337,44338],{"class":4007,"line":4081},[4005,44339,44340],{},"    package \"Купа (Heap Memory)\" #DCFCE7 {\n",[4005,44342,44343],{"class":4007,"line":4086},[4005,44344,44345],{},"        storage \"Об'єкт User (Втік у купу)\" as Obj1 #BBF7D0\n",[4005,44347,44348],{"class":4007,"line":4092},[4005,44349,44350],{},"        storage \"Динамічний буфер []byte\" as Obj2 #BBF7D0\n",[4005,44352,44353],{"class":4007,"line":4098},[4005,44354,44355],{},"        note bottom of Obj1 #FFFFFF\n",[4005,44357,44358],{"class":4007,"line":4104},[4005,44359,44360],{},"          Керується збирачем сміття (GC).\n",[4005,44362,44363],{"class":4007,"line":4110},[4005,44364,44365],{},"          Живе доти, доки існує хоча б одне\n",[4005,44367,44368],{"class":4007,"line":4937},[4005,44369,44370],{},"          посилання на об'єкт.\n",[4005,44372,44373],{"class":4007,"line":4942},[4005,44374,44375],{},"        end note\n",[4005,44377,44378],{"class":4007,"line":4947},[4005,44379,5127],{},[4005,44381,44382],{"class":4007,"line":4953},[4005,44383,4036],{"emptyLinePlaceholder":4035},[4005,44385,44386],{"class":4007,"line":4960},[4005,44387,44388],{},"    F1 ..> Obj1 : Зберігає покажчик (*User)\n",[4005,44390,44391],{"class":4007,"line":4973},[4005,44392,4078],{},[4005,44394,44395],{"class":4007,"line":4985},[4005,44396,4113],{},[3976,44398,44400],{"id":44399},"порівняльна-характеристика-стека-та-купи","Порівняльна характеристика Стека та Купи",[5991,44402,44403,44421],{},[5994,44404,44405],{},[5997,44406,44407,44410,44415],{},[6000,44408,44409],{"align":8837},"Критерій",[6000,44411,44265,44412,5032],{"align":8837},[3758,44413,44414],{},"Stack Memory",[6000,44416,44417,44418,5032],{"align":8837},"Купа (",[3758,44419,44420],{},"Heap Memory",[6010,44422,44423,44435,44457,44476],{},[5997,44424,44425,44429,44432],{},[6015,44426,44427],{"align":8837},[3871,44428,11814],{},[6015,44430,44431],{"align":8837},"Зберігання локальних змінних та стек-фреймів функцій",[6015,44433,44434],{"align":8837},"Зберігання динамічних об'єктів та спільних даних",[5997,44436,44437,44442,44451],{},[6015,44438,44439],{"align":8837},[3871,44440,44441],{},"Швидкодія",[6015,44443,44444,44447,44448,5032],{"align":8837},[3871,44445,44446],{},"Надзвичайно висока"," (виділення — це просто зміна регістра CPU ",[3753,44449,44450],{},"RSP",[6015,44452,44453,44456],{"align":8837},[3871,44454,44455],{},"Повільніша"," (пошук вільного блоку пам'яті через алокатор)",[5997,44458,44459,44464,44470],{},[6015,44460,44461],{"align":8837},[3871,44462,44463],{},"Очищення",[6015,44465,44466,44469],{"align":8837},[3871,44467,44468],{},"Миттєве та безкоштовне"," (автоматично при завершенні функції)",[6015,44471,44472,44475],{"align":8837},[3871,44473,44474],{},"Потребує роботи GC"," (збирач сміття сканує пам'ять і навантажує CPU)",[5997,44477,44478,44482,44489],{},[6015,44479,44480],{"align":8837},[3871,44481,9722],{},[6015,44483,44484,44485,44488],{"align":8837},"Починається з ",[3871,44486,44487],{},"2 КБ"," на горутину і динамічно росте при потребі",[6015,44490,44491],{"align":8837},"Обмежена лише загальним обсягом оперативної пам'яті сервера",[3900,44493],{},[3976,44495,44497],{"id":44496},"механізм-аналізу-втечі-escape-analysis","Механізм аналізу втечі (Escape Analysis)",[3908,44499,44500,44501,44504],{},"У мовах C\u002FC++ повернення покажчика на локальну змінну функції є фатальною помилкою (",[3758,44502,44503],{},"Dangling Pointer Bug","): стек-фрейм функції знищується, і покажчик починає вказувати на зруйноване «сміття».",[3908,44506,44507],{},[3871,44508,44509],{},"У Go повертати покажчик на локальну змінну абсолютно безпечно!",[3908,44511,44512,44515,44516,44519,44520,44523],{},[3871,44513,44514],{},"Проста аналогія — «готельний номер vs квартира»:"," стек — це готельний номер: виселяєшся (функція завершилась) — номер прибирають. Якщо ти дав другу адресу свого номера (",[3753,44517,44518],{},"return &x","), готель змушений ",[3871,44521,44522],{},"переселити тебе в довгоживучу квартиру (купа)",", щоб друг не прийшов у порожній номер (dangling pointer).",[3908,44525,44526,44527,5831],{},"Компілятор Go під час збірки виконує спеціальний статичний аналіз — ",[3871,44528,44529],{},"Escape Analysis (Аналіз втечі)",[4781,44531,44532,44554,44560],{},[3749,44533,44534,44535,44537,44538,44541,44542,44544,44545,44547,44548,3769],{},"Якщо компілятор бачить, що посилання на локальну змінну виходить за межі своєї функції (наприклад, повертається назовні через ",[3753,44536,44518],{}," або передається в ",[3753,44539,44540],{},"fmt.Println(x)"," де ",[3753,44543,4621],{}," потрапляє в ",[3753,44546,8701],{},"), змінна ",[3871,44549,44550,44551,5032],{},"«втікає в купу» (",[3758,44552,44553],{},"escapes to heap",[3749,44555,44556,44557,3769],{},"Компілятор автоматично замінює виділення пам'яті на виклик системного алокатора купи ",[3753,44558,44559],{},"runtime.newobject",[3749,44561,44562,44563,44565],{},"Якщо ж змінна використовується виключно всередині функції, вона виділяється на швидкому локальному стеку (зсув регістра ",[3753,44564,44450],{}," — 1 інструкція CPU).",[3984,44567,44569],{"className":4162,"code":44568,"language":4164,"meta":3992,"style":3992},"package main\n\ntype ServerConfig struct {\n    Port    int\n    Host    string\n    IsDebug bool\n}\n\n\u002F\u002F Функція створює конфігурацію та повертає покажчик на неї\nfunc NewServerConfig(port int) *ServerConfig {\n    \u002F\u002F Змінна cfg оголошена локально, але посилання на неї повертається назовні:\n    cfg := ServerConfig{\n        Port:    port,\n        Host:    \"0.0.0.0\",\n        IsDebug: true,\n    }\n    return &cfg \u002F\u002F Компілятор автоматично перенесе cfg у купу!\n}\n\nfunc main() {\n    configPtr := NewServerConfig(8080)\n    _ = configPtr\n}\n",[3753,44570,44571,44577,44581,44592,44599,44605,44613,44617,44621,44626,44647,44652,44663,44675,44687,44698,44702,44714,44718,44722,44730,44746,44755],{"__ignoreMap":3992},[4005,44572,44573,44575],{"class":4007,"line":4008},[4005,44574,5739],{"class":4171},[4005,44576,5742],{"class":4178},[4005,44578,44579],{"class":4007,"line":4014},[4005,44580,4036],{"emptyLinePlaceholder":4035},[4005,44582,44583,44585,44588,44590],{"class":4007,"line":4020},[4005,44584,4809],{"class":4171},[4005,44586,44587],{"class":4178}," ServerConfig",[4005,44589,10957],{"class":4171},[4005,44591,5073],{"class":4182},[4005,44593,44594,44597],{"class":4007,"line":4026},[4005,44595,44596],{"class":4174},"    Port",[4005,44598,4918],{"class":4178},[4005,44600,44601,44603],{"class":4007,"line":4032},[4005,44602,33471],{"class":4174},[4005,44604,7527],{"class":4178},[4005,44606,44607,44610],{"class":4007,"line":4039},[4005,44608,44609],{"class":4174},"    IsDebug",[4005,44611,44612],{"class":4178}," bool\n",[4005,44614,44615],{"class":4007,"line":4045},[4005,44616,4078],{"class":4182},[4005,44618,44619],{"class":4007,"line":4051},[4005,44620,4036],{"emptyLinePlaceholder":4035},[4005,44622,44623],{"class":4007,"line":4057},[4005,44624,44625],{"class":4190},"\u002F\u002F Функція створює конфігурацію та повертає покажчик на неї\n",[4005,44627,44628,44630,44633,44635,44637,44639,44642,44645],{"class":4007,"line":4063},[4005,44629,4299],{"class":4171},[4005,44631,44632],{"class":4302}," NewServerConfig",[4005,44634,4611],{"class":4182},[4005,44636,4413],{"class":4174},[4005,44638,4224],{"class":4178},[4005,44640,44641],{"class":4182},") *",[4005,44643,44644],{"class":4178},"ServerConfig",[4005,44646,5073],{"class":4182},[4005,44648,44649],{"class":4007,"line":4069},[4005,44650,44651],{"class":4190},"    \u002F\u002F Змінна cfg оголошена локально, але посилання на неї повертається назовні:\n",[4005,44653,44654,44657,44659,44661],{"class":4007,"line":4075},[4005,44655,44656],{"class":4174},"    cfg",[4005,44658,4314],{"class":4182},[4005,44660,44644],{"class":4178},[4005,44662,29461],{"class":4182},[4005,44664,44665,44668,44671,44673],{"class":4007,"line":4081},[4005,44666,44667],{"class":4174},"        Port",[4005,44669,44670],{"class":4182},":    ",[4005,44672,4413],{"class":4174},[4005,44674,29475],{"class":4182},[4005,44676,44677,44680,44682,44685],{"class":4007,"line":4086},[4005,44678,44679],{"class":4174},"        Host",[4005,44681,44670],{"class":4182},[4005,44683,44684],{"class":4330},"\"0.0.0.0\"",[4005,44686,29475],{"class":4182},[4005,44688,44689,44692,44694,44696],{"class":4007,"line":4092},[4005,44690,44691],{"class":4174},"        IsDebug",[4005,44693,11172],{"class":4182},[4005,44695,4689],{"class":4171},[4005,44697,29475],{"class":4182},[4005,44699,44700],{"class":4007,"line":4098},[4005,44701,5127],{"class":4182},[4005,44703,44704,44706,44709,44711],{"class":4007,"line":4104},[4005,44705,5260],{"class":4836},[4005,44707,44708],{"class":4182}," &",[4005,44710,33517],{"class":4174},[4005,44712,44713],{"class":4190}," \u002F\u002F Компілятор автоматично перенесе cfg у купу!\n",[4005,44715,44716],{"class":4007,"line":4110},[4005,44717,4078],{"class":4182},[4005,44719,44720],{"class":4007,"line":4937},[4005,44721,4036],{"emptyLinePlaceholder":4035},[4005,44723,44724,44726,44728],{"class":4007,"line":4942},[4005,44725,4299],{"class":4171},[4005,44727,5764],{"class":4302},[4005,44729,4306],{"class":4182},[4005,44731,44732,44735,44737,44740,44742,44744],{"class":4007,"line":4947},[4005,44733,44734],{"class":4174},"    configPtr",[4005,44736,4314],{"class":4182},[4005,44738,44739],{"class":4302},"NewServerConfig",[4005,44741,4611],{"class":4182},[4005,44743,9563],{"class":4186},[4005,44745,4482],{"class":4182},[4005,44747,44748,44750,44752],{"class":4007,"line":4953},[4005,44749,7689],{"class":4174},[4005,44751,4183],{"class":4182},[4005,44753,44754],{"class":4174},"configPtr\n",[4005,44756,44757],{"class":4007,"line":4960},[4005,44758,4078],{"class":4182},[3900,44760],{},[3976,44762,44764,44765,5032],{"id":44763},"дослідження-втечі-для-допитливих-gcflags-m","Дослідження втечі — для допитливих (",[3753,44766,44767],{},"-gcflags=\"-m\"",[3908,44769,44770,44771,44773],{},"Поки що достатньо знати: повернув ",[3753,44772,42378],{}," назовні — змінна в купі, ні — на стеці. Подробиці нижче — для налагодження алокацій.",[3908,44775,44776,44777,5831],{},"Ви можете на власні очі побачити всі рішення компілятора щодо розміщення змінних, скомпілювавши код із прапорцем ",[3753,44778,44767],{},[44780,44781,44783,44797,44806],"terminal-preview",{":cursor":4689,"title":44782},"Аналіз виділення пам'яті компілятора Go",[44784,44785,44787,3880,44792],"div",{"className":44786},[4007],[4005,44788,44791],{"className":44789},[44790],"opacity-40","$",[3871,44793,44796],{"className":44794},[44795],"font-bold","go build -gcflags=\"-m\" main.go",[44784,44798,44800,44801],{"className":44799},[4007],".\u002Fmain.go:17:9: ",[4005,44802,44805],{"className":44803},[44804,44795],"text-yellow-400","&cfg escapes to heap",[44784,44807,44809,44810],{"className":44808},[4007],".\u002Fmain.go:11:2: ",[4005,44811,44814],{"className":44812},[44813,44795],"text-green-400","moved to heap: cfg",[4748,44816,44817,44822],{},[3908,44818,44819],{},[3871,44820,44821],{},"Типові причини втечі змінних у купу:",[4781,44823,44824,44832,44848,44857],{},[3749,44825,44826,4761,44829,3826],{},[3871,44827,44828],{},"Повернення адреси змінної назовні",[3753,44830,44831],{},"return &local",[3749,44833,44834,44841,44842,44844,44845,44847],{},[3871,44835,44836,44837,8512,44839,5831],{},"Передача у функції з параметром ",[3753,44838,8701],{},[3753,44840,8698],{}," наприклад, виклик ",[3753,44843,44540],{}," завжди змушує змінну ",[3753,44846,4621],{}," втекти в купу, оскільки інтерфейс вимагає пакування значення у купу.",[3749,44849,44850,44853,44854,3826],{},[3871,44851,44852],{},"Змінні динамічного або невідомого розміру:"," зрізи, довжина яких визначається під час виконання програми (",[3753,44855,44856],{},"make([]byte, dynamicSize)",[3749,44858,44859,44862],{},[3871,44860,44861],{},"Занадто великі об'єкти:"," якщо структура або масив перевищує ліміт стека (понад 64 КБ), Go автоматично виділяє її в купі.",[3900,44864],{},[3903,44866,44868],{"id":44867},"власні-типи-структури-методи-та-композиція","Власні типи, Структури, Методи та Композиція",[3976,44870,44872],{"id":44871},"вступ-філософія-go-щодо-типів-і-обєктів","Вступ: філософія Go щодо типів і об'єктів",[3908,44874,44875],{},"Мова Go свідомо відмовилася від традиційного об'єктно-орієнтованого програмування (ООП) у класичному розумінні. У Go немає:",[3746,44877,44878,44884,44895,44898,44904],{},[3749,44879,44880,44881,5032],{},"Класів (",[3753,44882,44883],{},"class",[3749,44885,44886,44887,3836,44889,3836,44892,5032],{},"Модифікаторів доступу (",[3753,44888,12755],{},[3753,44890,44891],{},"private",[3753,44893,44894],{},"protected",[3749,44896,44897],{},"Конструкторів і деструкторів",[3749,44899,44900,44901],{},"Наслідування через ",[3753,44902,44903],{},"extends",[3749,44905,44906],{},"Віртуальних методів і таблиць методів (vtables)",[3908,44908,44909],{},[3871,44910,44911],{},"Замість цього Go пропонує:",[4781,44913,44914,44921,44926,44932],{},[3749,44915,44916,44920],{},[3871,44917,8954,44918,5032],{},[3753,44919,8957],{}," — для групування даних",[3749,44922,44923,44925],{},[3871,44924,48],{}," — функції, прив'язані до типів",[3749,44927,44928,44931],{},[3871,44929,44930],{},"Інтерфейси"," — для поліморфізму (детальніше в наступних лекціях)",[3749,44933,44934,44937],{},[3871,44935,44936],{},"Композицію"," — замість наслідування",[3908,44939,44940,44941,44944],{},"Ця модель ",[3871,44942,44943],{},"простіша, прозоріша і передбачуваніша",", ніж класична ієрархія класів.",[3900,44946],{},[3976,44948,44950],{"id":44949},"частина-1-створення-власних-типів","Частина 1: Створення власних типів",[9014,44952,44954],{"id":44953},"навіщо-потрібні-власні-типи","Навіщо потрібні власні типи?",[3908,44956,44957],{},"У багатьох мовах (Java, C#, TypeScript) для бізнес-логіки використовуються прості типи:",[3984,44959,44963],{"className":44960,"code":44961,"language":44962,"meta":3992,"style":3992},"language-typescript shiki shiki-themes light-plus dark-plus dark-plus","\u002F\u002F TypeScript - ризиковано:\nfunction sendEmail(userId: number, productId: number) { ... }\n\n\u002F\u002F Можна випадково переплутати:\nsendEmail(productId, userId);  \u002F\u002F Компілятор не побачить помилку!\n","typescript",[3753,44964,44965,44970,44999,45003,45008],{"__ignoreMap":3992},[4005,44966,44967],{"class":4007,"line":4008},[4005,44968,44969],{"class":4190},"\u002F\u002F TypeScript - ризиковано:\n",[4005,44971,44972,44975,44978,44980,44983,44985,44987,44989,44992,44994,44996],{"class":4007,"line":4014},[4005,44973,44974],{"class":4171},"function",[4005,44976,44977],{"class":4302}," sendEmail",[4005,44979,4611],{"class":4182},[4005,44981,44982],{"class":4174},"userId",[4005,44984,11172],{"class":4182},[4005,44986,18044],{"class":4178},[4005,44988,3836],{"class":4182},[4005,44990,44991],{"class":4174},"productId",[4005,44993,11172],{"class":4182},[4005,44995,18044],{"class":4178},[4005,44997,44998],{"class":4182},") { ... }\n",[4005,45000,45001],{"class":4007,"line":4020},[4005,45002,4036],{"emptyLinePlaceholder":4035},[4005,45004,45005],{"class":4007,"line":4026},[4005,45006,45007],{"class":4190},"\u002F\u002F Можна випадково переплутати:\n",[4005,45009,45010,45013,45015,45017,45019,45021,45024],{"class":4007,"line":4032},[4005,45011,45012],{"class":4302},"sendEmail",[4005,45014,4611],{"class":4182},[4005,45016,44991],{"class":4174},[4005,45018,3836],{"class":4182},[4005,45020,44982],{"class":4174},[4005,45022,45023],{"class":4182},");  ",[4005,45025,45026],{"class":4190},"\u002F\u002F Компілятор не побачить помилку!\n",[3908,45028,45029,45032],{},[3871,45030,45031],{},"У Go ми створюємо окремі типи"," для кожної семантичної сутності:",[3984,45034,45036],{"className":4162,"code":45035,"language":4164,"meta":3992,"style":3992},"type UserID int64\ntype ProductID int64\n\nfunc sendEmail(userId UserID, productId ProductID) { ... }\n\n\u002F\u002F Тепер помилка неможлива:\nsendEmail(productId, userId)  \u002F\u002F ❌ Помилка компіляції!\n",[3753,45037,45038,45047,45056,45060,45080,45084,45089],{"__ignoreMap":3992},[4005,45039,45040,45042,45044],{"class":4007,"line":4008},[4005,45041,4809],{"class":4171},[4005,45043,7084],{"class":4178},[4005,45045,45046],{"class":4178}," int64\n",[4005,45048,45049,45051,45054],{"class":4007,"line":4014},[4005,45050,4809],{"class":4171},[4005,45052,45053],{"class":4178}," ProductID",[4005,45055,45046],{"class":4178},[4005,45057,45058],{"class":4007,"line":4020},[4005,45059,4036],{"emptyLinePlaceholder":4035},[4005,45061,45062,45064,45066,45068,45070,45072,45074,45076,45078],{"class":4007,"line":4026},[4005,45063,4299],{"class":4171},[4005,45065,44977],{"class":4302},[4005,45067,4611],{"class":4182},[4005,45069,44982],{"class":4174},[4005,45071,7084],{"class":4178},[4005,45073,3836],{"class":4182},[4005,45075,44991],{"class":4174},[4005,45077,45053],{"class":4178},[4005,45079,44998],{"class":4182},[4005,45081,45082],{"class":4007,"line":4032},[4005,45083,4036],{"emptyLinePlaceholder":4035},[4005,45085,45086],{"class":4007,"line":4039},[4005,45087,45088],{"class":4190},"\u002F\u002F Тепер помилка неможлива:\n",[4005,45090,45091,45093,45095,45097,45099,45101,45103],{"class":4007,"line":4045},[4005,45092,45012],{"class":4302},[4005,45094,4611],{"class":4182},[4005,45096,44991],{"class":4174},[4005,45098,3836],{"class":4182},[4005,45100,44982],{"class":4174},[4005,45102,5196],{"class":4182},[4005,45104,45105],{"class":4190},"\u002F\u002F ❌ Помилка компіляції!\n",[9014,45107,45109],{"id":45108},"два-види-типів-defined-types-vs-type-aliases","Два види типів: Defined Types vs Type Aliases",[3908,45111,45112,45113,5831],{},"Go підтримує два способи створення типів через ключове слово ",[3753,45114,4809],{},[3908,45116,45117],{},[3871,45118,45119,45120],{},"1. Defined Type (Новий тип) — без ",[3753,45121,45122],{},"=",[3984,45124,45126],{"className":4162,"code":45125,"language":4164,"meta":3992,"style":3992},"type UserID int64\n",[3753,45127,45128],{"__ignoreMap":3992},[4005,45129,45130,45132,45134],{"class":4007,"line":4008},[4005,45131,4809],{"class":4171},[4005,45133,7084],{"class":4178},[4005,45135,45046],{"class":4178},[3908,45137,45138],{},[3871,45139,45140],{},"Що це означає:",[3746,45142,45143,45152,45162,45168],{},[3749,45144,45145,45146,45149,45150],{},"Створюється ",[3871,45147,45148],{},"абсолютно новий тип",", незалежний від ",[3753,45151,4154],{},[3749,45153,45154,6203,45156,7537,45158,45161],{},[3753,45155,7035],{},[3753,45157,4154],{},[3871,45159,45160],{},"різні типи",", їх не можна змішувати",[3749,45163,45164,45165,45167],{},"До ",[3753,45166,7035],{}," можна додавати методи",[3749,45169,45170,45171],{},"Потрібне явне перетворення: ",[3753,45172,45173],{},"int64(userId)",[3908,45175,45176],{},[3871,45177,20517],{},[3984,45179,45181],{"className":4162,"code":45180,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype UserID int64\ntype ProductID int64\n\nfunc getUserInfo(id UserID) {\n    fmt.Printf(\"Отримання інфо про користувача %d\\n\", id)\n}\n\nfunc main() {\n    var uid UserID = 101\n    var pid ProductID = 202\n    var num int64 = 303\n    \n    getUserInfo(uid)          \u002F\u002F ✅ OK\n    \u002F\u002F getUserInfo(pid)       \u002F\u002F ❌ Помилка: cannot use pid (type ProductID) as type UserID\n    \u002F\u002F getUserInfo(num)       \u002F\u002F ❌ Помилка: cannot use num (type int64) as type UserID\n    getUserInfo(UserID(num))  \u002F\u002F ✅ OK: явне перетворення\n}\n",[3753,45182,45183,45189,45193,45199,45203,45211,45219,45223,45238,45263,45267,45271,45279,45293,45307,45321,45325,45341,45349,45357,45374],{"__ignoreMap":3992},[4005,45184,45185,45187],{"class":4007,"line":4008},[4005,45186,5739],{"class":4171},[4005,45188,5742],{"class":4178},[4005,45190,45191],{"class":4007,"line":4014},[4005,45192,4036],{"emptyLinePlaceholder":4035},[4005,45194,45195,45197],{"class":4007,"line":4020},[4005,45196,3917],{"class":4836},[4005,45198,7656],{"class":4330},[4005,45200,45201],{"class":4007,"line":4026},[4005,45202,4036],{"emptyLinePlaceholder":4035},[4005,45204,45205,45207,45209],{"class":4007,"line":4032},[4005,45206,4809],{"class":4171},[4005,45208,7084],{"class":4178},[4005,45210,45046],{"class":4178},[4005,45212,45213,45215,45217],{"class":4007,"line":4039},[4005,45214,4809],{"class":4171},[4005,45216,45053],{"class":4178},[4005,45218,45046],{"class":4178},[4005,45220,45221],{"class":4007,"line":4045},[4005,45222,4036],{"emptyLinePlaceholder":4035},[4005,45224,45225,45227,45230,45232,45234,45236],{"class":4007,"line":4051},[4005,45226,4299],{"class":4171},[4005,45228,45229],{"class":4302}," getUserInfo",[4005,45231,4611],{"class":4182},[4005,45233,7180],{"class":4174},[4005,45235,7084],{"class":4178},[4005,45237,12789],{"class":4182},[4005,45239,45240,45242,45244,45246,45248,45251,45253,45255,45257,45259,45261],{"class":4007,"line":4057},[4005,45241,5370],{"class":4174},[4005,45243,3769],{"class":4182},[4005,45245,7945],{"class":4302},[4005,45247,4611],{"class":4182},[4005,45249,45250],{"class":4330},"\"Отримання інфо про користувача ",[4005,45252,7959],{"class":4174},[4005,45254,7965],{"class":7964},[4005,45256,7968],{"class":4330},[4005,45258,3836],{"class":4182},[4005,45260,7180],{"class":4174},[4005,45262,4482],{"class":4182},[4005,45264,45265],{"class":4007,"line":4063},[4005,45266,4078],{"class":4182},[4005,45268,45269],{"class":4007,"line":4069},[4005,45270,4036],{"emptyLinePlaceholder":4035},[4005,45272,45273,45275,45277],{"class":4007,"line":4075},[4005,45274,4299],{"class":4171},[4005,45276,5764],{"class":4302},[4005,45278,4306],{"class":4182},[4005,45280,45281,45283,45286,45288,45290],{"class":4007,"line":4081},[4005,45282,9412],{"class":4171},[4005,45284,45285],{"class":4174}," uid",[4005,45287,7084],{"class":4178},[4005,45289,4183],{"class":4182},[4005,45291,45292],{"class":4186},"101\n",[4005,45294,45295,45297,45300,45302,45304],{"class":4007,"line":4086},[4005,45296,9412],{"class":4171},[4005,45298,45299],{"class":4174}," pid",[4005,45301,45053],{"class":4178},[4005,45303,4183],{"class":4182},[4005,45305,45306],{"class":4186},"202\n",[4005,45308,45309,45311,45314,45316,45318],{"class":4007,"line":4092},[4005,45310,9412],{"class":4171},[4005,45312,45313],{"class":4174}," num",[4005,45315,4179],{"class":4178},[4005,45317,4183],{"class":4182},[4005,45319,45320],{"class":4186},"303\n",[4005,45322,45323],{"class":4007,"line":4098},[4005,45324,5214],{"class":4182},[4005,45326,45327,45330,45332,45335,45338],{"class":4007,"line":4104},[4005,45328,45329],{"class":4302},"    getUserInfo",[4005,45331,4611],{"class":4182},[4005,45333,45334],{"class":4174},"uid",[4005,45336,45337],{"class":4182},")          ",[4005,45339,45340],{"class":4190},"\u002F\u002F ✅ OK\n",[4005,45342,45343,45346],{"class":4007,"line":4110},[4005,45344,45345],{"class":4190},"    \u002F\u002F getUserInfo(pid)",[4005,45347,45348],{"class":4190},"       \u002F\u002F ❌ Помилка: cannot use pid (type ProductID) as type UserID\n",[4005,45350,45351,45354],{"class":4007,"line":4937},[4005,45352,45353],{"class":4190},"    \u002F\u002F getUserInfo(num)",[4005,45355,45356],{"class":4190},"       \u002F\u002F ❌ Помилка: cannot use num (type int64) as type UserID\n",[4005,45358,45359,45361,45363,45365,45367,45369,45371],{"class":4007,"line":4942},[4005,45360,45329],{"class":4302},[4005,45362,4611],{"class":4182},[4005,45364,7035],{"class":4302},[4005,45366,4611],{"class":4182},[4005,45368,21103],{"class":4174},[4005,45370,11472],{"class":4182},[4005,45372,45373],{"class":4190},"\u002F\u002F ✅ OK: явне перетворення\n",[4005,45375,45376],{"class":4007,"line":4947},[4005,45377,4078],{"class":4182},[3908,45379,45380],{},[3871,45381,45382,45383],{},"2. Type Alias (Псевдонім) — з ",[3753,45384,45122],{},[3984,45386,45388],{"className":4162,"code":45387,"language":4164,"meta":3992,"style":3992},"type Byte = uint8\n",[3753,45389,45390],{"__ignoreMap":3992},[4005,45391,45392,45394,45397,45399],{"class":4007,"line":4008},[4005,45393,4809],{"class":4171},[4005,45395,45396],{"class":4178}," Byte",[4005,45398,4183],{"class":4182},[4005,45400,45401],{"class":4178},"uint8\n",[3908,45403,45404],{},[3871,45405,45140],{},[3746,45407,45408,45414,45425,45428],{},[3749,45409,45145,45410,45413],{},[3871,45411,45412],{},"синонім"," (альтернативне ім'я) для існуючого типу",[3749,45415,45416,6203,45419,7537,45421,45424],{},[3753,45417,45418],{},"Byte",[3753,45420,7007],{},[3871,45422,45423],{},"той самий тип",", повністю взаємозамінні",[3749,45426,45427],{},"Методи додавати не можна (належать оригінальному типу)",[3749,45429,45430],{},"Не потрібне перетворення",[3908,45432,45433],{},[3871,45434,20517],{},[3984,45436,45438],{"className":4162,"code":45437,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Вбудовані аліаси в Go:\n\u002F\u002F type byte = uint8\n\u002F\u002F type rune = int32\n\u002F\u002F type any = interface{}\n\n\u002F\u002F Власний аліас:\ntype MyByte = uint8\n\nfunc main() {\n    var b1 byte = 65\n    var b2 MyByte = 65\n    var u uint8 = 65\n    \n    \u002F\u002F Всі три типи взаємозамінні:\n    b1 = b2  \u002F\u002F ✅ OK\n    b2 = u   \u002F\u002F ✅ OK\n    u = b1   \u002F\u002F ✅ OK\n    \n    fmt.Printf(\"%c %c %c\\n\", b1, b2, u)  \u002F\u002F A A A\n}\n",[3753,45439,45440,45446,45450,45456,45460,45465,45470,45475,45480,45484,45489,45500,45504,45512,45526,45539,45552,45556,45561,45573,45586,45598,45602,45642],{"__ignoreMap":3992},[4005,45441,45442,45444],{"class":4007,"line":4008},[4005,45443,5739],{"class":4171},[4005,45445,5742],{"class":4178},[4005,45447,45448],{"class":4007,"line":4014},[4005,45449,4036],{"emptyLinePlaceholder":4035},[4005,45451,45452,45454],{"class":4007,"line":4020},[4005,45453,3917],{"class":4836},[4005,45455,7656],{"class":4330},[4005,45457,45458],{"class":4007,"line":4026},[4005,45459,4036],{"emptyLinePlaceholder":4035},[4005,45461,45462],{"class":4007,"line":4032},[4005,45463,45464],{"class":4190},"\u002F\u002F Вбудовані аліаси в Go:\n",[4005,45466,45467],{"class":4007,"line":4039},[4005,45468,45469],{"class":4190},"\u002F\u002F type byte = uint8\n",[4005,45471,45472],{"class":4007,"line":4045},[4005,45473,45474],{"class":4190},"\u002F\u002F type rune = int32\n",[4005,45476,45477],{"class":4007,"line":4051},[4005,45478,45479],{"class":4190},"\u002F\u002F type any = interface{}\n",[4005,45481,45482],{"class":4007,"line":4057},[4005,45483,4036],{"emptyLinePlaceholder":4035},[4005,45485,45486],{"class":4007,"line":4063},[4005,45487,45488],{"class":4190},"\u002F\u002F Власний аліас:\n",[4005,45490,45491,45493,45496,45498],{"class":4007,"line":4069},[4005,45492,4809],{"class":4171},[4005,45494,45495],{"class":4178}," MyByte",[4005,45497,4183],{"class":4182},[4005,45499,45401],{"class":4178},[4005,45501,45502],{"class":4007,"line":4075},[4005,45503,4036],{"emptyLinePlaceholder":4035},[4005,45505,45506,45508,45510],{"class":4007,"line":4081},[4005,45507,4299],{"class":4171},[4005,45509,5764],{"class":4302},[4005,45511,4306],{"class":4182},[4005,45513,45514,45516,45519,45521,45523],{"class":4007,"line":4086},[4005,45515,9412],{"class":4171},[4005,45517,45518],{"class":4174}," b1",[4005,45520,9540],{"class":4178},[4005,45522,4183],{"class":4182},[4005,45524,45525],{"class":4186},"65\n",[4005,45527,45528,45530,45533,45535,45537],{"class":4007,"line":4092},[4005,45529,9412],{"class":4171},[4005,45531,45532],{"class":4174}," b2",[4005,45534,45495],{"class":4178},[4005,45536,4183],{"class":4182},[4005,45538,45525],{"class":4186},[4005,45540,45541,45543,45546,45548,45550],{"class":4007,"line":4098},[4005,45542,9412],{"class":4171},[4005,45544,45545],{"class":4174}," u",[4005,45547,7122],{"class":4178},[4005,45549,4183],{"class":4182},[4005,45551,45525],{"class":4186},[4005,45553,45554],{"class":4007,"line":4104},[4005,45555,5214],{"class":4182},[4005,45557,45558],{"class":4007,"line":4110},[4005,45559,45560],{"class":4190},"    \u002F\u002F Всі три типи взаємозамінні:\n",[4005,45562,45563,45566,45568,45571],{"class":4007,"line":4937},[4005,45564,45565],{"class":4174},"    b1",[4005,45567,4183],{"class":4182},[4005,45569,45570],{"class":4174},"b2",[4005,45572,6112],{"class":4190},[4005,45574,45575,45578,45580,45583],{"class":4007,"line":4942},[4005,45576,45577],{"class":4174},"    b2",[4005,45579,4183],{"class":4182},[4005,45581,45582],{"class":4174},"u",[4005,45584,45585],{"class":4190},"   \u002F\u002F ✅ OK\n",[4005,45587,45588,45591,45593,45596],{"class":4007,"line":4947},[4005,45589,45590],{"class":4174},"    u",[4005,45592,4183],{"class":4182},[4005,45594,45595],{"class":4174},"b1",[4005,45597,45585],{"class":4190},[4005,45599,45600],{"class":4007,"line":4953},[4005,45601,5214],{"class":4182},[4005,45603,45604,45606,45608,45610,45612,45614,45616,45619,45621,45623,45625,45627,45629,45631,45633,45635,45637,45639],{"class":4007,"line":4960},[4005,45605,5370],{"class":4174},[4005,45607,3769],{"class":4182},[4005,45609,7945],{"class":4302},[4005,45611,4611],{"class":4182},[4005,45613,7968],{"class":4330},[4005,45615,11607],{"class":4174},[4005,45617,45618],{"class":4174}," %c",[4005,45620,45618],{"class":4174},[4005,45622,7965],{"class":7964},[4005,45624,7968],{"class":4330},[4005,45626,3836],{"class":4182},[4005,45628,45595],{"class":4174},[4005,45630,3836],{"class":4182},[4005,45632,45570],{"class":4174},[4005,45634,3836],{"class":4182},[4005,45636,45582],{"class":4174},[4005,45638,5196],{"class":4182},[4005,45640,45641],{"class":4190},"\u002F\u002F A A A\n",[4005,45643,45644],{"class":4007,"line":4973},[4005,45645,4078],{"class":4182},[3908,45647,45648],{},[3871,45649,45650],{},"Коли використовувати кожен?",[5991,45652,45653,45665],{},[5994,45654,45655],{},[5997,45656,45657,45659,45662],{},[6000,45658,9923],{},[6000,45660,45661],{},"Defined Type",[6000,45663,45664],{},"Type Alias",[6010,45666,45667,45676,45685,45696],{},[5997,45668,45669,45672,45674],{},[6015,45670,45671],{},"Безпека типів (UserID ≠ ProductID)",[6015,45673,10877],{},[6015,45675,41705],{},[5997,45677,45678,45681,45683],{},[6015,45679,45680],{},"Додавання методів",[6015,45682,10877],{},[6015,45684,41705],{},[5997,45686,45687,45690,45693],{},[6015,45688,45689],{},"Спрощення довгих назв",[6015,45691,45692],{},"⚠️ Створює новий тип",[6015,45694,45695],{},"✅ Ідеально",[5997,45697,45698,45701,45703],{},[6015,45699,45700],{},"Зворотна сумісність",[6015,45702,41705],{},[6015,45704,10877],{},[3908,45706,45707],{},[3871,45708,45709],{},"Приклад додавання методів до власного типу:",[3984,45711,45713],{"className":4162,"code":45712,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Celsius float64\ntype Fahrenheit float64\n\n\u002F\u002F Додаємо методи до Celsius:\nfunc (c Celsius) ToFahrenheit() Fahrenheit {\n    return Fahrenheit(c*9\u002F5 + 32)\n}\n\nfunc (c Celsius) String() string {\n    return fmt.Sprintf(\"%.1f°C\", c)\n}\n\n\u002F\u002F Додаємо методи до Fahrenheit:\nfunc (f Fahrenheit) ToCelsius() Celsius {\n    return Celsius((f - 32) * 5 \u002F 9)\n}\n\nfunc (f Fahrenheit) String() string {\n    return fmt.Sprintf(\"%.1f°F\", f)\n}\n\nfunc main() {\n    temp := Celsius(25)\n    fmt.Println(\"Температура:\", temp)                    \u002F\u002F 25.0°C\n    fmt.Println(\"У Фаренгейтах:\", temp.ToFahrenheit())   \u002F\u002F 77.0°F\n    \n    hot := Fahrenheit(100)\n    fmt.Println(\"У Цельсіях:\", hot.ToCelsius())          \u002F\u002F 37.8°C\n}\n",[3753,45714,45715,45721,45725,45731,45735,45745,45754,45758,45763,45787,45813,45817,45821,45841,45866,45870,45874,45879,45901,45927,45931,45935,45955,45980,45984,45988,45996,46011,46035,46061,46065,46080,46108],{"__ignoreMap":3992},[4005,45716,45717,45719],{"class":4007,"line":4008},[4005,45718,5739],{"class":4171},[4005,45720,5742],{"class":4178},[4005,45722,45723],{"class":4007,"line":4014},[4005,45724,4036],{"emptyLinePlaceholder":4035},[4005,45726,45727,45729],{"class":4007,"line":4020},[4005,45728,3917],{"class":4836},[4005,45730,7656],{"class":4330},[4005,45732,45733],{"class":4007,"line":4026},[4005,45734,4036],{"emptyLinePlaceholder":4035},[4005,45736,45737,45739,45742],{"class":4007,"line":4032},[4005,45738,4809],{"class":4171},[4005,45740,45741],{"class":4178}," Celsius",[4005,45743,45744],{"class":4178}," float64\n",[4005,45746,45747,45749,45752],{"class":4007,"line":4039},[4005,45748,4809],{"class":4171},[4005,45750,45751],{"class":4178}," Fahrenheit",[4005,45753,45744],{"class":4178},[4005,45755,45756],{"class":4007,"line":4045},[4005,45757,4036],{"emptyLinePlaceholder":4035},[4005,45759,45760],{"class":4007,"line":4051},[4005,45761,45762],{"class":4190},"\u002F\u002F Додаємо методи до Celsius:\n",[4005,45764,45765,45767,45769,45772,45775,45777,45780,45782,45785],{"class":4007,"line":4057},[4005,45766,4299],{"class":4171},[4005,45768,4761],{"class":4182},[4005,45770,45771],{"class":4174},"c ",[4005,45773,45774],{"class":4178},"Celsius",[4005,45776,4498],{"class":4182},[4005,45778,45779],{"class":4302},"ToFahrenheit",[4005,45781,7346],{"class":4182},[4005,45783,45784],{"class":4178},"Fahrenheit",[4005,45786,5073],{"class":4182},[4005,45788,45789,45791,45793,45795,45797,45799,45802,45804,45806,45808,45811],{"class":4007,"line":4063},[4005,45790,5260],{"class":4836},[4005,45792,45751],{"class":4302},[4005,45794,4611],{"class":4182},[4005,45796,4386],{"class":4174},[4005,45798,8128],{"class":4182},[4005,45800,45801],{"class":4186},"9",[4005,45803,3858],{"class":4182},[4005,45805,5869],{"class":4186},[4005,45807,6289],{"class":4182},[4005,45809,45810],{"class":4186},"32",[4005,45812,4482],{"class":4182},[4005,45814,45815],{"class":4007,"line":4069},[4005,45816,4078],{"class":4182},[4005,45818,45819],{"class":4007,"line":4075},[4005,45820,4036],{"emptyLinePlaceholder":4035},[4005,45822,45823,45825,45827,45829,45831,45833,45835,45837,45839],{"class":4007,"line":4081},[4005,45824,4299],{"class":4171},[4005,45826,4761],{"class":4182},[4005,45828,45771],{"class":4174},[4005,45830,45774],{"class":4178},[4005,45832,4498],{"class":4182},[4005,45834,7343],{"class":4302},[4005,45836,7346],{"class":4182},[4005,45838,7004],{"class":4178},[4005,45840,5073],{"class":4182},[4005,45842,45843,45845,45847,45849,45851,45853,45855,45857,45860,45862,45864],{"class":4007,"line":4086},[4005,45844,5260],{"class":4836},[4005,45846,32994],{"class":4174},[4005,45848,3769],{"class":4182},[4005,45850,32999],{"class":4302},[4005,45852,4611],{"class":4182},[4005,45854,7968],{"class":4330},[4005,45856,29134],{"class":4174},[4005,45858,45859],{"class":4330},"°C\"",[4005,45861,3836],{"class":4182},[4005,45863,4386],{"class":4174},[4005,45865,4482],{"class":4182},[4005,45867,45868],{"class":4007,"line":4092},[4005,45869,4078],{"class":4182},[4005,45871,45872],{"class":4007,"line":4098},[4005,45873,4036],{"emptyLinePlaceholder":4035},[4005,45875,45876],{"class":4007,"line":4104},[4005,45877,45878],{"class":4190},"\u002F\u002F Додаємо методи до Fahrenheit:\n",[4005,45880,45881,45883,45885,45888,45890,45892,45895,45897,45899],{"class":4007,"line":4110},[4005,45882,4299],{"class":4171},[4005,45884,4761],{"class":4182},[4005,45886,45887],{"class":4174},"f ",[4005,45889,45784],{"class":4178},[4005,45891,4498],{"class":4182},[4005,45893,45894],{"class":4302},"ToCelsius",[4005,45896,7346],{"class":4182},[4005,45898,45774],{"class":4178},[4005,45900,5073],{"class":4182},[4005,45902,45903,45905,45907,45910,45912,45914,45916,45919,45921,45923,45925],{"class":4007,"line":4937},[4005,45904,5260],{"class":4836},[4005,45906,45741],{"class":4302},[4005,45908,45909],{"class":4182},"((",[4005,45911,5183],{"class":4174},[4005,45913,14546],{"class":4182},[4005,45915,45810],{"class":4186},[4005,45917,45918],{"class":4182},") * ",[4005,45920,5869],{"class":4186},[4005,45922,15549],{"class":4182},[4005,45924,45801],{"class":4186},[4005,45926,4482],{"class":4182},[4005,45928,45929],{"class":4007,"line":4942},[4005,45930,4078],{"class":4182},[4005,45932,45933],{"class":4007,"line":4947},[4005,45934,4036],{"emptyLinePlaceholder":4035},[4005,45936,45937,45939,45941,45943,45945,45947,45949,45951,45953],{"class":4007,"line":4953},[4005,45938,4299],{"class":4171},[4005,45940,4761],{"class":4182},[4005,45942,45887],{"class":4174},[4005,45944,45784],{"class":4178},[4005,45946,4498],{"class":4182},[4005,45948,7343],{"class":4302},[4005,45950,7346],{"class":4182},[4005,45952,7004],{"class":4178},[4005,45954,5073],{"class":4182},[4005,45956,45957,45959,45961,45963,45965,45967,45969,45971,45974,45976,45978],{"class":4007,"line":4960},[4005,45958,5260],{"class":4836},[4005,45960,32994],{"class":4174},[4005,45962,3769],{"class":4182},[4005,45964,32999],{"class":4302},[4005,45966,4611],{"class":4182},[4005,45968,7968],{"class":4330},[4005,45970,29134],{"class":4174},[4005,45972,45973],{"class":4330},"°F\"",[4005,45975,3836],{"class":4182},[4005,45977,5183],{"class":4174},[4005,45979,4482],{"class":4182},[4005,45981,45982],{"class":4007,"line":4973},[4005,45983,4078],{"class":4182},[4005,45985,45986],{"class":4007,"line":4985},[4005,45987,4036],{"emptyLinePlaceholder":4035},[4005,45989,45990,45992,45994],{"class":4007,"line":7813},[4005,45991,4299],{"class":4171},[4005,45993,5764],{"class":4302},[4005,45995,4306],{"class":4182},[4005,45997,45998,46001,46003,46005,46007,46009],{"class":4007,"line":7819},[4005,45999,46000],{"class":4174},"    temp",[4005,46002,4314],{"class":4182},[4005,46004,45774],{"class":4302},[4005,46006,4611],{"class":4182},[4005,46008,20817],{"class":4186},[4005,46010,4482],{"class":4182},[4005,46012,46013,46015,46017,46019,46021,46024,46026,46029,46032],{"class":4007,"line":7826},[4005,46014,5370],{"class":4174},[4005,46016,3769],{"class":4182},[4005,46018,5348],{"class":4302},[4005,46020,4611],{"class":4182},[4005,46022,46023],{"class":4330},"\"Температура:\"",[4005,46025,3836],{"class":4182},[4005,46027,46028],{"class":4174},"temp",[4005,46030,46031],{"class":4182},")                    ",[4005,46033,46034],{"class":4190},"\u002F\u002F 25.0°C\n",[4005,46036,46037,46039,46041,46043,46045,46048,46050,46052,46054,46056,46058],{"class":4007,"line":7839},[4005,46038,5370],{"class":4174},[4005,46040,3769],{"class":4182},[4005,46042,5348],{"class":4302},[4005,46044,4611],{"class":4182},[4005,46046,46047],{"class":4330},"\"У Фаренгейтах:\"",[4005,46049,3836],{"class":4182},[4005,46051,46028],{"class":4174},[4005,46053,3769],{"class":4182},[4005,46055,45779],{"class":4302},[4005,46057,39722],{"class":4182},[4005,46059,46060],{"class":4190},"\u002F\u002F 77.0°F\n",[4005,46062,46063],{"class":4007,"line":7864},[4005,46064,5214],{"class":4182},[4005,46066,46067,46070,46072,46074,46076,46078],{"class":4007,"line":7872},[4005,46068,46069],{"class":4174},"    hot",[4005,46071,4314],{"class":4182},[4005,46073,45784],{"class":4302},[4005,46075,4611],{"class":4182},[4005,46077,6478],{"class":4186},[4005,46079,4482],{"class":4182},[4005,46081,46082,46084,46086,46088,46090,46093,46095,46098,46100,46102,46105],{"class":4007,"line":7881},[4005,46083,5370],{"class":4174},[4005,46085,3769],{"class":4182},[4005,46087,5348],{"class":4302},[4005,46089,4611],{"class":4182},[4005,46091,46092],{"class":4330},"\"У Цельсіях:\"",[4005,46094,3836],{"class":4182},[4005,46096,46097],{"class":4174},"hot",[4005,46099,3769],{"class":4182},[4005,46101,45894],{"class":4302},[4005,46103,46104],{"class":4182},"())          ",[4005,46106,46107],{"class":4190},"\u002F\u002F 37.8°C\n",[4005,46109,46110],{"class":4007,"line":7890},[4005,46111,4078],{"class":4182},[4484,46113,46114,46119,46316],{"icon":793},[3908,46115,46116],{},[3871,46117,46118],{},"Безпека типів на практиці:",[3984,46120,46122],{"className":4162,"code":46121,"language":4164,"meta":3992,"style":3992},"type UserID int64\ntype OrderID int64\ntype Money float64\ntype Percentage float64\n\n\u002F\u002F Функції приймають конкретні типи:\nfunc chargeUser(user UserID, amount Money) { }\nfunc applyDiscount(price Money, discount Percentage) Money { }\n\n\u002F\u002F Помилки НЕМОЖЛИВІ:\nvar user UserID = 101\nvar order OrderID = 202\nvar price Money = 99.99\nvar rate Percentage = 15.0\n\nchargeUser(user, price)        \u002F\u002F ✅ OK\n\u002F\u002F chargeUser(order, price)    \u002F\u002F ❌ Помилка компіляції!\n\u002F\u002F chargeUser(user, rate)      \u002F\u002F ❌ Помилка компіляції!\n",[3753,46123,46124,46132,46141,46150,46159,46163,46168,46189,46217,46221,46226,46239,46252,46265,46279,46283,46300,46308],{"__ignoreMap":3992},[4005,46125,46126,46128,46130],{"class":4007,"line":4008},[4005,46127,4809],{"class":4171},[4005,46129,7084],{"class":4178},[4005,46131,45046],{"class":4178},[4005,46133,46134,46136,46139],{"class":4007,"line":4014},[4005,46135,4809],{"class":4171},[4005,46137,46138],{"class":4178}," OrderID",[4005,46140,45046],{"class":4178},[4005,46142,46143,46145,46148],{"class":4007,"line":4020},[4005,46144,4809],{"class":4171},[4005,46146,46147],{"class":4178}," Money",[4005,46149,45744],{"class":4178},[4005,46151,46152,46154,46157],{"class":4007,"line":4026},[4005,46153,4809],{"class":4171},[4005,46155,46156],{"class":4178}," Percentage",[4005,46158,45744],{"class":4178},[4005,46160,46161],{"class":4007,"line":4032},[4005,46162,4036],{"emptyLinePlaceholder":4035},[4005,46164,46165],{"class":4007,"line":4039},[4005,46166,46167],{"class":4190},"\u002F\u002F Функції приймають конкретні типи:\n",[4005,46169,46170,46172,46175,46177,46179,46181,46183,46185,46187],{"class":4007,"line":4045},[4005,46171,4299],{"class":4171},[4005,46173,46174],{"class":4302}," chargeUser",[4005,46176,4611],{"class":4182},[4005,46178,20793],{"class":4174},[4005,46180,7084],{"class":4178},[4005,46182,3836],{"class":4182},[4005,46184,17929],{"class":4174},[4005,46186,46147],{"class":4178},[4005,46188,33203],{"class":4182},[4005,46190,46191,46193,46196,46198,46200,46202,46204,46207,46209,46211,46214],{"class":4007,"line":4051},[4005,46192,4299],{"class":4171},[4005,46194,46195],{"class":4302}," applyDiscount",[4005,46197,4611],{"class":4182},[4005,46199,17909],{"class":4174},[4005,46201,46147],{"class":4178},[4005,46203,3836],{"class":4182},[4005,46205,46206],{"class":4174},"discount",[4005,46208,46156],{"class":4178},[4005,46210,4498],{"class":4182},[4005,46212,46213],{"class":4178},"Money",[4005,46215,46216],{"class":4182}," { }\n",[4005,46218,46219],{"class":4007,"line":4057},[4005,46220,4036],{"emptyLinePlaceholder":4035},[4005,46222,46223],{"class":4007,"line":4063},[4005,46224,46225],{"class":4190},"\u002F\u002F Помилки НЕМОЖЛИВІ:\n",[4005,46227,46228,46230,46233,46235,46237],{"class":4007,"line":4069},[4005,46229,3963],{"class":4171},[4005,46231,46232],{"class":4174}," user",[4005,46234,7084],{"class":4178},[4005,46236,4183],{"class":4182},[4005,46238,45292],{"class":4186},[4005,46240,46241,46243,46246,46248,46250],{"class":4007,"line":4075},[4005,46242,3963],{"class":4171},[4005,46244,46245],{"class":4174}," order",[4005,46247,46138],{"class":4178},[4005,46249,4183],{"class":4182},[4005,46251,45306],{"class":4186},[4005,46253,46254,46256,46258,46260,46262],{"class":4007,"line":4081},[4005,46255,3963],{"class":4171},[4005,46257,18552],{"class":4174},[4005,46259,46147],{"class":4178},[4005,46261,4183],{"class":4182},[4005,46263,46264],{"class":4186},"99.99\n",[4005,46266,46267,46269,46272,46274,46276],{"class":4007,"line":4086},[4005,46268,3963],{"class":4171},[4005,46270,46271],{"class":4174}," rate",[4005,46273,46156],{"class":4178},[4005,46275,4183],{"class":4182},[4005,46277,46278],{"class":4186},"15.0\n",[4005,46280,46281],{"class":4007,"line":4092},[4005,46282,4036],{"emptyLinePlaceholder":4035},[4005,46284,46285,46288,46290,46292,46294,46296,46298],{"class":4007,"line":4098},[4005,46286,46287],{"class":4302},"chargeUser",[4005,46289,4611],{"class":4182},[4005,46291,20793],{"class":4174},[4005,46293,3836],{"class":4182},[4005,46295,17909],{"class":4174},[4005,46297,16007],{"class":4182},[4005,46299,45340],{"class":4190},[4005,46301,46302,46305],{"class":4007,"line":4104},[4005,46303,46304],{"class":4190},"\u002F\u002F chargeUser(order, price)",[4005,46306,46307],{"class":4190},"    \u002F\u002F ❌ Помилка компіляції!\n",[4005,46309,46310,46313],{"class":4007,"line":4110},[4005,46311,46312],{"class":4190},"\u002F\u002F chargeUser(user, rate)",[4005,46314,46315],{"class":4190},"      \u002F\u002F ❌ Помилка компіляції!\n",[3908,46317,46318],{},"Компілятор захищає від помилок ще до запуску програми!",[3900,46320],{},[3976,46322,46324,46325,46327],{"id":46323},"частина-2-структури-struct-групування-даних","Частина 2: Структури (",[3753,46326,8957],{},") — групування даних",[9014,46329,46331],{"id":46330},"що-таке-структура","Що таке структура?",[3908,46333,46334,46339],{},[3871,46335,46336,46337,5032],{},"Структура (",[3753,46338,8957],{}," — це спосіб об'єднати кілька пов'язаних значень (полів) в один складений тип даних. Це як створити власний \"контейнер\" для даних, що логічно належать разом.",[3908,46341,46342,46344,46345,46347],{},[3871,46343,39369],{}," якщо у вас є дані про користувача (ім'я, email, вік), замість трьох окремих змінних, ви створюєте одну структуру ",[3753,46346,20798],{},", яка містить всі ці поля.",[9014,46349,46351],{"id":46350},"структури-vs-класи-фундаментальна-різниця","Структури vs Класи: фундаментальна різниця",[12533,46353,46354,46540],{},[12536,46355,46357],{"icon":12538,"label":46356},"Go (struct)",[3984,46358,46360],{"className":4162,"code":46359,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Структура — це просто \"шаблон даних\"\ntype User struct {\n    ID       int64\n    Username string\n    Email    string\n    IsActive bool\n}\n\n\u002F\u002F Створення екземпляра (instance)\nuser := User{\n    ID:       1,\n    Username: \"alex\",\n    Email:    \"alex@kostyl.dev\",\n    IsActive: true,\n}\n\n\u002F\u002F Ще один екземпляр\nadmin := User{\n    ID:       2,\n    Username: \"admin\",\n    Email:    \"admin@kostyl.dev\",\n    IsActive: true,\n}\n",[3753,46361,46362,46367,46377,46385,46391,46397,46404,46408,46412,46417,46427,46438,46449,46460,46470,46474,46478,46483,46494,46504,46515,46526,46536],{"__ignoreMap":3992},[4005,46363,46364],{"class":4007,"line":4008},[4005,46365,46366],{"class":4190},"\u002F\u002F Структура — це просто \"шаблон даних\"\n",[4005,46368,46369,46371,46373,46375],{"class":4007,"line":4014},[4005,46370,4809],{"class":4171},[4005,46372,20760],{"class":4178},[4005,46374,10957],{"class":4171},[4005,46376,5073],{"class":4182},[4005,46378,46379,46382],{"class":4007,"line":4020},[4005,46380,46381],{"class":4174},"    ID",[4005,46383,46384],{"class":4178},"       int64\n",[4005,46386,46387,46389],{"class":4007,"line":4026},[4005,46388,33486],{"class":4174},[4005,46390,20772],{"class":4178},[4005,46392,46393,46395],{"class":4007,"line":4032},[4005,46394,4931],{"class":4174},[4005,46396,7527],{"class":4178},[4005,46398,46399,46402],{"class":4007,"line":4039},[4005,46400,46401],{"class":4174},"    IsActive",[4005,46403,44612],{"class":4178},[4005,46405,46406],{"class":4007,"line":4045},[4005,46407,4078],{"class":4182},[4005,46409,46410],{"class":4007,"line":4051},[4005,46411,4036],{"emptyLinePlaceholder":4035},[4005,46413,46414],{"class":4007,"line":4057},[4005,46415,46416],{"class":4190},"\u002F\u002F Створення екземпляра (instance)\n",[4005,46418,46419,46421,46423,46425],{"class":4007,"line":4063},[4005,46420,20793],{"class":4174},[4005,46422,4314],{"class":4182},[4005,46424,20798],{"class":4178},[4005,46426,29461],{"class":4182},[4005,46428,46429,46431,46434,46436],{"class":4007,"line":4069},[4005,46430,46381],{"class":4174},[4005,46432,46433],{"class":4182},":       ",[4005,46435,4393],{"class":4186},[4005,46437,29475],{"class":4182},[4005,46439,46440,46442,46444,46447],{"class":4007,"line":4075},[4005,46441,33486],{"class":4174},[4005,46443,11172],{"class":4182},[4005,46445,46446],{"class":4330},"\"alex\"",[4005,46448,29475],{"class":4182},[4005,46450,46451,46453,46455,46458],{"class":4007,"line":4081},[4005,46452,4931],{"class":4174},[4005,46454,44670],{"class":4182},[4005,46456,46457],{"class":4330},"\"alex@kostyl.dev\"",[4005,46459,29475],{"class":4182},[4005,46461,46462,46464,46466,46468],{"class":4007,"line":4086},[4005,46463,46401],{"class":4174},[4005,46465,11172],{"class":4182},[4005,46467,4689],{"class":4171},[4005,46469,29475],{"class":4182},[4005,46471,46472],{"class":4007,"line":4092},[4005,46473,4078],{"class":4182},[4005,46475,46476],{"class":4007,"line":4098},[4005,46477,4036],{"emptyLinePlaceholder":4035},[4005,46479,46480],{"class":4007,"line":4104},[4005,46481,46482],{"class":4190},"\u002F\u002F Ще один екземпляр\n",[4005,46484,46485,46488,46490,46492],{"class":4007,"line":4110},[4005,46486,46487],{"class":4174},"admin",[4005,46489,4314],{"class":4182},[4005,46491,20798],{"class":4178},[4005,46493,29461],{"class":4182},[4005,46495,46496,46498,46500,46502],{"class":4007,"line":4937},[4005,46497,46381],{"class":4174},[4005,46499,46433],{"class":4182},[4005,46501,4398],{"class":4186},[4005,46503,29475],{"class":4182},[4005,46505,46506,46508,46510,46513],{"class":4007,"line":4942},[4005,46507,33486],{"class":4174},[4005,46509,11172],{"class":4182},[4005,46511,46512],{"class":4330},"\"admin\"",[4005,46514,29475],{"class":4182},[4005,46516,46517,46519,46521,46524],{"class":4007,"line":4947},[4005,46518,4931],{"class":4174},[4005,46520,44670],{"class":4182},[4005,46522,46523],{"class":4330},"\"admin@kostyl.dev\"",[4005,46525,29475],{"class":4182},[4005,46527,46528,46530,46532,46534],{"class":4007,"line":4953},[4005,46529,46401],{"class":4174},[4005,46531,11172],{"class":4182},[4005,46533,4689],{"class":4171},[4005,46535,29475],{"class":4182},[4005,46537,46538],{"class":4007,"line":4960},[4005,46539,4078],{"class":4182},[12536,46541,46543],{"icon":12743,"label":46542},"Java (class)",[3984,46544,46546],{"className":12746,"code":46545,"language":12748,"meta":3992,"style":3992},"\u002F\u002F Клас — це \"шаблон даних + поведінка\"\npublic class User {\n    private long id;\n    private String username;\n    private String email;\n    private boolean isActive;\n    \n    \u002F\u002F Конструктор (обов'язковий для ініціалізації)\n    public User(long id, String username, String email, boolean isActive) {\n        this.id = id;\n        this.username = username;\n        this.email = email;\n        this.isActive = isActive;\n    }\n    \n    \u002F\u002F Геттери та сеттери (багато коду...)\n    public long getId() { return id; }\n    public void setId(long id) { this.id = id; }\n    \u002F\u002F ... і так для кожного поля\n}\n\n\u002F\u002F Створення екземпляра через конструктор\nUser user = new User(1, \"alex\", \"alex@kostyl.dev\", true);\nUser admin = new User(2, \"admin\", \"admin@kostyl.dev\", true);\n",[3753,46547,46548,46553,46563,46575,46587,46597,46608,46612,46617,46651,46663,46674,46685,46696,46700,46704,46709,46726,46753,46758,46762,46766,46771,46801],{"__ignoreMap":3992},[4005,46549,46550],{"class":4007,"line":4008},[4005,46551,46552],{"class":4190},"\u002F\u002F Клас — це \"шаблон даних + поведінка\"\n",[4005,46554,46555,46557,46559,46561],{"class":4007,"line":4014},[4005,46556,12755],{"class":4171},[4005,46558,12758],{"class":4171},[4005,46560,20760],{"class":4178},[4005,46562,5073],{"class":4182},[4005,46564,46565,46568,46571,46573],{"class":4007,"line":4020},[4005,46566,46567],{"class":4171},"    private",[4005,46569,46570],{"class":4178}," long",[4005,46572,7146],{"class":4174},[4005,46574,12805],{"class":4182},[4005,46576,46577,46579,46582,46585],{"class":4007,"line":4026},[4005,46578,46567],{"class":4171},[4005,46580,46581],{"class":4178}," String",[4005,46583,46584],{"class":4174}," username",[4005,46586,12805],{"class":4182},[4005,46588,46589,46591,46593,46595],{"class":4007,"line":4032},[4005,46590,46567],{"class":4171},[4005,46592,46581],{"class":4178},[4005,46594,14269],{"class":4174},[4005,46596,12805],{"class":4182},[4005,46598,46599,46601,46604,46606],{"class":4007,"line":4039},[4005,46600,46567],{"class":4171},[4005,46602,46603],{"class":4178}," boolean",[4005,46605,10172],{"class":4174},[4005,46607,12805],{"class":4182},[4005,46609,46610],{"class":4007,"line":4045},[4005,46611,5214],{"class":4182},[4005,46613,46614],{"class":4007,"line":4051},[4005,46615,46616],{"class":4190},"    \u002F\u002F Конструктор (обов'язковий для ініціалізації)\n",[4005,46618,46619,46621,46623,46625,46628,46630,46632,46634,46636,46638,46640,46642,46644,46647,46649],{"class":4007,"line":4057},[4005,46620,12768],{"class":4171},[4005,46622,20760],{"class":4302},[4005,46624,4611],{"class":4182},[4005,46626,46627],{"class":4178},"long",[4005,46629,7146],{"class":4174},[4005,46631,3836],{"class":4182},[4005,46633,7343],{"class":4178},[4005,46635,46584],{"class":4174},[4005,46637,3836],{"class":4182},[4005,46639,7343],{"class":4178},[4005,46641,14269],{"class":4174},[4005,46643,3836],{"class":4182},[4005,46645,46646],{"class":4178},"boolean",[4005,46648,10172],{"class":4174},[4005,46650,12789],{"class":4182},[4005,46652,46653,46656,46658,46660],{"class":4007,"line":4063},[4005,46654,46655],{"class":4171},"        this",[4005,46657,3769],{"class":4182},[4005,46659,7180],{"class":4174},[4005,46661,46662],{"class":4182}," = id;\n",[4005,46664,46665,46667,46669,46671],{"class":4007,"line":4069},[4005,46666,46655],{"class":4171},[4005,46668,3769],{"class":4182},[4005,46670,33385],{"class":4174},[4005,46672,46673],{"class":4182}," = username;\n",[4005,46675,46676,46678,46680,46682],{"class":4007,"line":4075},[4005,46677,46655],{"class":4171},[4005,46679,3769],{"class":4182},[4005,46681,13913],{"class":4174},[4005,46683,46684],{"class":4182}," = email;\n",[4005,46686,46687,46689,46691,46693],{"class":4007,"line":4081},[4005,46688,46655],{"class":4171},[4005,46690,3769],{"class":4182},[4005,46692,10211],{"class":4174},[4005,46694,46695],{"class":4182}," = isActive;\n",[4005,46697,46698],{"class":4007,"line":4086},[4005,46699,5127],{"class":4182},[4005,46701,46702],{"class":4007,"line":4092},[4005,46703,5214],{"class":4182},[4005,46705,46706],{"class":4007,"line":4098},[4005,46707,46708],{"class":4190},"    \u002F\u002F Геттери та сеттери (багато коду...)\n",[4005,46710,46711,46713,46715,46718,46721,46723],{"class":4007,"line":4104},[4005,46712,12768],{"class":4171},[4005,46714,46570],{"class":4178},[4005,46716,46717],{"class":4302}," getId",[4005,46719,46720],{"class":4182},"() { ",[4005,46722,35265],{"class":4836},[4005,46724,46725],{"class":4182}," id; }\n",[4005,46727,46728,46730,46732,46735,46737,46739,46741,46744,46746,46748,46750],{"class":4007,"line":4110},[4005,46729,12768],{"class":4171},[4005,46731,12774],{"class":4178},[4005,46733,46734],{"class":4302}," setId",[4005,46736,4611],{"class":4182},[4005,46738,46627],{"class":4178},[4005,46740,7146],{"class":4174},[4005,46742,46743],{"class":4182},") { ",[4005,46745,7554],{"class":4171},[4005,46747,3769],{"class":4182},[4005,46749,7180],{"class":4174},[4005,46751,46752],{"class":4182}," = id; }\n",[4005,46754,46755],{"class":4007,"line":4937},[4005,46756,46757],{"class":4190},"    \u002F\u002F ... і так для кожного поля\n",[4005,46759,46760],{"class":4007,"line":4942},[4005,46761,4078],{"class":4182},[4005,46763,46764],{"class":4007,"line":4947},[4005,46765,4036],{"emptyLinePlaceholder":4035},[4005,46767,46768],{"class":4007,"line":4953},[4005,46769,46770],{"class":4190},"\u002F\u002F Створення екземпляра через конструктор\n",[4005,46772,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799],{"class":4007,"line":4960},[4005,46774,20798],{"class":4178},[4005,46776,46232],{"class":4174},[4005,46778,4183],{"class":4182},[4005,46780,3768],{"class":4836},[4005,46782,20760],{"class":4302},[4005,46784,4611],{"class":4182},[4005,46786,4393],{"class":4186},[4005,46788,3836],{"class":4182},[4005,46790,46446],{"class":4330},[4005,46792,3836],{"class":4182},[4005,46794,46457],{"class":4330},[4005,46796,3836],{"class":4182},[4005,46798,4689],{"class":4171},[4005,46800,12932],{"class":4182},[4005,46802,46803,46805,46808,46810,46812,46814,46816,46818,46820,46822,46824,46826,46828,46830],{"class":4007,"line":4973},[4005,46804,20798],{"class":4178},[4005,46806,46807],{"class":4174}," admin",[4005,46809,4183],{"class":4182},[4005,46811,3768],{"class":4836},[4005,46813,20760],{"class":4302},[4005,46815,4611],{"class":4182},[4005,46817,4398],{"class":4186},[4005,46819,3836],{"class":4182},[4005,46821,46512],{"class":4330},[4005,46823,3836],{"class":4182},[4005,46825,46523],{"class":4330},[4005,46827,3836],{"class":4182},[4005,46829,4689],{"class":4171},[4005,46831,12932],{"class":4182},[3908,46833,46834],{},[3871,46835,46836],{},"Ключові відмінності:",[5991,46838,46839,46853],{},[5994,46840,46841],{},[5997,46842,46843,46845,46849],{},[6000,46844,10840],{},[6000,46846,10843,46847],{},[3753,46848,8957],{},[6000,46850,10848,46851],{},[3753,46852,44883],{},[6010,46854,46855,46867,46883,46906,46919,46934,46946],{},[5997,46856,46857,46861,46864],{},[6015,46858,46859],{},[3871,46860,11814],{},[6015,46862,46863],{},"Тільки дані",[6015,46865,46866],{},"Дані + поведінка + інкапсуляція",[5997,46868,46869,46874,46877],{},[6015,46870,46871],{},[3871,46872,46873],{},"Конструктор",[6015,46875,46876],{},"❌ Немає (літерали замість них)",[6015,46878,46879,46880],{},"✅ Обов'язковий ",[3753,46881,46882],{},"new User(...)",[5997,46884,46885,46890,46897],{},[6015,46886,46887],{},[3871,46888,46889],{},"Модифікатори доступу",[6015,46891,46892,46893,3858,46895],{},"❌ Немає ",[3753,46894,44891],{},[3753,46896,12755],{},[6015,46898,46899,46900,3836,46902,3836,46904],{},"✅ Є ",[3753,46901,44891],{},[3753,46903,12755],{},[3753,46905,44894],{},[5997,46907,46908,46913,46916],{},[6015,46909,46910],{},[3871,46911,46912],{},"Геттери\u002FСеттери",[6015,46914,46915],{},"❌ Прямий доступ до полів",[6015,46917,46918],{},"✅ Вручну або через IDE",[5997,46920,46921,46926,46930],{},[6015,46922,46923],{},[3871,46924,46925],{},"Наслідування",[6015,46927,46892,46928],{},[3753,46929,44903],{},[6015,46931,46899,46932],{},[3753,46933,44903],{},[5997,46935,46936,46940,46943],{},[6015,46937,46938],{},[3871,46939,48],{},[6015,46941,46942],{},"Додаються окремо через receiver",[6015,46944,46945],{},"Всередині класу",[5997,46947,46948,46952,46955],{},[6015,46949,46950],{},[3871,46951,8844],{},[6015,46953,46954],{},"✅ Завжди валідний екземпляр",[6015,46956,46957,46958,46960],{},"❌ ",[3753,46959,44237],{}," за замовчуванням",[9014,46962,46964],{"id":46963},"екземпляри-структур-що-це-таке","Екземпляри структур: що це таке?",[3908,46966,46967,46970],{},[3871,46968,46969],{},"Екземпляр (instance)"," — це конкретне значення структури з реальними даними.",[3908,46972,46973],{},[3871,46974,11878],{},[3746,46976,46977,46982],{},[3749,46978,46979,46981],{},[3871,46980,8646],{}," — це креслення будинку (шаблон)",[3749,46983,46984,46987],{},[3871,46985,46986],{},"Екземпляр"," — це конкретний побудований будинок",[3984,46989,46991],{"className":4162,"code":46990,"language":4164,"meta":3992,"style":3992},"type User struct {\n    ID   int64\n    Name string\n}\n\n\u002F\u002F User — це ТИП (креслення)\n\u002F\u002F user1, user2 — це ЕКЗЕМПЛЯРИ (конкретні будинки)\n\nvar user1 User = User{ID: 1, Name: \"Олег\"}\nvar user2 User = User{ID: 2, Name: \"Марія\"}\n\n\u002F\u002F Кожен екземпляр має власні дані:\nfmt.Println(user1.Name)  \u002F\u002F Олег\nfmt.Println(user2.Name)  \u002F\u002F Марія\n\nuser1.Name = \"Олексій\"   \u002F\u002F Змінюємо тільки user1\nfmt.Println(user1.Name)  \u002F\u002F Олексій\nfmt.Println(user2.Name)  \u002F\u002F Марія (не змінилася!)\n",[3753,46992,46993,47003,47010,47016,47020,47024,47029,47034,47038,47070,47101,47105,47110,47132,47154,47158,47174,47195],{"__ignoreMap":3992},[4005,46994,46995,46997,46999,47001],{"class":4007,"line":4008},[4005,46996,4809],{"class":4171},[4005,46998,20760],{"class":4178},[4005,47000,10957],{"class":4171},[4005,47002,5073],{"class":4182},[4005,47004,47005,47007],{"class":4007,"line":4014},[4005,47006,46381],{"class":4174},[4005,47008,47009],{"class":4178},"   int64\n",[4005,47011,47012,47014],{"class":4007,"line":4020},[4005,47013,20769],{"class":4174},[4005,47015,20772],{"class":4178},[4005,47017,47018],{"class":4007,"line":4026},[4005,47019,4078],{"class":4182},[4005,47021,47022],{"class":4007,"line":4032},[4005,47023,4036],{"emptyLinePlaceholder":4035},[4005,47025,47026],{"class":4007,"line":4039},[4005,47027,47028],{"class":4190},"\u002F\u002F User — це ТИП (креслення)\n",[4005,47030,47031],{"class":4007,"line":4045},[4005,47032,47033],{"class":4190},"\u002F\u002F user1, user2 — це ЕКЗЕМПЛЯРИ (конкретні будинки)\n",[4005,47035,47036],{"class":4007,"line":4051},[4005,47037,4036],{"emptyLinePlaceholder":4035},[4005,47039,47040,47042,47045,47047,47049,47051,47053,47056,47058,47060,47062,47064,47066,47068],{"class":4007,"line":4057},[4005,47041,3963],{"class":4171},[4005,47043,47044],{"class":4174}," user1",[4005,47046,20760],{"class":4178},[4005,47048,4183],{"class":4182},[4005,47050,20798],{"class":4178},[4005,47052,16268],{"class":4182},[4005,47054,47055],{"class":4174},"ID",[4005,47057,11172],{"class":4182},[4005,47059,4393],{"class":4186},[4005,47061,3836],{"class":4182},[4005,47063,20803],{"class":4174},[4005,47065,11172],{"class":4182},[4005,47067,15780],{"class":4330},[4005,47069,4078],{"class":4182},[4005,47071,47072,47074,47077,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099],{"class":4007,"line":4063},[4005,47073,3963],{"class":4171},[4005,47075,47076],{"class":4174}," user2",[4005,47078,20760],{"class":4178},[4005,47080,4183],{"class":4182},[4005,47082,20798],{"class":4178},[4005,47084,16268],{"class":4182},[4005,47086,47055],{"class":4174},[4005,47088,11172],{"class":4182},[4005,47090,4398],{"class":4186},[4005,47092,3836],{"class":4182},[4005,47094,20803],{"class":4174},[4005,47096,11172],{"class":4182},[4005,47098,38456],{"class":4330},[4005,47100,4078],{"class":4182},[4005,47102,47103],{"class":4007,"line":4069},[4005,47104,4036],{"emptyLinePlaceholder":4035},[4005,47106,47107],{"class":4007,"line":4075},[4005,47108,47109],{"class":4190},"\u002F\u002F Кожен екземпляр має власні дані:\n",[4005,47111,47112,47114,47116,47118,47120,47123,47125,47127,47129],{"class":4007,"line":4081},[4005,47113,3785],{"class":4174},[4005,47115,3769],{"class":4182},[4005,47117,5348],{"class":4302},[4005,47119,4611],{"class":4182},[4005,47121,47122],{"class":4174},"user1",[4005,47124,3769],{"class":4182},[4005,47126,20803],{"class":4174},[4005,47128,5196],{"class":4182},[4005,47130,47131],{"class":4190},"\u002F\u002F Олег\n",[4005,47133,47134,47136,47138,47140,47142,47145,47147,47149,47151],{"class":4007,"line":4086},[4005,47135,3785],{"class":4174},[4005,47137,3769],{"class":4182},[4005,47139,5348],{"class":4302},[4005,47141,4611],{"class":4182},[4005,47143,47144],{"class":4174},"user2",[4005,47146,3769],{"class":4182},[4005,47148,20803],{"class":4174},[4005,47150,5196],{"class":4182},[4005,47152,47153],{"class":4190},"\u002F\u002F Марія\n",[4005,47155,47156],{"class":4007,"line":4092},[4005,47157,4036],{"emptyLinePlaceholder":4035},[4005,47159,47160,47162,47164,47166,47168,47171],{"class":4007,"line":4098},[4005,47161,47122],{"class":4174},[4005,47163,3769],{"class":4182},[4005,47165,20803],{"class":4174},[4005,47167,4183],{"class":4182},[4005,47169,47170],{"class":4330},"\"Олексій\"",[4005,47172,47173],{"class":4190},"   \u002F\u002F Змінюємо тільки user1\n",[4005,47175,47176,47178,47180,47182,47184,47186,47188,47190,47192],{"class":4007,"line":4104},[4005,47177,3785],{"class":4174},[4005,47179,3769],{"class":4182},[4005,47181,5348],{"class":4302},[4005,47183,4611],{"class":4182},[4005,47185,47122],{"class":4174},[4005,47187,3769],{"class":4182},[4005,47189,20803],{"class":4174},[4005,47191,5196],{"class":4182},[4005,47193,47194],{"class":4190},"\u002F\u002F Олексій\n",[4005,47196,47197,47199,47201,47203,47205,47207,47209,47211,47213],{"class":4007,"line":4110},[4005,47198,3785],{"class":4174},[4005,47200,3769],{"class":4182},[4005,47202,5348],{"class":4302},[4005,47204,4611],{"class":4182},[4005,47206,47144],{"class":4174},[4005,47208,3769],{"class":4182},[4005,47210,20803],{"class":4174},[4005,47212,5196],{"class":4182},[4005,47214,47215],{"class":4190},"\u002F\u002F Марія (не змінилася!)\n",[3908,47217,47218,47220,47221,47224],{},[3871,47219,28785],{}," кожен екземпляр ",[3871,47222,47223],{},"незалежний"," — зміна одного не впливає на інші.",[9014,47226,47228],{"id":47227},"синтаксис-оголошення-структури","Синтаксис оголошення структури",[3984,47230,47232],{"className":4162,"code":47231,"language":4164,"meta":3992,"style":3992},"type НазваСтруктури struct {\n    НазваПоля1 Тип1\n    НазваПоля2 Тип2\n    \u002F\u002F ...\n}\n",[3753,47233,47234,47245,47253,47261,47265],{"__ignoreMap":3992},[4005,47235,47236,47238,47241,47243],{"class":4007,"line":4008},[4005,47237,4809],{"class":4171},[4005,47239,47240],{"class":4178}," НазваСтруктури",[4005,47242,10957],{"class":4171},[4005,47244,5073],{"class":4182},[4005,47246,47247,47250],{"class":4007,"line":4014},[4005,47248,47249],{"class":4174},"    НазваПоля1",[4005,47251,47252],{"class":4178}," Тип1\n",[4005,47254,47255,47258],{"class":4007,"line":4020},[4005,47256,47257],{"class":4174},"    НазваПоля2",[4005,47259,47260],{"class":4178}," Тип2\n",[4005,47262,47263],{"class":4007,"line":4026},[4005,47264,13723],{"class":4190},[4005,47266,47267],{"class":4007,"line":4032},[4005,47268,4078],{"class":4182},[3908,47270,47271],{},[3871,47272,20517],{},[3984,47274,47276],{"className":4162,"code":47275,"language":4164,"meta":3992,"style":3992},"type Product struct {\n    ID          int64\n    Name        string\n    Price       float64\n    InStock     bool\n    Tags        []string\n    CreatedAt   time.Time\n}\n",[3753,47277,47278,47289,47296,47303,47311,47319,47329,47342],{"__ignoreMap":3992},[4005,47279,47280,47282,47285,47287],{"class":4007,"line":4008},[4005,47281,4809],{"class":4171},[4005,47283,47284],{"class":4178}," Product",[4005,47286,10957],{"class":4171},[4005,47288,5073],{"class":4182},[4005,47290,47291,47293],{"class":4007,"line":4014},[4005,47292,46381],{"class":4174},[4005,47294,47295],{"class":4178},"          int64\n",[4005,47297,47298,47300],{"class":4007,"line":4020},[4005,47299,20769],{"class":4174},[4005,47301,47302],{"class":4178},"        string\n",[4005,47304,47305,47308],{"class":4007,"line":4026},[4005,47306,47307],{"class":4174},"    Price",[4005,47309,47310],{"class":4178},"       float64\n",[4005,47312,47313,47316],{"class":4007,"line":4032},[4005,47314,47315],{"class":4174},"    InStock",[4005,47317,47318],{"class":4178},"     bool\n",[4005,47320,47321,47324,47327],{"class":4007,"line":4039},[4005,47322,47323],{"class":4174},"    Tags",[4005,47325,47326],{"class":4182},"        []",[4005,47328,7495],{"class":4178},[4005,47330,47331,47334,47337,47339],{"class":4007,"line":4045},[4005,47332,47333],{"class":4174},"    CreatedAt",[4005,47335,47336],{"class":4178},"   time",[4005,47338,3769],{"class":4182},[4005,47340,47341],{"class":4178},"Time\n",[4005,47343,47344],{"class":4007,"line":4051},[4005,47345,4078],{"class":4182},[9014,47347,47349],{"id":47348},"способи-створення-екземплярів","Способи створення екземплярів",[3908,47351,10416,47352,47355,47356,8157,47359,3769],{},[3871,47353,47354],{},"немає конструкторів"," як у Java\u002FC#. Замість них використовуються ",[3871,47357,47358],{},"літерали структур",[3871,47360,47361],{},"функції-фабрики",[3908,47363,47364],{},[3871,47365,47366],{},"Загальний синтаксис створення структури:",[3984,47368,47370],{"className":4162,"code":47369,"language":4164,"meta":3992,"style":3992},"\u002F\u002F 1. Екземпляр структури (копіюється по значенню)\nvar variable StructName = StructName{ \u002F* поля *\u002F }\nvariable := StructName{ \u002F* поля *\u002F }\n\n\u002F\u002F 2. Покажчик на екземпляр структури\nvar variable *StructName = &StructName{ \u002F* поля *\u002F }\nvariable := &StructName{ \u002F* поля *\u002F }\n\n\u002F\u002F 3. Через new (рідко використовується)\nvariable := new(StructName)  \u002F\u002F повертає *StructName з zero values\n",[3753,47371,47372,47377,47400,47415,47419,47424,47444,47458,47462,47467],{"__ignoreMap":3992},[4005,47373,47374],{"class":4007,"line":4008},[4005,47375,47376],{"class":4190},"\u002F\u002F 1. Екземпляр структури (копіюється по значенню)\n",[4005,47378,47379,47381,47384,47387,47389,47392,47395,47398],{"class":4007,"line":4014},[4005,47380,3963],{"class":4171},[4005,47382,47383],{"class":4174}," variable",[4005,47385,47386],{"class":4178}," StructName",[4005,47388,4183],{"class":4182},[4005,47390,47391],{"class":4178},"StructName",[4005,47393,47394],{"class":4182},"{ ",[4005,47396,47397],{"class":4190},"\u002F* поля *\u002F",[4005,47399,35480],{"class":4182},[4005,47401,47402,47405,47407,47409,47411,47413],{"class":4007,"line":4020},[4005,47403,47404],{"class":4174},"variable",[4005,47406,4314],{"class":4182},[4005,47408,47391],{"class":4178},[4005,47410,47394],{"class":4182},[4005,47412,47397],{"class":4190},[4005,47414,35480],{"class":4182},[4005,47416,47417],{"class":4007,"line":4026},[4005,47418,4036],{"emptyLinePlaceholder":4035},[4005,47420,47421],{"class":4007,"line":4032},[4005,47422,47423],{"class":4190},"\u002F\u002F 2. Покажчик на екземпляр структури\n",[4005,47425,47426,47428,47430,47432,47434,47436,47438,47440,47442],{"class":4007,"line":4039},[4005,47427,3963],{"class":4171},[4005,47429,47383],{"class":4174},[4005,47431,5520],{"class":4182},[4005,47433,47391],{"class":4178},[4005,47435,42463],{"class":4182},[4005,47437,47391],{"class":4178},[4005,47439,47394],{"class":4182},[4005,47441,47397],{"class":4190},[4005,47443,35480],{"class":4182},[4005,47445,47446,47448,47450,47452,47454,47456],{"class":4007,"line":4045},[4005,47447,47404],{"class":4174},[4005,47449,44159],{"class":4182},[4005,47451,47391],{"class":4178},[4005,47453,47394],{"class":4182},[4005,47455,47397],{"class":4190},[4005,47457,35480],{"class":4182},[4005,47459,47460],{"class":4007,"line":4051},[4005,47461,4036],{"emptyLinePlaceholder":4035},[4005,47463,47464],{"class":4007,"line":4057},[4005,47465,47466],{"class":4190},"\u002F\u002F 3. Через new (рідко використовується)\n",[4005,47468,47469,47471,47473,47475,47477,47479,47481],{"class":4007,"line":4063},[4005,47470,47404],{"class":4174},[4005,47472,4314],{"class":4182},[4005,47474,3768],{"class":4302},[4005,47476,4611],{"class":4182},[4005,47478,47391],{"class":4178},[4005,47480,5196],{"class":4182},[4005,47482,47483],{"class":4190},"\u002F\u002F повертає *StructName з zero values\n",[3908,47485,47486],{},[3871,47487,47488],{},"Різниця між екземпляром і покажчиком:",[3984,47490,47492],{"className":4162,"code":47491,"language":4164,"meta":3992,"style":3992},"type User struct {\n    ID   int64\n    Name string\n}\n\n\u002F\u002F Екземпляр (копія при присвоєнні)\nuser1 := User{ID: 1, Name: \"Олег\"}\nuser2 := user1           \u002F\u002F user2 — це КОПІЯ user1\nuser2.Name = \"Марія\"     \u002F\u002F Змінюємо user2\nfmt.Println(user1.Name)  \u002F\u002F Олег (не змінився!)\nfmt.Println(user2.Name)  \u002F\u002F Марія\n\n\u002F\u002F Покажчик (обидві змінні вказують на один екземпляр)\nuserPtr1 := &User{ID: 1, Name: \"Олег\"}\nuserPtr2 := userPtr1         \u002F\u002F userPtr2 вказує на той самий об'єкт\nuserPtr2.Name = \"Марія\"      \u002F\u002F Змінюємо через userPtr2\nfmt.Println(userPtr1.Name)   \u002F\u002F Марія (змінився!)\nfmt.Println(userPtr2.Name)   \u002F\u002F Марія\n",[3753,47493,47494,47504,47510,47516,47520,47524,47529,47555,47566,47581,47602,47622,47626,47631,47658,47670,47685,47706],{"__ignoreMap":3992},[4005,47495,47496,47498,47500,47502],{"class":4007,"line":4008},[4005,47497,4809],{"class":4171},[4005,47499,20760],{"class":4178},[4005,47501,10957],{"class":4171},[4005,47503,5073],{"class":4182},[4005,47505,47506,47508],{"class":4007,"line":4014},[4005,47507,46381],{"class":4174},[4005,47509,47009],{"class":4178},[4005,47511,47512,47514],{"class":4007,"line":4020},[4005,47513,20769],{"class":4174},[4005,47515,20772],{"class":4178},[4005,47517,47518],{"class":4007,"line":4026},[4005,47519,4078],{"class":4182},[4005,47521,47522],{"class":4007,"line":4032},[4005,47523,4036],{"emptyLinePlaceholder":4035},[4005,47525,47526],{"class":4007,"line":4039},[4005,47527,47528],{"class":4190},"\u002F\u002F Екземпляр (копія при присвоєнні)\n",[4005,47530,47531,47533,47535,47537,47539,47541,47543,47545,47547,47549,47551,47553],{"class":4007,"line":4045},[4005,47532,47122],{"class":4174},[4005,47534,4314],{"class":4182},[4005,47536,20798],{"class":4178},[4005,47538,16268],{"class":4182},[4005,47540,47055],{"class":4174},[4005,47542,11172],{"class":4182},[4005,47544,4393],{"class":4186},[4005,47546,3836],{"class":4182},[4005,47548,20803],{"class":4174},[4005,47550,11172],{"class":4182},[4005,47552,15780],{"class":4330},[4005,47554,4078],{"class":4182},[4005,47556,47557,47559,47561,47563],{"class":4007,"line":4051},[4005,47558,47144],{"class":4174},[4005,47560,4314],{"class":4182},[4005,47562,47122],{"class":4174},[4005,47564,47565],{"class":4190},"           \u002F\u002F user2 — це КОПІЯ user1\n",[4005,47567,47568,47570,47572,47574,47576,47578],{"class":4007,"line":4057},[4005,47569,47144],{"class":4174},[4005,47571,3769],{"class":4182},[4005,47573,20803],{"class":4174},[4005,47575,4183],{"class":4182},[4005,47577,38456],{"class":4330},[4005,47579,47580],{"class":4190},"     \u002F\u002F Змінюємо user2\n",[4005,47582,47583,47585,47587,47589,47591,47593,47595,47597,47599],{"class":4007,"line":4063},[4005,47584,3785],{"class":4174},[4005,47586,3769],{"class":4182},[4005,47588,5348],{"class":4302},[4005,47590,4611],{"class":4182},[4005,47592,47122],{"class":4174},[4005,47594,3769],{"class":4182},[4005,47596,20803],{"class":4174},[4005,47598,5196],{"class":4182},[4005,47600,47601],{"class":4190},"\u002F\u002F Олег (не змінився!)\n",[4005,47603,47604,47606,47608,47610,47612,47614,47616,47618,47620],{"class":4007,"line":4069},[4005,47605,3785],{"class":4174},[4005,47607,3769],{"class":4182},[4005,47609,5348],{"class":4302},[4005,47611,4611],{"class":4182},[4005,47613,47144],{"class":4174},[4005,47615,3769],{"class":4182},[4005,47617,20803],{"class":4174},[4005,47619,5196],{"class":4182},[4005,47621,47153],{"class":4190},[4005,47623,47624],{"class":4007,"line":4075},[4005,47625,4036],{"emptyLinePlaceholder":4035},[4005,47627,47628],{"class":4007,"line":4081},[4005,47629,47630],{"class":4190},"\u002F\u002F Покажчик (обидві змінні вказують на один екземпляр)\n",[4005,47632,47633,47636,47638,47640,47642,47644,47646,47648,47650,47652,47654,47656],{"class":4007,"line":4086},[4005,47634,47635],{"class":4174},"userPtr1",[4005,47637,44159],{"class":4182},[4005,47639,20798],{"class":4178},[4005,47641,16268],{"class":4182},[4005,47643,47055],{"class":4174},[4005,47645,11172],{"class":4182},[4005,47647,4393],{"class":4186},[4005,47649,3836],{"class":4182},[4005,47651,20803],{"class":4174},[4005,47653,11172],{"class":4182},[4005,47655,15780],{"class":4330},[4005,47657,4078],{"class":4182},[4005,47659,47660,47663,47665,47667],{"class":4007,"line":4092},[4005,47661,47662],{"class":4174},"userPtr2",[4005,47664,4314],{"class":4182},[4005,47666,47635],{"class":4174},[4005,47668,47669],{"class":4190},"         \u002F\u002F userPtr2 вказує на той самий об'єкт\n",[4005,47671,47672,47674,47676,47678,47680,47682],{"class":4007,"line":4098},[4005,47673,47662],{"class":4174},[4005,47675,3769],{"class":4182},[4005,47677,20803],{"class":4174},[4005,47679,4183],{"class":4182},[4005,47681,38456],{"class":4330},[4005,47683,47684],{"class":4190},"      \u002F\u002F Змінюємо через userPtr2\n",[4005,47686,47687,47689,47691,47693,47695,47697,47699,47701,47703],{"class":4007,"line":4104},[4005,47688,3785],{"class":4174},[4005,47690,3769],{"class":4182},[4005,47692,5348],{"class":4302},[4005,47694,4611],{"class":4182},[4005,47696,47635],{"class":4174},[4005,47698,3769],{"class":4182},[4005,47700,20803],{"class":4174},[4005,47702,5381],{"class":4182},[4005,47704,47705],{"class":4190},"\u002F\u002F Марія (змінився!)\n",[4005,47707,47708,47710,47712,47714,47716,47718,47720,47722,47724],{"class":4007,"line":4110},[4005,47709,3785],{"class":4174},[4005,47711,3769],{"class":4182},[4005,47713,5348],{"class":4302},[4005,47715,4611],{"class":4182},[4005,47717,47662],{"class":4174},[4005,47719,3769],{"class":4182},[4005,47721,20803],{"class":4174},[4005,47723,5381],{"class":4182},[4005,47725,47153],{"class":4190},[3908,47727,47728],{},[3871,47729,47730],{},"Основні форми ініціалізації полів:",[3984,47732,47734],{"className":4162,"code":47733,"language":4164,"meta":3992,"style":3992},"type User struct {\n    ID       int64\n    Username string\n    Email    string\n    IsActive bool\n}\n\n\u002F\u002F А. Іменовані поля (порядок не важливий)\nuser1 := User{\n    Username: \"alex\",\n    ID:       1,\n    Email:    \"alex@kostyl.dev\",\n    IsActive: true,\n}\n\n\u002F\u002F Б. Позиційні значення (порядок ВАЖЛИВИЙ, всі поля ОБОВ'ЯЗКОВІ)\nuser2 := User{1, \"alex\", \"alex@kostyl.dev\", true}\n\n\u002F\u002F В. Часткова ініціалізація (решта полів = zero value)\nuser3 := User{\n    ID:       1,\n    Username: \"alex\",\n    \u002F\u002F Email = \"\"\n    \u002F\u002F IsActive = false\n}\n\n\u002F\u002F Г. Порожня ініціалізація (всі поля = zero value)\nuser4 := User{}\nvar user5 User  \u002F\u002F те саме що User{}\n",[3753,47735,47736,47746,47752,47758,47764,47770,47774,47778,47783,47793,47803,47813,47823,47833,47837,47841,47846,47872,47876,47881,47892,47902,47912,47917,47922,47926,47930,47935,47946],{"__ignoreMap":3992},[4005,47737,47738,47740,47742,47744],{"class":4007,"line":4008},[4005,47739,4809],{"class":4171},[4005,47741,20760],{"class":4178},[4005,47743,10957],{"class":4171},[4005,47745,5073],{"class":4182},[4005,47747,47748,47750],{"class":4007,"line":4014},[4005,47749,46381],{"class":4174},[4005,47751,46384],{"class":4178},[4005,47753,47754,47756],{"class":4007,"line":4020},[4005,47755,33486],{"class":4174},[4005,47757,20772],{"class":4178},[4005,47759,47760,47762],{"class":4007,"line":4026},[4005,47761,4931],{"class":4174},[4005,47763,7527],{"class":4178},[4005,47765,47766,47768],{"class":4007,"line":4032},[4005,47767,46401],{"class":4174},[4005,47769,44612],{"class":4178},[4005,47771,47772],{"class":4007,"line":4039},[4005,47773,4078],{"class":4182},[4005,47775,47776],{"class":4007,"line":4045},[4005,47777,4036],{"emptyLinePlaceholder":4035},[4005,47779,47780],{"class":4007,"line":4051},[4005,47781,47782],{"class":4190},"\u002F\u002F А. Іменовані поля (порядок не важливий)\n",[4005,47784,47785,47787,47789,47791],{"class":4007,"line":4057},[4005,47786,47122],{"class":4174},[4005,47788,4314],{"class":4182},[4005,47790,20798],{"class":4178},[4005,47792,29461],{"class":4182},[4005,47794,47795,47797,47799,47801],{"class":4007,"line":4063},[4005,47796,33486],{"class":4174},[4005,47798,11172],{"class":4182},[4005,47800,46446],{"class":4330},[4005,47802,29475],{"class":4182},[4005,47804,47805,47807,47809,47811],{"class":4007,"line":4069},[4005,47806,46381],{"class":4174},[4005,47808,46433],{"class":4182},[4005,47810,4393],{"class":4186},[4005,47812,29475],{"class":4182},[4005,47814,47815,47817,47819,47821],{"class":4007,"line":4075},[4005,47816,4931],{"class":4174},[4005,47818,44670],{"class":4182},[4005,47820,46457],{"class":4330},[4005,47822,29475],{"class":4182},[4005,47824,47825,47827,47829,47831],{"class":4007,"line":4081},[4005,47826,46401],{"class":4174},[4005,47828,11172],{"class":4182},[4005,47830,4689],{"class":4171},[4005,47832,29475],{"class":4182},[4005,47834,47835],{"class":4007,"line":4086},[4005,47836,4078],{"class":4182},[4005,47838,47839],{"class":4007,"line":4092},[4005,47840,4036],{"emptyLinePlaceholder":4035},[4005,47842,47843],{"class":4007,"line":4098},[4005,47844,47845],{"class":4190},"\u002F\u002F Б. Позиційні значення (порядок ВАЖЛИВИЙ, всі поля ОБОВ'ЯЗКОВІ)\n",[4005,47847,47848,47850,47852,47854,47856,47858,47860,47862,47864,47866,47868,47870],{"class":4007,"line":4104},[4005,47849,47144],{"class":4174},[4005,47851,4314],{"class":4182},[4005,47853,20798],{"class":4178},[4005,47855,16268],{"class":4182},[4005,47857,4393],{"class":4186},[4005,47859,3836],{"class":4182},[4005,47861,46446],{"class":4330},[4005,47863,3836],{"class":4182},[4005,47865,46457],{"class":4330},[4005,47867,3836],{"class":4182},[4005,47869,4689],{"class":4171},[4005,47871,4078],{"class":4182},[4005,47873,47874],{"class":4007,"line":4110},[4005,47875,4036],{"emptyLinePlaceholder":4035},[4005,47877,47878],{"class":4007,"line":4937},[4005,47879,47880],{"class":4190},"\u002F\u002F В. Часткова ініціалізація (решта полів = zero value)\n",[4005,47882,47883,47886,47888,47890],{"class":4007,"line":4942},[4005,47884,47885],{"class":4174},"user3",[4005,47887,4314],{"class":4182},[4005,47889,20798],{"class":4178},[4005,47891,29461],{"class":4182},[4005,47893,47894,47896,47898,47900],{"class":4007,"line":4947},[4005,47895,46381],{"class":4174},[4005,47897,46433],{"class":4182},[4005,47899,4393],{"class":4186},[4005,47901,29475],{"class":4182},[4005,47903,47904,47906,47908,47910],{"class":4007,"line":4953},[4005,47905,33486],{"class":4174},[4005,47907,11172],{"class":4182},[4005,47909,46446],{"class":4330},[4005,47911,29475],{"class":4182},[4005,47913,47914],{"class":4007,"line":4960},[4005,47915,47916],{"class":4190},"    \u002F\u002F Email = \"\"\n",[4005,47918,47919],{"class":4007,"line":4973},[4005,47920,47921],{"class":4190},"    \u002F\u002F IsActive = false\n",[4005,47923,47924],{"class":4007,"line":4985},[4005,47925,4078],{"class":4182},[4005,47927,47928],{"class":4007,"line":7813},[4005,47929,4036],{"emptyLinePlaceholder":4035},[4005,47931,47932],{"class":4007,"line":7819},[4005,47933,47934],{"class":4190},"\u002F\u002F Г. Порожня ініціалізація (всі поля = zero value)\n",[4005,47936,47937,47940,47942,47944],{"class":4007,"line":7826},[4005,47938,47939],{"class":4174},"user4",[4005,47941,4314],{"class":4182},[4005,47943,20798],{"class":4178},[4005,47945,17635],{"class":4182},[4005,47947,47948,47950,47953,47955],{"class":4007,"line":7839},[4005,47949,3963],{"class":4171},[4005,47951,47952],{"class":4174}," user5",[4005,47954,20760],{"class":4178},[4005,47956,47957],{"class":4190},"  \u002F\u002F те саме що User{}\n",[3908,47959,47960],{},"Тепер розглянемо детальніше кожен спосіб:",[3908,47962,47963],{},[3871,47964,47965],{},"1. Літерал з іменованими полями (рекомендовано):",[3984,47967,47969],{"className":4162,"code":47968,"language":4164,"meta":3992,"style":3992},"user := User{\n    ID:       1,\n    Username: \"alex\",\n    Email:    \"alex@kostyl.dev\",\n    IsActive: true,\n}\n",[3753,47970,47971,47981,47991,48001,48011,48021],{"__ignoreMap":3992},[4005,47972,47973,47975,47977,47979],{"class":4007,"line":4008},[4005,47974,20793],{"class":4174},[4005,47976,4314],{"class":4182},[4005,47978,20798],{"class":4178},[4005,47980,29461],{"class":4182},[4005,47982,47983,47985,47987,47989],{"class":4007,"line":4014},[4005,47984,46381],{"class":4174},[4005,47986,46433],{"class":4182},[4005,47988,4393],{"class":4186},[4005,47990,29475],{"class":4182},[4005,47992,47993,47995,47997,47999],{"class":4007,"line":4020},[4005,47994,33486],{"class":4174},[4005,47996,11172],{"class":4182},[4005,47998,46446],{"class":4330},[4005,48000,29475],{"class":4182},[4005,48002,48003,48005,48007,48009],{"class":4007,"line":4026},[4005,48004,4931],{"class":4174},[4005,48006,44670],{"class":4182},[4005,48008,46457],{"class":4330},[4005,48010,29475],{"class":4182},[4005,48012,48013,48015,48017,48019],{"class":4007,"line":4032},[4005,48014,46401],{"class":4174},[4005,48016,11172],{"class":4182},[4005,48018,4689],{"class":4171},[4005,48020,29475],{"class":4182},[4005,48022,48023],{"class":4007,"line":4039},[4005,48024,4078],{"class":4182},[3908,48026,48027],{},[3871,48028,13352],{},[3746,48030,48031,48034,48037],{},[3749,48032,48033],{},"✅ Порядок полів не важливий",[3749,48035,48036],{},"✅ Можна пропустити поля (отримають zero value)",[3749,48038,48039],{},"✅ Читабельно і безпечно",[3908,48041,48042],{},[3871,48043,48044],{},"2. Літерал без імен (не рекомендовано):",[3984,48046,48048],{"className":4162,"code":48047,"language":4164,"meta":3992,"style":3992},"user := User{1, \"alex\", \"alex@kostyl.dev\", true}\n",[3753,48049,48050],{"__ignoreMap":3992},[4005,48051,48052,48054,48056,48058,48060,48062,48064,48066,48068,48070,48072,48074],{"class":4007,"line":4008},[4005,48053,20793],{"class":4174},[4005,48055,4314],{"class":4182},[4005,48057,20798],{"class":4178},[4005,48059,16268],{"class":4182},[4005,48061,4393],{"class":4186},[4005,48063,3836],{"class":4182},[4005,48065,46446],{"class":4330},[4005,48067,3836],{"class":4182},[4005,48069,46457],{"class":4330},[4005,48071,3836],{"class":4182},[4005,48073,4689],{"class":4171},[4005,48075,4078],{"class":4182},[3908,48077,48078],{},[3871,48079,48080],{},"Недоліки:",[3746,48082,48083,48086,48089],{},[3749,48084,48085],{},"❌ Порядок ОБОВ'ЯЗКОВИЙ",[3749,48087,48088],{},"❌ Треба вказати ВСІ поля",[3749,48090,48091],{},"❌ При зміні структури — код ламається",[3908,48093,48094],{},[3871,48095,48096],{},"3. Zero Value (всі поля = 0):",[3984,48098,48100],{"className":4162,"code":48099,"language":4164,"meta":3992,"style":3992},"var user User\n\u002F\u002F user.ID = 0\n\u002F\u002F user.Username = \"\"\n\u002F\u002F user.Email = \"\"\n\u002F\u002F user.IsActive = false\n",[3753,48101,48102,48111,48116,48121,48126],{"__ignoreMap":3992},[4005,48103,48104,48106,48108],{"class":4007,"line":4008},[4005,48105,3963],{"class":4171},[4005,48107,46232],{"class":4174},[4005,48109,48110],{"class":4178}," User\n",[4005,48112,48113],{"class":4007,"line":4014},[4005,48114,48115],{"class":4190},"\u002F\u002F user.ID = 0\n",[4005,48117,48118],{"class":4007,"line":4020},[4005,48119,48120],{"class":4190},"\u002F\u002F user.Username = \"\"\n",[4005,48122,48123],{"class":4007,"line":4026},[4005,48124,48125],{"class":4190},"\u002F\u002F user.Email = \"\"\n",[4005,48127,48128],{"class":4007,"line":4032},[4005,48129,48130],{"class":4190},"\u002F\u002F user.IsActive = false\n",[3908,48132,48133],{},[3871,48134,48135,48136,5831],{},"4. Покажчик на структуру через ",[3753,48137,23002],{},[3984,48139,48141],{"className":4162,"code":48140,"language":4164,"meta":3992,"style":3992},"user := &User{\n    ID:       1,\n    Username: \"alex\",\n}\n",[3753,48142,48143,48153,48163,48173],{"__ignoreMap":3992},[4005,48144,48145,48147,48149,48151],{"class":4007,"line":4008},[4005,48146,20793],{"class":4174},[4005,48148,44159],{"class":4182},[4005,48150,20798],{"class":4178},[4005,48152,29461],{"class":4182},[4005,48154,48155,48157,48159,48161],{"class":4007,"line":4014},[4005,48156,46381],{"class":4174},[4005,48158,46433],{"class":4182},[4005,48160,4393],{"class":4186},[4005,48162,29475],{"class":4182},[4005,48164,48165,48167,48169,48171],{"class":4007,"line":4020},[4005,48166,33486],{"class":4174},[4005,48168,11172],{"class":4182},[4005,48170,46446],{"class":4330},[4005,48172,29475],{"class":4182},[4005,48174,48175],{"class":4007,"line":4026},[4005,48176,4078],{"class":4182},[3908,48178,48179],{},[3871,48180,11683,48181,6406],{},[3753,48182,23002],{},[3908,48184,5035,48185,48187,48188,48191],{},[3753,48186,23002],{}," (амперсанд) створює покажчик на щойно створений екземпляр структури. Це ",[3871,48189,48190],{},"надзвичайно популярна практика"," в Go, особливо у таких сценаріях:",[3908,48193,48194],{},[3871,48195,12460,48196,48198],{},[3753,48197,23002],{}," (покажчики):",[3908,48200,27644,48201,48204],{},[3871,48202,48203],{},"Конструктори повертають покажчики"," — це стандарт у Go:",[3984,48206,48208],{"className":4162,"code":48207,"language":4164,"meta":3992,"style":3992},"func NewUser(name string) *User {  \u002F\u002F Зверніть увагу на *User\n    return &User{Name: name}       \u002F\u002F Повертаємо покажчик\n}\n",[3753,48209,48210,48232,48254],{"__ignoreMap":3992},[4005,48211,48212,48214,48217,48219,48221,48223,48225,48227,48229],{"class":4007,"line":4008},[4005,48213,4299],{"class":4171},[4005,48215,48216],{"class":4302}," NewUser",[4005,48218,4611],{"class":4182},[4005,48220,4650],{"class":4174},[4005,48222,4237],{"class":4178},[4005,48224,44641],{"class":4182},[4005,48226,20798],{"class":4178},[4005,48228,13715],{"class":4182},[4005,48230,48231],{"class":4190},"\u002F\u002F Зверніть увагу на *User\n",[4005,48233,48234,48236,48238,48240,48242,48244,48246,48248,48251],{"class":4007,"line":4014},[4005,48235,5260],{"class":4836},[4005,48237,44708],{"class":4182},[4005,48239,20798],{"class":4178},[4005,48241,16268],{"class":4182},[4005,48243,20803],{"class":4174},[4005,48245,11172],{"class":4182},[4005,48247,4650],{"class":4174},[4005,48249,48250],{"class":4182},"}       ",[4005,48252,48253],{"class":4190},"\u002F\u002F Повертаємо покажчик\n",[4005,48255,48256],{"class":4007,"line":4020},[4005,48257,4078],{"class":4182},[3908,48259,27644,48260,48263],{},[3871,48261,48262],{},"Методи, що змінюють структуру"," — потребують покажчика:",[3984,48265,48267],{"className":4162,"code":48266,"language":4164,"meta":3992,"style":3992},"func (u *User) Activate() {  \u002F\u002F *User — інакше зміни не збережуться\n    u.IsActive = true\n}\n",[3753,48268,48269,48293,48306],{"__ignoreMap":3992},[4005,48270,48271,48273,48275,48278,48280,48282,48284,48287,48290],{"class":4007,"line":4008},[4005,48272,4299],{"class":4171},[4005,48274,4761],{"class":4182},[4005,48276,48277],{"class":4174},"u ",[4005,48279,8128],{"class":4182},[4005,48281,20798],{"class":4178},[4005,48283,4498],{"class":4182},[4005,48285,48286],{"class":4302},"Activate",[4005,48288,48289],{"class":4182},"() {  ",[4005,48291,48292],{"class":4190},"\u002F\u002F *User — інакше зміни не збережуться\n",[4005,48294,48295,48297,48299,48302,48304],{"class":4007,"line":4014},[4005,48296,45590],{"class":4174},[4005,48298,3769],{"class":4182},[4005,48300,48301],{"class":4174},"IsActive",[4005,48303,4183],{"class":4182},[4005,48305,4477],{"class":4171},[4005,48307,48308],{"class":4007,"line":4020},[4005,48309,4078],{"class":4182},[3908,48311,27644,48312,48315],{},[3871,48313,48314],{},"Великі структури"," — копіювання дороге:",[3984,48317,48319],{"className":4162,"code":48318,"language":4164,"meta":3992,"style":3992},"type LargeData struct {\n    Buffer [1024*1024]byte  \u002F\u002F 1 МБ даних\n}\n\u002F\u002F Краще передавати покажчик, ніж копіювати 1 МБ\ndata := &LargeData{}\n",[3753,48320,48321,48332,48352,48356,48361],{"__ignoreMap":3992},[4005,48322,48323,48325,48328,48330],{"class":4007,"line":4008},[4005,48324,4809],{"class":4171},[4005,48326,48327],{"class":4178}," LargeData",[4005,48329,10957],{"class":4171},[4005,48331,5073],{"class":4182},[4005,48333,48334,48337,48339,48341,48343,48345,48347,48349],{"class":4007,"line":4014},[4005,48335,48336],{"class":4174},"    Buffer",[4005,48338,27738],{"class":4182},[4005,48340,5167],{"class":4186},[4005,48342,8128],{"class":4182},[4005,48344,5167],{"class":4186},[4005,48346,28540],{"class":4182},[4005,48348,5162],{"class":4178},[4005,48350,48351],{"class":4190},"  \u002F\u002F 1 МБ даних\n",[4005,48353,48354],{"class":4007,"line":4020},[4005,48355,4078],{"class":4182},[4005,48357,48358],{"class":4007,"line":4026},[4005,48359,48360],{"class":4190},"\u002F\u002F Краще передавати покажчик, ніж копіювати 1 МБ\n",[4005,48362,48363,48365,48367,48370],{"class":4007,"line":4032},[4005,48364,5193],{"class":4174},[4005,48366,44159],{"class":4182},[4005,48368,48369],{"class":4178},"LargeData",[4005,48371,17635],{"class":4182},[3908,48373,27644,48374,48377,48378,5831],{},[3871,48375,48376],{},"Опціональні значення"," — можна передати ",[3753,48379,4209],{},[3984,48381,48383],{"className":4162,"code":48382,"language":4164,"meta":3992,"style":3992},"func Process(config *Config) {\n    if config == nil {\n        config = &Config{\u002F* defaults *\u002F}\n    }\n}\n",[3753,48384,48385,48403,48416,48432,48436],{"__ignoreMap":3992},[4005,48386,48387,48389,48392,48394,48396,48398,48401],{"class":4007,"line":4008},[4005,48388,4299],{"class":4171},[4005,48390,48391],{"class":4302}," Process",[4005,48393,4611],{"class":4182},[4005,48395,38339],{"class":4174},[4005,48397,5520],{"class":4182},[4005,48399,48400],{"class":4178},"Config",[4005,48402,12789],{"class":4182},[4005,48404,48405,48407,48410,48412,48414],{"class":4007,"line":4014},[4005,48406,5104],{"class":4836},[4005,48408,48409],{"class":4174}," config",[4005,48411,5473],{"class":4182},[4005,48413,4209],{"class":4171},[4005,48415,5073],{"class":4182},[4005,48417,48418,48421,48423,48425,48427,48430],{"class":4007,"line":4020},[4005,48419,48420],{"class":4174},"        config",[4005,48422,42463],{"class":4182},[4005,48424,48400],{"class":4178},[4005,48426,16268],{"class":4182},[4005,48428,48429],{"class":4190},"\u002F* defaults *\u002F",[4005,48431,4078],{"class":4182},[4005,48433,48434],{"class":4007,"line":4026},[4005,48435,5127],{"class":4182},[4005,48437,48438],{"class":4007,"line":4032},[4005,48439,4078],{"class":4182},[3908,48441,48442],{},[3871,48443,48444,48445,48447],{},"Коли НЕ використовувати ",[3753,48446,23002],{}," (значення):",[3908,48449,46957,48450,48453],{},[3871,48451,48452],{},"Малі структури"," (\u003C 64 байт) — копіювання дешеве:",[3984,48455,48457],{"className":4162,"code":48456,"language":4164,"meta":3992,"style":3992},"type Point struct {\n    X, Y int  \u002F\u002F Лише 16 байт\n}\n\u002F\u002F Краще передавати по значенню\np := Point{X: 10, Y: 20}\n",[3753,48458,48459,48470,48485,48489,48494],{"__ignoreMap":3992},[4005,48460,48461,48463,48466,48468],{"class":4007,"line":4008},[4005,48462,4809],{"class":4171},[4005,48464,48465],{"class":4178}," Point",[4005,48467,10957],{"class":4171},[4005,48469,5073],{"class":4182},[4005,48471,48472,48475,48477,48480,48482],{"class":4007,"line":4014},[4005,48473,48474],{"class":4174},"    X",[4005,48476,3836],{"class":4182},[4005,48478,48479],{"class":4174},"Y",[4005,48481,4224],{"class":4178},[4005,48483,48484],{"class":4190},"  \u002F\u002F Лише 16 байт\n",[4005,48486,48487],{"class":4007,"line":4020},[4005,48488,4078],{"class":4182},[4005,48490,48491],{"class":4007,"line":4026},[4005,48492,48493],{"class":4190},"\u002F\u002F Краще передавати по значенню\n",[4005,48495,48496,48498,48500,48503,48505,48508,48510,48512,48514,48516,48518,48520],{"class":4007,"line":4032},[4005,48497,3908],{"class":4174},[4005,48499,4314],{"class":4182},[4005,48501,48502],{"class":4178},"Point",[4005,48504,16268],{"class":4182},[4005,48506,48507],{"class":4174},"X",[4005,48509,11172],{"class":4182},[4005,48511,4631],{"class":4186},[4005,48513,3836],{"class":4182},[4005,48515,48479],{"class":4174},[4005,48517,11172],{"class":4182},[4005,48519,5335],{"class":4186},[4005,48521,4078],{"class":4182},[3908,48523,46957,48524,48527],{},[3871,48525,48526],{},"Незмінні дані"," (immutable):",[3984,48529,48531],{"className":4162,"code":48530,"language":4164,"meta":3992,"style":3992},"type Color struct {\n    R, G, B uint8\n}\n\u002F\u002F Якщо не змінюємо — не потрібен покажчик\nc := Color{R: 255, G: 0, B: 0}\n",[3753,48532,48533,48544,48561,48565,48570],{"__ignoreMap":3992},[4005,48534,48535,48537,48540,48542],{"class":4007,"line":4008},[4005,48536,4809],{"class":4171},[4005,48538,48539],{"class":4178}," Color",[4005,48541,10957],{"class":4171},[4005,48543,5073],{"class":4182},[4005,48545,48546,48549,48551,48554,48556,48559],{"class":4007,"line":4014},[4005,48547,48548],{"class":4174},"    R",[4005,48550,3836],{"class":4182},[4005,48552,48553],{"class":4174},"G",[4005,48555,3836],{"class":4182},[4005,48557,48558],{"class":4174},"B",[4005,48560,5965],{"class":4178},[4005,48562,48563],{"class":4007,"line":4020},[4005,48564,4078],{"class":4182},[4005,48566,48567],{"class":4007,"line":4026},[4005,48568,48569],{"class":4190},"\u002F\u002F Якщо не змінюємо — не потрібен покажчик\n",[4005,48571,48572,48574,48576,48579,48581,48584,48586,48589,48591,48593,48595,48597,48599,48601,48603,48605],{"class":4007,"line":4032},[4005,48573,4386],{"class":4174},[4005,48575,4314],{"class":4182},[4005,48577,48578],{"class":4178},"Color",[4005,48580,16268],{"class":4182},[4005,48582,48583],{"class":4174},"R",[4005,48585,11172],{"class":4182},[4005,48587,48588],{"class":4186},"255",[4005,48590,3836],{"class":4182},[4005,48592,48553],{"class":4174},[4005,48594,11172],{"class":4182},[4005,48596,4200],{"class":4186},[4005,48598,3836],{"class":4182},[4005,48600,48558],{"class":4174},[4005,48602,11172],{"class":4182},[4005,48604,4200],{"class":4186},[4005,48606,4078],{"class":4182},[3908,48608,48609],{},[3871,48610,48611],{},"Різниця в пам'яті:",[3984,48613,48615],{"className":4162,"code":48614,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Без & — екземпляр на стеку (швидко, автоматично видаляється)\nuser1 := User{ID: 1}\n\n\u002F\u002F З & — екземпляр у купі (повільніше, але живе довше)\nuser2 := &User{ID: 1}\n",[3753,48616,48617,48622,48640,48644,48649],{"__ignoreMap":3992},[4005,48618,48619],{"class":4007,"line":4008},[4005,48620,48621],{"class":4190},"\u002F\u002F Без & — екземпляр на стеку (швидко, автоматично видаляється)\n",[4005,48623,48624,48626,48628,48630,48632,48634,48636,48638],{"class":4007,"line":4014},[4005,48625,47122],{"class":4174},[4005,48627,4314],{"class":4182},[4005,48629,20798],{"class":4178},[4005,48631,16268],{"class":4182},[4005,48633,47055],{"class":4174},[4005,48635,11172],{"class":4182},[4005,48637,4393],{"class":4186},[4005,48639,4078],{"class":4182},[4005,48641,48642],{"class":4007,"line":4020},[4005,48643,4036],{"emptyLinePlaceholder":4035},[4005,48645,48646],{"class":4007,"line":4026},[4005,48647,48648],{"class":4190},"\u002F\u002F З & — екземпляр у купі (повільніше, але живе довше)\n",[4005,48650,48651,48653,48655,48657,48659,48661,48663,48665],{"class":4007,"line":4032},[4005,48652,47144],{"class":4174},[4005,48654,44159],{"class":4182},[4005,48656,20798],{"class":4178},[4005,48658,16268],{"class":4182},[4005,48660,47055],{"class":4174},[4005,48662,11172],{"class":4182},[4005,48664,4393],{"class":4186},[4005,48666,4078],{"class":4182},[4484,48668,48669,48674,48703],{"icon":4750},[3908,48670,48671],{},[3871,48672,48673],{},"Статистика з Go проєктів:",[3746,48675,48676,48685,48693],{},[3749,48677,48678,48681,48682,5032],{},[3871,48679,48680],{},"80-90%"," конструкторів повертають покажчики (",[3753,48683,48684],{},"*Type",[3749,48686,48687,48690,48691,5032],{},[3871,48688,48689],{},"Всі методи, що змінюють дані",", використовують pointer receiver (",[3753,48692,48684],{},[3749,48694,48695,48696,3836,48699,48702],{},"Функції стандартної бібліотеки (",[3753,48697,48698],{},"json.Unmarshal",[3753,48700,48701],{},"sql.Scan",") очікують покажчики",[3908,48704,48705,48707,48708,6413,48710,48713],{},[3871,48706,6383],{}," використання ",[3753,48709,23002],{},[3871,48711,48712],{},"норма"," в Go, не виняток!",[3908,48715,48716],{},[3871,48717,10831],{},[12533,48719,48720,48855],{},[12536,48721,48723],{"icon":12538,"label":48722},"Go — явний вибір",[3984,48724,48726],{"className":4162,"code":48725,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Ви контролюєте: копія чи покажчик\nuser1 := User{ID: 1}   \u002F\u002F Копія (stack)\nuser2 := &User{ID: 1}  \u002F\u002F Покажчик (heap)\n\nfunc UpdateByValue(u User) {\n    u.ID = 999  \u002F\u002F Не вплине на оригінал\n}\n\nfunc UpdateByPointer(u *User) {\n    u.ID = 999  \u002F\u002F Змінить оригінал\n}\n",[3753,48727,48728,48733,48755,48777,48781,48796,48811,48815,48819,48836,48851],{"__ignoreMap":3992},[4005,48729,48730],{"class":4007,"line":4008},[4005,48731,48732],{"class":4190},"\u002F\u002F Ви контролюєте: копія чи покажчик\n",[4005,48734,48735,48737,48739,48741,48743,48745,48747,48749,48752],{"class":4007,"line":4014},[4005,48736,47122],{"class":4174},[4005,48738,4314],{"class":4182},[4005,48740,20798],{"class":4178},[4005,48742,16268],{"class":4182},[4005,48744,47055],{"class":4174},[4005,48746,11172],{"class":4182},[4005,48748,4393],{"class":4186},[4005,48750,48751],{"class":4182},"}   ",[4005,48753,48754],{"class":4190},"\u002F\u002F Копія (stack)\n",[4005,48756,48757,48759,48761,48763,48765,48767,48769,48771,48774],{"class":4007,"line":4020},[4005,48758,47144],{"class":4174},[4005,48760,44159],{"class":4182},[4005,48762,20798],{"class":4178},[4005,48764,16268],{"class":4182},[4005,48766,47055],{"class":4174},[4005,48768,11172],{"class":4182},[4005,48770,4393],{"class":4186},[4005,48772,48773],{"class":4182},"}  ",[4005,48775,48776],{"class":4190},"\u002F\u002F Покажчик (heap)\n",[4005,48778,48779],{"class":4007,"line":4026},[4005,48780,4036],{"emptyLinePlaceholder":4035},[4005,48782,48783,48785,48788,48790,48792,48794],{"class":4007,"line":4032},[4005,48784,4299],{"class":4171},[4005,48786,48787],{"class":4302}," UpdateByValue",[4005,48789,4611],{"class":4182},[4005,48791,45582],{"class":4174},[4005,48793,20760],{"class":4178},[4005,48795,12789],{"class":4182},[4005,48797,48798,48800,48802,48804,48806,48808],{"class":4007,"line":4039},[4005,48799,45590],{"class":4174},[4005,48801,3769],{"class":4182},[4005,48803,47055],{"class":4174},[4005,48805,4183],{"class":4182},[4005,48807,27172],{"class":4186},[4005,48809,48810],{"class":4190},"  \u002F\u002F Не вплине на оригінал\n",[4005,48812,48813],{"class":4007,"line":4045},[4005,48814,4078],{"class":4182},[4005,48816,48817],{"class":4007,"line":4051},[4005,48818,4036],{"emptyLinePlaceholder":4035},[4005,48820,48821,48823,48826,48828,48830,48832,48834],{"class":4007,"line":4057},[4005,48822,4299],{"class":4171},[4005,48824,48825],{"class":4302}," UpdateByPointer",[4005,48827,4611],{"class":4182},[4005,48829,45582],{"class":4174},[4005,48831,5520],{"class":4182},[4005,48833,20798],{"class":4178},[4005,48835,12789],{"class":4182},[4005,48837,48838,48840,48842,48844,48846,48848],{"class":4007,"line":4063},[4005,48839,45590],{"class":4174},[4005,48841,3769],{"class":4182},[4005,48843,47055],{"class":4174},[4005,48845,4183],{"class":4182},[4005,48847,27172],{"class":4186},[4005,48849,48850],{"class":4190},"  \u002F\u002F Змінить оригінал\n",[4005,48852,48853],{"class":4007,"line":4069},[4005,48854,4078],{"class":4182},[12536,48856,48858,48973],{"icon":12743,"label":48857},"Java — завжди посилання",[3984,48859,48861],{"className":12746,"code":48860,"language":12748,"meta":3992,"style":3992},"\u002F\u002F Всі об'єкти — це завжди посилання\nUser user1 = new User(1);  \u002F\u002F Завжди у heap\nUser user2 = new User(1);  \u002F\u002F Завжди у heap\n\nvoid updateUser(User u) {\n    u.id = 999;  \u002F\u002F Завжди змінить оригінал\n}\n\n\u002F\u002F Примітиви — виняток:\nint x = 10;  \u002F\u002F По значенню\n",[3753,48862,48863,48868,48889,48909,48913,48928,48945,48949,48953,48958],{"__ignoreMap":3992},[4005,48864,48865],{"class":4007,"line":4008},[4005,48866,48867],{"class":4190},"\u002F\u002F Всі об'єкти — це завжди посилання\n",[4005,48869,48870,48872,48874,48876,48878,48880,48882,48884,48886],{"class":4007,"line":4014},[4005,48871,20798],{"class":4178},[4005,48873,47044],{"class":4174},[4005,48875,4183],{"class":4182},[4005,48877,3768],{"class":4836},[4005,48879,20760],{"class":4302},[4005,48881,4611],{"class":4182},[4005,48883,4393],{"class":4186},[4005,48885,45023],{"class":4182},[4005,48887,48888],{"class":4190},"\u002F\u002F Завжди у heap\n",[4005,48890,48891,48893,48895,48897,48899,48901,48903,48905,48907],{"class":4007,"line":4020},[4005,48892,20798],{"class":4178},[4005,48894,47076],{"class":4174},[4005,48896,4183],{"class":4182},[4005,48898,3768],{"class":4836},[4005,48900,20760],{"class":4302},[4005,48902,4611],{"class":4182},[4005,48904,4393],{"class":4186},[4005,48906,45023],{"class":4182},[4005,48908,48888],{"class":4190},[4005,48910,48911],{"class":4007,"line":4026},[4005,48912,4036],{"emptyLinePlaceholder":4035},[4005,48914,48915,48918,48921,48923,48925],{"class":4007,"line":4032},[4005,48916,48917],{"class":4178},"void",[4005,48919,48920],{"class":4302}," updateUser",[4005,48922,4611],{"class":4182},[4005,48924,20798],{"class":4178},[4005,48926,48927],{"class":4182}," u) {\n",[4005,48929,48930,48932,48934,48936,48938,48940,48942],{"class":4007,"line":4039},[4005,48931,45590],{"class":4174},[4005,48933,3769],{"class":4182},[4005,48935,7180],{"class":4174},[4005,48937,4183],{"class":4182},[4005,48939,27172],{"class":4186},[4005,48941,18506],{"class":4182},[4005,48943,48944],{"class":4190},"\u002F\u002F Завжди змінить оригінал\n",[4005,48946,48947],{"class":4007,"line":4045},[4005,48948,4078],{"class":4182},[4005,48950,48951],{"class":4007,"line":4051},[4005,48952,4036],{"emptyLinePlaceholder":4035},[4005,48954,48955],{"class":4007,"line":4057},[4005,48956,48957],{"class":4190},"\u002F\u002F Примітиви — виняток:\n",[4005,48959,48960,48962,48964,48966,48968,48970],{"class":4007,"line":4063},[4005,48961,4158],{"class":4178},[4005,48963,6141],{"class":4174},[4005,48965,4183],{"class":4182},[4005,48967,4631],{"class":4186},[4005,48969,18506],{"class":4182},[4005,48971,48972],{"class":4190},"\u002F\u002F По значенню\n",[3908,48974,48975,48978],{},[3871,48976,48977],{},"У Java немає вибору:"," об'єкти завжди у heap, завжди передаються за посиланням.",[3908,48980,48981],{},[3871,48982,48983],{},"5. Функція-конструктор (ідіоматичний Go):",[12533,48985,48986,49167],{},[12536,48987,48989,49149,49153],{"icon":12538,"label":48988},"Go — функція-фабрика",[3984,48990,48992],{"className":4162,"code":48991,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Конструктор (функція-фабрика)\nfunc NewUser(id int64, username, email string) *User {\n    return &User{\n        ID:       id,\n        Username: username,\n        Email:    email,\n        IsActive: true,  \u002F\u002F Значення за замовчуванням\n    }\n}\n\n\u002F\u002F Використання:\nuser := NewUser(1, \"alex\", \"alex@kostyl.dev\")\nfmt.Printf(\"Створено: %+v\\n\", user)\n",[3753,48993,48994,48999,49027,49037,49048,49059,49070,49085,49089,49093,49097,49102,49124],{"__ignoreMap":3992},[4005,48995,48996],{"class":4007,"line":4008},[4005,48997,48998],{"class":4190},"\u002F\u002F Конструктор (функція-фабрика)\n",[4005,49000,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025],{"class":4007,"line":4014},[4005,49002,4299],{"class":4171},[4005,49004,48216],{"class":4302},[4005,49006,4611],{"class":4182},[4005,49008,7180],{"class":4174},[4005,49010,4179],{"class":4178},[4005,49012,3836],{"class":4182},[4005,49014,33385],{"class":4174},[4005,49016,3836],{"class":4182},[4005,49018,13913],{"class":4174},[4005,49020,4237],{"class":4178},[4005,49022,44641],{"class":4182},[4005,49024,20798],{"class":4178},[4005,49026,5073],{"class":4182},[4005,49028,49029,49031,49033,49035],{"class":4007,"line":4020},[4005,49030,5260],{"class":4836},[4005,49032,44708],{"class":4182},[4005,49034,20798],{"class":4178},[4005,49036,29461],{"class":4182},[4005,49038,49039,49042,49044,49046],{"class":4007,"line":4026},[4005,49040,49041],{"class":4174},"        ID",[4005,49043,46433],{"class":4182},[4005,49045,7180],{"class":4174},[4005,49047,29475],{"class":4182},[4005,49049,49050,49053,49055,49057],{"class":4007,"line":4032},[4005,49051,49052],{"class":4174},"        Username",[4005,49054,11172],{"class":4182},[4005,49056,33385],{"class":4174},[4005,49058,29475],{"class":4182},[4005,49060,49061,49064,49066,49068],{"class":4007,"line":4039},[4005,49062,49063],{"class":4174},"        Email",[4005,49065,44670],{"class":4182},[4005,49067,13913],{"class":4174},[4005,49069,29475],{"class":4182},[4005,49071,49072,49075,49077,49079,49082],{"class":4007,"line":4045},[4005,49073,49074],{"class":4174},"        IsActive",[4005,49076,11172],{"class":4182},[4005,49078,4689],{"class":4171},[4005,49080,49081],{"class":4182},",  ",[4005,49083,49084],{"class":4190},"\u002F\u002F Значення за замовчуванням\n",[4005,49086,49087],{"class":4007,"line":4051},[4005,49088,5127],{"class":4182},[4005,49090,49091],{"class":4007,"line":4057},[4005,49092,4078],{"class":4182},[4005,49094,49095],{"class":4007,"line":4063},[4005,49096,4036],{"emptyLinePlaceholder":4035},[4005,49098,49099],{"class":4007,"line":4069},[4005,49100,49101],{"class":4190},"\u002F\u002F Використання:\n",[4005,49103,49104,49106,49108,49110,49112,49114,49116,49118,49120,49122],{"class":4007,"line":4075},[4005,49105,20793],{"class":4174},[4005,49107,4314],{"class":4182},[4005,49109,43884],{"class":4302},[4005,49111,4611],{"class":4182},[4005,49113,4393],{"class":4186},[4005,49115,3836],{"class":4182},[4005,49117,46446],{"class":4330},[4005,49119,3836],{"class":4182},[4005,49121,46457],{"class":4330},[4005,49123,4482],{"class":4182},[4005,49125,49126,49128,49130,49132,49134,49137,49139,49141,49143,49145,49147],{"class":4007,"line":4081},[4005,49127,3785],{"class":4174},[4005,49129,3769],{"class":4182},[4005,49131,7945],{"class":4302},[4005,49133,4611],{"class":4182},[4005,49135,49136],{"class":4330},"\"Створено: ",[4005,49138,20679],{"class":4174},[4005,49140,7965],{"class":7964},[4005,49142,7968],{"class":4330},[4005,49144,3836],{"class":4182},[4005,49146,20793],{"class":4174},[4005,49148,4482],{"class":4182},[3908,49150,49151],{},[3871,49152,13352],{},[3746,49154,49155,49158,49161,49164],{},[3749,49156,49157],{},"✅ Валідація параметрів",[3749,49159,49160],{},"✅ Значення за замовчуванням",[3749,49162,49163],{},"✅ Ініціалізація складної логіки",[3749,49165,49166],{},"✅ Приховування деталей створення",[12536,49168,49170,49434,49439],{"icon":12743,"label":49169},"Java — конструктор",[3984,49171,49173],{"className":12746,"code":49172,"language":12748,"meta":3992,"style":3992},"public class User {\n    private long id;\n    private String username;\n    private String email;\n    private boolean isActive;\n    \n    \u002F\u002F Конструктор\n    public User(long id, String username, String email) {\n        this.id = id;\n        this.username = username;\n        this.email = email;\n        this.isActive = true;  \u002F\u002F За замовчуванням\n    }\n    \n    \u002F\u002F Перевантажений конструктор\n    public User(long id, String username, String email, boolean isActive) {\n        this.id = id;\n        this.username = username;\n        this.email = email;\n        this.isActive = isActive;\n    }\n}\n\n\u002F\u002F Використання:\nUser user = new User(1, \"alex\", \"alex@kostyl.dev\");\n",[3753,49174,49175,49185,49195,49205,49215,49225,49229,49234,49260,49270,49280,49290,49307,49311,49315,49320,49352,49362,49372,49382,49392,49396,49400,49404,49408],{"__ignoreMap":3992},[4005,49176,49177,49179,49181,49183],{"class":4007,"line":4008},[4005,49178,12755],{"class":4171},[4005,49180,12758],{"class":4171},[4005,49182,20760],{"class":4178},[4005,49184,5073],{"class":4182},[4005,49186,49187,49189,49191,49193],{"class":4007,"line":4014},[4005,49188,46567],{"class":4171},[4005,49190,46570],{"class":4178},[4005,49192,7146],{"class":4174},[4005,49194,12805],{"class":4182},[4005,49196,49197,49199,49201,49203],{"class":4007,"line":4020},[4005,49198,46567],{"class":4171},[4005,49200,46581],{"class":4178},[4005,49202,46584],{"class":4174},[4005,49204,12805],{"class":4182},[4005,49206,49207,49209,49211,49213],{"class":4007,"line":4026},[4005,49208,46567],{"class":4171},[4005,49210,46581],{"class":4178},[4005,49212,14269],{"class":4174},[4005,49214,12805],{"class":4182},[4005,49216,49217,49219,49221,49223],{"class":4007,"line":4032},[4005,49218,46567],{"class":4171},[4005,49220,46603],{"class":4178},[4005,49222,10172],{"class":4174},[4005,49224,12805],{"class":4182},[4005,49226,49227],{"class":4007,"line":4039},[4005,49228,5214],{"class":4182},[4005,49230,49231],{"class":4007,"line":4045},[4005,49232,49233],{"class":4190},"    \u002F\u002F Конструктор\n",[4005,49235,49236,49238,49240,49242,49244,49246,49248,49250,49252,49254,49256,49258],{"class":4007,"line":4051},[4005,49237,12768],{"class":4171},[4005,49239,20760],{"class":4302},[4005,49241,4611],{"class":4182},[4005,49243,46627],{"class":4178},[4005,49245,7146],{"class":4174},[4005,49247,3836],{"class":4182},[4005,49249,7343],{"class":4178},[4005,49251,46584],{"class":4174},[4005,49253,3836],{"class":4182},[4005,49255,7343],{"class":4178},[4005,49257,14269],{"class":4174},[4005,49259,12789],{"class":4182},[4005,49261,49262,49264,49266,49268],{"class":4007,"line":4057},[4005,49263,46655],{"class":4171},[4005,49265,3769],{"class":4182},[4005,49267,7180],{"class":4174},[4005,49269,46662],{"class":4182},[4005,49271,49272,49274,49276,49278],{"class":4007,"line":4063},[4005,49273,46655],{"class":4171},[4005,49275,3769],{"class":4182},[4005,49277,33385],{"class":4174},[4005,49279,46673],{"class":4182},[4005,49281,49282,49284,49286,49288],{"class":4007,"line":4069},[4005,49283,46655],{"class":4171},[4005,49285,3769],{"class":4182},[4005,49287,13913],{"class":4174},[4005,49289,46684],{"class":4182},[4005,49291,49292,49294,49296,49298,49300,49302,49304],{"class":4007,"line":4075},[4005,49293,46655],{"class":4171},[4005,49295,3769],{"class":4182},[4005,49297,10211],{"class":4174},[4005,49299,4183],{"class":4182},[4005,49301,4689],{"class":4171},[4005,49303,18506],{"class":4182},[4005,49305,49306],{"class":4190},"\u002F\u002F За замовчуванням\n",[4005,49308,49309],{"class":4007,"line":4081},[4005,49310,5127],{"class":4182},[4005,49312,49313],{"class":4007,"line":4086},[4005,49314,5214],{"class":4182},[4005,49316,49317],{"class":4007,"line":4092},[4005,49318,49319],{"class":4190},"    \u002F\u002F Перевантажений конструктор\n",[4005,49321,49322,49324,49326,49328,49330,49332,49334,49336,49338,49340,49342,49344,49346,49348,49350],{"class":4007,"line":4098},[4005,49323,12768],{"class":4171},[4005,49325,20760],{"class":4302},[4005,49327,4611],{"class":4182},[4005,49329,46627],{"class":4178},[4005,49331,7146],{"class":4174},[4005,49333,3836],{"class":4182},[4005,49335,7343],{"class":4178},[4005,49337,46584],{"class":4174},[4005,49339,3836],{"class":4182},[4005,49341,7343],{"class":4178},[4005,49343,14269],{"class":4174},[4005,49345,3836],{"class":4182},[4005,49347,46646],{"class":4178},[4005,49349,10172],{"class":4174},[4005,49351,12789],{"class":4182},[4005,49353,49354,49356,49358,49360],{"class":4007,"line":4104},[4005,49355,46655],{"class":4171},[4005,49357,3769],{"class":4182},[4005,49359,7180],{"class":4174},[4005,49361,46662],{"class":4182},[4005,49363,49364,49366,49368,49370],{"class":4007,"line":4110},[4005,49365,46655],{"class":4171},[4005,49367,3769],{"class":4182},[4005,49369,33385],{"class":4174},[4005,49371,46673],{"class":4182},[4005,49373,49374,49376,49378,49380],{"class":4007,"line":4937},[4005,49375,46655],{"class":4171},[4005,49377,3769],{"class":4182},[4005,49379,13913],{"class":4174},[4005,49381,46684],{"class":4182},[4005,49383,49384,49386,49388,49390],{"class":4007,"line":4942},[4005,49385,46655],{"class":4171},[4005,49387,3769],{"class":4182},[4005,49389,10211],{"class":4174},[4005,49391,46695],{"class":4182},[4005,49393,49394],{"class":4007,"line":4947},[4005,49395,5127],{"class":4182},[4005,49397,49398],{"class":4007,"line":4953},[4005,49399,4078],{"class":4182},[4005,49401,49402],{"class":4007,"line":4960},[4005,49403,4036],{"emptyLinePlaceholder":4035},[4005,49405,49406],{"class":4007,"line":4973},[4005,49407,49101],{"class":4190},[4005,49409,49410,49412,49414,49416,49418,49420,49422,49424,49426,49428,49430,49432],{"class":4007,"line":4985},[4005,49411,20798],{"class":4178},[4005,49413,46232],{"class":4174},[4005,49415,4183],{"class":4182},[4005,49417,3768],{"class":4836},[4005,49419,20760],{"class":4302},[4005,49421,4611],{"class":4182},[4005,49423,4393],{"class":4186},[4005,49425,3836],{"class":4182},[4005,49427,46446],{"class":4330},[4005,49429,3836],{"class":4182},[4005,49431,46457],{"class":4330},[4005,49433,12932],{"class":4182},[3908,49435,49436],{},[3871,49437,49438],{},"У Java:",[3746,49440,49441,49447,49454],{},[3749,49442,49443,49444],{},"Конструктор — ",[3871,49445,49446],{},"частина класу",[3749,49448,6992,49449,3880,49451],{},[3753,49450,3768],{},[3871,49452,49453],{},"обов'язкове",[3749,49455,49456],{},"Можна перевантажувати (overloading)",[9014,49458,49460],{"id":49459},"конструктори-в-go-паттерни-та-конвенції","Конструктори в Go: паттерни та конвенції",[3908,49462,10416,49463,49466,49467,5831],{},[3871,49464,49465],{},"немає спеціального синтаксису для конструкторів",". Замість цього використовують ",[3871,49468,49469,49470],{},"звичайні функції з префіксом ",[3753,49471,34826],{},[3984,49473,49475],{"className":4162,"code":49474,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"errors\"\n    \"fmt\"\n    \"time\"\n)\n\ntype User struct {\n    ID        int64\n    Username  string\n    Email     string\n    CreatedAt time.Time\n    IsActive  bool\n}\n\n\u002F\u002F 1. Базовий конструктор\nfunc NewUser(username, email string) *User {\n    return &User{\n        ID:        generateID(),  \u002F\u002F Автогенерація\n        Username:  username,\n        Email:     email,\n        CreatedAt: time.Now(),    \u002F\u002F Автозаповнення\n        IsActive:  true,          \u002F\u002F За замовчуванням\n    }\n}\n\n\u002F\u002F 2. Конструктор з валідацією\nfunc NewUserValidated(username, email string) (*User, error) {\n    if username == \"\" {\n        return nil, errors.New(\"username не може бути порожнім\")\n    }\n    if !isValidEmail(email) {\n        return nil, errors.New(\"невалідний email\")\n    }\n    \n    return NewUser(username, email), nil\n}\n\n\u002F\u002F 3. Конструктор з опціями (Functional Options Pattern)\ntype UserOption func(*User)\n\nfunc WithAdmin(admin bool) UserOption {\n    return func(u *User) {\n        u.IsActive = admin\n    }\n}\n\nfunc NewUserWithOptions(username, email string, opts ...UserOption) *User {\n    user := NewUser(username, email)\n    \n    \u002F\u002F Застосовуємо опції\n    for _, opt := range opts {\n        opt(user)\n    }\n    \n    return user\n}\n\n\u002F\u002F Допоміжні функції\nfunc generateID() int64 {\n    return time.Now().UnixNano()\n}\n\nfunc isValidEmail(email string) bool {\n    return len(email) > 3 && contains(email, \"@\")\n}\n\nfunc contains(s, substr string) bool {\n    for i := 0; i \u003C= len(s)-len(substr); i++ {\n        if s[i:i+len(substr)] == substr {\n            return true\n        }\n    }\n    return false\n}\n\nfunc main() {\n    \u002F\u002F Базове створення\n    user1 := NewUser(\"alex\", \"alex@kostyl.dev\")\n    fmt.Printf(\"User1: %+v\\n\", user1)\n    \n    \u002F\u002F З валідацією\n    user2, err := NewUserValidated(\"maria\", \"maria@kostyl.dev\")\n    if err != nil {\n        fmt.Println(\"Помилка:\", err)\n    } else {\n        fmt.Printf(\"User2: %+v\\n\", user2)\n    }\n    \n    \u002F\u002F З опціями\n    user3 := NewUserWithOptions(\"admin\", \"admin@kostyl.dev\", WithAdmin(false))\n    fmt.Printf(\"User3: %+v\\n\", user3)\n}\n",[3753,49476,49477,49483,49487,49493,49497,49501,49505,49509,49513,49523,49530,49537,49543,49553,49560,49564,49568,49573,49595,49605,49621,49632,49643,49662,49675,49679,49683,49687,49692,49720,49732,49754,49758,49773,49794,49798,49802,49821,49825,49829,49834,49850,49854,49874,49890,49904,49908,49912,49916,49948,49967,49971,49977,49998,50010,50015,50020,50028,50033,50038,50044,50058,50076,50081,50086,50106,50136,50141,50146,50170,50208,50238,50246,50251,50256,50264,50269,50274,50283,50289,50309,50335,50340,50346,50373,50386,50405,50414,50440,50445,50450,50456,50486,50512],{"__ignoreMap":3992},[4005,49478,49479,49481],{"class":4007,"line":4008},[4005,49480,5739],{"class":4171},[4005,49482,5742],{"class":4178},[4005,49484,49485],{"class":4007,"line":4014},[4005,49486,4036],{"emptyLinePlaceholder":4035},[4005,49488,49489,49491],{"class":4007,"line":4020},[4005,49490,3917],{"class":4836},[4005,49492,4439],{"class":4182},[4005,49494,49495],{"class":4007,"line":4026},[4005,49496,34749],{"class":4330},[4005,49498,49499],{"class":4007,"line":4032},[4005,49500,4843],{"class":4330},[4005,49502,49503],{"class":4007,"line":4039},[4005,49504,25973],{"class":4330},[4005,49506,49507],{"class":4007,"line":4045},[4005,49508,4482],{"class":4182},[4005,49510,49511],{"class":4007,"line":4051},[4005,49512,4036],{"emptyLinePlaceholder":4035},[4005,49514,49515,49517,49519,49521],{"class":4007,"line":4057},[4005,49516,4809],{"class":4171},[4005,49518,20760],{"class":4178},[4005,49520,10957],{"class":4171},[4005,49522,5073],{"class":4182},[4005,49524,49525,49527],{"class":4007,"line":4063},[4005,49526,46381],{"class":4174},[4005,49528,49529],{"class":4178},"        int64\n",[4005,49531,49532,49534],{"class":4007,"line":4069},[4005,49533,33486],{"class":4174},[4005,49535,49536],{"class":4178},"  string\n",[4005,49538,49539,49541],{"class":4007,"line":4075},[4005,49540,4931],{"class":4174},[4005,49542,4934],{"class":4178},[4005,49544,49545,49547,49549,49551],{"class":4007,"line":4081},[4005,49546,47333],{"class":4174},[4005,49548,5939],{"class":4178},[4005,49550,3769],{"class":4182},[4005,49552,47341],{"class":4178},[4005,49554,49555,49557],{"class":4007,"line":4086},[4005,49556,46401],{"class":4174},[4005,49558,49559],{"class":4178},"  bool\n",[4005,49561,49562],{"class":4007,"line":4092},[4005,49563,4078],{"class":4182},[4005,49565,49566],{"class":4007,"line":4098},[4005,49567,4036],{"emptyLinePlaceholder":4035},[4005,49569,49570],{"class":4007,"line":4104},[4005,49571,49572],{"class":4190},"\u002F\u002F 1. Базовий конструктор\n",[4005,49574,49575,49577,49579,49581,49583,49585,49587,49589,49591,49593],{"class":4007,"line":4110},[4005,49576,4299],{"class":4171},[4005,49578,48216],{"class":4302},[4005,49580,4611],{"class":4182},[4005,49582,33385],{"class":4174},[4005,49584,3836],{"class":4182},[4005,49586,13913],{"class":4174},[4005,49588,4237],{"class":4178},[4005,49590,44641],{"class":4182},[4005,49592,20798],{"class":4178},[4005,49594,5073],{"class":4182},[4005,49596,49597,49599,49601,49603],{"class":4007,"line":4937},[4005,49598,5260],{"class":4836},[4005,49600,44708],{"class":4182},[4005,49602,20798],{"class":4178},[4005,49604,29461],{"class":4182},[4005,49606,49607,49609,49612,49615,49618],{"class":4007,"line":4942},[4005,49608,49041],{"class":4174},[4005,49610,49611],{"class":4182},":        ",[4005,49613,49614],{"class":4302},"generateID",[4005,49616,49617],{"class":4182},"(),  ",[4005,49619,49620],{"class":4190},"\u002F\u002F Автогенерація\n",[4005,49622,49623,49625,49628,49630],{"class":4007,"line":4947},[4005,49624,49052],{"class":4174},[4005,49626,49627],{"class":4182},":  ",[4005,49629,33385],{"class":4174},[4005,49631,29475],{"class":4182},[4005,49633,49634,49636,49639,49641],{"class":4007,"line":4953},[4005,49635,49063],{"class":4174},[4005,49637,49638],{"class":4182},":     ",[4005,49640,13913],{"class":4174},[4005,49642,29475],{"class":4182},[4005,49644,49645,49648,49650,49652,49654,49656,49659],{"class":4007,"line":4960},[4005,49646,49647],{"class":4174},"        CreatedAt",[4005,49649,11172],{"class":4182},[4005,49651,26006],{"class":4174},[4005,49653,3769],{"class":4182},[4005,49655,26011],{"class":4302},[4005,49657,49658],{"class":4182},"(),    ",[4005,49660,49661],{"class":4190},"\u002F\u002F Автозаповнення\n",[4005,49663,49664,49666,49668,49670,49673],{"class":4007,"line":4973},[4005,49665,49074],{"class":4174},[4005,49667,49627],{"class":4182},[4005,49669,4689],{"class":4171},[4005,49671,49672],{"class":4182},",          ",[4005,49674,49306],{"class":4190},[4005,49676,49677],{"class":4007,"line":4985},[4005,49678,5127],{"class":4182},[4005,49680,49681],{"class":4007,"line":7813},[4005,49682,4078],{"class":4182},[4005,49684,49685],{"class":4007,"line":7819},[4005,49686,4036],{"emptyLinePlaceholder":4035},[4005,49688,49689],{"class":4007,"line":7826},[4005,49690,49691],{"class":4190},"\u002F\u002F 2. Конструктор з валідацією\n",[4005,49693,49694,49696,49699,49701,49703,49705,49707,49709,49712,49714,49716,49718],{"class":4007,"line":7839},[4005,49695,4299],{"class":4171},[4005,49697,49698],{"class":4302}," NewUserValidated",[4005,49700,4611],{"class":4182},[4005,49702,33385],{"class":4174},[4005,49704,3836],{"class":4182},[4005,49706,13913],{"class":4174},[4005,49708,4237],{"class":4178},[4005,49710,49711],{"class":4182},") (*",[4005,49713,20798],{"class":4178},[4005,49715,3836],{"class":4182},[4005,49717,3857],{"class":4178},[4005,49719,12789],{"class":4182},[4005,49721,49722,49724,49726,49728,49730],{"class":4007,"line":7864},[4005,49723,5104],{"class":4836},[4005,49725,46584],{"class":4174},[4005,49727,5473],{"class":4182},[4005,49729,4203],{"class":4330},[4005,49731,5073],{"class":4182},[4005,49733,49734,49736,49739,49741,49743,49745,49747,49749,49752],{"class":4007,"line":7872},[4005,49735,5119],{"class":4836},[4005,49737,49738],{"class":4171}," nil",[4005,49740,3836],{"class":4182},[4005,49742,34821],{"class":4174},[4005,49744,3769],{"class":4182},[4005,49746,34826],{"class":4302},[4005,49748,4611],{"class":4182},[4005,49750,49751],{"class":4330},"\"username не може бути порожнім\"",[4005,49753,4482],{"class":4182},[4005,49755,49756],{"class":4007,"line":7881},[4005,49757,5127],{"class":4182},[4005,49759,49760,49762,49764,49767,49769,49771],{"class":4007,"line":7890},[4005,49761,5104],{"class":4836},[4005,49763,18149],{"class":4182},[4005,49765,49766],{"class":4302},"isValidEmail",[4005,49768,4611],{"class":4182},[4005,49770,13913],{"class":4174},[4005,49772,12789],{"class":4182},[4005,49774,49775,49777,49779,49781,49783,49785,49787,49789,49792],{"class":4007,"line":7895},[4005,49776,5119],{"class":4836},[4005,49778,49738],{"class":4171},[4005,49780,3836],{"class":4182},[4005,49782,34821],{"class":4174},[4005,49784,3769],{"class":4182},[4005,49786,34826],{"class":4302},[4005,49788,4611],{"class":4182},[4005,49790,49791],{"class":4330},"\"невалідний email\"",[4005,49793,4482],{"class":4182},[4005,49795,49796],{"class":4007,"line":7900},[4005,49797,5127],{"class":4182},[4005,49799,49800],{"class":4007,"line":7909},[4005,49801,5214],{"class":4182},[4005,49803,49804,49806,49808,49810,49812,49814,49816,49818],{"class":4007,"line":7915},[4005,49805,5260],{"class":4836},[4005,49807,48216],{"class":4302},[4005,49809,4611],{"class":4182},[4005,49811,33385],{"class":4174},[4005,49813,3836],{"class":4182},[4005,49815,13913],{"class":4174},[4005,49817,31601],{"class":4182},[4005,49819,49820],{"class":4171},"nil\n",[4005,49822,49823],{"class":4007,"line":7921},[4005,49824,4078],{"class":4182},[4005,49826,49827],{"class":4007,"line":7938},[4005,49828,4036],{"emptyLinePlaceholder":4035},[4005,49830,49831],{"class":4007,"line":7982},[4005,49832,49833],{"class":4190},"\u002F\u002F 3. Конструктор з опціями (Functional Options Pattern)\n",[4005,49835,49836,49838,49841,49843,49846,49848],{"class":4007,"line":7987},[4005,49837,4809],{"class":4171},[4005,49839,49840],{"class":4178}," UserOption",[4005,49842,20015],{"class":4171},[4005,49844,49845],{"class":4182},"(*",[4005,49847,20798],{"class":4178},[4005,49849,4482],{"class":4182},[4005,49851,49852],{"class":4007,"line":7993},[4005,49853,4036],{"emptyLinePlaceholder":4035},[4005,49855,49856,49858,49861,49863,49865,49867,49869,49872],{"class":4007,"line":8016},[4005,49857,4299],{"class":4171},[4005,49859,49860],{"class":4302}," WithAdmin",[4005,49862,4611],{"class":4182},[4005,49864,46487],{"class":4174},[4005,49866,4250],{"class":4178},[4005,49868,4498],{"class":4182},[4005,49870,49871],{"class":4178},"UserOption",[4005,49873,5073],{"class":4182},[4005,49875,49876,49878,49880,49882,49884,49886,49888],{"class":4007,"line":8035},[4005,49877,5260],{"class":4836},[4005,49879,20015],{"class":4171},[4005,49881,4611],{"class":4182},[4005,49883,45582],{"class":4174},[4005,49885,5520],{"class":4182},[4005,49887,20798],{"class":4178},[4005,49889,12789],{"class":4182},[4005,49891,49892,49895,49897,49899,49901],{"class":4007,"line":8063},[4005,49893,49894],{"class":4174},"        u",[4005,49896,3769],{"class":4182},[4005,49898,48301],{"class":4174},[4005,49900,4183],{"class":4182},[4005,49902,49903],{"class":4174},"admin\n",[4005,49905,49906],{"class":4007,"line":8090},[4005,49907,5127],{"class":4182},[4005,49909,49910],{"class":4007,"line":8095},[4005,49911,4078],{"class":4182},[4005,49913,49914],{"class":4007,"line":8101},[4005,49915,4036],{"emptyLinePlaceholder":4035},[4005,49917,49918,49920,49923,49925,49927,49929,49931,49933,49935,49938,49940,49942,49944,49946],{"class":4007,"line":8135},[4005,49919,4299],{"class":4171},[4005,49921,49922],{"class":4302}," NewUserWithOptions",[4005,49924,4611],{"class":4182},[4005,49926,33385],{"class":4174},[4005,49928,3836],{"class":4182},[4005,49930,13913],{"class":4174},[4005,49932,4237],{"class":4178},[4005,49934,3836],{"class":4182},[4005,49936,49937],{"class":4174},"opts",[4005,49939,33646],{"class":4182},[4005,49941,49871],{"class":4178},[4005,49943,44641],{"class":4182},[4005,49945,20798],{"class":4178},[4005,49947,5073],{"class":4182},[4005,49949,49950,49953,49955,49957,49959,49961,49963,49965],{"class":4007,"line":41104},[4005,49951,49952],{"class":4174},"    user",[4005,49954,4314],{"class":4182},[4005,49956,43884],{"class":4302},[4005,49958,4611],{"class":4182},[4005,49960,33385],{"class":4174},[4005,49962,3836],{"class":4182},[4005,49964,13913],{"class":4174},[4005,49966,4482],{"class":4182},[4005,49968,49969],{"class":4007,"line":41109},[4005,49970,5214],{"class":4182},[4005,49972,49974],{"class":4007,"line":49973},52,[4005,49975,49976],{"class":4190},"    \u002F\u002F Застосовуємо опції\n",[4005,49978,49980,49982,49984,49986,49989,49991,49993,49996],{"class":4007,"line":49979},53,[4005,49981,12138],{"class":4836},[4005,49983,17642],{"class":4174},[4005,49985,3836],{"class":4182},[4005,49987,49988],{"class":4174},"opt",[4005,49990,4314],{"class":4182},[4005,49992,12151],{"class":4836},[4005,49994,49995],{"class":4174}," opts",[4005,49997,5073],{"class":4182},[4005,49999,50001,50004,50006,50008],{"class":4007,"line":50000},54,[4005,50002,50003],{"class":4302},"        opt",[4005,50005,4611],{"class":4182},[4005,50007,20793],{"class":4174},[4005,50009,4482],{"class":4182},[4005,50011,50013],{"class":4007,"line":50012},55,[4005,50014,5127],{"class":4182},[4005,50016,50018],{"class":4007,"line":50017},56,[4005,50019,5214],{"class":4182},[4005,50021,50023,50025],{"class":4007,"line":50022},57,[4005,50024,5260],{"class":4836},[4005,50026,50027],{"class":4174}," user\n",[4005,50029,50031],{"class":4007,"line":50030},58,[4005,50032,4078],{"class":4182},[4005,50034,50036],{"class":4007,"line":50035},59,[4005,50037,4036],{"emptyLinePlaceholder":4035},[4005,50039,50041],{"class":4007,"line":50040},60,[4005,50042,50043],{"class":4190},"\u002F\u002F Допоміжні функції\n",[4005,50045,50047,50049,50052,50054,50056],{"class":4007,"line":50046},61,[4005,50048,4299],{"class":4171},[4005,50050,50051],{"class":4302}," generateID",[4005,50053,7346],{"class":4182},[4005,50055,4154],{"class":4178},[4005,50057,5073],{"class":4182},[4005,50059,50061,50063,50065,50067,50069,50071,50074],{"class":4007,"line":50060},62,[4005,50062,5260],{"class":4836},[4005,50064,5939],{"class":4174},[4005,50066,3769],{"class":4182},[4005,50068,26011],{"class":4302},[4005,50070,12903],{"class":4182},[4005,50072,50073],{"class":4302},"UnixNano",[4005,50075,5143],{"class":4182},[4005,50077,50079],{"class":4007,"line":50078},63,[4005,50080,4078],{"class":4182},[4005,50082,50084],{"class":4007,"line":50083},64,[4005,50085,4036],{"emptyLinePlaceholder":4035},[4005,50087,50089,50091,50094,50096,50098,50100,50102,50104],{"class":4007,"line":50088},65,[4005,50090,4299],{"class":4171},[4005,50092,50093],{"class":4302}," isValidEmail",[4005,50095,4611],{"class":4182},[4005,50097,13913],{"class":4174},[4005,50099,4237],{"class":4178},[4005,50101,4498],{"class":4182},[4005,50103,8505],{"class":4178},[4005,50105,5073],{"class":4182},[4005,50107,50109,50111,50114,50116,50118,50120,50122,50124,50126,50128,50130,50132,50134],{"class":4007,"line":50108},66,[4005,50110,5260],{"class":4836},[4005,50112,50113],{"class":4302}," len",[4005,50115,4611],{"class":4182},[4005,50117,13913],{"class":4174},[4005,50119,40780],{"class":4182},[4005,50121,6286],{"class":4186},[4005,50123,5227],{"class":4182},[4005,50125,14326],{"class":4302},[4005,50127,4611],{"class":4182},[4005,50129,13913],{"class":4174},[4005,50131,3836],{"class":4182},[4005,50133,13918],{"class":4330},[4005,50135,4482],{"class":4182},[4005,50137,50139],{"class":4007,"line":50138},67,[4005,50140,4078],{"class":4182},[4005,50142,50144],{"class":4007,"line":50143},68,[4005,50145,4036],{"emptyLinePlaceholder":4035},[4005,50147,50149,50151,50154,50156,50158,50160,50162,50164,50166,50168],{"class":4007,"line":50148},69,[4005,50150,4299],{"class":4171},[4005,50152,50153],{"class":4302}," contains",[4005,50155,4611],{"class":4182},[4005,50157,7550],{"class":4174},[4005,50159,3836],{"class":4182},[4005,50161,14151],{"class":4174},[4005,50163,4237],{"class":4178},[4005,50165,4498],{"class":4182},[4005,50167,8505],{"class":4178},[4005,50169,5073],{"class":4182},[4005,50171,50173,50175,50177,50179,50181,50183,50185,50187,50189,50191,50193,50196,50198,50200,50202,50204,50206],{"class":4007,"line":50172},70,[4005,50174,12138],{"class":4836},[4005,50176,6592],{"class":4174},[4005,50178,4314],{"class":4182},[4005,50180,4200],{"class":4186},[4005,50182,23796],{"class":4182},[4005,50184,27826],{"class":4174},[4005,50186,10375],{"class":4182},[4005,50188,11465],{"class":4302},[4005,50190,4611],{"class":4182},[4005,50192,7550],{"class":4174},[4005,50194,50195],{"class":4182},")-",[4005,50197,11465],{"class":4302},[4005,50199,4611],{"class":4182},[4005,50201,14151],{"class":4174},[4005,50203,5468],{"class":4182},[4005,50205,27826],{"class":4174},[4005,50207,27837],{"class":4182},[4005,50209,50211,50213,50215,50217,50219,50221,50223,50225,50227,50229,50231,50234,50236],{"class":4007,"line":50210},71,[4005,50212,12892],{"class":4836},[4005,50214,7358],{"class":4174},[4005,50216,11561],{"class":4182},[4005,50218,27826],{"class":4174},[4005,50220,5831],{"class":4182},[4005,50222,27826],{"class":4174},[4005,50224,14837],{"class":4182},[4005,50226,11465],{"class":4302},[4005,50228,4611],{"class":4182},[4005,50230,14151],{"class":4174},[4005,50232,50233],{"class":4182},")] == ",[4005,50235,14151],{"class":4174},[4005,50237,5073],{"class":4182},[4005,50239,50241,50243],{"class":4007,"line":50240},72,[4005,50242,40840],{"class":4836},[4005,50244,50245],{"class":4171}," true\n",[4005,50247,50249],{"class":4007,"line":50248},73,[4005,50250,12937],{"class":4182},[4005,50252,50254],{"class":4007,"line":50253},74,[4005,50255,5127],{"class":4182},[4005,50257,50259,50261],{"class":4007,"line":50258},75,[4005,50260,5260],{"class":4836},[4005,50262,50263],{"class":4171}," false\n",[4005,50265,50267],{"class":4007,"line":50266},76,[4005,50268,4078],{"class":4182},[4005,50270,50272],{"class":4007,"line":50271},77,[4005,50273,4036],{"emptyLinePlaceholder":4035},[4005,50275,50277,50279,50281],{"class":4007,"line":50276},78,[4005,50278,4299],{"class":4171},[4005,50280,5764],{"class":4302},[4005,50282,4306],{"class":4182},[4005,50284,50286],{"class":4007,"line":50285},79,[4005,50287,50288],{"class":4190},"    \u002F\u002F Базове створення\n",[4005,50290,50292,50295,50297,50299,50301,50303,50305,50307],{"class":4007,"line":50291},80,[4005,50293,50294],{"class":4174},"    user1",[4005,50296,4314],{"class":4182},[4005,50298,43884],{"class":4302},[4005,50300,4611],{"class":4182},[4005,50302,46446],{"class":4330},[4005,50304,3836],{"class":4182},[4005,50306,46457],{"class":4330},[4005,50308,4482],{"class":4182},[4005,50310,50312,50314,50316,50318,50320,50323,50325,50327,50329,50331,50333],{"class":4007,"line":50311},81,[4005,50313,5370],{"class":4174},[4005,50315,3769],{"class":4182},[4005,50317,7945],{"class":4302},[4005,50319,4611],{"class":4182},[4005,50321,50322],{"class":4330},"\"User1: ",[4005,50324,20679],{"class":4174},[4005,50326,7965],{"class":7964},[4005,50328,7968],{"class":4330},[4005,50330,3836],{"class":4182},[4005,50332,47122],{"class":4174},[4005,50334,4482],{"class":4182},[4005,50336,50338],{"class":4007,"line":50337},82,[4005,50339,5214],{"class":4182},[4005,50341,50343],{"class":4007,"line":50342},83,[4005,50344,50345],{"class":4190},"    \u002F\u002F З валідацією\n",[4005,50347,50349,50352,50354,50356,50358,50361,50363,50366,50368,50371],{"class":4007,"line":50348},84,[4005,50350,50351],{"class":4174},"    user2",[4005,50353,3836],{"class":4182},[4005,50355,4598],{"class":4174},[4005,50357,4314],{"class":4182},[4005,50359,50360],{"class":4302},"NewUserValidated",[4005,50362,4611],{"class":4182},[4005,50364,50365],{"class":4330},"\"maria\"",[4005,50367,3836],{"class":4182},[4005,50369,50370],{"class":4330},"\"maria@kostyl.dev\"",[4005,50372,4482],{"class":4182},[4005,50374,50376,50378,50380,50382,50384],{"class":4007,"line":50375},85,[4005,50377,5104],{"class":4836},[4005,50379,5107],{"class":4174},[4005,50381,5110],{"class":4182},[4005,50383,4209],{"class":4171},[4005,50385,5073],{"class":4182},[4005,50387,50389,50391,50393,50395,50397,50399,50401,50403],{"class":4007,"line":50388},86,[4005,50390,5343],{"class":4174},[4005,50392,3769],{"class":4182},[4005,50394,5348],{"class":4302},[4005,50396,4611],{"class":4182},[4005,50398,34924],{"class":4330},[4005,50400,3836],{"class":4182},[4005,50402,4598],{"class":4174},[4005,50404,4482],{"class":4182},[4005,50406,50408,50410,50412],{"class":4007,"line":50407},87,[4005,50409,25065],{"class":4182},[4005,50411,24962],{"class":4836},[4005,50413,5073],{"class":4182},[4005,50415,50417,50419,50421,50423,50425,50428,50430,50432,50434,50436,50438],{"class":4007,"line":50416},88,[4005,50418,5343],{"class":4174},[4005,50420,3769],{"class":4182},[4005,50422,7945],{"class":4302},[4005,50424,4611],{"class":4182},[4005,50426,50427],{"class":4330},"\"User2: ",[4005,50429,20679],{"class":4174},[4005,50431,7965],{"class":7964},[4005,50433,7968],{"class":4330},[4005,50435,3836],{"class":4182},[4005,50437,47144],{"class":4174},[4005,50439,4482],{"class":4182},[4005,50441,50443],{"class":4007,"line":50442},89,[4005,50444,5127],{"class":4182},[4005,50446,50448],{"class":4007,"line":50447},90,[4005,50449,5214],{"class":4182},[4005,50451,50453],{"class":4007,"line":50452},91,[4005,50454,50455],{"class":4190},"    \u002F\u002F З опціями\n",[4005,50457,50459,50462,50464,50467,50469,50471,50473,50475,50477,50480,50482,50484],{"class":4007,"line":50458},92,[4005,50460,50461],{"class":4174},"    user3",[4005,50463,4314],{"class":4182},[4005,50465,50466],{"class":4302},"NewUserWithOptions",[4005,50468,4611],{"class":4182},[4005,50470,46512],{"class":4330},[4005,50472,3836],{"class":4182},[4005,50474,46523],{"class":4330},[4005,50476,3836],{"class":4182},[4005,50478,50479],{"class":4302},"WithAdmin",[4005,50481,4611],{"class":4182},[4005,50483,4206],{"class":4171},[4005,50485,25552],{"class":4182},[4005,50487,50489,50491,50493,50495,50497,50500,50502,50504,50506,50508,50510],{"class":4007,"line":50488},93,[4005,50490,5370],{"class":4174},[4005,50492,3769],{"class":4182},[4005,50494,7945],{"class":4302},[4005,50496,4611],{"class":4182},[4005,50498,50499],{"class":4330},"\"User3: ",[4005,50501,20679],{"class":4174},[4005,50503,7965],{"class":7964},[4005,50505,7968],{"class":4330},[4005,50507,3836],{"class":4182},[4005,50509,47885],{"class":4174},[4005,50511,4482],{"class":4182},[4005,50513,50515],{"class":4007,"line":50514},94,[4005,50516,4078],{"class":4182},[3908,50518,50519],{},[3871,50520,11778],{},[3984,50522,50525],{"className":50523,"code":50524,"language":3989},[3987],"User1: &{ID:1640995200000000000 Username:alex Email:alex@kostyl.dev CreatedAt:2024-... IsActive:true}\nUser2: &{ID:1640995200000000001 Username:maria Email:maria@kostyl.dev CreatedAt:2024-... IsActive:true}\nUser3: &{ID:1640995200000000002 Username:admin Email:admin@kostyl.dev CreatedAt:2024-... IsActive:false}\n",[3753,50526,50524],{"__ignoreMap":3992},[4484,50528,50529,50534,50542,50547,50675,50680,50703,50711,50716,51081,51086,51112,51123,51126,51688,51693,51832,51836,51874,51879],{"icon":4486},[3908,50530,50531],{},[3871,50532,50533],{},"Конвенції іменування конструкторів:",[3908,50535,50536,3880,50539],{},[3871,50537,50538],{},"1. Один тип в пакеті:",[3753,50540,50541],{},"New()",[3908,50543,50544,50545,5831],{},"Якщо пакет призначений для одного типу, конструктор називається просто ",[3753,50546,50541],{},[3984,50548,50550],{"className":4162,"code":50549,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Файл: user\u002Fuser.go\npackage user\n\ntype User struct {\n    ID   int64\n    Name string\n}\n\n\u002F\u002F Конструктор\nfunc New(id int64, name string) *User {\n    return &User{ID: id, Name: name}\n}\n\n\u002F\u002F Використання:\n\u002F\u002F import \"myapp\u002Fuser\"\n\u002F\u002F u := user.New(1, \"Олег\")\n",[3753,50551,50552,50557,50563,50567,50577,50583,50589,50593,50597,50602,50627,50653,50657,50661,50665,50670],{"__ignoreMap":3992},[4005,50553,50554],{"class":4007,"line":4008},[4005,50555,50556],{"class":4190},"\u002F\u002F Файл: user\u002Fuser.go\n",[4005,50558,50559,50561],{"class":4007,"line":4014},[4005,50560,5739],{"class":4171},[4005,50562,50027],{"class":4178},[4005,50564,50565],{"class":4007,"line":4020},[4005,50566,4036],{"emptyLinePlaceholder":4035},[4005,50568,50569,50571,50573,50575],{"class":4007,"line":4026},[4005,50570,4809],{"class":4171},[4005,50572,20760],{"class":4178},[4005,50574,10957],{"class":4171},[4005,50576,5073],{"class":4182},[4005,50578,50579,50581],{"class":4007,"line":4032},[4005,50580,46381],{"class":4174},[4005,50582,47009],{"class":4178},[4005,50584,50585,50587],{"class":4007,"line":4039},[4005,50586,20769],{"class":4174},[4005,50588,20772],{"class":4178},[4005,50590,50591],{"class":4007,"line":4045},[4005,50592,4078],{"class":4182},[4005,50594,50595],{"class":4007,"line":4051},[4005,50596,4036],{"emptyLinePlaceholder":4035},[4005,50598,50599],{"class":4007,"line":4057},[4005,50600,50601],{"class":4190},"\u002F\u002F Конструктор\n",[4005,50603,50604,50606,50609,50611,50613,50615,50617,50619,50621,50623,50625],{"class":4007,"line":4063},[4005,50605,4299],{"class":4171},[4005,50607,50608],{"class":4302}," New",[4005,50610,4611],{"class":4182},[4005,50612,7180],{"class":4174},[4005,50614,4179],{"class":4178},[4005,50616,3836],{"class":4182},[4005,50618,4650],{"class":4174},[4005,50620,4237],{"class":4178},[4005,50622,44641],{"class":4182},[4005,50624,20798],{"class":4178},[4005,50626,5073],{"class":4182},[4005,50628,50629,50631,50633,50635,50637,50639,50641,50643,50645,50647,50649,50651],{"class":4007,"line":4069},[4005,50630,5260],{"class":4836},[4005,50632,44708],{"class":4182},[4005,50634,20798],{"class":4178},[4005,50636,16268],{"class":4182},[4005,50638,47055],{"class":4174},[4005,50640,11172],{"class":4182},[4005,50642,7180],{"class":4174},[4005,50644,3836],{"class":4182},[4005,50646,20803],{"class":4174},[4005,50648,11172],{"class":4182},[4005,50650,4650],{"class":4174},[4005,50652,4078],{"class":4182},[4005,50654,50655],{"class":4007,"line":4075},[4005,50656,4078],{"class":4182},[4005,50658,50659],{"class":4007,"line":4081},[4005,50660,4036],{"emptyLinePlaceholder":4035},[4005,50662,50663],{"class":4007,"line":4086},[4005,50664,49101],{"class":4190},[4005,50666,50667],{"class":4007,"line":4092},[4005,50668,50669],{"class":4190},"\u002F\u002F import \"myapp\u002Fuser\"\n",[4005,50671,50672],{"class":4007,"line":4098},[4005,50673,50674],{"class":4190},"\u002F\u002F u := user.New(1, \"Олег\")\n",[3908,50676,50677],{},[3871,50678,50679],{},"Приклади з реальних проєктів:",[3746,50681,50682,50688,50697],{},[3749,50683,50684,50687],{},[3753,50685,50686],{},"errors.New()"," — створює помилку",[3749,50689,50690,50693,50694,50696],{},[3753,50691,50692],{},"context.Background()"," — створює контекст (не ",[3753,50695,34826],{},", але ідея та сама)",[3749,50698,50699,50702],{},[3753,50700,50701],{},"sql.Open()"," — відкриває з'єднання",[3908,50704,50705,3880,50708],{},[3871,50706,50707],{},"2. Кілька типів в одному пакеті:",[3753,50709,50710],{},"NewTypeName()",[3908,50712,50713,50714,5831],{},"Коли в пакеті кілька структур, додаємо ім'я типу до ",[3753,50715,34826],{},[3984,50717,50719],{"className":4162,"code":50718,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Файл: models\u002Fmodels.go\npackage models\n\ntype User struct {\n    ID   int64\n    Name string\n}\n\ntype Product struct {\n    ID    int64\n    Title string\n    Price float64\n}\n\ntype Order struct {\n    ID     int64\n    UserID int64\n    Total  float64\n}\n\n\u002F\u002F Конструктори\nfunc NewUser(id int64, name string) *User {\n    return &User{ID: id, Name: name}\n}\n\nfunc NewProduct(id int64, title string, price float64) *Product {\n    return &Product{ID: id, Title: title, Price: price}\n}\n\nfunc NewOrder(id, userID int64, total float64) *Order {\n    return &Order{ID: id, UserID: userID, Total: total}\n}\n\n\u002F\u002F Використання:\n\u002F\u002F import \"myapp\u002Fmodels\"\n\u002F\u002F u := models.NewUser(1, \"Олег\")\n\u002F\u002F p := models.NewProduct(10, \"Ноутбук\", 25000.00)\n\u002F\u002F o := models.NewOrder(100, 1, 25000.00)\n",[3753,50720,50721,50726,50733,50737,50747,50753,50759,50763,50767,50777,50784,50791,50797,50801,50805,50816,50823,50829,50837,50841,50845,50850,50874,50900,50904,50908,50941,50976,50980,50984,51014,51049,51053,51057,51061,51066,51071,51076],{"__ignoreMap":3992},[4005,50722,50723],{"class":4007,"line":4008},[4005,50724,50725],{"class":4190},"\u002F\u002F Файл: models\u002Fmodels.go\n",[4005,50727,50728,50730],{"class":4007,"line":4014},[4005,50729,5739],{"class":4171},[4005,50731,50732],{"class":4178}," models\n",[4005,50734,50735],{"class":4007,"line":4020},[4005,50736,4036],{"emptyLinePlaceholder":4035},[4005,50738,50739,50741,50743,50745],{"class":4007,"line":4026},[4005,50740,4809],{"class":4171},[4005,50742,20760],{"class":4178},[4005,50744,10957],{"class":4171},[4005,50746,5073],{"class":4182},[4005,50748,50749,50751],{"class":4007,"line":4032},[4005,50750,46381],{"class":4174},[4005,50752,47009],{"class":4178},[4005,50754,50755,50757],{"class":4007,"line":4039},[4005,50756,20769],{"class":4174},[4005,50758,20772],{"class":4178},[4005,50760,50761],{"class":4007,"line":4045},[4005,50762,4078],{"class":4182},[4005,50764,50765],{"class":4007,"line":4051},[4005,50766,4036],{"emptyLinePlaceholder":4035},[4005,50768,50769,50771,50773,50775],{"class":4007,"line":4057},[4005,50770,4809],{"class":4171},[4005,50772,47284],{"class":4178},[4005,50774,10957],{"class":4171},[4005,50776,5073],{"class":4182},[4005,50778,50779,50781],{"class":4007,"line":4063},[4005,50780,46381],{"class":4174},[4005,50782,50783],{"class":4178},"    int64\n",[4005,50785,50786,50789],{"class":4007,"line":4069},[4005,50787,50788],{"class":4174},"    Title",[4005,50790,20772],{"class":4178},[4005,50792,50793,50795],{"class":4007,"line":4075},[4005,50794,47307],{"class":4174},[4005,50796,45744],{"class":4178},[4005,50798,50799],{"class":4007,"line":4081},[4005,50800,4078],{"class":4182},[4005,50802,50803],{"class":4007,"line":4086},[4005,50804,4036],{"emptyLinePlaceholder":4035},[4005,50806,50807,50809,50812,50814],{"class":4007,"line":4092},[4005,50808,4809],{"class":4171},[4005,50810,50811],{"class":4178}," Order",[4005,50813,10957],{"class":4171},[4005,50815,5073],{"class":4182},[4005,50817,50818,50820],{"class":4007,"line":4098},[4005,50819,46381],{"class":4174},[4005,50821,50822],{"class":4178},"     int64\n",[4005,50824,50825,50827],{"class":4007,"line":4104},[4005,50826,4915],{"class":4174},[4005,50828,45046],{"class":4178},[4005,50830,50831,50834],{"class":4007,"line":4110},[4005,50832,50833],{"class":4174},"    Total",[4005,50835,50836],{"class":4178},"  float64\n",[4005,50838,50839],{"class":4007,"line":4937},[4005,50840,4078],{"class":4182},[4005,50842,50843],{"class":4007,"line":4942},[4005,50844,4036],{"emptyLinePlaceholder":4035},[4005,50846,50847],{"class":4007,"line":4947},[4005,50848,50849],{"class":4190},"\u002F\u002F Конструктори\n",[4005,50851,50852,50854,50856,50858,50860,50862,50864,50866,50868,50870,50872],{"class":4007,"line":4953},[4005,50853,4299],{"class":4171},[4005,50855,48216],{"class":4302},[4005,50857,4611],{"class":4182},[4005,50859,7180],{"class":4174},[4005,50861,4179],{"class":4178},[4005,50863,3836],{"class":4182},[4005,50865,4650],{"class":4174},[4005,50867,4237],{"class":4178},[4005,50869,44641],{"class":4182},[4005,50871,20798],{"class":4178},[4005,50873,5073],{"class":4182},[4005,50875,50876,50878,50880,50882,50884,50886,50888,50890,50892,50894,50896,50898],{"class":4007,"line":4960},[4005,50877,5260],{"class":4836},[4005,50879,44708],{"class":4182},[4005,50881,20798],{"class":4178},[4005,50883,16268],{"class":4182},[4005,50885,47055],{"class":4174},[4005,50887,11172],{"class":4182},[4005,50889,7180],{"class":4174},[4005,50891,3836],{"class":4182},[4005,50893,20803],{"class":4174},[4005,50895,11172],{"class":4182},[4005,50897,4650],{"class":4174},[4005,50899,4078],{"class":4182},[4005,50901,50902],{"class":4007,"line":4973},[4005,50903,4078],{"class":4182},[4005,50905,50906],{"class":4007,"line":4985},[4005,50907,4036],{"emptyLinePlaceholder":4035},[4005,50909,50910,50912,50915,50917,50919,50921,50923,50926,50928,50930,50932,50934,50936,50939],{"class":4007,"line":7813},[4005,50911,4299],{"class":4171},[4005,50913,50914],{"class":4302}," NewProduct",[4005,50916,4611],{"class":4182},[4005,50918,7180],{"class":4174},[4005,50920,4179],{"class":4178},[4005,50922,3836],{"class":4182},[4005,50924,50925],{"class":4174},"title",[4005,50927,4237],{"class":4178},[4005,50929,3836],{"class":4182},[4005,50931,17909],{"class":4174},[4005,50933,5907],{"class":4178},[4005,50935,44641],{"class":4182},[4005,50937,50938],{"class":4178},"Product",[4005,50940,5073],{"class":4182},[4005,50942,50943,50945,50947,50949,50951,50953,50955,50957,50959,50961,50963,50965,50967,50970,50972,50974],{"class":4007,"line":7819},[4005,50944,5260],{"class":4836},[4005,50946,44708],{"class":4182},[4005,50948,50938],{"class":4178},[4005,50950,16268],{"class":4182},[4005,50952,47055],{"class":4174},[4005,50954,11172],{"class":4182},[4005,50956,7180],{"class":4174},[4005,50958,3836],{"class":4182},[4005,50960,12496],{"class":4174},[4005,50962,11172],{"class":4182},[4005,50964,50925],{"class":4174},[4005,50966,3836],{"class":4182},[4005,50968,50969],{"class":4174},"Price",[4005,50971,11172],{"class":4182},[4005,50973,17909],{"class":4174},[4005,50975,4078],{"class":4182},[4005,50977,50978],{"class":4007,"line":7826},[4005,50979,4078],{"class":4182},[4005,50981,50982],{"class":4007,"line":7839},[4005,50983,4036],{"emptyLinePlaceholder":4035},[4005,50985,50986,50988,50991,50993,50995,50997,50999,51001,51003,51005,51007,51009,51012],{"class":4007,"line":7864},[4005,50987,4299],{"class":4171},[4005,50989,50990],{"class":4302}," NewOrder",[4005,50992,4611],{"class":4182},[4005,50994,7180],{"class":4174},[4005,50996,3836],{"class":4182},[4005,50998,9026],{"class":4174},[4005,51000,4179],{"class":4178},[4005,51002,3836],{"class":4182},[4005,51004,29102],{"class":4174},[4005,51006,5907],{"class":4178},[4005,51008,44641],{"class":4182},[4005,51010,51011],{"class":4178},"Order",[4005,51013,5073],{"class":4182},[4005,51015,51016,51018,51020,51022,51024,51026,51028,51030,51032,51034,51036,51038,51040,51043,51045,51047],{"class":4007,"line":7872},[4005,51017,5260],{"class":4836},[4005,51019,44708],{"class":4182},[4005,51021,51011],{"class":4178},[4005,51023,16268],{"class":4182},[4005,51025,47055],{"class":4174},[4005,51027,11172],{"class":4182},[4005,51029,7180],{"class":4174},[4005,51031,3836],{"class":4182},[4005,51033,7035],{"class":4174},[4005,51035,11172],{"class":4182},[4005,51037,9026],{"class":4174},[4005,51039,3836],{"class":4182},[4005,51041,51042],{"class":4174},"Total",[4005,51044,11172],{"class":4182},[4005,51046,29102],{"class":4174},[4005,51048,4078],{"class":4182},[4005,51050,51051],{"class":4007,"line":7881},[4005,51052,4078],{"class":4182},[4005,51054,51055],{"class":4007,"line":7890},[4005,51056,4036],{"emptyLinePlaceholder":4035},[4005,51058,51059],{"class":4007,"line":7895},[4005,51060,49101],{"class":4190},[4005,51062,51063],{"class":4007,"line":7900},[4005,51064,51065],{"class":4190},"\u002F\u002F import \"myapp\u002Fmodels\"\n",[4005,51067,51068],{"class":4007,"line":7909},[4005,51069,51070],{"class":4190},"\u002F\u002F u := models.NewUser(1, \"Олег\")\n",[4005,51072,51073],{"class":4007,"line":7915},[4005,51074,51075],{"class":4190},"\u002F\u002F p := models.NewProduct(10, \"Ноутбук\", 25000.00)\n",[4005,51077,51078],{"class":4007,"line":7921},[4005,51079,51080],{"class":4190},"\u002F\u002F o := models.NewOrder(100, 1, 25000.00)\n",[3908,51082,51083],{},[3871,51084,51085],{},"Приклади з стандартної бібліотеки:",[3746,51087,51088,51094,51100,51106],{},[3749,51089,51090,51093],{},[3753,51091,51092],{},"http.NewRequest()"," — створює HTTP-запит",[3749,51095,51096,51099],{},[3753,51097,51098],{},"http.NewServeMux()"," — створює роутер",[3749,51101,51102,51105],{},[3753,51103,51104],{},"template.New()"," — створює шаблон",[3749,51107,51108,51111],{},[3753,51109,51110],{},"bytes.NewBuffer()"," — створює буфер",[3908,51113,51114,3880,51117,8512,51120],{},[3871,51115,51116],{},"3. Варіанти створення:",[3753,51118,51119],{},"NewTypeNameFrom...()",[3753,51121,51122],{},"NewTypeNameWith...()",[3908,51124,51125],{},"Коли є різні способи створення того самого типу:",[3984,51127,51129],{"className":4162,"code":51128,"language":4164,"meta":3992,"style":3992},"package models\n\ntype User struct {\n    ID       int64\n    Email    string\n    Username string\n}\n\n\u002F\u002F Базовий конструктор\nfunc NewUser(id int64, email, username string) *User {\n    return &User{\n        ID:       id,\n        Email:    email,\n        Username: username,\n    }\n}\n\n\u002F\u002F Створення з email (генеруємо username автоматично)\nfunc NewUserFromEmail(email string) *User {\n    return &User{\n        ID:       generateID(),\n        Email:    email,\n        Username: extractUsernameFromEmail(email),\n    }\n}\n\n\u002F\u002F Створення з ID (завантажуємо з БД)\nfunc NewUserFromID(id int64) (*User, error) {\n    \u002F\u002F Логіка завантаження з БД\n    return &User{ID: id}, nil\n}\n\n\u002F\u002F Створення з JSON\nfunc NewUserFromJSON(data []byte) (*User, error) {\n    var u User\n    err := json.Unmarshal(data, &u)\n    return &u, err\n}\n\n\u002F\u002F Створення з дефолтними значеннями\nfunc NewUserWithDefaults() *User {\n    return &User{\n        ID:       generateID(),\n        Email:    \"anonymous@example.com\",\n        Username: \"anonymous\",\n    }\n}\n\n\u002F\u002F Допоміжні функції\nfunc generateID() int64 {\n    return time.Now().UnixNano()\n}\n\nfunc extractUsernameFromEmail(email string) string {\n    parts := strings.Split(email, \"@\")\n    if len(parts) > 0 {\n        return parts[0]\n    }\n    return \"user\"\n}\n",[3753,51130,51131,51137,51141,51151,51157,51163,51169,51173,51177,51182,51210,51220,51230,51240,51250,51254,51258,51262,51267,51286,51296,51307,51317,51333,51337,51341,51345,51350,51373,51378,51398,51402,51406,51411,51436,51444,51469,51482,51486,51490,51495,51509,51519,51529,51540,51551,51555,51559,51563,51567,51579,51595,51599,51603,51622,51644,51660,51673,51677,51684],{"__ignoreMap":3992},[4005,51132,51133,51135],{"class":4007,"line":4008},[4005,51134,5739],{"class":4171},[4005,51136,50732],{"class":4178},[4005,51138,51139],{"class":4007,"line":4014},[4005,51140,4036],{"emptyLinePlaceholder":4035},[4005,51142,51143,51145,51147,51149],{"class":4007,"line":4020},[4005,51144,4809],{"class":4171},[4005,51146,20760],{"class":4178},[4005,51148,10957],{"class":4171},[4005,51150,5073],{"class":4182},[4005,51152,51153,51155],{"class":4007,"line":4026},[4005,51154,46381],{"class":4174},[4005,51156,46384],{"class":4178},[4005,51158,51159,51161],{"class":4007,"line":4032},[4005,51160,4931],{"class":4174},[4005,51162,7527],{"class":4178},[4005,51164,51165,51167],{"class":4007,"line":4039},[4005,51166,33486],{"class":4174},[4005,51168,20772],{"class":4178},[4005,51170,51171],{"class":4007,"line":4045},[4005,51172,4078],{"class":4182},[4005,51174,51175],{"class":4007,"line":4051},[4005,51176,4036],{"emptyLinePlaceholder":4035},[4005,51178,51179],{"class":4007,"line":4057},[4005,51180,51181],{"class":4190},"\u002F\u002F Базовий конструктор\n",[4005,51183,51184,51186,51188,51190,51192,51194,51196,51198,51200,51202,51204,51206,51208],{"class":4007,"line":4063},[4005,51185,4299],{"class":4171},[4005,51187,48216],{"class":4302},[4005,51189,4611],{"class":4182},[4005,51191,7180],{"class":4174},[4005,51193,4179],{"class":4178},[4005,51195,3836],{"class":4182},[4005,51197,13913],{"class":4174},[4005,51199,3836],{"class":4182},[4005,51201,33385],{"class":4174},[4005,51203,4237],{"class":4178},[4005,51205,44641],{"class":4182},[4005,51207,20798],{"class":4178},[4005,51209,5073],{"class":4182},[4005,51211,51212,51214,51216,51218],{"class":4007,"line":4069},[4005,51213,5260],{"class":4836},[4005,51215,44708],{"class":4182},[4005,51217,20798],{"class":4178},[4005,51219,29461],{"class":4182},[4005,51221,51222,51224,51226,51228],{"class":4007,"line":4075},[4005,51223,49041],{"class":4174},[4005,51225,46433],{"class":4182},[4005,51227,7180],{"class":4174},[4005,51229,29475],{"class":4182},[4005,51231,51232,51234,51236,51238],{"class":4007,"line":4081},[4005,51233,49063],{"class":4174},[4005,51235,44670],{"class":4182},[4005,51237,13913],{"class":4174},[4005,51239,29475],{"class":4182},[4005,51241,51242,51244,51246,51248],{"class":4007,"line":4086},[4005,51243,49052],{"class":4174},[4005,51245,11172],{"class":4182},[4005,51247,33385],{"class":4174},[4005,51249,29475],{"class":4182},[4005,51251,51252],{"class":4007,"line":4092},[4005,51253,5127],{"class":4182},[4005,51255,51256],{"class":4007,"line":4098},[4005,51257,4078],{"class":4182},[4005,51259,51260],{"class":4007,"line":4104},[4005,51261,4036],{"emptyLinePlaceholder":4035},[4005,51263,51264],{"class":4007,"line":4110},[4005,51265,51266],{"class":4190},"\u002F\u002F Створення з email (генеруємо username автоматично)\n",[4005,51268,51269,51271,51274,51276,51278,51280,51282,51284],{"class":4007,"line":4937},[4005,51270,4299],{"class":4171},[4005,51272,51273],{"class":4302}," NewUserFromEmail",[4005,51275,4611],{"class":4182},[4005,51277,13913],{"class":4174},[4005,51279,4237],{"class":4178},[4005,51281,44641],{"class":4182},[4005,51283,20798],{"class":4178},[4005,51285,5073],{"class":4182},[4005,51287,51288,51290,51292,51294],{"class":4007,"line":4942},[4005,51289,5260],{"class":4836},[4005,51291,44708],{"class":4182},[4005,51293,20798],{"class":4178},[4005,51295,29461],{"class":4182},[4005,51297,51298,51300,51302,51304],{"class":4007,"line":4947},[4005,51299,49041],{"class":4174},[4005,51301,46433],{"class":4182},[4005,51303,49614],{"class":4302},[4005,51305,51306],{"class":4182},"(),\n",[4005,51308,51309,51311,51313,51315],{"class":4007,"line":4953},[4005,51310,49063],{"class":4174},[4005,51312,44670],{"class":4182},[4005,51314,13913],{"class":4174},[4005,51316,29475],{"class":4182},[4005,51318,51319,51321,51323,51326,51328,51330],{"class":4007,"line":4960},[4005,51320,49052],{"class":4174},[4005,51322,11172],{"class":4182},[4005,51324,51325],{"class":4302},"extractUsernameFromEmail",[4005,51327,4611],{"class":4182},[4005,51329,13913],{"class":4174},[4005,51331,51332],{"class":4182},"),\n",[4005,51334,51335],{"class":4007,"line":4973},[4005,51336,5127],{"class":4182},[4005,51338,51339],{"class":4007,"line":4985},[4005,51340,4078],{"class":4182},[4005,51342,51343],{"class":4007,"line":7813},[4005,51344,4036],{"emptyLinePlaceholder":4035},[4005,51346,51347],{"class":4007,"line":7819},[4005,51348,51349],{"class":4190},"\u002F\u002F Створення з ID (завантажуємо з БД)\n",[4005,51351,51352,51354,51357,51359,51361,51363,51365,51367,51369,51371],{"class":4007,"line":7826},[4005,51353,4299],{"class":4171},[4005,51355,51356],{"class":4302}," NewUserFromID",[4005,51358,4611],{"class":4182},[4005,51360,7180],{"class":4174},[4005,51362,4179],{"class":4178},[4005,51364,49711],{"class":4182},[4005,51366,20798],{"class":4178},[4005,51368,3836],{"class":4182},[4005,51370,3857],{"class":4178},[4005,51372,12789],{"class":4182},[4005,51374,51375],{"class":4007,"line":7839},[4005,51376,51377],{"class":4190},"    \u002F\u002F Логіка завантаження з БД\n",[4005,51379,51380,51382,51384,51386,51388,51390,51392,51394,51396],{"class":4007,"line":7864},[4005,51381,5260],{"class":4836},[4005,51383,44708],{"class":4182},[4005,51385,20798],{"class":4178},[4005,51387,16268],{"class":4182},[4005,51389,47055],{"class":4174},[4005,51391,11172],{"class":4182},[4005,51393,7180],{"class":4174},[4005,51395,31476],{"class":4182},[4005,51397,49820],{"class":4171},[4005,51399,51400],{"class":4007,"line":7872},[4005,51401,4078],{"class":4182},[4005,51403,51404],{"class":4007,"line":7881},[4005,51405,4036],{"emptyLinePlaceholder":4035},[4005,51407,51408],{"class":4007,"line":7890},[4005,51409,51410],{"class":4190},"\u002F\u002F Створення з JSON\n",[4005,51412,51413,51415,51418,51420,51422,51424,51426,51428,51430,51432,51434],{"class":4007,"line":7895},[4005,51414,4299],{"class":4171},[4005,51416,51417],{"class":4302}," NewUserFromJSON",[4005,51419,4611],{"class":4182},[4005,51421,5193],{"class":4174},[4005,51423,26632],{"class":4182},[4005,51425,5162],{"class":4178},[4005,51427,49711],{"class":4182},[4005,51429,20798],{"class":4178},[4005,51431,3836],{"class":4182},[4005,51433,3857],{"class":4178},[4005,51435,12789],{"class":4182},[4005,51437,51438,51440,51442],{"class":4007,"line":7900},[4005,51439,9412],{"class":4171},[4005,51441,45545],{"class":4174},[4005,51443,48110],{"class":4178},[4005,51445,51446,51449,51451,51454,51456,51459,51461,51463,51465,51467],{"class":4007,"line":7909},[4005,51447,51448],{"class":4174},"    err",[4005,51450,4314],{"class":4182},[4005,51452,51453],{"class":4174},"json",[4005,51455,3769],{"class":4182},[4005,51457,51458],{"class":4302},"Unmarshal",[4005,51460,4611],{"class":4182},[4005,51462,5193],{"class":4174},[4005,51464,9182],{"class":4182},[4005,51466,45582],{"class":4174},[4005,51468,4482],{"class":4182},[4005,51470,51471,51473,51475,51477,51479],{"class":4007,"line":7915},[4005,51472,5260],{"class":4836},[4005,51474,44708],{"class":4182},[4005,51476,45582],{"class":4174},[4005,51478,3836],{"class":4182},[4005,51480,51481],{"class":4174},"err\n",[4005,51483,51484],{"class":4007,"line":7921},[4005,51485,4078],{"class":4182},[4005,51487,51488],{"class":4007,"line":7938},[4005,51489,4036],{"emptyLinePlaceholder":4035},[4005,51491,51492],{"class":4007,"line":7982},[4005,51493,51494],{"class":4190},"\u002F\u002F Створення з дефолтними значеннями\n",[4005,51496,51497,51499,51502,51505,51507],{"class":4007,"line":7987},[4005,51498,4299],{"class":4171},[4005,51500,51501],{"class":4302}," NewUserWithDefaults",[4005,51503,51504],{"class":4182},"() *",[4005,51506,20798],{"class":4178},[4005,51508,5073],{"class":4182},[4005,51510,51511,51513,51515,51517],{"class":4007,"line":7993},[4005,51512,5260],{"class":4836},[4005,51514,44708],{"class":4182},[4005,51516,20798],{"class":4178},[4005,51518,29461],{"class":4182},[4005,51520,51521,51523,51525,51527],{"class":4007,"line":8016},[4005,51522,49041],{"class":4174},[4005,51524,46433],{"class":4182},[4005,51526,49614],{"class":4302},[4005,51528,51306],{"class":4182},[4005,51530,51531,51533,51535,51538],{"class":4007,"line":8035},[4005,51532,49063],{"class":4174},[4005,51534,44670],{"class":4182},[4005,51536,51537],{"class":4330},"\"anonymous@example.com\"",[4005,51539,29475],{"class":4182},[4005,51541,51542,51544,51546,51549],{"class":4007,"line":8063},[4005,51543,49052],{"class":4174},[4005,51545,11172],{"class":4182},[4005,51547,51548],{"class":4330},"\"anonymous\"",[4005,51550,29475],{"class":4182},[4005,51552,51553],{"class":4007,"line":8090},[4005,51554,5127],{"class":4182},[4005,51556,51557],{"class":4007,"line":8095},[4005,51558,4078],{"class":4182},[4005,51560,51561],{"class":4007,"line":8101},[4005,51562,4036],{"emptyLinePlaceholder":4035},[4005,51564,51565],{"class":4007,"line":8135},[4005,51566,50043],{"class":4190},[4005,51568,51569,51571,51573,51575,51577],{"class":4007,"line":41104},[4005,51570,4299],{"class":4171},[4005,51572,50051],{"class":4302},[4005,51574,7346],{"class":4182},[4005,51576,4154],{"class":4178},[4005,51578,5073],{"class":4182},[4005,51580,51581,51583,51585,51587,51589,51591,51593],{"class":4007,"line":41109},[4005,51582,5260],{"class":4836},[4005,51584,5939],{"class":4174},[4005,51586,3769],{"class":4182},[4005,51588,26011],{"class":4302},[4005,51590,12903],{"class":4182},[4005,51592,50073],{"class":4302},[4005,51594,5143],{"class":4182},[4005,51596,51597],{"class":4007,"line":49973},[4005,51598,4078],{"class":4182},[4005,51600,51601],{"class":4007,"line":49979},[4005,51602,4036],{"emptyLinePlaceholder":4035},[4005,51604,51605,51607,51610,51612,51614,51616,51618,51620],{"class":4007,"line":50000},[4005,51606,4299],{"class":4171},[4005,51608,51609],{"class":4302}," extractUsernameFromEmail",[4005,51611,4611],{"class":4182},[4005,51613,13913],{"class":4174},[4005,51615,4237],{"class":4178},[4005,51617,4498],{"class":4182},[4005,51619,7004],{"class":4178},[4005,51621,5073],{"class":4182},[4005,51623,51624,51626,51628,51630,51632,51634,51636,51638,51640,51642],{"class":4007,"line":50012},[4005,51625,16721],{"class":4174},[4005,51627,4314],{"class":4182},[4005,51629,12438],{"class":4174},[4005,51631,3769],{"class":4182},[4005,51633,16628],{"class":4302},[4005,51635,4611],{"class":4182},[4005,51637,13913],{"class":4174},[4005,51639,3836],{"class":4182},[4005,51641,13918],{"class":4330},[4005,51643,4482],{"class":4182},[4005,51645,51646,51648,51650,51652,51654,51656,51658],{"class":4007,"line":50017},[4005,51647,5104],{"class":4836},[4005,51649,50113],{"class":4302},[4005,51651,4611],{"class":4182},[4005,51653,16754],{"class":4174},[4005,51655,40780],{"class":4182},[4005,51657,4200],{"class":4186},[4005,51659,5073],{"class":4182},[4005,51661,51662,51664,51666,51668,51670],{"class":4007,"line":50022},[4005,51663,5119],{"class":4836},[4005,51665,17653],{"class":4174},[4005,51667,11561],{"class":4182},[4005,51669,4200],{"class":4186},[4005,51671,51672],{"class":4182},"]\n",[4005,51674,51675],{"class":4007,"line":50030},[4005,51676,5127],{"class":4182},[4005,51678,51679,51681],{"class":4007,"line":50035},[4005,51680,5260],{"class":4836},[4005,51682,51683],{"class":4330}," \"user\"\n",[4005,51685,51686],{"class":4007,"line":50040},[4005,51687,4078],{"class":4182},[3908,51689,51690],{},[3871,51691,51692],{},"Використання:",[3984,51694,51696],{"className":4162,"code":51695,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Різні способи створення\nuser1 := models.NewUser(1, \"alex@kostyl.dev\", \"alex\")\nuser2 := models.NewUserFromEmail(\"maria@kostyl.dev\")\nuser3, err := models.NewUserFromID(123)\nuser4 := models.NewUserWithDefaults()\n\njsonData := []byte(`{\"id\":5,\"email\":\"oleh@kostyl.dev\",\"username\":\"oleh\"}`)\nuser5, err := models.NewUserFromJSON(jsonData)\n",[3753,51697,51698,51703,51730,51749,51773,51788,51792,51808],{"__ignoreMap":3992},[4005,51699,51700],{"class":4007,"line":4008},[4005,51701,51702],{"class":4190},"\u002F\u002F Різні способи створення\n",[4005,51704,51705,51707,51709,51712,51714,51716,51718,51720,51722,51724,51726,51728],{"class":4007,"line":4014},[4005,51706,47122],{"class":4174},[4005,51708,4314],{"class":4182},[4005,51710,51711],{"class":4174},"models",[4005,51713,3769],{"class":4182},[4005,51715,43884],{"class":4302},[4005,51717,4611],{"class":4182},[4005,51719,4393],{"class":4186},[4005,51721,3836],{"class":4182},[4005,51723,46457],{"class":4330},[4005,51725,3836],{"class":4182},[4005,51727,46446],{"class":4330},[4005,51729,4482],{"class":4182},[4005,51731,51732,51734,51736,51738,51740,51743,51745,51747],{"class":4007,"line":4020},[4005,51733,47144],{"class":4174},[4005,51735,4314],{"class":4182},[4005,51737,51711],{"class":4174},[4005,51739,3769],{"class":4182},[4005,51741,51742],{"class":4302},"NewUserFromEmail",[4005,51744,4611],{"class":4182},[4005,51746,50370],{"class":4330},[4005,51748,4482],{"class":4182},[4005,51750,51751,51753,51755,51757,51759,51761,51763,51766,51768,51771],{"class":4007,"line":4026},[4005,51752,47885],{"class":4174},[4005,51754,3836],{"class":4182},[4005,51756,4598],{"class":4174},[4005,51758,4314],{"class":4182},[4005,51760,51711],{"class":4174},[4005,51762,3769],{"class":4182},[4005,51764,51765],{"class":4302},"NewUserFromID",[4005,51767,4611],{"class":4182},[4005,51769,51770],{"class":4186},"123",[4005,51772,4482],{"class":4182},[4005,51774,51775,51777,51779,51781,51783,51786],{"class":4007,"line":4032},[4005,51776,47939],{"class":4174},[4005,51778,4314],{"class":4182},[4005,51780,51711],{"class":4174},[4005,51782,3769],{"class":4182},[4005,51784,51785],{"class":4302},"NewUserWithDefaults",[4005,51787,5143],{"class":4182},[4005,51789,51790],{"class":4007,"line":4039},[4005,51791,4036],{"emptyLinePlaceholder":4035},[4005,51793,51794,51797,51799,51801,51803,51806],{"class":4007,"line":4045},[4005,51795,51796],{"class":4174},"jsonData",[4005,51798,11583],{"class":4182},[4005,51800,5162],{"class":4178},[4005,51802,4611],{"class":4182},[4005,51804,51805],{"class":4330},"`{\"id\":5,\"email\":\"oleh@kostyl.dev\",\"username\":\"oleh\"}`",[4005,51807,4482],{"class":4182},[4005,51809,51810,51813,51815,51817,51819,51821,51823,51826,51828,51830],{"class":4007,"line":4051},[4005,51811,51812],{"class":4174},"user5",[4005,51814,3836],{"class":4182},[4005,51816,4598],{"class":4174},[4005,51818,4314],{"class":4182},[4005,51820,51711],{"class":4174},[4005,51822,3769],{"class":4182},[4005,51824,51825],{"class":4302},"NewUserFromJSON",[4005,51827,4611],{"class":4182},[4005,51829,51796],{"class":4174},[4005,51831,4482],{"class":4182},[3908,51833,51834],{},[3871,51835,50679],{},[3746,51837,51838,51847,51856,51865],{},[3749,51839,51840,3765,51843,51846],{},[3753,51841,51842],{},"time.Parse()",[3753,51844,51845],{},"time.ParseInLocation()"," — різні способи парсингу",[3749,51848,51849,3765,51852,51855],{},[3753,51850,51851],{},"url.Parse()",[3753,51853,51854],{},"url.ParseRequestURI()"," — різні рівні валідації",[3749,51857,51858,3765,51861,51864],{},[3753,51859,51860],{},"big.NewInt()",[3753,51862,51863],{},"big.NewFloat()"," — різні типи чисел",[3749,51866,51867,3765,51870,51873],{},[3753,51868,51869],{},"os.Open()",[3753,51871,51872],{},"os.OpenFile()"," — різні опції відкриття файлу",[3908,51875,51876],{},[3871,51877,51878],{},"Анти-паттерни (не робіть так):",[3984,51880,51882],{"className":4162,"code":51881,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ❌ Погано: не Go-стиль\nfunc CreateUser() *User { }        \u002F\u002F Використовуйте New, не Create\nfunc UserConstructor() *User { }   \u002F\u002F Не Java-стиль\nfunc MakeUser() *User { }          \u002F\u002F Плутанина з make()\nfunc user() *User { }              \u002F\u002F Малі літери — приватні функції\n\n\u002F\u002F ✅ Добре: Go-стиль\nfunc NewUser() *User { }\nfunc NewUserFromEmail(email string) *User { }\n",[3753,51883,51884,51889,51906,51923,51940,51956,51960,51965,51977],{"__ignoreMap":3992},[4005,51885,51886],{"class":4007,"line":4008},[4005,51887,51888],{"class":4190},"\u002F\u002F ❌ Погано: не Go-стиль\n",[4005,51890,51891,51893,51896,51898,51900,51903],{"class":4007,"line":4014},[4005,51892,4299],{"class":4171},[4005,51894,51895],{"class":4302}," CreateUser",[4005,51897,51504],{"class":4182},[4005,51899,20798],{"class":4178},[4005,51901,51902],{"class":4182}," { }        ",[4005,51904,51905],{"class":4190},"\u002F\u002F Використовуйте New, не Create\n",[4005,51907,51908,51910,51913,51915,51917,51920],{"class":4007,"line":4020},[4005,51909,4299],{"class":4171},[4005,51911,51912],{"class":4302}," UserConstructor",[4005,51914,51504],{"class":4182},[4005,51916,20798],{"class":4178},[4005,51918,51919],{"class":4182}," { }   ",[4005,51921,51922],{"class":4190},"\u002F\u002F Не Java-стиль\n",[4005,51924,51925,51927,51930,51932,51934,51937],{"class":4007,"line":4026},[4005,51926,4299],{"class":4171},[4005,51928,51929],{"class":4302}," MakeUser",[4005,51931,51504],{"class":4182},[4005,51933,20798],{"class":4178},[4005,51935,51936],{"class":4182}," { }          ",[4005,51938,51939],{"class":4190},"\u002F\u002F Плутанина з make()\n",[4005,51941,51942,51944,51946,51948,51950,51953],{"class":4007,"line":4032},[4005,51943,4299],{"class":4171},[4005,51945,46232],{"class":4302},[4005,51947,51504],{"class":4182},[4005,51949,20798],{"class":4178},[4005,51951,51952],{"class":4182}," { }              ",[4005,51954,51955],{"class":4190},"\u002F\u002F Малі літери — приватні функції\n",[4005,51957,51958],{"class":4007,"line":4039},[4005,51959,4036],{"emptyLinePlaceholder":4035},[4005,51961,51962],{"class":4007,"line":4045},[4005,51963,51964],{"class":4190},"\u002F\u002F ✅ Добре: Go-стиль\n",[4005,51966,51967,51969,51971,51973,51975],{"class":4007,"line":4051},[4005,51968,4299],{"class":4171},[4005,51970,48216],{"class":4302},[4005,51972,51504],{"class":4182},[4005,51974,20798],{"class":4178},[4005,51976,46216],{"class":4182},[4005,51978,51979,51981,51983,51985,51987,51989,51991,51993],{"class":4007,"line":4057},[4005,51980,4299],{"class":4171},[4005,51982,51273],{"class":4302},[4005,51984,4611],{"class":4182},[4005,51986,13913],{"class":4174},[4005,51988,4237],{"class":4178},[4005,51990,44641],{"class":4182},[4005,51992,20798],{"class":4178},[4005,51994,46216],{"class":4182},[9014,51996,51998],{"id":51997},"доступ-до-полів","Доступ до полів",[3908,52000,52001,52002,52005],{},"На відміну від Java, в Go ",[3871,52003,52004],{},"немає геттерів і сеттерів"," — доступ до полів прямий:",[12533,52007,52008,52173],{},[12536,52009,52011,52168],{"icon":12538,"label":52010},"Go — прямий доступ",[3984,52012,52014],{"className":4162,"code":52013,"language":4164,"meta":3992,"style":3992},"user := User{\n    ID:       1,\n    Username: \"alex\",\n}\n\n\u002F\u002F Читання\nname := user.Username\nfmt.Println(name)  \u002F\u002F alex\n\n\u002F\u002F Запис\nuser.Username = \"alexander\"\nfmt.Println(user.Username)  \u002F\u002F alexander\n\n\u002F\u002F Через покажчик (автоматичне розіменування)\nuserPtr := &user\nuserPtr.Username = \"alex_dev\"  \u002F\u002F Не потрібно (*userPtr).Username\n",[3753,52015,52016,52026,52036,52046,52050,52054,52059,52072,52089,52093,52098,52112,52133,52137,52142,52152],{"__ignoreMap":3992},[4005,52017,52018,52020,52022,52024],{"class":4007,"line":4008},[4005,52019,20793],{"class":4174},[4005,52021,4314],{"class":4182},[4005,52023,20798],{"class":4178},[4005,52025,29461],{"class":4182},[4005,52027,52028,52030,52032,52034],{"class":4007,"line":4014},[4005,52029,46381],{"class":4174},[4005,52031,46433],{"class":4182},[4005,52033,4393],{"class":4186},[4005,52035,29475],{"class":4182},[4005,52037,52038,52040,52042,52044],{"class":4007,"line":4020},[4005,52039,33486],{"class":4174},[4005,52041,11172],{"class":4182},[4005,52043,46446],{"class":4330},[4005,52045,29475],{"class":4182},[4005,52047,52048],{"class":4007,"line":4026},[4005,52049,4078],{"class":4182},[4005,52051,52052],{"class":4007,"line":4032},[4005,52053,4036],{"emptyLinePlaceholder":4035},[4005,52055,52056],{"class":4007,"line":4039},[4005,52057,52058],{"class":4190},"\u002F\u002F Читання\n",[4005,52060,52061,52063,52065,52067,52069],{"class":4007,"line":4045},[4005,52062,4650],{"class":4174},[4005,52064,4314],{"class":4182},[4005,52066,20793],{"class":4174},[4005,52068,3769],{"class":4182},[4005,52070,52071],{"class":4174},"Username\n",[4005,52073,52074,52076,52078,52080,52082,52084,52086],{"class":4007,"line":4051},[4005,52075,3785],{"class":4174},[4005,52077,3769],{"class":4182},[4005,52079,5348],{"class":4302},[4005,52081,4611],{"class":4182},[4005,52083,4650],{"class":4174},[4005,52085,5196],{"class":4182},[4005,52087,52088],{"class":4190},"\u002F\u002F alex\n",[4005,52090,52091],{"class":4007,"line":4057},[4005,52092,4036],{"emptyLinePlaceholder":4035},[4005,52094,52095],{"class":4007,"line":4063},[4005,52096,52097],{"class":4190},"\u002F\u002F Запис\n",[4005,52099,52100,52102,52104,52107,52109],{"class":4007,"line":4069},[4005,52101,20793],{"class":4174},[4005,52103,3769],{"class":4182},[4005,52105,52106],{"class":4174},"Username",[4005,52108,4183],{"class":4182},[4005,52110,52111],{"class":4330},"\"alexander\"\n",[4005,52113,52114,52116,52118,52120,52122,52124,52126,52128,52130],{"class":4007,"line":4075},[4005,52115,3785],{"class":4174},[4005,52117,3769],{"class":4182},[4005,52119,5348],{"class":4302},[4005,52121,4611],{"class":4182},[4005,52123,20793],{"class":4174},[4005,52125,3769],{"class":4182},[4005,52127,52106],{"class":4174},[4005,52129,5196],{"class":4182},[4005,52131,52132],{"class":4190},"\u002F\u002F alexander\n",[4005,52134,52135],{"class":4007,"line":4081},[4005,52136,4036],{"emptyLinePlaceholder":4035},[4005,52138,52139],{"class":4007,"line":4086},[4005,52140,52141],{"class":4190},"\u002F\u002F Через покажчик (автоматичне розіменування)\n",[4005,52143,52144,52147,52149],{"class":4007,"line":4092},[4005,52145,52146],{"class":4174},"userPtr",[4005,52148,44159],{"class":4182},[4005,52150,52151],{"class":4174},"user\n",[4005,52153,52154,52156,52158,52160,52162,52165],{"class":4007,"line":4098},[4005,52155,52146],{"class":4174},[4005,52157,3769],{"class":4182},[4005,52159,52106],{"class":4174},[4005,52161,4183],{"class":4182},[4005,52163,52164],{"class":4330},"\"alex_dev\"",[4005,52166,52167],{"class":4190},"  \u002F\u002F Не потрібно (*userPtr).Username\n",[3908,52169,52170],{},[3871,52171,52172],{},"Go автоматично розіменовує покажчики на структури!",[12536,52174,52176,52349],{"icon":12743,"label":52175},"Java — геттери\u002Fсеттери",[3984,52177,52179],{"className":12746,"code":52178,"language":12748,"meta":3992,"style":3992},"public class User {\n    private String username;  \u002F\u002F private!\n    \n    \u002F\u002F Геттер\n    public String getUsername() {\n        return username;\n    }\n    \n    \u002F\u002F Сеттер\n    public void setUsername(String username) {\n        this.username = username;\n    }\n}\n\n\u002F\u002F Використання:\nUser user = new User();\nuser.setUsername(\"alex\");           \u002F\u002F Через сеттер\nString name = user.getUsername();   \u002F\u002F Через геттер\n\u002F\u002F user.username = \"alex\";  \u002F\u002F ❌ Помилка! private поле\n",[3753,52180,52181,52191,52204,52208,52213,52224,52231,52235,52239,52244,52261,52271,52275,52279,52283,52287,52301,52320,52341],{"__ignoreMap":3992},[4005,52182,52183,52185,52187,52189],{"class":4007,"line":4008},[4005,52184,12755],{"class":4171},[4005,52186,12758],{"class":4171},[4005,52188,20760],{"class":4178},[4005,52190,5073],{"class":4182},[4005,52192,52193,52195,52197,52199,52201],{"class":4007,"line":4014},[4005,52194,46567],{"class":4171},[4005,52196,46581],{"class":4178},[4005,52198,46584],{"class":4174},[4005,52200,18506],{"class":4182},[4005,52202,52203],{"class":4190},"\u002F\u002F private!\n",[4005,52205,52206],{"class":4007,"line":4020},[4005,52207,5214],{"class":4182},[4005,52209,52210],{"class":4007,"line":4026},[4005,52211,52212],{"class":4190},"    \u002F\u002F Геттер\n",[4005,52214,52215,52217,52219,52222],{"class":4007,"line":4032},[4005,52216,12768],{"class":4171},[4005,52218,46581],{"class":4178},[4005,52220,52221],{"class":4302}," getUsername",[4005,52223,4306],{"class":4182},[4005,52225,52226,52228],{"class":4007,"line":4039},[4005,52227,5119],{"class":4836},[4005,52229,52230],{"class":4182}," username;\n",[4005,52232,52233],{"class":4007,"line":4045},[4005,52234,5127],{"class":4182},[4005,52236,52237],{"class":4007,"line":4051},[4005,52238,5214],{"class":4182},[4005,52240,52241],{"class":4007,"line":4057},[4005,52242,52243],{"class":4190},"    \u002F\u002F Сеттер\n",[4005,52245,52246,52248,52250,52253,52255,52257,52259],{"class":4007,"line":4063},[4005,52247,12768],{"class":4171},[4005,52249,12774],{"class":4178},[4005,52251,52252],{"class":4302}," setUsername",[4005,52254,4611],{"class":4182},[4005,52256,7343],{"class":4178},[4005,52258,46584],{"class":4174},[4005,52260,12789],{"class":4182},[4005,52262,52263,52265,52267,52269],{"class":4007,"line":4069},[4005,52264,46655],{"class":4171},[4005,52266,3769],{"class":4182},[4005,52268,33385],{"class":4174},[4005,52270,46673],{"class":4182},[4005,52272,52273],{"class":4007,"line":4075},[4005,52274,5127],{"class":4182},[4005,52276,52277],{"class":4007,"line":4081},[4005,52278,4078],{"class":4182},[4005,52280,52281],{"class":4007,"line":4086},[4005,52282,4036],{"emptyLinePlaceholder":4035},[4005,52284,52285],{"class":4007,"line":4092},[4005,52286,49101],{"class":4190},[4005,52288,52289,52291,52293,52295,52297,52299],{"class":4007,"line":4098},[4005,52290,20798],{"class":4178},[4005,52292,46232],{"class":4174},[4005,52294,4183],{"class":4182},[4005,52296,3768],{"class":4836},[4005,52298,20760],{"class":4302},[4005,52300,18448],{"class":4182},[4005,52302,52303,52305,52307,52310,52312,52314,52317],{"class":4007,"line":4104},[4005,52304,20793],{"class":4174},[4005,52306,3769],{"class":4182},[4005,52308,52309],{"class":4302},"setUsername",[4005,52311,4611],{"class":4182},[4005,52313,46446],{"class":4330},[4005,52315,52316],{"class":4182},");           ",[4005,52318,52319],{"class":4190},"\u002F\u002F Через сеттер\n",[4005,52321,52322,52324,52326,52328,52330,52332,52335,52338],{"class":4007,"line":4110},[4005,52323,7343],{"class":4178},[4005,52325,19403],{"class":4174},[4005,52327,4183],{"class":4182},[4005,52329,20793],{"class":4174},[4005,52331,3769],{"class":4182},[4005,52333,52334],{"class":4302},"getUsername",[4005,52336,52337],{"class":4182},"();   ",[4005,52339,52340],{"class":4190},"\u002F\u002F Через геттер\n",[4005,52342,52343,52346],{"class":4007,"line":4937},[4005,52344,52345],{"class":4190},"\u002F\u002F user.username = \"alex\";",[4005,52347,52348],{"class":4190},"  \u002F\u002F ❌ Помилка! private поле\n",[3908,52350,52351],{},[3871,52352,52353],{},"У Java геттери\u002Fсеттери обов'язкові для інкапсуляції.",[3900,52355],{},[3976,52357,52359],{"id":52358},"частина-3-анатомія-структур-у-памяті","Частина 3: Анатомія структур у пам'яті",[3908,52361,52362,52363,52366],{},"Тепер, коли ми знаємо, як створювати структури та екземпляри, розберемося, ",[3871,52364,52365],{},"як вони зберігаються в пам'яті"," та чому це важливо.",[9014,52368,52370],{"id":52369},"як-структура-зберігається-в-памяті","Як структура зберігається в пам'яті?",[3908,52372,52373,52374,52377,52378,52381],{},"Структура — це ",[3871,52375,52376],{},"неперервний блок пам'яті",", де поля розміщені ",[3871,52379,52380],{},"послідовно, одне за одним",", у порядку оголошення:",[3984,52383,52385],{"className":4162,"code":52384,"language":4164,"meta":3992,"style":3992},"type User struct {\n    ID       int64   \u002F\u002F 8 байт\n    Username string  \u002F\u002F 16 байт (ptr + len)\n    IsActive bool    \u002F\u002F 1 байт\n}\n",[3753,52386,52387,52397,52407,52416,52425],{"__ignoreMap":3992},[4005,52388,52389,52391,52393,52395],{"class":4007,"line":4008},[4005,52390,4809],{"class":4171},[4005,52392,20760],{"class":4178},[4005,52394,10957],{"class":4171},[4005,52396,5073],{"class":4182},[4005,52398,52399,52401,52404],{"class":4007,"line":4014},[4005,52400,46381],{"class":4174},[4005,52402,52403],{"class":4178},"       int64",[4005,52405,52406],{"class":4190},"   \u002F\u002F 8 байт\n",[4005,52408,52409,52411,52413],{"class":4007,"line":4020},[4005,52410,33486],{"class":4174},[4005,52412,4237],{"class":4178},[4005,52414,52415],{"class":4190},"  \u002F\u002F 16 байт (ptr + len)\n",[4005,52417,52418,52420,52422],{"class":4007,"line":4026},[4005,52419,46401],{"class":4174},[4005,52421,4250],{"class":4178},[4005,52423,52424],{"class":4190},"    \u002F\u002F 1 байт\n",[4005,52426,52427],{"class":4007,"line":4032},[4005,52428,4078],{"class":4182},[3908,52430,52431],{},[3871,52432,52433],{},"Візуалізація в пам'яті:",[3994,52435,52437],{"alt":52436},"Фізичне розміщення структури User в оперативній пам'яті",[3984,52438,52440],{"className":3999,"code":52439,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 12\npackage \"Структура User у пам'яті RAM (32 байти)\" #F8FAFC {\n    rectangle \"ID (int64)\\n8 байтів\\nЗсув: 0\\nЗначення: 101\" as F1 #DBEAFE\n    rectangle \"Username (string)\\n16 байтів\\nЗсув: +8\\nЗначення: 'alex'\" as F2 #DCFCE7\n    rectangle \"IsActive (bool)\\n1 байт\\nЗсув: +24\\nЗначення: true\" as F3 #FEF3C7\n    rectangle \"Padding\\n7 байтів\\n(порожні)\" as F4 #FEE2E2\n\n    F1 -right-> F2\n    F2 -right-> F3\n    F3 -right-> F4\n}\n\nnote bottom of F4\n  Компілятор додав 7 байт padding\n  для вирівнювання структури\nend note\n\n@enduml\n",[3753,52441,52442,52446,52450,52454,52458,52463,52468,52473,52478,52483,52487,52492,52497,52502,52506,52510,52515,52520,52525,52529,52533],{"__ignoreMap":3992},[4005,52443,52444],{"class":4007,"line":4008},[4005,52445,4011],{},[4005,52447,52448],{"class":4007,"line":4014},[4005,52449,4017],{},[4005,52451,52452],{"class":4007,"line":4020},[4005,52453,4023],{},[4005,52455,52456],{"class":4007,"line":4026},[4005,52457,30872],{},[4005,52459,52460],{"class":4007,"line":4032},[4005,52461,52462],{},"package \"Структура User у пам'яті RAM (32 байти)\" #F8FAFC {\n",[4005,52464,52465],{"class":4007,"line":4039},[4005,52466,52467],{},"    rectangle \"ID (int64)\\n8 байтів\\nЗсув: 0\\nЗначення: 101\" as F1 #DBEAFE\n",[4005,52469,52470],{"class":4007,"line":4045},[4005,52471,52472],{},"    rectangle \"Username (string)\\n16 байтів\\nЗсув: +8\\nЗначення: 'alex'\" as F2 #DCFCE7\n",[4005,52474,52475],{"class":4007,"line":4051},[4005,52476,52477],{},"    rectangle \"IsActive (bool)\\n1 байт\\nЗсув: +24\\nЗначення: true\" as F3 #FEF3C7\n",[4005,52479,52480],{"class":4007,"line":4057},[4005,52481,52482],{},"    rectangle \"Padding\\n7 байтів\\n(порожні)\" as F4 #FEE2E2\n",[4005,52484,52485],{"class":4007,"line":4063},[4005,52486,4036],{"emptyLinePlaceholder":4035},[4005,52488,52489],{"class":4007,"line":4069},[4005,52490,52491],{},"    F1 -right-> F2\n",[4005,52493,52494],{"class":4007,"line":4075},[4005,52495,52496],{},"    F2 -right-> F3\n",[4005,52498,52499],{"class":4007,"line":4081},[4005,52500,52501],{},"    F3 -right-> F4\n",[4005,52503,52504],{"class":4007,"line":4086},[4005,52505,4078],{},[4005,52507,52508],{"class":4007,"line":4092},[4005,52509,4036],{"emptyLinePlaceholder":4035},[4005,52511,52512],{"class":4007,"line":4098},[4005,52513,52514],{},"note bottom of F4\n",[4005,52516,52517],{"class":4007,"line":4104},[4005,52518,52519],{},"  Компілятор додав 7 байт padding\n",[4005,52521,52522],{"class":4007,"line":4110},[4005,52523,52524],{},"  для вирівнювання структури\n",[4005,52526,52527],{"class":4007,"line":4937},[4005,52528,6931],{},[4005,52530,52531],{"class":4007,"line":4942},[4005,52532,4036],{"emptyLinePlaceholder":4035},[4005,52534,52535],{"class":4007,"line":4947},[4005,52536,4113],{},[3908,52538,52539],{},[3871,52540,52541],{},"Чому розмір не 25 байт (8+16+1), а 32 байти?",[3908,52543,52544,52545,52548],{},"Це через ",[3871,52546,52547],{},"memory alignment (вирівнювання пам'яті)"," — оптимізацію, яку робить компілятор для швидшої роботи процесора.",[9014,52550,52552],{"id":52551},"memory-alignment-чому-зявляються-дірки-в-памяті","Memory Alignment: чому з'являються \"дірки\" в пам'яті",[3908,52554,52555,52558,52559,52562,52563,52566],{},[3871,52556,52557],{},"Проблема:"," Сучасні процесори (64-біт) читають пам'ять ",[3871,52560,52561],{},"блоками по 8 байт",". Якщо дані не вирівняні, процесор робить ",[3871,52564,52565],{},"два читання"," замість одного — це повільно.",[3908,52568,52569,52572,52573,52576],{},[3871,52570,52571],{},"Рішення:"," Компілятор Go автоматично додає ",[3871,52574,52575],{},"padding (заповнювач)"," — порожні байти між полями, щоб кожне поле починалося з \"правильної\" адреси.",[3908,52578,52579],{},[3871,52580,52581],{},"Правила вирівнювання:",[5991,52583,52584,52597],{},[5994,52585,52586],{},[5997,52587,52588,52590,52592,52595],{},[6000,52589,8179],{},[6000,52591,9722],{},[6000,52593,52594],{},"Вирівнювання",[6000,52596,35357],{},[6010,52598,52599,52618,52634,52651,52671],{},[5997,52600,52601,52611,52613,52615],{},[6015,52602,52603,3836,52605,3836,52607,3836,52609],{},[3753,52604,8201],{},[3753,52606,7007],{},[3753,52608,5162],{},[3753,52610,8505],{},[6015,52612,10145],{},[6015,52614,4393],{},[6015,52616,52617],{},"Може починатися з будь-якої адреси",[5997,52619,52620,52626,52629,52631],{},[6015,52621,52622,3836,52624],{},[3753,52623,8220],{},[3753,52625,8323],{},[6015,52627,52628],{},"2 байти",[6015,52630,4398],{},[6015,52632,52633],{},"Адреса повинна бути кратна 2",[5997,52635,52636,52644,52646,52648],{},[6015,52637,52638,3836,52640,3836,52642],{},[3753,52639,8156],{},[3753,52641,8342],{},[3753,52643,6369],{},[6015,52645,9739],{},[6015,52647,8245],{},[6015,52649,52650],{},"Адреса повинна бути кратна 4",[5997,52652,52653,52663,52666,52668],{},[6015,52654,52655,3836,52657,3836,52659,3836,52661],{},[3753,52656,4154],{},[3753,52658,6523],{},[3753,52660,8437],{},[3753,52662,8552],{},[6015,52664,52665],{},"8 байт",[6015,52667,8264],{},[6015,52669,52670],{},"Адреса повинна бути кратна 8",[5997,52672,52673,52682,52685,52687],{},[6015,52674,52675,3836,52677,3836,52680],{},[3753,52676,7004],{},[3753,52678,52679],{},"slice",[3753,52681,8793],{},[6015,52683,52684],{},"16-24 байти",[6015,52686,8264],{},[6015,52688,52689],{},"Містять покажчики, вирівнювання 8",[3908,52691,52692],{},[3871,52693,52694],{},"Приклад з padding:",[12533,52696,52697,52801],{},[12536,52698,52700,52777,52782],{"icon":9084,"label":52699},"Погане вирівнювання",[3984,52701,52703],{"className":4162,"code":52702,"language":4164,"meta":3992,"style":3992},"type BadStruct struct {\n    A bool   \u002F\u002F 1 байт\n    B int64  \u002F\u002F 8 байт\n    C bool   \u002F\u002F 1 байт\n    D int64  \u002F\u002F 8 байт\n}\n\n\u002F\u002F Що відбувається в пам'яті:\n\u002F\u002F A (1) + padding (7) + B (8) + C (1) + padding (7) + D (8) = 32 байти\n\u002F\u002F  ❌ 14 байт padding (44% пам'яті даремно!)\n",[3753,52704,52705,52716,52726,52736,52745,52754,52758,52762,52767,52772],{"__ignoreMap":3992},[4005,52706,52707,52709,52712,52714],{"class":4007,"line":4008},[4005,52708,4809],{"class":4171},[4005,52710,52711],{"class":4178}," BadStruct",[4005,52713,10957],{"class":4171},[4005,52715,5073],{"class":4182},[4005,52717,52718,52721,52723],{"class":4007,"line":4014},[4005,52719,52720],{"class":4174},"    A",[4005,52722,4250],{"class":4178},[4005,52724,52725],{"class":4190},"   \u002F\u002F 1 байт\n",[4005,52727,52728,52731,52733],{"class":4007,"line":4020},[4005,52729,52730],{"class":4174},"    B",[4005,52732,4179],{"class":4178},[4005,52734,52735],{"class":4190},"  \u002F\u002F 8 байт\n",[4005,52737,52738,52741,52743],{"class":4007,"line":4026},[4005,52739,52740],{"class":4174},"    C",[4005,52742,4250],{"class":4178},[4005,52744,52725],{"class":4190},[4005,52746,52747,52750,52752],{"class":4007,"line":4032},[4005,52748,52749],{"class":4174},"    D",[4005,52751,4179],{"class":4178},[4005,52753,52735],{"class":4190},[4005,52755,52756],{"class":4007,"line":4039},[4005,52757,4078],{"class":4182},[4005,52759,52760],{"class":4007,"line":4045},[4005,52761,4036],{"emptyLinePlaceholder":4035},[4005,52763,52764],{"class":4007,"line":4051},[4005,52765,52766],{"class":4190},"\u002F\u002F Що відбувається в пам'яті:\n",[4005,52768,52769],{"class":4007,"line":4057},[4005,52770,52771],{"class":4190},"\u002F\u002F A (1) + padding (7) + B (8) + C (1) + padding (7) + D (8) = 32 байти\n",[4005,52773,52774],{"class":4007,"line":4063},[4005,52775,52776],{"class":4190},"\u002F\u002F  ❌ 14 байт padding (44% пам'яті даремно!)\n",[3908,52778,52779],{},[3871,52780,52781],{},"Чому так багато padding?",[3746,52783,52784,52793],{},[3749,52785,52786,52789,52790,52792],{},[3753,52787,52788],{},"B int64"," потребує адресу кратну 8 → після ",[3753,52791,21053],{}," додається 7 байт",[3749,52794,52795,52798,52799,52792],{},[3753,52796,52797],{},"D int64"," також потребує адресу кратну 8 → після ",[3753,52800,41702],{},[12536,52802,52805,52875,52880],{"icon":52803,"label":52804},"i-lucide-check-circle","Гарне вирівнювання",[3984,52806,52808],{"className":4162,"code":52807,"language":4164,"meta":3992,"style":3992},"type GoodStruct struct {\n    B int64  \u002F\u002F 8 байт\n    D int64  \u002F\u002F 8 байт\n    A bool   \u002F\u002F 1 байт\n    C bool   \u002F\u002F 1 байт\n}\n\n\u002F\u002F Що відбувається в пам'яті:\n\u002F\u002F B (8) + D (8) + A (1) + C (1) + padding (6) = 24 байти\n\u002F\u002F  ✅ 6 байт padding (25% економії пам'яті!)\n",[3753,52809,52810,52821,52829,52837,52845,52853,52857,52861,52865,52870],{"__ignoreMap":3992},[4005,52811,52812,52814,52817,52819],{"class":4007,"line":4008},[4005,52813,4809],{"class":4171},[4005,52815,52816],{"class":4178}," GoodStruct",[4005,52818,10957],{"class":4171},[4005,52820,5073],{"class":4182},[4005,52822,52823,52825,52827],{"class":4007,"line":4014},[4005,52824,52730],{"class":4174},[4005,52826,4179],{"class":4178},[4005,52828,52735],{"class":4190},[4005,52830,52831,52833,52835],{"class":4007,"line":4020},[4005,52832,52749],{"class":4174},[4005,52834,4179],{"class":4178},[4005,52836,52735],{"class":4190},[4005,52838,52839,52841,52843],{"class":4007,"line":4026},[4005,52840,52720],{"class":4174},[4005,52842,4250],{"class":4178},[4005,52844,52725],{"class":4190},[4005,52846,52847,52849,52851],{"class":4007,"line":4032},[4005,52848,52740],{"class":4174},[4005,52850,4250],{"class":4178},[4005,52852,52725],{"class":4190},[4005,52854,52855],{"class":4007,"line":4039},[4005,52856,4078],{"class":4182},[4005,52858,52859],{"class":4007,"line":4045},[4005,52860,4036],{"emptyLinePlaceholder":4035},[4005,52862,52863],{"class":4007,"line":4051},[4005,52864,52766],{"class":4190},[4005,52866,52867],{"class":4007,"line":4057},[4005,52868,52869],{"class":4190},"\u002F\u002F B (8) + D (8) + A (1) + C (1) + padding (6) = 24 байти\n",[4005,52871,52872],{"class":4007,"line":4063},[4005,52873,52874],{"class":4190},"\u002F\u002F  ✅ 6 байт padding (25% економії пам'яті!)\n",[3908,52876,52877],{},[3871,52878,52879],{},"Чому менше padding?",[3746,52881,52882,52888,52894],{},[3749,52883,52884,52885,52887],{},"Великі поля (",[3753,52886,4154],{},") розміщені на початку",[3749,52889,52890,52891,52893],{},"Малі поля (",[3753,52892,8505],{},") згруповані в кінці",[3749,52895,52896],{},"Padding додається лише в кінці структури",[3908,52898,52899],{},[3871,52900,52901],{},"Практична перевірка:",[3984,52903,52905],{"className":4162,"code":52904,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"unsafe\"\n)\n\ntype BadStruct struct {\n    A bool   \u002F\u002F 1 байт\n    B int64  \u002F\u002F 8 байт\n    C bool   \u002F\u002F 1 байт\n    D int64  \u002F\u002F 8 байт\n}\n\ntype GoodStruct struct {\n    B int64  \u002F\u002F 8 байт\n    D int64  \u002F\u002F 8 байт\n    A bool   \u002F\u002F 1 байт\n    C bool   \u002F\u002F 1 байт\n}\n\nfunc main() {\n    fmt.Printf(\"BadStruct:  %d байт\\n\", unsafe.Sizeof(BadStruct{}))   \u002F\u002F 32\n    fmt.Printf(\"GoodStruct: %d байт\\n\", unsafe.Sizeof(GoodStruct{}))  \u002F\u002F 24\n    \n    \u002F\u002F Економія на 1 млн екземплярів:\n    bad := 32 * 1_000_000\n    good := 24 * 1_000_000\n    fmt.Printf(\"Економія: %d байт = %.2f МБ\\n\", bad-good, float64(bad-good)\u002F1024\u002F1024)\n    \u002F\u002F Економія: 8000000 байт = 7.63 МБ\n}\n",[3753,52906,52907,52913,52917,52923,52927,52932,52936,52940,52950,52958,52966,52974,52982,52986,52990,53000,53008,53016,53024,53032,53036,53040,53048,53091,53131,53135,53140,53154,53167,53227,53232],{"__ignoreMap":3992},[4005,52908,52909,52911],{"class":4007,"line":4008},[4005,52910,5739],{"class":4171},[4005,52912,5742],{"class":4178},[4005,52914,52915],{"class":4007,"line":4014},[4005,52916,4036],{"emptyLinePlaceholder":4035},[4005,52918,52919,52921],{"class":4007,"line":4020},[4005,52920,3917],{"class":4836},[4005,52922,4439],{"class":4182},[4005,52924,52925],{"class":4007,"line":4026},[4005,52926,4843],{"class":4330},[4005,52928,52929],{"class":4007,"line":4032},[4005,52930,52931],{"class":4330},"    \"unsafe\"\n",[4005,52933,52934],{"class":4007,"line":4039},[4005,52935,4482],{"class":4182},[4005,52937,52938],{"class":4007,"line":4045},[4005,52939,4036],{"emptyLinePlaceholder":4035},[4005,52941,52942,52944,52946,52948],{"class":4007,"line":4051},[4005,52943,4809],{"class":4171},[4005,52945,52711],{"class":4178},[4005,52947,10957],{"class":4171},[4005,52949,5073],{"class":4182},[4005,52951,52952,52954,52956],{"class":4007,"line":4057},[4005,52953,52720],{"class":4174},[4005,52955,4250],{"class":4178},[4005,52957,52725],{"class":4190},[4005,52959,52960,52962,52964],{"class":4007,"line":4063},[4005,52961,52730],{"class":4174},[4005,52963,4179],{"class":4178},[4005,52965,52735],{"class":4190},[4005,52967,52968,52970,52972],{"class":4007,"line":4069},[4005,52969,52740],{"class":4174},[4005,52971,4250],{"class":4178},[4005,52973,52725],{"class":4190},[4005,52975,52976,52978,52980],{"class":4007,"line":4075},[4005,52977,52749],{"class":4174},[4005,52979,4179],{"class":4178},[4005,52981,52735],{"class":4190},[4005,52983,52984],{"class":4007,"line":4081},[4005,52985,4078],{"class":4182},[4005,52987,52988],{"class":4007,"line":4086},[4005,52989,4036],{"emptyLinePlaceholder":4035},[4005,52991,52992,52994,52996,52998],{"class":4007,"line":4092},[4005,52993,4809],{"class":4171},[4005,52995,52816],{"class":4178},[4005,52997,10957],{"class":4171},[4005,52999,5073],{"class":4182},[4005,53001,53002,53004,53006],{"class":4007,"line":4098},[4005,53003,52730],{"class":4174},[4005,53005,4179],{"class":4178},[4005,53007,52735],{"class":4190},[4005,53009,53010,53012,53014],{"class":4007,"line":4104},[4005,53011,52749],{"class":4174},[4005,53013,4179],{"class":4178},[4005,53015,52735],{"class":4190},[4005,53017,53018,53020,53022],{"class":4007,"line":4110},[4005,53019,52720],{"class":4174},[4005,53021,4250],{"class":4178},[4005,53023,52725],{"class":4190},[4005,53025,53026,53028,53030],{"class":4007,"line":4937},[4005,53027,52740],{"class":4174},[4005,53029,4250],{"class":4178},[4005,53031,52725],{"class":4190},[4005,53033,53034],{"class":4007,"line":4942},[4005,53035,4078],{"class":4182},[4005,53037,53038],{"class":4007,"line":4947},[4005,53039,4036],{"emptyLinePlaceholder":4035},[4005,53041,53042,53044,53046],{"class":4007,"line":4953},[4005,53043,4299],{"class":4171},[4005,53045,5764],{"class":4302},[4005,53047,4306],{"class":4182},[4005,53049,53050,53052,53054,53056,53058,53061,53063,53066,53068,53070,53072,53075,53077,53080,53082,53085,53088],{"class":4007,"line":4960},[4005,53051,5370],{"class":4174},[4005,53053,3769],{"class":4182},[4005,53055,7945],{"class":4302},[4005,53057,4611],{"class":4182},[4005,53059,53060],{"class":4330},"\"BadStruct:  ",[4005,53062,7959],{"class":4174},[4005,53064,53065],{"class":4330}," байт",[4005,53067,7965],{"class":7964},[4005,53069,7968],{"class":4330},[4005,53071,3836],{"class":4182},[4005,53073,53074],{"class":4174},"unsafe",[4005,53076,3769],{"class":4182},[4005,53078,53079],{"class":4302},"Sizeof",[4005,53081,4611],{"class":4182},[4005,53083,53084],{"class":4178},"BadStruct",[4005,53086,53087],{"class":4182},"{}))   ",[4005,53089,53090],{"class":4190},"\u002F\u002F 32\n",[4005,53092,53093,53095,53097,53099,53101,53104,53106,53108,53110,53112,53114,53116,53118,53120,53122,53125,53128],{"class":4007,"line":4973},[4005,53094,5370],{"class":4174},[4005,53096,3769],{"class":4182},[4005,53098,7945],{"class":4302},[4005,53100,4611],{"class":4182},[4005,53102,53103],{"class":4330},"\"GoodStruct: ",[4005,53105,7959],{"class":4174},[4005,53107,53065],{"class":4330},[4005,53109,7965],{"class":7964},[4005,53111,7968],{"class":4330},[4005,53113,3836],{"class":4182},[4005,53115,53074],{"class":4174},[4005,53117,3769],{"class":4182},[4005,53119,53079],{"class":4302},[4005,53121,4611],{"class":4182},[4005,53123,53124],{"class":4178},"GoodStruct",[4005,53126,53127],{"class":4182},"{}))  ",[4005,53129,53130],{"class":4190},"\u002F\u002F 24\n",[4005,53132,53133],{"class":4007,"line":4985},[4005,53134,5214],{"class":4182},[4005,53136,53137],{"class":4007,"line":7813},[4005,53138,53139],{"class":4190},"    \u002F\u002F Економія на 1 млн екземплярів:\n",[4005,53141,53142,53145,53147,53149,53151],{"class":4007,"line":7819},[4005,53143,53144],{"class":4174},"    bad",[4005,53146,4314],{"class":4182},[4005,53148,45810],{"class":4186},[4005,53150,6735],{"class":4182},[4005,53152,53153],{"class":4186},"1_000_000\n",[4005,53155,53156,53159,53161,53163,53165],{"class":4007,"line":7826},[4005,53157,53158],{"class":4174},"    good",[4005,53160,4314],{"class":4182},[4005,53162,8580],{"class":4186},[4005,53164,6735],{"class":4182},[4005,53166,53153],{"class":4186},[4005,53168,53169,53171,53173,53175,53177,53180,53182,53185,53187,53190,53192,53194,53196,53199,53201,53204,53206,53208,53210,53212,53214,53216,53219,53221,53223,53225],{"class":4007,"line":7839},[4005,53170,5370],{"class":4174},[4005,53172,3769],{"class":4182},[4005,53174,7945],{"class":4302},[4005,53176,4611],{"class":4182},[4005,53178,53179],{"class":4330},"\"Економія: ",[4005,53181,7959],{"class":4174},[4005,53183,53184],{"class":4330}," байт = ",[4005,53186,10654],{"class":4174},[4005,53188,53189],{"class":4330}," МБ",[4005,53191,7965],{"class":7964},[4005,53193,7968],{"class":4330},[4005,53195,3836],{"class":4182},[4005,53197,53198],{"class":4174},"bad",[4005,53200,22692],{"class":4182},[4005,53202,53203],{"class":4174},"good",[4005,53205,3836],{"class":4182},[4005,53207,8437],{"class":4178},[4005,53209,4611],{"class":4182},[4005,53211,53198],{"class":4174},[4005,53213,22692],{"class":4182},[4005,53215,53203],{"class":4174},[4005,53217,53218],{"class":4182},")\u002F",[4005,53220,5167],{"class":4186},[4005,53222,3858],{"class":4182},[4005,53224,5167],{"class":4186},[4005,53226,4482],{"class":4182},[4005,53228,53229],{"class":4007,"line":7864},[4005,53230,53231],{"class":4190},"    \u002F\u002F Економія: 8000000 байт = 7.63 МБ\n",[4005,53233,53234],{"class":4007,"line":7872},[4005,53235,4078],{"class":4182},[9014,53237,53239],{"id":53238},"оптимізація-структур-практичні-правила","Оптимізація структур: практичні правила",[3908,53241,53242],{},[3871,53243,53244],{},"1. Розміщуйте поля від найбільших до найменших:",[3984,53246,53248],{"className":4162,"code":53247,"language":4164,"meta":3992,"style":3992},"type OptimizedUser struct {\n    \u002F\u002F 1. Покажчики та великі типи (8 байт)\n    CreatedAt time.Time  \u002F\u002F 24 байти (3 × int64)\n    Email     string     \u002F\u002F 16 байт\n    Name      string     \u002F\u002F 16 байт\n    \n    \u002F\u002F 2. Середні типи (4 байти)\n    Age       int32      \u002F\u002F 4 байти\n    \n    \u002F\u002F 3. Малі типи (1-2 байти)\n    IsActive  bool       \u002F\u002F 1 байт\n    Role      uint8      \u002F\u002F 1 байт\n}\n",[3753,53249,53250,53261,53266,53280,53290,53299,53303,53308,53318,53322,53327,53337,53348],{"__ignoreMap":3992},[4005,53251,53252,53254,53257,53259],{"class":4007,"line":4008},[4005,53253,4809],{"class":4171},[4005,53255,53256],{"class":4178}," OptimizedUser",[4005,53258,10957],{"class":4171},[4005,53260,5073],{"class":4182},[4005,53262,53263],{"class":4007,"line":4014},[4005,53264,53265],{"class":4190},"    \u002F\u002F 1. Покажчики та великі типи (8 байт)\n",[4005,53267,53268,53270,53272,53274,53277],{"class":4007,"line":4020},[4005,53269,47333],{"class":4174},[4005,53271,5939],{"class":4178},[4005,53273,3769],{"class":4182},[4005,53275,53276],{"class":4178},"Time",[4005,53278,53279],{"class":4190},"  \u002F\u002F 24 байти (3 × int64)\n",[4005,53281,53282,53284,53287],{"class":4007,"line":4026},[4005,53283,4931],{"class":4174},[4005,53285,53286],{"class":4178},"     string",[4005,53288,53289],{"class":4190},"     \u002F\u002F 16 байт\n",[4005,53291,53292,53294,53297],{"class":4007,"line":4032},[4005,53293,20769],{"class":4174},[4005,53295,53296],{"class":4178},"      string",[4005,53298,53289],{"class":4190},[4005,53300,53301],{"class":4007,"line":4039},[4005,53302,5214],{"class":4182},[4005,53304,53305],{"class":4007,"line":4045},[4005,53306,53307],{"class":4190},"    \u002F\u002F 2. Середні типи (4 байти)\n",[4005,53309,53310,53312,53315],{"class":4007,"line":4051},[4005,53311,20777],{"class":4174},[4005,53313,53314],{"class":4178},"       int32",[4005,53316,53317],{"class":4190},"      \u002F\u002F 4 байти\n",[4005,53319,53320],{"class":4007,"line":4057},[4005,53321,5214],{"class":4182},[4005,53323,53324],{"class":4007,"line":4063},[4005,53325,53326],{"class":4190},"    \u002F\u002F 3. Малі типи (1-2 байти)\n",[4005,53328,53329,53331,53334],{"class":4007,"line":4069},[4005,53330,46401],{"class":4174},[4005,53332,53333],{"class":4178},"  bool",[4005,53335,53336],{"class":4190},"       \u002F\u002F 1 байт\n",[4005,53338,53339,53342,53345],{"class":4007,"line":4075},[4005,53340,53341],{"class":4174},"    Role",[4005,53343,53344],{"class":4178},"      uint8",[4005,53346,53347],{"class":4190},"      \u002F\u002F 1 байт\n",[4005,53349,53350],{"class":4007,"line":4081},[4005,53351,4078],{"class":4182},[3908,53353,53354],{},[3871,53355,53356],{},"2. Групуйте малі поля разом:",[3984,53358,53360],{"className":4162,"code":53359,"language":4164,"meta":3992,"style":3992},"type Flags struct {\n    IsActive    bool   \u002F\u002F 1 байт\n    IsVerified  bool   \u002F\u002F 1 байт\n    IsAdmin     bool   \u002F\u002F 1 байт\n    IsBanned    bool   \u002F\u002F 1 байт\n    \u002F\u002F Разом: 4 байти + 4 байти padding = 8 байт\n}\n",[3753,53361,53362,53373,53381,53390,53400,53409,53414],{"__ignoreMap":3992},[4005,53363,53364,53366,53369,53371],{"class":4007,"line":4008},[4005,53365,4809],{"class":4171},[4005,53367,53368],{"class":4178}," Flags",[4005,53370,10957],{"class":4171},[4005,53372,5073],{"class":4182},[4005,53374,53375,53377,53379],{"class":4007,"line":4014},[4005,53376,46401],{"class":4174},[4005,53378,4471],{"class":4178},[4005,53380,52725],{"class":4190},[4005,53382,53383,53386,53388],{"class":4007,"line":4020},[4005,53384,53385],{"class":4174},"    IsVerified",[4005,53387,53333],{"class":4178},[4005,53389,52725],{"class":4190},[4005,53391,53392,53395,53398],{"class":4007,"line":4026},[4005,53393,53394],{"class":4174},"    IsAdmin",[4005,53396,53397],{"class":4178},"     bool",[4005,53399,52725],{"class":4190},[4005,53401,53402,53405,53407],{"class":4007,"line":4032},[4005,53403,53404],{"class":4174},"    IsBanned",[4005,53406,4471],{"class":4178},[4005,53408,52725],{"class":4190},[4005,53410,53411],{"class":4007,"line":4039},[4005,53412,53413],{"class":4190},"    \u002F\u002F Разом: 4 байти + 4 байти padding = 8 байт\n",[4005,53415,53416],{"class":4007,"line":4045},[4005,53417,4078],{"class":4182},[3908,53419,53420],{},[3871,53421,53422],{},"3. Використовуйте інструменти для перевірки:",[3984,53424,53428],{"className":53425,"code":53426,"language":53427,"meta":3992,"style":3992},"language-bash shiki shiki-themes light-plus dark-plus dark-plus","# Встановлення fieldalignment\ngo install golang.org\u002Fx\u002Ftools\u002Fgo\u002Fanalysis\u002Fpasses\u002Ffieldalignment\u002Fcmd\u002Ffieldalignment@latest\n\n# Перевірка проєкту\nfieldalignment -fix .\u002F...\n","bash",[3753,53429,53430,53435,53445,53449,53454],{"__ignoreMap":3992},[4005,53431,53432],{"class":4007,"line":4008},[4005,53433,53434],{"class":4190},"# Встановлення fieldalignment\n",[4005,53436,53437,53439,53442],{"class":4007,"line":4014},[4005,53438,4164],{"class":4302},[4005,53440,53441],{"class":4330}," install",[4005,53443,53444],{"class":4330}," golang.org\u002Fx\u002Ftools\u002Fgo\u002Fanalysis\u002Fpasses\u002Ffieldalignment\u002Fcmd\u002Ffieldalignment@latest\n",[4005,53446,53447],{"class":4007,"line":4020},[4005,53448,4036],{"emptyLinePlaceholder":4035},[4005,53450,53451],{"class":4007,"line":4026},[4005,53452,53453],{"class":4190},"# Перевірка проєкту\n",[4005,53455,53456,53459,53462],{"class":4007,"line":4032},[4005,53457,53458],{"class":4302},"fieldalignment",[4005,53460,53461],{"class":4171}," -fix",[4005,53463,53464],{"class":4330}," .\u002F...\n",[3908,53466,53467],{},[3871,53468,53469],{},"4. Вимірюйте розмір структур:",[3984,53471,53473],{"className":4162,"code":53472,"language":4164,"meta":3992,"style":3992},"import \"unsafe\"\n\ntype MyStruct struct {\n    \u002F\u002F ...\n}\n\nfunc main() {\n    fmt.Printf(\"Розмір: %d байт\\n\", unsafe.Sizeof(MyStruct{}))\n    fmt.Printf(\"Вирівнювання: %d байт\\n\", unsafe.Alignof(MyStruct{}))\n}\n",[3753,53474,53475,53482,53486,53497,53501,53505,53509,53517,53554,53590],{"__ignoreMap":3992},[4005,53476,53477,53479],{"class":4007,"line":4008},[4005,53478,3917],{"class":4836},[4005,53480,53481],{"class":4330}," \"unsafe\"\n",[4005,53483,53484],{"class":4007,"line":4014},[4005,53485,4036],{"emptyLinePlaceholder":4035},[4005,53487,53488,53490,53493,53495],{"class":4007,"line":4020},[4005,53489,4809],{"class":4171},[4005,53491,53492],{"class":4178}," MyStruct",[4005,53494,10957],{"class":4171},[4005,53496,5073],{"class":4182},[4005,53498,53499],{"class":4007,"line":4026},[4005,53500,13723],{"class":4190},[4005,53502,53503],{"class":4007,"line":4032},[4005,53504,4078],{"class":4182},[4005,53506,53507],{"class":4007,"line":4039},[4005,53508,4036],{"emptyLinePlaceholder":4035},[4005,53510,53511,53513,53515],{"class":4007,"line":4045},[4005,53512,4299],{"class":4171},[4005,53514,5764],{"class":4302},[4005,53516,4306],{"class":4182},[4005,53518,53519,53521,53523,53525,53527,53530,53532,53534,53536,53538,53540,53542,53544,53546,53548,53551],{"class":4007,"line":4051},[4005,53520,5370],{"class":4174},[4005,53522,3769],{"class":4182},[4005,53524,7945],{"class":4302},[4005,53526,4611],{"class":4182},[4005,53528,53529],{"class":4330},"\"Розмір: ",[4005,53531,7959],{"class":4174},[4005,53533,53065],{"class":4330},[4005,53535,7965],{"class":7964},[4005,53537,7968],{"class":4330},[4005,53539,3836],{"class":4182},[4005,53541,53074],{"class":4174},[4005,53543,3769],{"class":4182},[4005,53545,53079],{"class":4302},[4005,53547,4611],{"class":4182},[4005,53549,53550],{"class":4178},"MyStruct",[4005,53552,53553],{"class":4182},"{}))\n",[4005,53555,53556,53558,53560,53562,53564,53567,53569,53571,53573,53575,53577,53579,53581,53584,53586,53588],{"class":4007,"line":4057},[4005,53557,5370],{"class":4174},[4005,53559,3769],{"class":4182},[4005,53561,7945],{"class":4302},[4005,53563,4611],{"class":4182},[4005,53565,53566],{"class":4330},"\"Вирівнювання: ",[4005,53568,7959],{"class":4174},[4005,53570,53065],{"class":4330},[4005,53572,7965],{"class":7964},[4005,53574,7968],{"class":4330},[4005,53576,3836],{"class":4182},[4005,53578,53074],{"class":4174},[4005,53580,3769],{"class":4182},[4005,53582,53583],{"class":4302},"Alignof",[4005,53585,4611],{"class":4182},[4005,53587,53550],{"class":4178},[4005,53589,53553],{"class":4182},[4005,53591,53592],{"class":4007,"line":4063},[4005,53593,4078],{"class":4182},[4484,53595,53596,53601,53606,53617,53622,53633],{"icon":4486},[3908,53597,53598],{},[3871,53599,53600],{},"Коли оптимізувати структури:",[3908,53602,27644,53603],{},[3871,53604,53605],{},"Так:",[3746,53607,53608,53611,53614],{},[3749,53609,53610],{},"Структури, яких створюється багато (1000+ екземплярів)",[3749,53612,53613],{},"Великі слайси структур у пам'яті",[3749,53615,53616],{},"High-performance код (обробка даних, ігри, системне ПЗ)",[3908,53618,46957,53619],{},[3871,53620,53621],{},"Ні:",[3746,53623,53624,53627,53630],{},[3749,53625,53626],{},"Структури для конфігурації (1-10 екземплярів)",[3749,53628,53629],{},"Читабельність важливіша за 8 байт",[3749,53631,53632],{},"Додаткові поля додаються часто (порядок зміниться)",[3908,53634,53635,53637],{},[3871,53636,6383],{}," спочатку пишіть читабельний код, оптимізуйте лише якщо профайлер показує проблему.",[9014,53639,53641],{"id":53640},"копіювання-структур-value-vs-pointer","Копіювання структур: value vs pointer",[3908,53643,53644,53646,53647,5831],{},[3871,53645,28785],{}," коли ви присвоюєте структуру, Go ",[3871,53648,53649],{},"копіює всі байти",[3984,53651,53653],{"className":4162,"code":53652,"language":4164,"meta":3992,"style":3992},"type User struct {\n    ID   int64\n    Name string\n}\n\nuser1 := User{ID: 1, Name: \"Олег\"}\nuser2 := user1  \u002F\u002F Копія всіх полів (8 + 16 = 24 байти)\n\nuser2.Name = \"Марія\"\nfmt.Println(user1.Name)  \u002F\u002F Олег (не змінився)\nfmt.Println(user2.Name)  \u002F\u002F Марія\n",[3753,53654,53655,53665,53671,53677,53681,53685,53711,53722,53726,53739,53760],{"__ignoreMap":3992},[4005,53656,53657,53659,53661,53663],{"class":4007,"line":4008},[4005,53658,4809],{"class":4171},[4005,53660,20760],{"class":4178},[4005,53662,10957],{"class":4171},[4005,53664,5073],{"class":4182},[4005,53666,53667,53669],{"class":4007,"line":4014},[4005,53668,46381],{"class":4174},[4005,53670,47009],{"class":4178},[4005,53672,53673,53675],{"class":4007,"line":4020},[4005,53674,20769],{"class":4174},[4005,53676,20772],{"class":4178},[4005,53678,53679],{"class":4007,"line":4026},[4005,53680,4078],{"class":4182},[4005,53682,53683],{"class":4007,"line":4032},[4005,53684,4036],{"emptyLinePlaceholder":4035},[4005,53686,53687,53689,53691,53693,53695,53697,53699,53701,53703,53705,53707,53709],{"class":4007,"line":4039},[4005,53688,47122],{"class":4174},[4005,53690,4314],{"class":4182},[4005,53692,20798],{"class":4178},[4005,53694,16268],{"class":4182},[4005,53696,47055],{"class":4174},[4005,53698,11172],{"class":4182},[4005,53700,4393],{"class":4186},[4005,53702,3836],{"class":4182},[4005,53704,20803],{"class":4174},[4005,53706,11172],{"class":4182},[4005,53708,15780],{"class":4330},[4005,53710,4078],{"class":4182},[4005,53712,53713,53715,53717,53719],{"class":4007,"line":4045},[4005,53714,47144],{"class":4174},[4005,53716,4314],{"class":4182},[4005,53718,47122],{"class":4174},[4005,53720,53721],{"class":4190},"  \u002F\u002F Копія всіх полів (8 + 16 = 24 байти)\n",[4005,53723,53724],{"class":4007,"line":4051},[4005,53725,4036],{"emptyLinePlaceholder":4035},[4005,53727,53728,53730,53732,53734,53736],{"class":4007,"line":4057},[4005,53729,47144],{"class":4174},[4005,53731,3769],{"class":4182},[4005,53733,20803],{"class":4174},[4005,53735,4183],{"class":4182},[4005,53737,53738],{"class":4330},"\"Марія\"\n",[4005,53740,53741,53743,53745,53747,53749,53751,53753,53755,53757],{"class":4007,"line":4063},[4005,53742,3785],{"class":4174},[4005,53744,3769],{"class":4182},[4005,53746,5348],{"class":4302},[4005,53748,4611],{"class":4182},[4005,53750,47122],{"class":4174},[4005,53752,3769],{"class":4182},[4005,53754,20803],{"class":4174},[4005,53756,5196],{"class":4182},[4005,53758,53759],{"class":4190},"\u002F\u002F Олег (не змінився)\n",[4005,53761,53762,53764,53766,53768,53770,53772,53774,53776,53778],{"class":4007,"line":4069},[4005,53763,3785],{"class":4174},[4005,53765,3769],{"class":4182},[4005,53767,5348],{"class":4302},[4005,53769,4611],{"class":4182},[4005,53771,47144],{"class":4174},[4005,53773,3769],{"class":4182},[4005,53775,20803],{"class":4174},[4005,53777,5196],{"class":4182},[4005,53779,47153],{"class":4190},[3908,53781,53782,53785,53786,53788],{},[3871,53783,53784],{},"Особливість з string та slice:"," вони містять ",[3871,53787,21698],{}," всередині, тому копіюється покажчик, а не дані:",[3984,53790,53792],{"className":4162,"code":53791,"language":4164,"meta":3992,"style":3992},"type Post struct {\n    Title string\n    Tags  []string\n}\n\npost1 := Post{\n    Title: \"Go Tutorial\",\n    Tags:  []string{\"go\", \"tutorial\"},\n}\n\npost2 := post1  \u002F\u002F Копіюється структура, але Tags вказує на той самий масив!\n\npost2.Tags[0] = \"golang\"\n\nfmt.Println(post1.Tags)  \u002F\u002F [golang tutorial] — змінився!\nfmt.Println(post2.Tags)  \u002F\u002F [golang tutorial]\n",[3753,53793,53794,53805,53811,53820,53824,53828,53840,53851,53872,53876,53880,53892,53896,53914,53918,53939],{"__ignoreMap":3992},[4005,53795,53796,53798,53801,53803],{"class":4007,"line":4008},[4005,53797,4809],{"class":4171},[4005,53799,53800],{"class":4178}," Post",[4005,53802,10957],{"class":4171},[4005,53804,5073],{"class":4182},[4005,53806,53807,53809],{"class":4007,"line":4014},[4005,53808,50788],{"class":4174},[4005,53810,20772],{"class":4178},[4005,53812,53813,53815,53818],{"class":4007,"line":4020},[4005,53814,47323],{"class":4174},[4005,53816,53817],{"class":4182},"  []",[4005,53819,7495],{"class":4178},[4005,53821,53822],{"class":4007,"line":4026},[4005,53823,4078],{"class":4182},[4005,53825,53826],{"class":4007,"line":4032},[4005,53827,4036],{"emptyLinePlaceholder":4035},[4005,53829,53830,53833,53835,53838],{"class":4007,"line":4039},[4005,53831,53832],{"class":4174},"post1",[4005,53834,4314],{"class":4182},[4005,53836,53837],{"class":4178},"Post",[4005,53839,29461],{"class":4182},[4005,53841,53842,53844,53846,53849],{"class":4007,"line":4045},[4005,53843,50788],{"class":4174},[4005,53845,11172],{"class":4182},[4005,53847,53848],{"class":4330},"\"Go Tutorial\"",[4005,53850,29475],{"class":4182},[4005,53852,53853,53855,53858,53860,53862,53865,53867,53870],{"class":4007,"line":4051},[4005,53854,47323],{"class":4174},[4005,53856,53857],{"class":4182},":  []",[4005,53859,7004],{"class":4178},[4005,53861,16268],{"class":4182},[4005,53863,53864],{"class":4330},"\"go\"",[4005,53866,3836],{"class":4182},[4005,53868,53869],{"class":4330},"\"tutorial\"",[4005,53871,38437],{"class":4182},[4005,53873,53874],{"class":4007,"line":4057},[4005,53875,4078],{"class":4182},[4005,53877,53878],{"class":4007,"line":4063},[4005,53879,4036],{"emptyLinePlaceholder":4035},[4005,53881,53882,53885,53887,53889],{"class":4007,"line":4069},[4005,53883,53884],{"class":4174},"post2",[4005,53886,4314],{"class":4182},[4005,53888,53832],{"class":4174},[4005,53890,53891],{"class":4190},"  \u002F\u002F Копіюється структура, але Tags вказує на той самий масив!\n",[4005,53893,53894],{"class":4007,"line":4075},[4005,53895,4036],{"emptyLinePlaceholder":4035},[4005,53897,53898,53900,53902,53905,53907,53909,53911],{"class":4007,"line":4081},[4005,53899,53884],{"class":4174},[4005,53901,3769],{"class":4182},[4005,53903,53904],{"class":4174},"Tags",[4005,53906,11561],{"class":4182},[4005,53908,4200],{"class":4186},[4005,53910,12081],{"class":4182},[4005,53912,53913],{"class":4330},"\"golang\"\n",[4005,53915,53916],{"class":4007,"line":4086},[4005,53917,4036],{"emptyLinePlaceholder":4035},[4005,53919,53920,53922,53924,53926,53928,53930,53932,53934,53936],{"class":4007,"line":4092},[4005,53921,3785],{"class":4174},[4005,53923,3769],{"class":4182},[4005,53925,5348],{"class":4302},[4005,53927,4611],{"class":4182},[4005,53929,53832],{"class":4174},[4005,53931,3769],{"class":4182},[4005,53933,53904],{"class":4174},[4005,53935,5196],{"class":4182},[4005,53937,53938],{"class":4190},"\u002F\u002F [golang tutorial] — змінився!\n",[4005,53940,53941,53943,53945,53947,53949,53951,53953,53955,53957],{"class":4007,"line":4098},[4005,53942,3785],{"class":4174},[4005,53944,3769],{"class":4182},[4005,53946,5348],{"class":4302},[4005,53948,4611],{"class":4182},[4005,53950,53884],{"class":4174},[4005,53952,3769],{"class":4182},[4005,53954,53904],{"class":4174},[4005,53956,5196],{"class":4182},[4005,53958,53959],{"class":4190},"\u002F\u002F [golang tutorial]\n",[3908,53961,53962],{},[3871,53963,53964],{},"Пояснення:",[3984,53966,53969],{"className":53967,"code":53968,"language":3989},[3987],"post1.Tags → [0x1000] → [\"go\", \"tutorial\"]  (масив у пам'яті)\n                ↑\npost2.Tags → [0x1000]  (та сама адреса!)\n",[3753,53970,53968],{"__ignoreMap":3992},[44169,53972,53973,53991,53994],{},[3908,53974,53975,53978,53979,53982,53983,6203,53985,8992,53987,53990],{},[3871,53976,53977],{},"Правило:"," копіювання структури копіює ",[3871,53980,53981],{},"дескриптори"," (покажчики) ",[3753,53984,7004],{},[3753,53986,52679],{},[3871,53988,53989],{},"не копіює"," самі дані рядків та елементів слайсу.",[3908,53992,53993],{},"Щоб зробити справжню глибоку копію:",[3984,53995,53997],{"className":4162,"code":53996,"language":4164,"meta":3992,"style":3992},"post2 := post1\npost2.Tags = make([]string, len(post1.Tags))\ncopy(post2.Tags, post1.Tags)  \u002F\u002F Тепер окремі масиви\n",[3753,53998,53999,54008,54038],{"__ignoreMap":3992},[4005,54000,54001,54003,54005],{"class":4007,"line":4008},[4005,54002,53884],{"class":4174},[4005,54004,4314],{"class":4182},[4005,54006,54007],{"class":4174},"post1\n",[4005,54009,54010,54012,54014,54016,54018,54020,54022,54024,54026,54028,54030,54032,54034,54036],{"class":4007,"line":4014},[4005,54011,53884],{"class":4174},[4005,54013,3769],{"class":4182},[4005,54015,53904],{"class":4174},[4005,54017,4183],{"class":4182},[4005,54019,3764],{"class":4302},[4005,54021,5159],{"class":4182},[4005,54023,7004],{"class":4178},[4005,54025,3836],{"class":4182},[4005,54027,11465],{"class":4302},[4005,54029,4611],{"class":4182},[4005,54031,53832],{"class":4174},[4005,54033,3769],{"class":4182},[4005,54035,53904],{"class":4174},[4005,54037,25552],{"class":4182},[4005,54039,54040,54043,54045,54047,54049,54051,54053,54055,54057,54059,54061],{"class":4007,"line":4020},[4005,54041,54042],{"class":4302},"copy",[4005,54044,4611],{"class":4182},[4005,54046,53884],{"class":4174},[4005,54048,3769],{"class":4182},[4005,54050,53904],{"class":4174},[4005,54052,3836],{"class":4182},[4005,54054,53832],{"class":4174},[4005,54056,3769],{"class":4182},[4005,54058,53904],{"class":4174},[4005,54060,5196],{"class":4182},[4005,54062,54063],{"class":4190},"\u002F\u002F Тепер окремі масиви\n",[3900,54065],{},[3976,54067,54069],{"id":54068},"частина-4-методи-структур","Частина 4: Методи структур",[9014,54071,54073],{"id":54072},"що-таке-метод","Що таке метод?",[3908,54075,54076,54079,54080,54083],{},[3871,54077,54078],{},"Метод"," — це функція, яка \"прив'язана\" до конкретного типу. На відміну від звичайної функції, метод має ",[3871,54081,54082],{},"отримувача (receiver)"," — параметр, який вказує, до якого типу належить цей метод.",[3908,54085,54086],{},[3871,54087,10831],{},[12533,54089,54090,54259],{},[12536,54091,54093,54231,54236],{"icon":12538,"label":54092},"Go — методи окремо",[3984,54094,54096],{"className":4162,"code":54095,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Структура\ntype User struct {\n    Name string\n    Age  int\n}\n\n\u002F\u002F Метод (окремо від структури!)\nfunc (u User) Greet() string {\n    return \"Привіт, я \" + u.Name\n}\n\n\u002F\u002F Використання\nuser := User{Name: \"Олег\", Age: 25}\nmessage := user.Greet()  \u002F\u002F Виклик методу\n",[3753,54097,54098,54103,54113,54119,54125,54129,54133,54138,54159,54175,54179,54183,54188,54214],{"__ignoreMap":3992},[4005,54099,54100],{"class":4007,"line":4008},[4005,54101,54102],{"class":4190},"\u002F\u002F Структура\n",[4005,54104,54105,54107,54109,54111],{"class":4007,"line":4014},[4005,54106,4809],{"class":4171},[4005,54108,20760],{"class":4178},[4005,54110,10957],{"class":4171},[4005,54112,5073],{"class":4182},[4005,54114,54115,54117],{"class":4007,"line":4020},[4005,54116,20769],{"class":4174},[4005,54118,20772],{"class":4178},[4005,54120,54121,54123],{"class":4007,"line":4026},[4005,54122,20777],{"class":4174},[4005,54124,20780],{"class":4178},[4005,54126,54127],{"class":4007,"line":4032},[4005,54128,4078],{"class":4182},[4005,54130,54131],{"class":4007,"line":4039},[4005,54132,4036],{"emptyLinePlaceholder":4035},[4005,54134,54135],{"class":4007,"line":4045},[4005,54136,54137],{"class":4190},"\u002F\u002F Метод (окремо від структури!)\n",[4005,54139,54140,54142,54144,54146,54148,54150,54153,54155,54157],{"class":4007,"line":4051},[4005,54141,4299],{"class":4171},[4005,54143,4761],{"class":4182},[4005,54145,48277],{"class":4174},[4005,54147,20798],{"class":4178},[4005,54149,4498],{"class":4182},[4005,54151,54152],{"class":4302},"Greet",[4005,54154,7346],{"class":4182},[4005,54156,7004],{"class":4178},[4005,54158,5073],{"class":4182},[4005,54160,54161,54163,54166,54168,54170,54172],{"class":4007,"line":4057},[4005,54162,5260],{"class":4836},[4005,54164,54165],{"class":4330}," \"Привіт, я \"",[4005,54167,6289],{"class":4182},[4005,54169,45582],{"class":4174},[4005,54171,3769],{"class":4182},[4005,54173,54174],{"class":4174},"Name\n",[4005,54176,54177],{"class":4007,"line":4063},[4005,54178,4078],{"class":4182},[4005,54180,54181],{"class":4007,"line":4069},[4005,54182,4036],{"emptyLinePlaceholder":4035},[4005,54184,54185],{"class":4007,"line":4075},[4005,54186,54187],{"class":4190},"\u002F\u002F Використання\n",[4005,54189,54190,54192,54194,54196,54198,54200,54202,54204,54206,54208,54210,54212],{"class":4007,"line":4081},[4005,54191,20793],{"class":4174},[4005,54193,4314],{"class":4182},[4005,54195,20798],{"class":4178},[4005,54197,16268],{"class":4182},[4005,54199,20803],{"class":4174},[4005,54201,11172],{"class":4182},[4005,54203,15780],{"class":4330},[4005,54205,3836],{"class":4182},[4005,54207,20812],{"class":4174},[4005,54209,11172],{"class":4182},[4005,54211,20817],{"class":4186},[4005,54213,4078],{"class":4182},[4005,54215,54216,54218,54220,54222,54224,54226,54228],{"class":4007,"line":4086},[4005,54217,11167],{"class":4174},[4005,54219,4314],{"class":4182},[4005,54221,20793],{"class":4174},[4005,54223,3769],{"class":4182},[4005,54225,54152],{"class":4302},[4005,54227,5491],{"class":4182},[4005,54229,54230],{"class":4190},"\u002F\u002F Виклик методу\n",[3908,54232,54233],{},[3871,54234,54235],{},"У Go:",[3746,54237,54238,54245,54254],{},[3749,54239,54240,54241,54244],{},"Методи оголошуються ",[3871,54242,54243],{},"поза"," структурою",[3749,54246,54247,54248,54251,54252],{},"Receiver ",[3753,54249,54250],{},"(u User)"," вказує, що це метод типу ",[3753,54253,20798],{},[3749,54255,54256,54257,5032],{},"Можна додавати методи до будь-якого типу (навіть ",[3753,54258,4158],{},[12536,54260,54262,54444,54448],{"icon":12743,"label":54261},"Java — методи всередині",[3984,54263,54265],{"className":12746,"code":54264,"language":12748,"meta":3992,"style":3992},"\u002F\u002F Клас з методами всередині\npublic class User {\n    private String name;\n    private int age;\n    \n    public User(String name, int age) {\n        this.name = name;\n        this.age = age;\n    }\n    \n    \u002F\u002F Метод всередині класу\n    public String greet() {\n        return \"Привіт, я \" + this.name;\n    }\n}\n\n\u002F\u002F Використання\nUser user = new User(\"Олег\", 25);\nString message = user.greet();\n",[3753,54266,54267,54272,54282,54292,54303,54307,54327,54338,54349,54353,54357,54362,54373,54389,54393,54397,54401,54405,54427],{"__ignoreMap":3992},[4005,54268,54269],{"class":4007,"line":4008},[4005,54270,54271],{"class":4190},"\u002F\u002F Клас з методами всередині\n",[4005,54273,54274,54276,54278,54280],{"class":4007,"line":4014},[4005,54275,12755],{"class":4171},[4005,54277,12758],{"class":4171},[4005,54279,20760],{"class":4178},[4005,54281,5073],{"class":4182},[4005,54283,54284,54286,54288,54290],{"class":4007,"line":4020},[4005,54285,46567],{"class":4171},[4005,54287,46581],{"class":4178},[4005,54289,19403],{"class":4174},[4005,54291,12805],{"class":4182},[4005,54293,54294,54296,54298,54301],{"class":4007,"line":4026},[4005,54295,46567],{"class":4171},[4005,54297,4224],{"class":4178},[4005,54299,54300],{"class":4174}," age",[4005,54302,12805],{"class":4182},[4005,54304,54305],{"class":4007,"line":4032},[4005,54306,5214],{"class":4182},[4005,54308,54309,54311,54313,54315,54317,54319,54321,54323,54325],{"class":4007,"line":4039},[4005,54310,12768],{"class":4171},[4005,54312,20760],{"class":4302},[4005,54314,4611],{"class":4182},[4005,54316,7343],{"class":4178},[4005,54318,19403],{"class":4174},[4005,54320,3836],{"class":4182},[4005,54322,4158],{"class":4178},[4005,54324,54300],{"class":4174},[4005,54326,12789],{"class":4182},[4005,54328,54329,54331,54333,54335],{"class":4007,"line":4045},[4005,54330,46655],{"class":4171},[4005,54332,3769],{"class":4182},[4005,54334,4650],{"class":4174},[4005,54336,54337],{"class":4182}," = name;\n",[4005,54339,54340,54342,54344,54346],{"class":4007,"line":4051},[4005,54341,46655],{"class":4171},[4005,54343,3769],{"class":4182},[4005,54345,4655],{"class":4174},[4005,54347,54348],{"class":4182}," = age;\n",[4005,54350,54351],{"class":4007,"line":4057},[4005,54352,5127],{"class":4182},[4005,54354,54355],{"class":4007,"line":4063},[4005,54356,5214],{"class":4182},[4005,54358,54359],{"class":4007,"line":4069},[4005,54360,54361],{"class":4190},"    \u002F\u002F Метод всередині класу\n",[4005,54363,54364,54366,54368,54371],{"class":4007,"line":4075},[4005,54365,12768],{"class":4171},[4005,54367,46581],{"class":4178},[4005,54369,54370],{"class":4302}," greet",[4005,54372,4306],{"class":4182},[4005,54374,54375,54377,54379,54381,54383,54385,54387],{"class":4007,"line":4081},[4005,54376,5119],{"class":4836},[4005,54378,54165],{"class":4330},[4005,54380,6289],{"class":4182},[4005,54382,7554],{"class":4171},[4005,54384,3769],{"class":4182},[4005,54386,4650],{"class":4174},[4005,54388,12805],{"class":4182},[4005,54390,54391],{"class":4007,"line":4086},[4005,54392,5127],{"class":4182},[4005,54394,54395],{"class":4007,"line":4092},[4005,54396,4078],{"class":4182},[4005,54398,54399],{"class":4007,"line":4098},[4005,54400,4036],{"emptyLinePlaceholder":4035},[4005,54402,54403],{"class":4007,"line":4104},[4005,54404,54187],{"class":4190},[4005,54406,54407,54409,54411,54413,54415,54417,54419,54421,54423,54425],{"class":4007,"line":4110},[4005,54408,20798],{"class":4178},[4005,54410,46232],{"class":4174},[4005,54412,4183],{"class":4182},[4005,54414,3768],{"class":4836},[4005,54416,20760],{"class":4302},[4005,54418,4611],{"class":4182},[4005,54420,15780],{"class":4330},[4005,54422,3836],{"class":4182},[4005,54424,20817],{"class":4186},[4005,54426,12932],{"class":4182},[4005,54428,54429,54431,54434,54436,54438,54440,54442],{"class":4007,"line":4937},[4005,54430,7343],{"class":4178},[4005,54432,54433],{"class":4174}," message",[4005,54435,4183],{"class":4182},[4005,54437,20793],{"class":4174},[4005,54439,3769],{"class":4182},[4005,54441,37915],{"class":4302},[4005,54443,18448],{"class":4182},[3908,54445,54446],{},[3871,54447,49438],{},[3746,54449,54450,54457,54462],{},[3749,54451,54452,54453,54456],{},"Методи ",[3871,54454,54455],{},"всередині"," класу",[3749,54458,54459,54461],{},[3753,54460,7554],{}," — неявне посилання на об'єкт",[3749,54463,54464],{},"Методи можна додавати лише в класі",[9014,54466,54468],{"id":54467},"синтаксис-методу","Синтаксис методу",[3984,54470,54472],{"className":4162,"code":54471,"language":4164,"meta":3992,"style":3992},"func (receiver ReceiverType) MethodName(parameters) ReturnType {\n    \u002F\u002F Тіло методу\n}\n",[3753,54473,54474,54503,54508],{"__ignoreMap":3992},[4005,54475,54476,54478,54480,54483,54486,54488,54491,54493,54496,54498,54501],{"class":4007,"line":4008},[4005,54477,4299],{"class":4171},[4005,54479,4761],{"class":4182},[4005,54481,54482],{"class":4174},"receiver ",[4005,54484,54485],{"class":4178},"ReceiverType",[4005,54487,4498],{"class":4182},[4005,54489,54490],{"class":4302},"MethodName",[4005,54492,4611],{"class":4182},[4005,54494,54495],{"class":4178},"parameters",[4005,54497,4498],{"class":4182},[4005,54499,54500],{"class":4178},"ReturnType",[4005,54502,5073],{"class":4182},[4005,54504,54505],{"class":4007,"line":4014},[4005,54506,54507],{"class":4190},"    \u002F\u002F Тіло методу\n",[4005,54509,54510],{"class":4007,"line":4020},[4005,54511,4078],{"class":4182},[3908,54513,54514],{},[3871,54515,54516],{},"Анатомія методу:",[3984,54518,54520],{"className":4162,"code":54519,"language":4164,"meta":3992,"style":3992},"func (u User) GetInfo() string {\n\u002F\u002F   ↑      ↑        ↑\n\u002F\u002F   |      |        └─ Повертає string\n\u002F\u002F   |      └────────── Назва методу\n\u002F\u002F   └─────────────────── Receiver: (змінна тип)\n",[3753,54521,54522,54543,54548,54553,54558],{"__ignoreMap":3992},[4005,54523,54524,54526,54528,54530,54532,54534,54537,54539,54541],{"class":4007,"line":4008},[4005,54525,4299],{"class":4171},[4005,54527,4761],{"class":4182},[4005,54529,48277],{"class":4174},[4005,54531,20798],{"class":4178},[4005,54533,4498],{"class":4182},[4005,54535,54536],{"class":4302},"GetInfo",[4005,54538,7346],{"class":4182},[4005,54540,7004],{"class":4178},[4005,54542,5073],{"class":4182},[4005,54544,54545],{"class":4007,"line":4014},[4005,54546,54547],{"class":4190},"\u002F\u002F   ↑      ↑        ↑\n",[4005,54549,54550],{"class":4007,"line":4020},[4005,54551,54552],{"class":4190},"\u002F\u002F   |      |        └─ Повертає string\n",[4005,54554,54555],{"class":4007,"line":4026},[4005,54556,54557],{"class":4190},"\u002F\u002F   |      └────────── Назва методу\n",[4005,54559,54560],{"class":4007,"line":4032},[4005,54561,54562],{"class":4190},"\u002F\u002F   └─────────────────── Receiver: (змінна тип)\n",[3908,54564,54565],{},[3871,54566,20517],{},[3984,54568,54570],{"className":4162,"code":54569,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Rectangle struct {\n    Width  float64\n    Height float64\n}\n\n\u002F\u002F Метод для обчислення площі\nfunc (r Rectangle) Area() float64 {\n    return r.Width * r.Height\n}\n\n\u002F\u002F Метод для обчислення периметра\nfunc (r Rectangle) Perimeter() float64 {\n    return 2 * (r.Width + r.Height)\n}\n\n\u002F\u002F Метод з параметрами\nfunc (r Rectangle) IsLargerThan(other Rectangle) bool {\n    return r.Area() > other.Area()\n}\n\nfunc main() {\n    rect1 := Rectangle{Width: 10, Height: 5}\n    rect2 := Rectangle{Width: 8, Height: 8}\n    \n    fmt.Printf(\"Площа rect1: %.2f\\n\", rect1.Area())\n    fmt.Printf(\"Периметр rect1: %.2f\\n\", rect1.Perimeter())\n    fmt.Printf(\"rect1 більше rect2? %t\\n\", rect1.IsLargerThan(rect2))\n}\n",[3753,54571,54572,54578,54582,54588,54592,54603,54610,54617,54621,54625,54630,54653,54673,54677,54681,54686,54707,54733,54737,54741,54746,54774,54795,54799,54803,54811,54838,54865,54869,54900,54929,54963],{"__ignoreMap":3992},[4005,54573,54574,54576],{"class":4007,"line":4008},[4005,54575,5739],{"class":4171},[4005,54577,5742],{"class":4178},[4005,54579,54580],{"class":4007,"line":4014},[4005,54581,4036],{"emptyLinePlaceholder":4035},[4005,54583,54584,54586],{"class":4007,"line":4020},[4005,54585,3917],{"class":4836},[4005,54587,7656],{"class":4330},[4005,54589,54590],{"class":4007,"line":4026},[4005,54591,4036],{"emptyLinePlaceholder":4035},[4005,54593,54594,54596,54599,54601],{"class":4007,"line":4032},[4005,54595,4809],{"class":4171},[4005,54597,54598],{"class":4178}," Rectangle",[4005,54600,10957],{"class":4171},[4005,54602,5073],{"class":4182},[4005,54604,54605,54608],{"class":4007,"line":4039},[4005,54606,54607],{"class":4174},"    Width",[4005,54609,50836],{"class":4178},[4005,54611,54612,54615],{"class":4007,"line":4045},[4005,54613,54614],{"class":4174},"    Height",[4005,54616,45744],{"class":4178},[4005,54618,54619],{"class":4007,"line":4051},[4005,54620,4078],{"class":4182},[4005,54622,54623],{"class":4007,"line":4057},[4005,54624,4036],{"emptyLinePlaceholder":4035},[4005,54626,54627],{"class":4007,"line":4063},[4005,54628,54629],{"class":4190},"\u002F\u002F Метод для обчислення площі\n",[4005,54631,54632,54634,54636,54639,54642,54644,54647,54649,54651],{"class":4007,"line":4069},[4005,54633,4299],{"class":4171},[4005,54635,4761],{"class":4182},[4005,54637,54638],{"class":4174},"r ",[4005,54640,54641],{"class":4178},"Rectangle",[4005,54643,4498],{"class":4182},[4005,54645,54646],{"class":4302},"Area",[4005,54648,7346],{"class":4182},[4005,54650,8437],{"class":4178},[4005,54652,5073],{"class":4182},[4005,54654,54655,54657,54659,54661,54664,54666,54668,54670],{"class":4007,"line":4075},[4005,54656,5260],{"class":4836},[4005,54658,19952],{"class":4174},[4005,54660,3769],{"class":4182},[4005,54662,54663],{"class":4174},"Width",[4005,54665,6735],{"class":4182},[4005,54667,12146],{"class":4174},[4005,54669,3769],{"class":4182},[4005,54671,54672],{"class":4174},"Height\n",[4005,54674,54675],{"class":4007,"line":4081},[4005,54676,4078],{"class":4182},[4005,54678,54679],{"class":4007,"line":4086},[4005,54680,4036],{"emptyLinePlaceholder":4035},[4005,54682,54683],{"class":4007,"line":4092},[4005,54684,54685],{"class":4190},"\u002F\u002F Метод для обчислення периметра\n",[4005,54687,54688,54690,54692,54694,54696,54698,54701,54703,54705],{"class":4007,"line":4098},[4005,54689,4299],{"class":4171},[4005,54691,4761],{"class":4182},[4005,54693,54638],{"class":4174},[4005,54695,54641],{"class":4178},[4005,54697,4498],{"class":4182},[4005,54699,54700],{"class":4302},"Perimeter",[4005,54702,7346],{"class":4182},[4005,54704,8437],{"class":4178},[4005,54706,5073],{"class":4182},[4005,54708,54709,54711,54713,54716,54718,54720,54722,54724,54726,54728,54731],{"class":4007,"line":4104},[4005,54710,5260],{"class":4836},[4005,54712,27316],{"class":4186},[4005,54714,54715],{"class":4182}," * (",[4005,54717,12146],{"class":4174},[4005,54719,3769],{"class":4182},[4005,54721,54663],{"class":4174},[4005,54723,6289],{"class":4182},[4005,54725,12146],{"class":4174},[4005,54727,3769],{"class":4182},[4005,54729,54730],{"class":4174},"Height",[4005,54732,4482],{"class":4182},[4005,54734,54735],{"class":4007,"line":4110},[4005,54736,4078],{"class":4182},[4005,54738,54739],{"class":4007,"line":4937},[4005,54740,4036],{"emptyLinePlaceholder":4035},[4005,54742,54743],{"class":4007,"line":4942},[4005,54744,54745],{"class":4190},"\u002F\u002F Метод з параметрами\n",[4005,54747,54748,54750,54752,54754,54756,54758,54761,54763,54766,54768,54770,54772],{"class":4007,"line":4947},[4005,54749,4299],{"class":4171},[4005,54751,4761],{"class":4182},[4005,54753,54638],{"class":4174},[4005,54755,54641],{"class":4178},[4005,54757,4498],{"class":4182},[4005,54759,54760],{"class":4302},"IsLargerThan",[4005,54762,4611],{"class":4182},[4005,54764,54765],{"class":4174},"other",[4005,54767,54598],{"class":4178},[4005,54769,4498],{"class":4182},[4005,54771,8505],{"class":4178},[4005,54773,5073],{"class":4182},[4005,54775,54776,54778,54780,54782,54784,54787,54789,54791,54793],{"class":4007,"line":4953},[4005,54777,5260],{"class":4836},[4005,54779,19952],{"class":4174},[4005,54781,3769],{"class":4182},[4005,54783,54646],{"class":4302},[4005,54785,54786],{"class":4182},"() > ",[4005,54788,54765],{"class":4174},[4005,54790,3769],{"class":4182},[4005,54792,54646],{"class":4302},[4005,54794,5143],{"class":4182},[4005,54796,54797],{"class":4007,"line":4960},[4005,54798,4078],{"class":4182},[4005,54800,54801],{"class":4007,"line":4973},[4005,54802,4036],{"emptyLinePlaceholder":4035},[4005,54804,54805,54807,54809],{"class":4007,"line":4985},[4005,54806,4299],{"class":4171},[4005,54808,5764],{"class":4302},[4005,54810,4306],{"class":4182},[4005,54812,54813,54816,54818,54820,54822,54824,54826,54828,54830,54832,54834,54836],{"class":4007,"line":7813},[4005,54814,54815],{"class":4174},"    rect1",[4005,54817,4314],{"class":4182},[4005,54819,54641],{"class":4178},[4005,54821,16268],{"class":4182},[4005,54823,54663],{"class":4174},[4005,54825,11172],{"class":4182},[4005,54827,4631],{"class":4186},[4005,54829,3836],{"class":4182},[4005,54831,54730],{"class":4174},[4005,54833,11172],{"class":4182},[4005,54835,5869],{"class":4186},[4005,54837,4078],{"class":4182},[4005,54839,54840,54843,54845,54847,54849,54851,54853,54855,54857,54859,54861,54863],{"class":4007,"line":7819},[4005,54841,54842],{"class":4174},"    rect2",[4005,54844,4314],{"class":4182},[4005,54846,54641],{"class":4178},[4005,54848,16268],{"class":4182},[4005,54850,54663],{"class":4174},[4005,54852,11172],{"class":4182},[4005,54854,8264],{"class":4186},[4005,54856,3836],{"class":4182},[4005,54858,54730],{"class":4174},[4005,54860,11172],{"class":4182},[4005,54862,8264],{"class":4186},[4005,54864,4078],{"class":4182},[4005,54866,54867],{"class":4007,"line":7826},[4005,54868,5214],{"class":4182},[4005,54870,54871,54873,54875,54877,54879,54882,54884,54886,54888,54890,54893,54895,54897],{"class":4007,"line":7839},[4005,54872,5370],{"class":4174},[4005,54874,3769],{"class":4182},[4005,54876,7945],{"class":4302},[4005,54878,4611],{"class":4182},[4005,54880,54881],{"class":4330},"\"Площа rect1: ",[4005,54883,10654],{"class":4174},[4005,54885,7965],{"class":7964},[4005,54887,7968],{"class":4330},[4005,54889,3836],{"class":4182},[4005,54891,54892],{"class":4174},"rect1",[4005,54894,3769],{"class":4182},[4005,54896,54646],{"class":4302},[4005,54898,54899],{"class":4182},"())\n",[4005,54901,54902,54904,54906,54908,54910,54913,54915,54917,54919,54921,54923,54925,54927],{"class":4007,"line":7864},[4005,54903,5370],{"class":4174},[4005,54905,3769],{"class":4182},[4005,54907,7945],{"class":4302},[4005,54909,4611],{"class":4182},[4005,54911,54912],{"class":4330},"\"Периметр rect1: ",[4005,54914,10654],{"class":4174},[4005,54916,7965],{"class":7964},[4005,54918,7968],{"class":4330},[4005,54920,3836],{"class":4182},[4005,54922,54892],{"class":4174},[4005,54924,3769],{"class":4182},[4005,54926,54700],{"class":4302},[4005,54928,54899],{"class":4182},[4005,54930,54931,54933,54935,54937,54939,54942,54944,54946,54948,54950,54952,54954,54956,54958,54961],{"class":4007,"line":7872},[4005,54932,5370],{"class":4174},[4005,54934,3769],{"class":4182},[4005,54936,7945],{"class":4302},[4005,54938,4611],{"class":4182},[4005,54940,54941],{"class":4330},"\"rect1 більше rect2? ",[4005,54943,8049],{"class":4174},[4005,54945,7965],{"class":7964},[4005,54947,7968],{"class":4330},[4005,54949,3836],{"class":4182},[4005,54951,54892],{"class":4174},[4005,54953,3769],{"class":4182},[4005,54955,54760],{"class":4302},[4005,54957,4611],{"class":4182},[4005,54959,54960],{"class":4174},"rect2",[4005,54962,25552],{"class":4182},[4005,54964,54965],{"class":4007,"line":7881},[4005,54966,4078],{"class":4182},[3908,54968,54969],{},[3871,54970,11778],{},[3984,54972,54975],{"className":54973,"code":54974,"language":3989},[3987],"Площа rect1: 50.00\nПериметр rect1: 30.00\nrect1 більше rect2? false\n",[3753,54976,54974],{"__ignoreMap":3992},[9014,54978,54980],{"id":54979},"value-receiver-vs-pointer-receiver","Value Receiver vs Pointer Receiver",[3908,54982,7460,54983,54986],{},[3871,54984,54985],{},"найважливіша"," концепція методів у Go. Є два типи receivers:",[3908,54988,54989],{},[3871,54990,54991,54992],{},"1. Value Receiver (по значенню) — ",[3753,54993,54994],{},"(r Rectangle)",[3908,54996,54997,54998,55000],{},"Метод отримує ",[3871,54999,28790],{}," структури:",[3984,55002,55004],{"className":4162,"code":55003,"language":4164,"meta":3992,"style":3992},"func (r Rectangle) DoubleWidth() {\n    r.Width = r.Width * 2  \u002F\u002F Змінюємо КОПІЮ\n}\n\nrect := Rectangle{Width: 10, Height: 5}\nrect.DoubleWidth()\nfmt.Println(rect.Width)  \u002F\u002F 10 (не змінилось!)\n",[3753,55005,55006,55023,55047,55051,55055,55082,55092],{"__ignoreMap":3992},[4005,55007,55008,55010,55012,55014,55016,55018,55021],{"class":4007,"line":4008},[4005,55009,4299],{"class":4171},[4005,55011,4761],{"class":4182},[4005,55013,54638],{"class":4174},[4005,55015,54641],{"class":4178},[4005,55017,4498],{"class":4182},[4005,55019,55020],{"class":4302},"DoubleWidth",[4005,55022,4306],{"class":4182},[4005,55024,55025,55028,55030,55032,55034,55036,55038,55040,55042,55044],{"class":4007,"line":4014},[4005,55026,55027],{"class":4174},"    r",[4005,55029,3769],{"class":4182},[4005,55031,54663],{"class":4174},[4005,55033,4183],{"class":4182},[4005,55035,12146],{"class":4174},[4005,55037,3769],{"class":4182},[4005,55039,54663],{"class":4174},[4005,55041,6735],{"class":4182},[4005,55043,4398],{"class":4186},[4005,55045,55046],{"class":4190},"  \u002F\u002F Змінюємо КОПІЮ\n",[4005,55048,55049],{"class":4007,"line":4020},[4005,55050,4078],{"class":4182},[4005,55052,55053],{"class":4007,"line":4026},[4005,55054,4036],{"emptyLinePlaceholder":4035},[4005,55056,55057,55060,55062,55064,55066,55068,55070,55072,55074,55076,55078,55080],{"class":4007,"line":4032},[4005,55058,55059],{"class":4174},"rect",[4005,55061,4314],{"class":4182},[4005,55063,54641],{"class":4178},[4005,55065,16268],{"class":4182},[4005,55067,54663],{"class":4174},[4005,55069,11172],{"class":4182},[4005,55071,4631],{"class":4186},[4005,55073,3836],{"class":4182},[4005,55075,54730],{"class":4174},[4005,55077,11172],{"class":4182},[4005,55079,5869],{"class":4186},[4005,55081,4078],{"class":4182},[4005,55083,55084,55086,55088,55090],{"class":4007,"line":4039},[4005,55085,55059],{"class":4174},[4005,55087,3769],{"class":4182},[4005,55089,55020],{"class":4302},[4005,55091,5143],{"class":4182},[4005,55093,55094,55096,55098,55100,55102,55104,55106,55108,55110],{"class":4007,"line":4045},[4005,55095,3785],{"class":4174},[4005,55097,3769],{"class":4182},[4005,55099,5348],{"class":4302},[4005,55101,4611],{"class":4182},[4005,55103,55059],{"class":4174},[4005,55105,3769],{"class":4182},[4005,55107,54663],{"class":4174},[4005,55109,5196],{"class":4182},[4005,55111,55112],{"class":4190},"\u002F\u002F 10 (не змінилось!)\n",[3908,55114,55115],{},[3871,55116,55117,55118],{},"2. Pointer Receiver (через покажчик) — ",[3753,55119,55120],{},"(r *Rectangle)",[3908,55122,54997,55123,55126],{},[3871,55124,55125],{},"покажчик"," на оригінальну структуру:",[3984,55128,55130],{"className":4162,"code":55129,"language":4164,"meta":3992,"style":3992},"func (r *Rectangle) DoubleWidth() {\n    r.Width = r.Width * 2  \u002F\u002F Змінюємо ОРИГІНАЛ\n}\n\nrect := Rectangle{Width: 10, Height: 5}\nrect.DoubleWidth()\nfmt.Println(rect.Width)  \u002F\u002F 20 (змінилось!)\n",[3753,55131,55132,55150,55173,55177,55181,55207,55217],{"__ignoreMap":3992},[4005,55133,55134,55136,55138,55140,55142,55144,55146,55148],{"class":4007,"line":4008},[4005,55135,4299],{"class":4171},[4005,55137,4761],{"class":4182},[4005,55139,54638],{"class":4174},[4005,55141,8128],{"class":4182},[4005,55143,54641],{"class":4178},[4005,55145,4498],{"class":4182},[4005,55147,55020],{"class":4302},[4005,55149,4306],{"class":4182},[4005,55151,55152,55154,55156,55158,55160,55162,55164,55166,55168,55170],{"class":4007,"line":4014},[4005,55153,55027],{"class":4174},[4005,55155,3769],{"class":4182},[4005,55157,54663],{"class":4174},[4005,55159,4183],{"class":4182},[4005,55161,12146],{"class":4174},[4005,55163,3769],{"class":4182},[4005,55165,54663],{"class":4174},[4005,55167,6735],{"class":4182},[4005,55169,4398],{"class":4186},[4005,55171,55172],{"class":4190},"  \u002F\u002F Змінюємо ОРИГІНАЛ\n",[4005,55174,55175],{"class":4007,"line":4020},[4005,55176,4078],{"class":4182},[4005,55178,55179],{"class":4007,"line":4026},[4005,55180,4036],{"emptyLinePlaceholder":4035},[4005,55182,55183,55185,55187,55189,55191,55193,55195,55197,55199,55201,55203,55205],{"class":4007,"line":4032},[4005,55184,55059],{"class":4174},[4005,55186,4314],{"class":4182},[4005,55188,54641],{"class":4178},[4005,55190,16268],{"class":4182},[4005,55192,54663],{"class":4174},[4005,55194,11172],{"class":4182},[4005,55196,4631],{"class":4186},[4005,55198,3836],{"class":4182},[4005,55200,54730],{"class":4174},[4005,55202,11172],{"class":4182},[4005,55204,5869],{"class":4186},[4005,55206,4078],{"class":4182},[4005,55208,55209,55211,55213,55215],{"class":4007,"line":4039},[4005,55210,55059],{"class":4174},[4005,55212,3769],{"class":4182},[4005,55214,55020],{"class":4302},[4005,55216,5143],{"class":4182},[4005,55218,55219,55221,55223,55225,55227,55229,55231,55233,55235],{"class":4007,"line":4045},[4005,55220,3785],{"class":4174},[4005,55222,3769],{"class":4182},[4005,55224,5348],{"class":4302},[4005,55226,4611],{"class":4182},[4005,55228,55059],{"class":4174},[4005,55230,3769],{"class":4182},[4005,55232,54663],{"class":4174},[4005,55234,5196],{"class":4182},[4005,55236,55237],{"class":4190},"\u002F\u002F 20 (змінилось!)\n",[3908,55239,55240],{},[3871,55241,55242],{},"Детальне порівняння:",[12533,55244,55245,55526],{},[12536,55246,55249,55515,55520],{"icon":55247,"label":55248},"i-lucide-copy","Value Receiver (копія)",[3984,55250,55252],{"className":4162,"code":55251,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Counter struct {\n    Value int\n}\n\n\u002F\u002F Value receiver — метод отримує КОПІЮ\nfunc (c Counter) Increment() {\n    c.Value++  \u002F\u002F Змінюємо копію\n    fmt.Printf(\"  Всередині методу: %d\\n\", c.Value)\n}\n\nfunc main() {\n    counter := Counter{Value: 0}\n    \n    fmt.Println(\"До виклику:\", counter.Value)  \u002F\u002F 0\n    counter.Increment()                        \u002F\u002F Всередині: 1\n    fmt.Println(\"Після виклику:\", counter.Value)  \u002F\u002F 0 (не змінилось!)\n    \n    counter.Increment()                        \u002F\u002F Всередині: 1\n    fmt.Println(\"Після 2-го виклику:\", counter.Value)  \u002F\u002F 0 (знову не змінилось!)\n}\n",[3753,55253,55254,55260,55264,55270,55274,55285,55292,55296,55300,55305,55323,55336,55365,55369,55373,55381,55399,55403,55429,55443,55469,55473,55485,55511],{"__ignoreMap":3992},[4005,55255,55256,55258],{"class":4007,"line":4008},[4005,55257,5739],{"class":4171},[4005,55259,5742],{"class":4178},[4005,55261,55262],{"class":4007,"line":4014},[4005,55263,4036],{"emptyLinePlaceholder":4035},[4005,55265,55266,55268],{"class":4007,"line":4020},[4005,55267,3917],{"class":4836},[4005,55269,7656],{"class":4330},[4005,55271,55272],{"class":4007,"line":4026},[4005,55273,4036],{"emptyLinePlaceholder":4035},[4005,55275,55276,55278,55281,55283],{"class":4007,"line":4032},[4005,55277,4809],{"class":4171},[4005,55279,55280],{"class":4178}," Counter",[4005,55282,10957],{"class":4171},[4005,55284,5073],{"class":4182},[4005,55286,55287,55290],{"class":4007,"line":4039},[4005,55288,55289],{"class":4174},"    Value",[4005,55291,4926],{"class":4178},[4005,55293,55294],{"class":4007,"line":4045},[4005,55295,4078],{"class":4182},[4005,55297,55298],{"class":4007,"line":4051},[4005,55299,4036],{"emptyLinePlaceholder":4035},[4005,55301,55302],{"class":4007,"line":4057},[4005,55303,55304],{"class":4190},"\u002F\u002F Value receiver — метод отримує КОПІЮ\n",[4005,55306,55307,55309,55311,55313,55316,55318,55321],{"class":4007,"line":4063},[4005,55308,4299],{"class":4171},[4005,55310,4761],{"class":4182},[4005,55312,45771],{"class":4174},[4005,55314,55315],{"class":4178},"Counter",[4005,55317,4498],{"class":4182},[4005,55319,55320],{"class":4302},"Increment",[4005,55322,4306],{"class":4182},[4005,55324,55325,55327,55329,55331,55333],{"class":4007,"line":4069},[4005,55326,32612],{"class":4174},[4005,55328,3769],{"class":4182},[4005,55330,32096],{"class":4174},[4005,55332,39539],{"class":4182},[4005,55334,55335],{"class":4190},"\u002F\u002F Змінюємо копію\n",[4005,55337,55338,55340,55342,55344,55346,55349,55351,55353,55355,55357,55359,55361,55363],{"class":4007,"line":4075},[4005,55339,5370],{"class":4174},[4005,55341,3769],{"class":4182},[4005,55343,7945],{"class":4302},[4005,55345,4611],{"class":4182},[4005,55347,55348],{"class":4330},"\"  Всередині методу: ",[4005,55350,7959],{"class":4174},[4005,55352,7965],{"class":7964},[4005,55354,7968],{"class":4330},[4005,55356,3836],{"class":4182},[4005,55358,4386],{"class":4174},[4005,55360,3769],{"class":4182},[4005,55362,32096],{"class":4174},[4005,55364,4482],{"class":4182},[4005,55366,55367],{"class":4007,"line":4081},[4005,55368,4078],{"class":4182},[4005,55370,55371],{"class":4007,"line":4086},[4005,55372,4036],{"emptyLinePlaceholder":4035},[4005,55374,55375,55377,55379],{"class":4007,"line":4092},[4005,55376,4299],{"class":4171},[4005,55378,5764],{"class":4302},[4005,55380,4306],{"class":4182},[4005,55382,55383,55385,55387,55389,55391,55393,55395,55397],{"class":4007,"line":4098},[4005,55384,28126],{"class":4174},[4005,55386,4314],{"class":4182},[4005,55388,55315],{"class":4178},[4005,55390,16268],{"class":4182},[4005,55392,32096],{"class":4174},[4005,55394,11172],{"class":4182},[4005,55396,4200],{"class":4186},[4005,55398,4078],{"class":4182},[4005,55400,55401],{"class":4007,"line":4104},[4005,55402,5214],{"class":4182},[4005,55404,55405,55407,55409,55411,55413,55416,55418,55420,55422,55424,55426],{"class":4007,"line":4110},[4005,55406,5370],{"class":4174},[4005,55408,3769],{"class":4182},[4005,55410,5348],{"class":4302},[4005,55412,4611],{"class":4182},[4005,55414,55415],{"class":4330},"\"До виклику:\"",[4005,55417,3836],{"class":4182},[4005,55419,28253],{"class":4174},[4005,55421,3769],{"class":4182},[4005,55423,32096],{"class":4174},[4005,55425,5196],{"class":4182},[4005,55427,55428],{"class":4190},"\u002F\u002F 0\n",[4005,55430,55431,55433,55435,55437,55440],{"class":4007,"line":4937},[4005,55432,28126],{"class":4174},[4005,55434,3769],{"class":4182},[4005,55436,55320],{"class":4302},[4005,55438,55439],{"class":4182},"()                        ",[4005,55441,55442],{"class":4190},"\u002F\u002F Всередині: 1\n",[4005,55444,55445,55447,55449,55451,55453,55456,55458,55460,55462,55464,55466],{"class":4007,"line":4942},[4005,55446,5370],{"class":4174},[4005,55448,3769],{"class":4182},[4005,55450,5348],{"class":4302},[4005,55452,4611],{"class":4182},[4005,55454,55455],{"class":4330},"\"Після виклику:\"",[4005,55457,3836],{"class":4182},[4005,55459,28253],{"class":4174},[4005,55461,3769],{"class":4182},[4005,55463,32096],{"class":4174},[4005,55465,5196],{"class":4182},[4005,55467,55468],{"class":4190},"\u002F\u002F 0 (не змінилось!)\n",[4005,55470,55471],{"class":4007,"line":4947},[4005,55472,5214],{"class":4182},[4005,55474,55475,55477,55479,55481,55483],{"class":4007,"line":4953},[4005,55476,28126],{"class":4174},[4005,55478,3769],{"class":4182},[4005,55480,55320],{"class":4302},[4005,55482,55439],{"class":4182},[4005,55484,55442],{"class":4190},[4005,55486,55487,55489,55491,55493,55495,55498,55500,55502,55504,55506,55508],{"class":4007,"line":4960},[4005,55488,5370],{"class":4174},[4005,55490,3769],{"class":4182},[4005,55492,5348],{"class":4302},[4005,55494,4611],{"class":4182},[4005,55496,55497],{"class":4330},"\"Після 2-го виклику:\"",[4005,55499,3836],{"class":4182},[4005,55501,28253],{"class":4174},[4005,55503,3769],{"class":4182},[4005,55505,32096],{"class":4174},[4005,55507,5196],{"class":4182},[4005,55509,55510],{"class":4190},"\u002F\u002F 0 (знову не змінилось!)\n",[4005,55512,55513],{"class":4007,"line":4973},[4005,55514,4078],{"class":4182},[3908,55516,55517],{},[3871,55518,55519],{},"Що відбувається:",[3984,55521,55524],{"className":55522,"code":55523,"language":3989},[3987],"Пам'ять:\n┌─────────────────┐\n│ counter         │\n│ Value: 0        │ ← Оригінал\n└─────────────────┘\n        ↓\n    [копія передається в метод]\n        ↓\n┌─────────────────┐\n│ c (копія)       │\n│ Value: 0 → 1    │ ← Змінюємо копію\n└─────────────────┘\n        ↓\n    [копія знищується після виходу з методу]\n        ↓\n┌─────────────────┐\n│ counter         │\n│ Value: 0        │ ← Оригінал НЕ змінився\n└─────────────────┘\n",[3753,55525,55523],{"__ignoreMap":3992},[12536,55527,55530,55788,55792],{"icon":55528,"label":55529},"i-lucide-pointer","Pointer Receiver (посилання)",[3984,55531,55533],{"className":4162,"code":55532,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Counter struct {\n    Value int\n}\n\n\u002F\u002F Pointer receiver — метод отримує ПОКАЖЧИК\nfunc (c *Counter) Increment() {\n    c.Value++  \u002F\u002F Змінюємо оригінал\n    fmt.Printf(\"  Всередині методу: %d\\n\", c.Value)\n}\n\nfunc main() {\n    counter := Counter{Value: 0}\n    \n    fmt.Println(\"До виклику:\", counter.Value)  \u002F\u002F 0\n    counter.Increment()                        \u002F\u002F Всередині: 1\n    fmt.Println(\"Після виклику:\", counter.Value)  \u002F\u002F 1 (змінилось!)\n    \n    counter.Increment()                        \u002F\u002F Всередині: 2\n    fmt.Println(\"Після 2-го виклику:\", counter.Value)  \u002F\u002F 2 (змінилось!)\n}\n",[3753,55534,55535,55541,55545,55551,55555,55565,55571,55575,55579,55584,55602,55615,55643,55647,55651,55659,55677,55681,55705,55717,55742,55746,55759,55784],{"__ignoreMap":3992},[4005,55536,55537,55539],{"class":4007,"line":4008},[4005,55538,5739],{"class":4171},[4005,55540,5742],{"class":4178},[4005,55542,55543],{"class":4007,"line":4014},[4005,55544,4036],{"emptyLinePlaceholder":4035},[4005,55546,55547,55549],{"class":4007,"line":4020},[4005,55548,3917],{"class":4836},[4005,55550,7656],{"class":4330},[4005,55552,55553],{"class":4007,"line":4026},[4005,55554,4036],{"emptyLinePlaceholder":4035},[4005,55556,55557,55559,55561,55563],{"class":4007,"line":4032},[4005,55558,4809],{"class":4171},[4005,55560,55280],{"class":4178},[4005,55562,10957],{"class":4171},[4005,55564,5073],{"class":4182},[4005,55566,55567,55569],{"class":4007,"line":4039},[4005,55568,55289],{"class":4174},[4005,55570,4926],{"class":4178},[4005,55572,55573],{"class":4007,"line":4045},[4005,55574,4078],{"class":4182},[4005,55576,55577],{"class":4007,"line":4051},[4005,55578,4036],{"emptyLinePlaceholder":4035},[4005,55580,55581],{"class":4007,"line":4057},[4005,55582,55583],{"class":4190},"\u002F\u002F Pointer receiver — метод отримує ПОКАЖЧИК\n",[4005,55585,55586,55588,55590,55592,55594,55596,55598,55600],{"class":4007,"line":4063},[4005,55587,4299],{"class":4171},[4005,55589,4761],{"class":4182},[4005,55591,45771],{"class":4174},[4005,55593,8128],{"class":4182},[4005,55595,55315],{"class":4178},[4005,55597,4498],{"class":4182},[4005,55599,55320],{"class":4302},[4005,55601,4306],{"class":4182},[4005,55603,55604,55606,55608,55610,55612],{"class":4007,"line":4069},[4005,55605,32612],{"class":4174},[4005,55607,3769],{"class":4182},[4005,55609,32096],{"class":4174},[4005,55611,39539],{"class":4182},[4005,55613,55614],{"class":4190},"\u002F\u002F Змінюємо оригінал\n",[4005,55616,55617,55619,55621,55623,55625,55627,55629,55631,55633,55635,55637,55639,55641],{"class":4007,"line":4075},[4005,55618,5370],{"class":4174},[4005,55620,3769],{"class":4182},[4005,55622,7945],{"class":4302},[4005,55624,4611],{"class":4182},[4005,55626,55348],{"class":4330},[4005,55628,7959],{"class":4174},[4005,55630,7965],{"class":7964},[4005,55632,7968],{"class":4330},[4005,55634,3836],{"class":4182},[4005,55636,4386],{"class":4174},[4005,55638,3769],{"class":4182},[4005,55640,32096],{"class":4174},[4005,55642,4482],{"class":4182},[4005,55644,55645],{"class":4007,"line":4081},[4005,55646,4078],{"class":4182},[4005,55648,55649],{"class":4007,"line":4086},[4005,55650,4036],{"emptyLinePlaceholder":4035},[4005,55652,55653,55655,55657],{"class":4007,"line":4092},[4005,55654,4299],{"class":4171},[4005,55656,5764],{"class":4302},[4005,55658,4306],{"class":4182},[4005,55660,55661,55663,55665,55667,55669,55671,55673,55675],{"class":4007,"line":4098},[4005,55662,28126],{"class":4174},[4005,55664,4314],{"class":4182},[4005,55666,55315],{"class":4178},[4005,55668,16268],{"class":4182},[4005,55670,32096],{"class":4174},[4005,55672,11172],{"class":4182},[4005,55674,4200],{"class":4186},[4005,55676,4078],{"class":4182},[4005,55678,55679],{"class":4007,"line":4104},[4005,55680,5214],{"class":4182},[4005,55682,55683,55685,55687,55689,55691,55693,55695,55697,55699,55701,55703],{"class":4007,"line":4110},[4005,55684,5370],{"class":4174},[4005,55686,3769],{"class":4182},[4005,55688,5348],{"class":4302},[4005,55690,4611],{"class":4182},[4005,55692,55415],{"class":4330},[4005,55694,3836],{"class":4182},[4005,55696,28253],{"class":4174},[4005,55698,3769],{"class":4182},[4005,55700,32096],{"class":4174},[4005,55702,5196],{"class":4182},[4005,55704,55428],{"class":4190},[4005,55706,55707,55709,55711,55713,55715],{"class":4007,"line":4937},[4005,55708,28126],{"class":4174},[4005,55710,3769],{"class":4182},[4005,55712,55320],{"class":4302},[4005,55714,55439],{"class":4182},[4005,55716,55442],{"class":4190},[4005,55718,55719,55721,55723,55725,55727,55729,55731,55733,55735,55737,55739],{"class":4007,"line":4942},[4005,55720,5370],{"class":4174},[4005,55722,3769],{"class":4182},[4005,55724,5348],{"class":4302},[4005,55726,4611],{"class":4182},[4005,55728,55455],{"class":4330},[4005,55730,3836],{"class":4182},[4005,55732,28253],{"class":4174},[4005,55734,3769],{"class":4182},[4005,55736,32096],{"class":4174},[4005,55738,5196],{"class":4182},[4005,55740,55741],{"class":4190},"\u002F\u002F 1 (змінилось!)\n",[4005,55743,55744],{"class":4007,"line":4947},[4005,55745,5214],{"class":4182},[4005,55747,55748,55750,55752,55754,55756],{"class":4007,"line":4953},[4005,55749,28126],{"class":4174},[4005,55751,3769],{"class":4182},[4005,55753,55320],{"class":4302},[4005,55755,55439],{"class":4182},[4005,55757,55758],{"class":4190},"\u002F\u002F Всередині: 2\n",[4005,55760,55761,55763,55765,55767,55769,55771,55773,55775,55777,55779,55781],{"class":4007,"line":4960},[4005,55762,5370],{"class":4174},[4005,55764,3769],{"class":4182},[4005,55766,5348],{"class":4302},[4005,55768,4611],{"class":4182},[4005,55770,55497],{"class":4330},[4005,55772,3836],{"class":4182},[4005,55774,28253],{"class":4174},[4005,55776,3769],{"class":4182},[4005,55778,32096],{"class":4174},[4005,55780,5196],{"class":4182},[4005,55782,55783],{"class":4190},"\u002F\u002F 2 (змінилось!)\n",[4005,55785,55786],{"class":4007,"line":4973},[4005,55787,4078],{"class":4182},[3908,55789,55790],{},[3871,55791,55519],{},[3984,55793,55796],{"className":55794,"code":55795,"language":3989},[3987],"Пам'ять:\n┌─────────────────┐\n│ counter         │\n│ Value: 0        │ ← Оригінал\n└─────────────────┘\n        ↓\n    [передається адреса &counter]\n        ↓\n┌─────────────────┐\n│ c → &counter    │ ← Покажчик на оригінал\n└─────────────────┘\n        ↓\n    [змінюємо через покажчик]\n        ↓\n┌─────────────────┐\n│ counter         │\n│ Value: 0 → 1    │ ← Оригінал ЗМІНИВСЯ\n└─────────────────┘\n",[3753,55797,55795],{"__ignoreMap":3992},[9014,55799,55801],{"id":55800},"коли-використовувати-value-vs-pointer-receiver","Коли використовувати Value vs Pointer Receiver",[3908,55803,55804],{},[3871,55805,55806],{},"Таблиця рішень:",[5991,55808,55809,55821],{},[5994,55810,55811],{},[5997,55812,55813,55815,55818],{},[6000,55814,44409],{},[6000,55816,55817],{},"Value Receiver",[6000,55819,55820],{},"Pointer Receiver",[6010,55822,55823,55836,55849,55862,55875,55888],{},[5997,55824,55825,55830,55833],{},[6015,55826,55827],{},[3871,55828,55829],{},"Зміна структури",[6015,55831,55832],{},"❌ НЕ змінює оригінал",[6015,55834,55835],{},"✅ Змінює оригінал",[5997,55837,55838,55843,55846],{},[6015,55839,55840],{},[3871,55841,55842],{},"Розмір структури",[6015,55844,55845],{},"✅ Малі (\u003C 64 байти)",[6015,55847,55848],{},"✅ Великі (> 64 байти)",[5997,55850,55851,55856,55859],{},[6015,55852,55853],{},[3871,55854,55855],{},"Копіювання",[6015,55857,55858],{},"Повна копія",[6015,55860,55861],{},"Лише адреса (8 байт)",[5997,55863,55864,55869,55872],{},[6015,55865,55866],{},[3871,55867,55868],{},"Продуктивність",[6015,55870,55871],{},"Повільніше для великих",[6015,55873,55874],{},"Швидше для великих",[5997,55876,55877,55882,55885],{},[6015,55878,55879],{},[3871,55880,55881],{},"Безпека",[6015,55883,55884],{},"✅ Immutable",[6015,55886,55887],{},"⚠️ Може змінити дані",[5997,55889,55890,55895,55898],{},[6015,55891,55892],{},[3871,55893,55894],{},"sync.Mutex",[6015,55896,55897],{},"❌ Не працює",[6015,55899,55900],{},"✅ Обов'язково",[3908,55902,55903],{},[3871,55904,55905],{},"Практичні правила:",[3908,55907,55908],{},[3871,55909,55910],{},"✅ Використовуйте Value Receiver коли:",[4781,55912,55913,55919,55925],{},[3749,55914,55915,55918],{},[3871,55916,55917],{},"Структура мала"," (2-3 поля, \u003C 64 байти)",[3749,55920,55921,55924],{},[3871,55922,55923],{},"Метод НЕ змінює дані"," (getter, перевірка, обчислення)",[3749,55926,55927,55930],{},[3871,55928,55929],{},"Хочете immutability"," (незмінність)",[3984,55932,55934],{"className":4162,"code":55933,"language":4164,"meta":3992,"style":3992},"type Point struct {\n    X, Y int  \u002F\u002F Маленька структура (16 байт)\n}\n\n\u002F\u002F Value receiver — читаємо дані\nfunc (p Point) Distance() float64 {\n    return math.Sqrt(float64(p.X*p.X + p.Y*p.Y))\n}\n\n\u002F\u002F Value receiver — не змінюємо оригінал\nfunc (p Point) Add(other Point) Point {\n    return Point{X: p.X + other.X, Y: p.Y + other.Y}\n}\n",[3753,55935,55936,55946,55959,55963,55967,55972,55994,56042,56046,56050,56055,56082,56130],{"__ignoreMap":3992},[4005,55937,55938,55940,55942,55944],{"class":4007,"line":4008},[4005,55939,4809],{"class":4171},[4005,55941,48465],{"class":4178},[4005,55943,10957],{"class":4171},[4005,55945,5073],{"class":4182},[4005,55947,55948,55950,55952,55954,55956],{"class":4007,"line":4014},[4005,55949,48474],{"class":4174},[4005,55951,3836],{"class":4182},[4005,55953,48479],{"class":4174},[4005,55955,4224],{"class":4178},[4005,55957,55958],{"class":4190},"  \u002F\u002F Маленька структура (16 байт)\n",[4005,55960,55961],{"class":4007,"line":4020},[4005,55962,4078],{"class":4182},[4005,55964,55965],{"class":4007,"line":4026},[4005,55966,4036],{"emptyLinePlaceholder":4035},[4005,55968,55969],{"class":4007,"line":4032},[4005,55970,55971],{"class":4190},"\u002F\u002F Value receiver — читаємо дані\n",[4005,55973,55974,55976,55978,55981,55983,55985,55988,55990,55992],{"class":4007,"line":4039},[4005,55975,4299],{"class":4171},[4005,55977,4761],{"class":4182},[4005,55979,55980],{"class":4174},"p ",[4005,55982,48502],{"class":4178},[4005,55984,4498],{"class":4182},[4005,55986,55987],{"class":4302},"Distance",[4005,55989,7346],{"class":4182},[4005,55991,8437],{"class":4178},[4005,55993,5073],{"class":4182},[4005,55995,55996,55998,56000,56002,56004,56006,56008,56010,56012,56014,56016,56018,56020,56022,56024,56026,56028,56030,56032,56034,56036,56038,56040],{"class":4007,"line":4045},[4005,55997,5260],{"class":4836},[4005,55999,10710],{"class":4174},[4005,56001,3769],{"class":4182},[4005,56003,10724],{"class":4302},[4005,56005,4611],{"class":4182},[4005,56007,8437],{"class":4178},[4005,56009,4611],{"class":4182},[4005,56011,3908],{"class":4174},[4005,56013,3769],{"class":4182},[4005,56015,48507],{"class":4174},[4005,56017,8128],{"class":4182},[4005,56019,3908],{"class":4174},[4005,56021,3769],{"class":4182},[4005,56023,48507],{"class":4174},[4005,56025,6289],{"class":4182},[4005,56027,3908],{"class":4174},[4005,56029,3769],{"class":4182},[4005,56031,48479],{"class":4174},[4005,56033,8128],{"class":4182},[4005,56035,3908],{"class":4174},[4005,56037,3769],{"class":4182},[4005,56039,48479],{"class":4174},[4005,56041,25552],{"class":4182},[4005,56043,56044],{"class":4007,"line":4051},[4005,56045,4078],{"class":4182},[4005,56047,56048],{"class":4007,"line":4057},[4005,56049,4036],{"emptyLinePlaceholder":4035},[4005,56051,56052],{"class":4007,"line":4063},[4005,56053,56054],{"class":4190},"\u002F\u002F Value receiver — не змінюємо оригінал\n",[4005,56056,56057,56059,56061,56063,56065,56067,56070,56072,56074,56076,56078,56080],{"class":4007,"line":4069},[4005,56058,4299],{"class":4171},[4005,56060,4761],{"class":4182},[4005,56062,55980],{"class":4174},[4005,56064,48502],{"class":4178},[4005,56066,4498],{"class":4182},[4005,56068,56069],{"class":4302},"Add",[4005,56071,4611],{"class":4182},[4005,56073,54765],{"class":4174},[4005,56075,48465],{"class":4178},[4005,56077,4498],{"class":4182},[4005,56079,48502],{"class":4178},[4005,56081,5073],{"class":4182},[4005,56083,56084,56086,56088,56090,56092,56094,56096,56098,56100,56102,56104,56106,56108,56110,56112,56114,56116,56118,56120,56122,56124,56126,56128],{"class":4007,"line":4075},[4005,56085,5260],{"class":4836},[4005,56087,48465],{"class":4178},[4005,56089,16268],{"class":4182},[4005,56091,48507],{"class":4174},[4005,56093,11172],{"class":4182},[4005,56095,3908],{"class":4174},[4005,56097,3769],{"class":4182},[4005,56099,48507],{"class":4174},[4005,56101,6289],{"class":4182},[4005,56103,54765],{"class":4174},[4005,56105,3769],{"class":4182},[4005,56107,48507],{"class":4174},[4005,56109,3836],{"class":4182},[4005,56111,48479],{"class":4174},[4005,56113,11172],{"class":4182},[4005,56115,3908],{"class":4174},[4005,56117,3769],{"class":4182},[4005,56119,48479],{"class":4174},[4005,56121,6289],{"class":4182},[4005,56123,54765],{"class":4174},[4005,56125,3769],{"class":4182},[4005,56127,48479],{"class":4174},[4005,56129,4078],{"class":4182},[4005,56131,56132],{"class":4007,"line":4081},[4005,56133,4078],{"class":4182},[3908,56135,56136],{},[3871,56137,56138],{},"✅ Використовуйте Pointer Receiver коли:",[4781,56140,56141,56147,56153,56161],{},[3749,56142,56143,56146],{},[3871,56144,56145],{},"Метод ЗМІНЮЄ структуру"," (update, increment, modify)",[3749,56148,56149,56152],{},[3871,56150,56151],{},"Структура велика"," (багато полів, > 64 байти)",[3749,56154,56155,56160],{},[3871,56156,56157,56158],{},"Є ",[3753,56159,55894],{}," (інакше не працюватиме)",[3749,56162,56163,56166],{},[3871,56164,56165],{},"Потрібна узгодженість"," (якщо хоч один метод pointer — всі pointer)",[3984,56168,56170],{"className":4162,"code":56169,"language":4164,"meta":3992,"style":3992},"type User struct {\n    ID       int64\n    Name     string\n    Email    string\n    Password string\n    \u002F\u002F ... багато полів\n}\n\n\u002F\u002F Pointer receiver — змінюємо дані\nfunc (u *User) UpdateEmail(newEmail string) {\n    u.Email = newEmail\n}\n\n\u002F\u002F Pointer receiver — велика структура\nfunc (u *User) Validate() error {\n    \u002F\u002F Не копіюємо всю структуру\n    if u.Email == \"\" {\n        return errors.New(\"email обов'язковий\")\n    }\n    return nil\n}\n\n\u002F\u002F Mutex — ОБОВ'ЯЗКОВО pointer receiver\ntype SafeCounter struct {\n    mu    sync.Mutex\n    value int\n}\n\nfunc (c *SafeCounter) Increment() {\n    c.mu.Lock()\n    defer c.mu.Unlock()\n    c.value++\n}\n",[3753,56171,56172,56182,56188,56194,56200,56206,56211,56215,56219,56224,56250,56264,56268,56272,56277,56300,56305,56321,56339,56343,56349,56353,56357,56362,56373,56386,56393,56397,56401,56420,56436,56453,56463],{"__ignoreMap":3992},[4005,56173,56174,56176,56178,56180],{"class":4007,"line":4008},[4005,56175,4809],{"class":4171},[4005,56177,20760],{"class":4178},[4005,56179,10957],{"class":4171},[4005,56181,5073],{"class":4182},[4005,56183,56184,56186],{"class":4007,"line":4014},[4005,56185,46381],{"class":4174},[4005,56187,46384],{"class":4178},[4005,56189,56190,56192],{"class":4007,"line":4020},[4005,56191,20769],{"class":4174},[4005,56193,4934],{"class":4178},[4005,56195,56196,56198],{"class":4007,"line":4026},[4005,56197,4931],{"class":4174},[4005,56199,7527],{"class":4178},[4005,56201,56202,56204],{"class":4007,"line":4032},[4005,56203,33493],{"class":4174},[4005,56205,20772],{"class":4178},[4005,56207,56208],{"class":4007,"line":4039},[4005,56209,56210],{"class":4190},"    \u002F\u002F ... багато полів\n",[4005,56212,56213],{"class":4007,"line":4045},[4005,56214,4078],{"class":4182},[4005,56216,56217],{"class":4007,"line":4051},[4005,56218,4036],{"emptyLinePlaceholder":4035},[4005,56220,56221],{"class":4007,"line":4057},[4005,56222,56223],{"class":4190},"\u002F\u002F Pointer receiver — змінюємо дані\n",[4005,56225,56226,56228,56230,56232,56234,56236,56238,56241,56243,56246,56248],{"class":4007,"line":4063},[4005,56227,4299],{"class":4171},[4005,56229,4761],{"class":4182},[4005,56231,48277],{"class":4174},[4005,56233,8128],{"class":4182},[4005,56235,20798],{"class":4178},[4005,56237,4498],{"class":4182},[4005,56239,56240],{"class":4302},"UpdateEmail",[4005,56242,4611],{"class":4182},[4005,56244,56245],{"class":4174},"newEmail",[4005,56247,4237],{"class":4178},[4005,56249,12789],{"class":4182},[4005,56251,56252,56254,56256,56259,56261],{"class":4007,"line":4069},[4005,56253,45590],{"class":4174},[4005,56255,3769],{"class":4182},[4005,56257,56258],{"class":4174},"Email",[4005,56260,4183],{"class":4182},[4005,56262,56263],{"class":4174},"newEmail\n",[4005,56265,56266],{"class":4007,"line":4075},[4005,56267,4078],{"class":4182},[4005,56269,56270],{"class":4007,"line":4081},[4005,56271,4036],{"emptyLinePlaceholder":4035},[4005,56273,56274],{"class":4007,"line":4086},[4005,56275,56276],{"class":4190},"\u002F\u002F Pointer receiver — велика структура\n",[4005,56278,56279,56281,56283,56285,56287,56289,56291,56294,56296,56298],{"class":4007,"line":4092},[4005,56280,4299],{"class":4171},[4005,56282,4761],{"class":4182},[4005,56284,48277],{"class":4174},[4005,56286,8128],{"class":4182},[4005,56288,20798],{"class":4178},[4005,56290,4498],{"class":4182},[4005,56292,56293],{"class":4302},"Validate",[4005,56295,7346],{"class":4182},[4005,56297,3857],{"class":4178},[4005,56299,5073],{"class":4182},[4005,56301,56302],{"class":4007,"line":4098},[4005,56303,56304],{"class":4190},"    \u002F\u002F Не копіюємо всю структуру\n",[4005,56306,56307,56309,56311,56313,56315,56317,56319],{"class":4007,"line":4104},[4005,56308,5104],{"class":4836},[4005,56310,45545],{"class":4174},[4005,56312,3769],{"class":4182},[4005,56314,56258],{"class":4174},[4005,56316,5473],{"class":4182},[4005,56318,4203],{"class":4330},[4005,56320,5073],{"class":4182},[4005,56322,56323,56325,56328,56330,56332,56334,56337],{"class":4007,"line":4110},[4005,56324,5119],{"class":4836},[4005,56326,56327],{"class":4174}," errors",[4005,56329,3769],{"class":4182},[4005,56331,34826],{"class":4302},[4005,56333,4611],{"class":4182},[4005,56335,56336],{"class":4330},"\"email обов'язковий\"",[4005,56338,4482],{"class":4182},[4005,56340,56341],{"class":4007,"line":4937},[4005,56342,5127],{"class":4182},[4005,56344,56345,56347],{"class":4007,"line":4942},[4005,56346,5260],{"class":4836},[4005,56348,5263],{"class":4171},[4005,56350,56351],{"class":4007,"line":4947},[4005,56352,4078],{"class":4182},[4005,56354,56355],{"class":4007,"line":4953},[4005,56356,4036],{"emptyLinePlaceholder":4035},[4005,56358,56359],{"class":4007,"line":4960},[4005,56360,56361],{"class":4190},"\u002F\u002F Mutex — ОБОВ'ЯЗКОВО pointer receiver\n",[4005,56363,56364,56366,56369,56371],{"class":4007,"line":4973},[4005,56365,4809],{"class":4171},[4005,56367,56368],{"class":4178}," SafeCounter",[4005,56370,10957],{"class":4171},[4005,56372,5073],{"class":4182},[4005,56374,56375,56378,56381,56383],{"class":4007,"line":4985},[4005,56376,56377],{"class":4174},"    mu",[4005,56379,56380],{"class":4178},"    sync",[4005,56382,3769],{"class":4182},[4005,56384,56385],{"class":4178},"Mutex\n",[4005,56387,56388,56391],{"class":4007,"line":7813},[4005,56389,56390],{"class":4174},"    value",[4005,56392,4926],{"class":4178},[4005,56394,56395],{"class":4007,"line":7819},[4005,56396,4078],{"class":4182},[4005,56398,56399],{"class":4007,"line":7826},[4005,56400,4036],{"emptyLinePlaceholder":4035},[4005,56402,56403,56405,56407,56409,56411,56414,56416,56418],{"class":4007,"line":7839},[4005,56404,4299],{"class":4171},[4005,56406,4761],{"class":4182},[4005,56408,45771],{"class":4174},[4005,56410,8128],{"class":4182},[4005,56412,56413],{"class":4178},"SafeCounter",[4005,56415,4498],{"class":4182},[4005,56417,55320],{"class":4302},[4005,56419,4306],{"class":4182},[4005,56421,56422,56424,56426,56429,56431,56434],{"class":4007,"line":7864},[4005,56423,32612],{"class":4174},[4005,56425,3769],{"class":4182},[4005,56427,56428],{"class":4174},"mu",[4005,56430,3769],{"class":4182},[4005,56432,56433],{"class":4302},"Lock",[4005,56435,5143],{"class":4182},[4005,56437,56438,56440,56442,56444,56446,56448,56451],{"class":4007,"line":7872},[4005,56439,5132],{"class":4836},[4005,56441,6103],{"class":4174},[4005,56443,3769],{"class":4182},[4005,56445,56428],{"class":4174},[4005,56447,3769],{"class":4182},[4005,56449,56450],{"class":4302},"Unlock",[4005,56452,5143],{"class":4182},[4005,56454,56455,56457,56459,56461],{"class":4007,"line":7881},[4005,56456,32612],{"class":4174},[4005,56458,3769],{"class":4182},[4005,56460,26445],{"class":4174},[4005,56462,28148],{"class":4182},[4005,56464,56465],{"class":4007,"line":7890},[4005,56466,4078],{"class":4182},[9014,56468,56470],{"id":56469},"автоматичне-перетворення-go-магія-викликів","Автоматичне перетворення Go: магія викликів",[3908,56472,10843,56473,56476],{},[3871,56474,56475],{},"автоматично"," конвертує між значеннями та покажчиками при виклику методів:",[3984,56478,56480],{"className":4162,"code":56479,"language":4164,"meta":3992,"style":3992},"type User struct {\n    Name string\n}\n\nfunc (u *User) SetName(name string) {\n    u.Name = name\n}\n\nfunc (u User) GetName() string {\n    return u.Name\n}\n\n\u002F\u002F ✅ Всі ці виклики валідні:\nuser := User{Name: \"Олег\"}\nuser.SetName(\"Марія\")      \u002F\u002F Go автоматично: (&user).SetName(\"Марія\")\n\nuserPtr := &User{Name: \"Іван\"}\nname := userPtr.GetName()  \u002F\u002F Go автоматично: (*userPtr).GetName()\n",[3753,56481,56482,56492,56498,56502,56506,56531,56544,56548,56552,56573,56583,56587,56591,56596,56614,56631,56635,56653],{"__ignoreMap":3992},[4005,56483,56484,56486,56488,56490],{"class":4007,"line":4008},[4005,56485,4809],{"class":4171},[4005,56487,20760],{"class":4178},[4005,56489,10957],{"class":4171},[4005,56491,5073],{"class":4182},[4005,56493,56494,56496],{"class":4007,"line":4014},[4005,56495,20769],{"class":4174},[4005,56497,20772],{"class":4178},[4005,56499,56500],{"class":4007,"line":4020},[4005,56501,4078],{"class":4182},[4005,56503,56504],{"class":4007,"line":4026},[4005,56505,4036],{"emptyLinePlaceholder":4035},[4005,56507,56508,56510,56512,56514,56516,56518,56520,56523,56525,56527,56529],{"class":4007,"line":4032},[4005,56509,4299],{"class":4171},[4005,56511,4761],{"class":4182},[4005,56513,48277],{"class":4174},[4005,56515,8128],{"class":4182},[4005,56517,20798],{"class":4178},[4005,56519,4498],{"class":4182},[4005,56521,56522],{"class":4302},"SetName",[4005,56524,4611],{"class":4182},[4005,56526,4650],{"class":4174},[4005,56528,4237],{"class":4178},[4005,56530,12789],{"class":4182},[4005,56532,56533,56535,56537,56539,56541],{"class":4007,"line":4039},[4005,56534,45590],{"class":4174},[4005,56536,3769],{"class":4182},[4005,56538,20803],{"class":4174},[4005,56540,4183],{"class":4182},[4005,56542,56543],{"class":4174},"name\n",[4005,56545,56546],{"class":4007,"line":4045},[4005,56547,4078],{"class":4182},[4005,56549,56550],{"class":4007,"line":4051},[4005,56551,4036],{"emptyLinePlaceholder":4035},[4005,56553,56554,56556,56558,56560,56562,56564,56567,56569,56571],{"class":4007,"line":4057},[4005,56555,4299],{"class":4171},[4005,56557,4761],{"class":4182},[4005,56559,48277],{"class":4174},[4005,56561,20798],{"class":4178},[4005,56563,4498],{"class":4182},[4005,56565,56566],{"class":4302},"GetName",[4005,56568,7346],{"class":4182},[4005,56570,7004],{"class":4178},[4005,56572,5073],{"class":4182},[4005,56574,56575,56577,56579,56581],{"class":4007,"line":4063},[4005,56576,5260],{"class":4836},[4005,56578,45545],{"class":4174},[4005,56580,3769],{"class":4182},[4005,56582,54174],{"class":4174},[4005,56584,56585],{"class":4007,"line":4069},[4005,56586,4078],{"class":4182},[4005,56588,56589],{"class":4007,"line":4075},[4005,56590,4036],{"emptyLinePlaceholder":4035},[4005,56592,56593],{"class":4007,"line":4081},[4005,56594,56595],{"class":4190},"\u002F\u002F ✅ Всі ці виклики валідні:\n",[4005,56597,56598,56600,56602,56604,56606,56608,56610,56612],{"class":4007,"line":4086},[4005,56599,20793],{"class":4174},[4005,56601,4314],{"class":4182},[4005,56603,20798],{"class":4178},[4005,56605,16268],{"class":4182},[4005,56607,20803],{"class":4174},[4005,56609,11172],{"class":4182},[4005,56611,15780],{"class":4330},[4005,56613,4078],{"class":4182},[4005,56615,56616,56618,56620,56622,56624,56626,56628],{"class":4007,"line":4092},[4005,56617,20793],{"class":4174},[4005,56619,3769],{"class":4182},[4005,56621,56522],{"class":4302},[4005,56623,4611],{"class":4182},[4005,56625,38456],{"class":4330},[4005,56627,10036],{"class":4182},[4005,56629,56630],{"class":4190},"\u002F\u002F Go автоматично: (&user).SetName(\"Марія\")\n",[4005,56632,56633],{"class":4007,"line":4098},[4005,56634,4036],{"emptyLinePlaceholder":4035},[4005,56636,56637,56639,56641,56643,56645,56647,56649,56651],{"class":4007,"line":4104},[4005,56638,52146],{"class":4174},[4005,56640,44159],{"class":4182},[4005,56642,20798],{"class":4178},[4005,56644,16268],{"class":4182},[4005,56646,20803],{"class":4174},[4005,56648,11172],{"class":4182},[4005,56650,37965],{"class":4330},[4005,56652,4078],{"class":4182},[4005,56654,56655,56657,56659,56661,56663,56665,56667],{"class":4007,"line":4110},[4005,56656,4650],{"class":4174},[4005,56658,4314],{"class":4182},[4005,56660,52146],{"class":4174},[4005,56662,3769],{"class":4182},[4005,56664,56566],{"class":4302},[4005,56666,5491],{"class":4182},[4005,56668,56669],{"class":4190},"\u002F\u002F Go автоматично: (*userPtr).GetName()\n",[3908,56671,56672],{},[3871,56673,56674],{},"Що робить Go за вас:",[5991,56676,56677,56690],{},[5994,56678,56679],{},[5997,56680,56681,56684,56687],{},[6000,56682,56683],{},"Ситуація",[6000,56685,56686],{},"Що пишете",[6000,56688,56689],{},"Що виконує Go",[6010,56691,56692,56707],{},[5997,56693,56694,56697,56702],{},[6015,56695,56696],{},"Value, метод pointer",[6015,56698,56699],{},[3753,56700,56701],{},"user.SetName()",[6015,56703,56704],{},[3753,56705,56706],{},"(&user).SetName()",[5997,56708,56709,56712,56717],{},[6015,56710,56711],{},"Pointer, метод value",[6015,56713,56714],{},[3753,56715,56716],{},"userPtr.GetName()",[6015,56718,56719],{},[3753,56720,56721],{},"(*userPtr).GetName()",[4484,56723,56724,56735],{"icon":4750},[3908,56725,56726,56728,56729,56731,56732,5831],{},[3871,56727,28785],{}," автоматичне взяття адреси ",[3753,56730,23002],{}," працює лише для ",[3871,56733,56734],{},"змінних",[3984,56736,56738],{"className":4162,"code":56737,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ✅ OK — user це змінна\nuser := User{Name: \"Олег\"}\nuser.SetName(\"Марія\")  \u002F\u002F Go може взяти &user\n\n\u002F\u002F ❌ Помилка — літерал не має адреси\nUser{Name: \"Олег\"}.SetName(\"Марія\")  \u002F\u002F cannot take address of User{...}\n\n\u002F\u002F ✅ Рішення — зберегти в змінну або явно створити покажчик\n(&User{Name: \"Олег\"}).SetName(\"Марія\")\n",[3753,56739,56740,56745,56763,56780,56784,56789,56815,56819,56824],{"__ignoreMap":3992},[4005,56741,56742],{"class":4007,"line":4008},[4005,56743,56744],{"class":4190},"\u002F\u002F ✅ OK — user це змінна\n",[4005,56746,56747,56749,56751,56753,56755,56757,56759,56761],{"class":4007,"line":4014},[4005,56748,20793],{"class":4174},[4005,56750,4314],{"class":4182},[4005,56752,20798],{"class":4178},[4005,56754,16268],{"class":4182},[4005,56756,20803],{"class":4174},[4005,56758,11172],{"class":4182},[4005,56760,15780],{"class":4330},[4005,56762,4078],{"class":4182},[4005,56764,56765,56767,56769,56771,56773,56775,56777],{"class":4007,"line":4020},[4005,56766,20793],{"class":4174},[4005,56768,3769],{"class":4182},[4005,56770,56522],{"class":4302},[4005,56772,4611],{"class":4182},[4005,56774,38456],{"class":4330},[4005,56776,5196],{"class":4182},[4005,56778,56779],{"class":4190},"\u002F\u002F Go може взяти &user\n",[4005,56781,56782],{"class":4007,"line":4026},[4005,56783,4036],{"emptyLinePlaceholder":4035},[4005,56785,56786],{"class":4007,"line":4032},[4005,56787,56788],{"class":4190},"\u002F\u002F ❌ Помилка — літерал не має адреси\n",[4005,56790,56791,56793,56795,56797,56799,56801,56804,56806,56808,56810,56812],{"class":4007,"line":4039},[4005,56792,20798],{"class":4178},[4005,56794,16268],{"class":4182},[4005,56796,20803],{"class":4174},[4005,56798,11172],{"class":4182},[4005,56800,15780],{"class":4330},[4005,56802,56803],{"class":4182},"}.",[4005,56805,56522],{"class":4302},[4005,56807,4611],{"class":4182},[4005,56809,38456],{"class":4330},[4005,56811,5196],{"class":4182},[4005,56813,56814],{"class":4190},"\u002F\u002F cannot take address of User{...}\n",[4005,56816,56817],{"class":4007,"line":4045},[4005,56818,4036],{"emptyLinePlaceholder":4035},[4005,56820,56821],{"class":4007,"line":4051},[4005,56822,56823],{"class":4190},"\u002F\u002F ✅ Рішення — зберегти в змінну або явно створити покажчик\n",[4005,56825,56826,56828,56830,56832,56834,56836,56838,56841,56843,56845,56847],{"class":4007,"line":4057},[4005,56827,32446],{"class":4182},[4005,56829,20798],{"class":4178},[4005,56831,16268],{"class":4182},[4005,56833,20803],{"class":4174},[4005,56835,11172],{"class":4182},[4005,56837,15780],{"class":4330},[4005,56839,56840],{"class":4182},"}).",[4005,56842,56522],{"class":4302},[4005,56844,4611],{"class":4182},[4005,56846,38456],{"class":4330},[4005,56848,4482],{"class":4182},[9014,56850,56852],{"id":56851},"золоте-правило-узгодженість-receivers","Золоте правило: узгодженість receivers",[3908,56854,56855,56857,56858,3769],{},[3871,56856,53977],{}," якщо хоч один метод типу має pointer receiver, ",[3871,56859,56860],{},"всі методи повинні мати pointer receiver",[12533,56862,56863,57034],{},[12536,56864,56867,57029],{"icon":56865,"label":56866},"i-lucide-x-circle","❌ Погано — змішування",[3984,56868,56870],{"className":4162,"code":56869,"language":4164,"meta":3992,"style":3992},"type User struct {\n    Name  string\n    Email string\n}\n\n\u002F\u002F Value receiver\nfunc (u User) GetName() string {\n    return u.Name\n}\n\n\u002F\u002F Pointer receiver\nfunc (u *User) SetEmail(email string) {\n    u.Email = email\n}\n\n\u002F\u002F Value receiver знову\nfunc (u User) Validate() error {\n    \u002F\u002F ...\n}\n",[3753,56871,56872,56882,56888,56894,56898,56902,56907,56927,56937,56941,56945,56950,56975,56988,56992,56996,57001,57021,57025],{"__ignoreMap":3992},[4005,56873,56874,56876,56878,56880],{"class":4007,"line":4008},[4005,56875,4809],{"class":4171},[4005,56877,20760],{"class":4178},[4005,56879,10957],{"class":4171},[4005,56881,5073],{"class":4182},[4005,56883,56884,56886],{"class":4007,"line":4014},[4005,56885,20769],{"class":4174},[4005,56887,49536],{"class":4178},[4005,56889,56890,56892],{"class":4007,"line":4020},[4005,56891,4931],{"class":4174},[4005,56893,20772],{"class":4178},[4005,56895,56896],{"class":4007,"line":4026},[4005,56897,4078],{"class":4182},[4005,56899,56900],{"class":4007,"line":4032},[4005,56901,4036],{"emptyLinePlaceholder":4035},[4005,56903,56904],{"class":4007,"line":4039},[4005,56905,56906],{"class":4190},"\u002F\u002F Value receiver\n",[4005,56908,56909,56911,56913,56915,56917,56919,56921,56923,56925],{"class":4007,"line":4045},[4005,56910,4299],{"class":4171},[4005,56912,4761],{"class":4182},[4005,56914,48277],{"class":4174},[4005,56916,20798],{"class":4178},[4005,56918,4498],{"class":4182},[4005,56920,56566],{"class":4302},[4005,56922,7346],{"class":4182},[4005,56924,7004],{"class":4178},[4005,56926,5073],{"class":4182},[4005,56928,56929,56931,56933,56935],{"class":4007,"line":4051},[4005,56930,5260],{"class":4836},[4005,56932,45545],{"class":4174},[4005,56934,3769],{"class":4182},[4005,56936,54174],{"class":4174},[4005,56938,56939],{"class":4007,"line":4057},[4005,56940,4078],{"class":4182},[4005,56942,56943],{"class":4007,"line":4063},[4005,56944,4036],{"emptyLinePlaceholder":4035},[4005,56946,56947],{"class":4007,"line":4069},[4005,56948,56949],{"class":4190},"\u002F\u002F Pointer receiver\n",[4005,56951,56952,56954,56956,56958,56960,56962,56964,56967,56969,56971,56973],{"class":4007,"line":4075},[4005,56953,4299],{"class":4171},[4005,56955,4761],{"class":4182},[4005,56957,48277],{"class":4174},[4005,56959,8128],{"class":4182},[4005,56961,20798],{"class":4178},[4005,56963,4498],{"class":4182},[4005,56965,56966],{"class":4302},"SetEmail",[4005,56968,4611],{"class":4182},[4005,56970,13913],{"class":4174},[4005,56972,4237],{"class":4178},[4005,56974,12789],{"class":4182},[4005,56976,56977,56979,56981,56983,56985],{"class":4007,"line":4081},[4005,56978,45590],{"class":4174},[4005,56980,3769],{"class":4182},[4005,56982,56258],{"class":4174},[4005,56984,4183],{"class":4182},[4005,56986,56987],{"class":4174},"email\n",[4005,56989,56990],{"class":4007,"line":4086},[4005,56991,4078],{"class":4182},[4005,56993,56994],{"class":4007,"line":4092},[4005,56995,4036],{"emptyLinePlaceholder":4035},[4005,56997,56998],{"class":4007,"line":4098},[4005,56999,57000],{"class":4190},"\u002F\u002F Value receiver знову\n",[4005,57002,57003,57005,57007,57009,57011,57013,57015,57017,57019],{"class":4007,"line":4104},[4005,57004,4299],{"class":4171},[4005,57006,4761],{"class":4182},[4005,57008,48277],{"class":4174},[4005,57010,20798],{"class":4178},[4005,57012,4498],{"class":4182},[4005,57014,56293],{"class":4302},[4005,57016,7346],{"class":4182},[4005,57018,3857],{"class":4178},[4005,57020,5073],{"class":4182},[4005,57022,57023],{"class":4007,"line":4110},[4005,57024,13723],{"class":4190},[4005,57026,57027],{"class":4007,"line":4937},[4005,57028,4078],{"class":4182},[3908,57030,57031,57033],{},[3871,57032,52557],{}," незрозуміло, чому одні методи змінюють, а інші ні. Заплутана логіка.",[12536,57035,57037,57191,57195],{"icon":52803,"label":57036},"✅ Добре — все pointer",[3984,57038,57040],{"className":4162,"code":57039,"language":4164,"meta":3992,"style":3992},"type User struct {\n    Name  string\n    Email string\n}\n\n\u002F\u002F Всі pointer receivers\nfunc (u *User) GetName() string {\n    return u.Name\n}\n\nfunc (u *User) SetEmail(email string) {\n    u.Email = email\n}\n\nfunc (u *User) Validate() error {\n    \u002F\u002F ...\n}\n",[3753,57041,57042,57052,57058,57064,57068,57072,57077,57099,57109,57113,57117,57141,57153,57157,57161,57183,57187],{"__ignoreMap":3992},[4005,57043,57044,57046,57048,57050],{"class":4007,"line":4008},[4005,57045,4809],{"class":4171},[4005,57047,20760],{"class":4178},[4005,57049,10957],{"class":4171},[4005,57051,5073],{"class":4182},[4005,57053,57054,57056],{"class":4007,"line":4014},[4005,57055,20769],{"class":4174},[4005,57057,49536],{"class":4178},[4005,57059,57060,57062],{"class":4007,"line":4020},[4005,57061,4931],{"class":4174},[4005,57063,20772],{"class":4178},[4005,57065,57066],{"class":4007,"line":4026},[4005,57067,4078],{"class":4182},[4005,57069,57070],{"class":4007,"line":4032},[4005,57071,4036],{"emptyLinePlaceholder":4035},[4005,57073,57074],{"class":4007,"line":4039},[4005,57075,57076],{"class":4190},"\u002F\u002F Всі pointer receivers\n",[4005,57078,57079,57081,57083,57085,57087,57089,57091,57093,57095,57097],{"class":4007,"line":4045},[4005,57080,4299],{"class":4171},[4005,57082,4761],{"class":4182},[4005,57084,48277],{"class":4174},[4005,57086,8128],{"class":4182},[4005,57088,20798],{"class":4178},[4005,57090,4498],{"class":4182},[4005,57092,56566],{"class":4302},[4005,57094,7346],{"class":4182},[4005,57096,7004],{"class":4178},[4005,57098,5073],{"class":4182},[4005,57100,57101,57103,57105,57107],{"class":4007,"line":4051},[4005,57102,5260],{"class":4836},[4005,57104,45545],{"class":4174},[4005,57106,3769],{"class":4182},[4005,57108,54174],{"class":4174},[4005,57110,57111],{"class":4007,"line":4057},[4005,57112,4078],{"class":4182},[4005,57114,57115],{"class":4007,"line":4063},[4005,57116,4036],{"emptyLinePlaceholder":4035},[4005,57118,57119,57121,57123,57125,57127,57129,57131,57133,57135,57137,57139],{"class":4007,"line":4069},[4005,57120,4299],{"class":4171},[4005,57122,4761],{"class":4182},[4005,57124,48277],{"class":4174},[4005,57126,8128],{"class":4182},[4005,57128,20798],{"class":4178},[4005,57130,4498],{"class":4182},[4005,57132,56966],{"class":4302},[4005,57134,4611],{"class":4182},[4005,57136,13913],{"class":4174},[4005,57138,4237],{"class":4178},[4005,57140,12789],{"class":4182},[4005,57142,57143,57145,57147,57149,57151],{"class":4007,"line":4075},[4005,57144,45590],{"class":4174},[4005,57146,3769],{"class":4182},[4005,57148,56258],{"class":4174},[4005,57150,4183],{"class":4182},[4005,57152,56987],{"class":4174},[4005,57154,57155],{"class":4007,"line":4081},[4005,57156,4078],{"class":4182},[4005,57158,57159],{"class":4007,"line":4086},[4005,57160,4036],{"emptyLinePlaceholder":4035},[4005,57162,57163,57165,57167,57169,57171,57173,57175,57177,57179,57181],{"class":4007,"line":4092},[4005,57164,4299],{"class":4171},[4005,57166,4761],{"class":4182},[4005,57168,48277],{"class":4174},[4005,57170,8128],{"class":4182},[4005,57172,20798],{"class":4178},[4005,57174,4498],{"class":4182},[4005,57176,56293],{"class":4302},[4005,57178,7346],{"class":4182},[4005,57180,3857],{"class":4178},[4005,57182,5073],{"class":4182},[4005,57184,57185],{"class":4007,"line":4098},[4005,57186,13723],{"class":4190},[4005,57188,57189],{"class":4007,"line":4104},[4005,57190,4078],{"class":4182},[3908,57192,57193],{},[3871,57194,13352],{},[3746,57196,57197,57200,57203],{},[3749,57198,57199],{},"Узгоджений API",[3749,57201,57202],{},"Немає копіювання",[3749,57204,57205],{},"Легше підтримувати",[3908,57207,57208,57211,57212,57215],{},[3871,57209,57210],{},"Виняток:"," типи з stdlib іноді змішують (наприклад, ",[3753,57213,57214],{},"time.Time","), але для вашого коду краще дотримуватись узгодженості.",[9014,57217,57219],{"id":57218},"методи-vs-функції-коли-що-використовувати","Методи vs функції: коли що використовувати?",[12533,57221,57222,57374],{},[12536,57223,57224,57355,57360],{"icon":12455,"label":48},[3984,57225,57227],{"className":4162,"code":57226,"language":4164,"meta":3992,"style":3992},"type Rectangle struct {\n    Width, Height float64\n}\n\n\u002F\u002F Метод — логічно належить Rectangle\nfunc (r Rectangle) Area() float64 {\n    return r.Width * r.Height\n}\n\n\u002F\u002F Використання\nrect := Rectangle{Width: 10, Height: 5}\narea := rect.Area()  \u002F\u002F Читається як \"площа прямокутника\"\n",[3753,57228,57229,57239,57249,57253,57257,57262,57282,57300,57304,57308,57312,57338],{"__ignoreMap":3992},[4005,57230,57231,57233,57235,57237],{"class":4007,"line":4008},[4005,57232,4809],{"class":4171},[4005,57234,54598],{"class":4178},[4005,57236,10957],{"class":4171},[4005,57238,5073],{"class":4182},[4005,57240,57241,57243,57245,57247],{"class":4007,"line":4014},[4005,57242,54607],{"class":4174},[4005,57244,3836],{"class":4182},[4005,57246,54730],{"class":4174},[4005,57248,45744],{"class":4178},[4005,57250,57251],{"class":4007,"line":4020},[4005,57252,4078],{"class":4182},[4005,57254,57255],{"class":4007,"line":4026},[4005,57256,4036],{"emptyLinePlaceholder":4035},[4005,57258,57259],{"class":4007,"line":4032},[4005,57260,57261],{"class":4190},"\u002F\u002F Метод — логічно належить Rectangle\n",[4005,57263,57264,57266,57268,57270,57272,57274,57276,57278,57280],{"class":4007,"line":4039},[4005,57265,4299],{"class":4171},[4005,57267,4761],{"class":4182},[4005,57269,54638],{"class":4174},[4005,57271,54641],{"class":4178},[4005,57273,4498],{"class":4182},[4005,57275,54646],{"class":4302},[4005,57277,7346],{"class":4182},[4005,57279,8437],{"class":4178},[4005,57281,5073],{"class":4182},[4005,57283,57284,57286,57288,57290,57292,57294,57296,57298],{"class":4007,"line":4045},[4005,57285,5260],{"class":4836},[4005,57287,19952],{"class":4174},[4005,57289,3769],{"class":4182},[4005,57291,54663],{"class":4174},[4005,57293,6735],{"class":4182},[4005,57295,12146],{"class":4174},[4005,57297,3769],{"class":4182},[4005,57299,54672],{"class":4174},[4005,57301,57302],{"class":4007,"line":4051},[4005,57303,4078],{"class":4182},[4005,57305,57306],{"class":4007,"line":4057},[4005,57307,4036],{"emptyLinePlaceholder":4035},[4005,57309,57310],{"class":4007,"line":4063},[4005,57311,54187],{"class":4190},[4005,57313,57314,57316,57318,57320,57322,57324,57326,57328,57330,57332,57334,57336],{"class":4007,"line":4069},[4005,57315,55059],{"class":4174},[4005,57317,4314],{"class":4182},[4005,57319,54641],{"class":4178},[4005,57321,16268],{"class":4182},[4005,57323,54663],{"class":4174},[4005,57325,11172],{"class":4182},[4005,57327,4631],{"class":4186},[4005,57329,3836],{"class":4182},[4005,57331,54730],{"class":4174},[4005,57333,11172],{"class":4182},[4005,57335,5869],{"class":4186},[4005,57337,4078],{"class":4182},[4005,57339,57340,57342,57344,57346,57348,57350,57352],{"class":4007,"line":4075},[4005,57341,35112],{"class":4174},[4005,57343,4314],{"class":4182},[4005,57345,55059],{"class":4174},[4005,57347,3769],{"class":4182},[4005,57349,54646],{"class":4302},[4005,57351,5491],{"class":4182},[4005,57353,57354],{"class":4190},"\u002F\u002F Читається як \"площа прямокутника\"\n",[3908,57356,57357],{},[3871,57358,57359],{},"Використовуйте методи коли:",[3746,57361,57362,57365,57371],{},[3749,57363,57364],{},"Операція логічно належить типу",[3749,57366,57367,57368],{},"Потрібна ланцюгова нотація: ",[3753,57369,57370],{},"user.Validate().Save()",[3749,57372,57373],{},"Тип має стан, який змінюється",[12536,57375,57378,57507,57512],{"icon":57376,"label":57377},"i-lucide-function-square","Функції",[3984,57379,57381],{"className":4162,"code":57380,"language":4164,"meta":3992,"style":3992},"type Rectangle struct {\n    Width, Height float64\n}\n\n\u002F\u002F Функція — працює з двома прямокутниками\nfunc CombineArea(r1, r2 Rectangle) float64 {\n    return r1.Width*r1.Height + r2.Width*r2.Height\n}\n\n\u002F\u002F Використання\narea := CombineArea(rect1, rect2)\n",[3753,57382,57383,57393,57403,57407,57411,57416,57441,57476,57480,57484,57488],{"__ignoreMap":3992},[4005,57384,57385,57387,57389,57391],{"class":4007,"line":4008},[4005,57386,4809],{"class":4171},[4005,57388,54598],{"class":4178},[4005,57390,10957],{"class":4171},[4005,57392,5073],{"class":4182},[4005,57394,57395,57397,57399,57401],{"class":4007,"line":4014},[4005,57396,54607],{"class":4174},[4005,57398,3836],{"class":4182},[4005,57400,54730],{"class":4174},[4005,57402,45744],{"class":4178},[4005,57404,57405],{"class":4007,"line":4020},[4005,57406,4078],{"class":4182},[4005,57408,57409],{"class":4007,"line":4026},[4005,57410,4036],{"emptyLinePlaceholder":4035},[4005,57412,57413],{"class":4007,"line":4032},[4005,57414,57415],{"class":4190},"\u002F\u002F Функція — працює з двома прямокутниками\n",[4005,57417,57418,57420,57423,57425,57428,57430,57433,57435,57437,57439],{"class":4007,"line":4039},[4005,57419,4299],{"class":4171},[4005,57421,57422],{"class":4302}," CombineArea",[4005,57424,4611],{"class":4182},[4005,57426,57427],{"class":4174},"r1",[4005,57429,3836],{"class":4182},[4005,57431,57432],{"class":4174},"r2",[4005,57434,54598],{"class":4178},[4005,57436,4498],{"class":4182},[4005,57438,8437],{"class":4178},[4005,57440,5073],{"class":4182},[4005,57442,57443,57445,57448,57450,57452,57454,57456,57458,57460,57462,57464,57466,57468,57470,57472,57474],{"class":4007,"line":4045},[4005,57444,5260],{"class":4836},[4005,57446,57447],{"class":4174}," r1",[4005,57449,3769],{"class":4182},[4005,57451,54663],{"class":4174},[4005,57453,8128],{"class":4182},[4005,57455,57427],{"class":4174},[4005,57457,3769],{"class":4182},[4005,57459,54730],{"class":4174},[4005,57461,6289],{"class":4182},[4005,57463,57432],{"class":4174},[4005,57465,3769],{"class":4182},[4005,57467,54663],{"class":4174},[4005,57469,8128],{"class":4182},[4005,57471,57432],{"class":4174},[4005,57473,3769],{"class":4182},[4005,57475,54672],{"class":4174},[4005,57477,57478],{"class":4007,"line":4051},[4005,57479,4078],{"class":4182},[4005,57481,57482],{"class":4007,"line":4057},[4005,57483,4036],{"emptyLinePlaceholder":4035},[4005,57485,57486],{"class":4007,"line":4063},[4005,57487,54187],{"class":4190},[4005,57489,57490,57492,57494,57497,57499,57501,57503,57505],{"class":4007,"line":4069},[4005,57491,35112],{"class":4174},[4005,57493,4314],{"class":4182},[4005,57495,57496],{"class":4302},"CombineArea",[4005,57498,4611],{"class":4182},[4005,57500,54892],{"class":4174},[4005,57502,3836],{"class":4182},[4005,57504,54960],{"class":4174},[4005,57506,4482],{"class":4182},[3908,57508,57509],{},[3871,57510,57511],{},"Використовуйте функції коли:",[3746,57513,57514,57517,57520],{},[3749,57515,57516],{},"Операція працює з кількома типами",[3749,57518,57519],{},"Немає природного \"власника\" операції",[3749,57521,57522],{},"Утилітарні операції (парсинг, валідація сторонніх даних)",[3900,57524],{},[3976,57526,57528],{"id":57527},"частина-5-композиція-замість-наслідування","Частина 5: Композиція замість наслідування",[9014,57530,57532],{"id":57531},"чому-в-go-немає-наслідування","Чому в Go немає наслідування?",[3908,57534,57535,57536,4761,57539,57542],{},"У мові Go ",[3871,57537,57538],{},"свідомо відмовились від класичного наслідування",[3753,57540,57541],{},"class Child extends Parent","). Це дизайнерське рішення, яке спрощує код і уникає проблем складних ієрархій класів.",[3908,57544,57545],{},[3871,57546,57547],{},"Проблеми наслідування (які вирішує Go):",[12533,57549,57550,57815],{},[12536,57551,57553,57793,57798],{"icon":12743,"label":57552},"Java — проблеми наслідування",[3984,57554,57556],{"className":12746,"code":57555,"language":12748,"meta":3992,"style":3992},"\u002F\u002F Проблема 1: Жорстка ієрархія\nclass Animal {\n    void eat() { }\n}\n\nclass Bird extends Animal {\n    void fly() { }\n}\n\nclass Penguin extends Bird {\n    \u002F\u002F ❌ Проблема: пінгвін не літає, але успадкував fly()!\n    @Override\n    void fly() {\n        throw new UnsupportedOperationException(\"Пінгвіни не літають!\");\n    }\n}\n\n\u002F\u002F Проблема 2: Множинне наслідування заборонено\nclass Duck extends Animal, Swimmable {  \u002F\u002F ❌ Помилка компіляції!\n    \u002F\u002F Не можна успадкувати від двох класів\n}\n\n\u002F\u002F Проблема 3: Diamond Problem\nclass A { void method() { } }\nclass B extends A { }\nclass C extends A { }\nclass D extends B, C { }  \u002F\u002F Від кого успадкувати method()?\n",[3753,57557,57558,57563,57572,57583,57587,57591,57605,57614,57618,57622,57635,57640,57648,57656,57674,57678,57682,57686,57691,57711,57716,57720,57724,57729,57746,57759,57772],{"__ignoreMap":3992},[4005,57559,57560],{"class":4007,"line":4008},[4005,57561,57562],{"class":4190},"\u002F\u002F Проблема 1: Жорстка ієрархія\n",[4005,57564,57565,57567,57570],{"class":4007,"line":4014},[4005,57566,44883],{"class":4171},[4005,57568,57569],{"class":4178}," Animal",[4005,57571,5073],{"class":4182},[4005,57573,57574,57577,57580],{"class":4007,"line":4020},[4005,57575,57576],{"class":4178},"    void",[4005,57578,57579],{"class":4302}," eat",[4005,57581,57582],{"class":4182},"() { }\n",[4005,57584,57585],{"class":4007,"line":4026},[4005,57586,4078],{"class":4182},[4005,57588,57589],{"class":4007,"line":4032},[4005,57590,4036],{"emptyLinePlaceholder":4035},[4005,57592,57593,57595,57598,57601,57603],{"class":4007,"line":4039},[4005,57594,44883],{"class":4171},[4005,57596,57597],{"class":4178}," Bird",[4005,57599,57600],{"class":4171}," extends",[4005,57602,57569],{"class":4178},[4005,57604,5073],{"class":4182},[4005,57606,57607,57609,57612],{"class":4007,"line":4045},[4005,57608,57576],{"class":4178},[4005,57610,57611],{"class":4302}," fly",[4005,57613,57582],{"class":4182},[4005,57615,57616],{"class":4007,"line":4051},[4005,57617,4078],{"class":4182},[4005,57619,57620],{"class":4007,"line":4057},[4005,57621,4036],{"emptyLinePlaceholder":4035},[4005,57623,57624,57626,57629,57631,57633],{"class":4007,"line":4063},[4005,57625,44883],{"class":4171},[4005,57627,57628],{"class":4178}," Penguin",[4005,57630,57600],{"class":4171},[4005,57632,57597],{"class":4178},[4005,57634,5073],{"class":4182},[4005,57636,57637],{"class":4007,"line":4069},[4005,57638,57639],{"class":4190},"    \u002F\u002F ❌ Проблема: пінгвін не літає, але успадкував fly()!\n",[4005,57641,57642,57645],{"class":4007,"line":4075},[4005,57643,57644],{"class":4182},"    @",[4005,57646,57647],{"class":4178},"Override\n",[4005,57649,57650,57652,57654],{"class":4007,"line":4081},[4005,57651,57576],{"class":4178},[4005,57653,57611],{"class":4302},[4005,57655,4306],{"class":4182},[4005,57657,57658,57661,57664,57667,57669,57672],{"class":4007,"line":4086},[4005,57659,57660],{"class":4836},"        throw",[4005,57662,57663],{"class":4836}," new",[4005,57665,57666],{"class":4302}," UnsupportedOperationException",[4005,57668,4611],{"class":4182},[4005,57670,57671],{"class":4330},"\"Пінгвіни не літають!\"",[4005,57673,12932],{"class":4182},[4005,57675,57676],{"class":4007,"line":4092},[4005,57677,5127],{"class":4182},[4005,57679,57680],{"class":4007,"line":4098},[4005,57681,4078],{"class":4182},[4005,57683,57684],{"class":4007,"line":4104},[4005,57685,4036],{"emptyLinePlaceholder":4035},[4005,57687,57688],{"class":4007,"line":4110},[4005,57689,57690],{"class":4190},"\u002F\u002F Проблема 2: Множинне наслідування заборонено\n",[4005,57692,57693,57695,57698,57700,57702,57704,57707,57709],{"class":4007,"line":4937},[4005,57694,44883],{"class":4171},[4005,57696,57697],{"class":4178}," Duck",[4005,57699,57600],{"class":4171},[4005,57701,57569],{"class":4178},[4005,57703,3836],{"class":4182},[4005,57705,57706],{"class":4178},"Swimmable",[4005,57708,13715],{"class":4182},[4005,57710,45105],{"class":4190},[4005,57712,57713],{"class":4007,"line":4942},[4005,57714,57715],{"class":4190},"    \u002F\u002F Не можна успадкувати від двох класів\n",[4005,57717,57718],{"class":4007,"line":4947},[4005,57719,4078],{"class":4182},[4005,57721,57722],{"class":4007,"line":4953},[4005,57723,4036],{"emptyLinePlaceholder":4035},[4005,57725,57726],{"class":4007,"line":4960},[4005,57727,57728],{"class":4190},"\u002F\u002F Проблема 3: Diamond Problem\n",[4005,57730,57731,57733,57736,57738,57740,57743],{"class":4007,"line":4973},[4005,57732,44883],{"class":4171},[4005,57734,57735],{"class":4178}," A",[4005,57737,35469],{"class":4182},[4005,57739,48917],{"class":4178},[4005,57741,57742],{"class":4302}," method",[4005,57744,57745],{"class":4182},"() { } }\n",[4005,57747,57748,57750,57753,57755,57757],{"class":4007,"line":4985},[4005,57749,44883],{"class":4171},[4005,57751,57752],{"class":4178}," B",[4005,57754,57600],{"class":4171},[4005,57756,57735],{"class":4178},[4005,57758,46216],{"class":4182},[4005,57760,57761,57763,57766,57768,57770],{"class":4007,"line":7813},[4005,57762,44883],{"class":4171},[4005,57764,57765],{"class":4178}," C",[4005,57767,57600],{"class":4171},[4005,57769,57735],{"class":4178},[4005,57771,46216],{"class":4182},[4005,57773,57774,57776,57779,57781,57783,57785,57787,57790],{"class":4007,"line":7819},[4005,57775,44883],{"class":4171},[4005,57777,57778],{"class":4178}," D",[4005,57780,57600],{"class":4171},[4005,57782,57752],{"class":4178},[4005,57784,3836],{"class":4182},[4005,57786,41702],{"class":4178},[4005,57788,57789],{"class":4182}," { }  ",[4005,57791,57792],{"class":4190},"\u002F\u002F Від кого успадкувати method()?\n",[3908,57794,57795],{},[3871,57796,57797],{},"Проблеми:",[3746,57799,57800,57803,57806,57809,57812],{},[3749,57801,57802],{},"Жорстка ієрархія (важко змінити базовий клас)",[3749,57804,57805],{},"Порушення принципу підстановки Лісков",[3749,57807,57808],{},"Неможливе множинне наслідування",[3749,57810,57811],{},"Diamond problem",[3749,57813,57814],{},"Залежність від імплементації батьківського класу",[12536,57816,57818,58118,58122],{"icon":12538,"label":57817},"Go — композиція",[3984,57819,57821],{"className":4162,"code":57820,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Рішення: Композиція через інтерфейси та embedding\ntype Eater interface {\n    Eat()\n}\n\ntype Flyer interface {\n    Fly()\n}\n\ntype Swimmer interface {\n    Swim()\n}\n\n\u002F\u002F Пінгвін реалізує лише те, що йому потрібно\ntype Penguin struct {\n    Name string\n}\n\nfunc (p Penguin) Eat() {\n    fmt.Println(p.Name, \"їсть рибу\")\n}\n\nfunc (p Penguin) Swim() {\n    fmt.Println(p.Name, \"пливе\")\n}\n\u002F\u002F Метод Fly() просто не реалізовано — і це OK!\n\n\u002F\u002F Качка реалізує всі три інтерфейси\ntype Duck struct {\n    Name string\n}\n\nfunc (d Duck) Eat() { }\nfunc (d Duck) Fly() { }\nfunc (d Duck) Swim() { }\n",[3753,57822,57823,57828,57840,57847,57851,57855,57866,57873,57877,57881,57892,57899,57903,57907,57912,57922,57928,57932,57936,57954,57977,57981,57985,58002,58025,58029,58034,58038,58043,58053,58059,58063,58067,58085,58102],{"__ignoreMap":3992},[4005,57824,57825],{"class":4007,"line":4008},[4005,57826,57827],{"class":4190},"\u002F\u002F Рішення: Композиція через інтерфейси та embedding\n",[4005,57829,57830,57832,57835,57838],{"class":4007,"line":4014},[4005,57831,4809],{"class":4171},[4005,57833,57834],{"class":4178}," Eater",[4005,57836,57837],{"class":4171}," interface",[4005,57839,5073],{"class":4182},[4005,57841,57842,57845],{"class":4007,"line":4020},[4005,57843,57844],{"class":4302},"    Eat",[4005,57846,5143],{"class":4182},[4005,57848,57849],{"class":4007,"line":4026},[4005,57850,4078],{"class":4182},[4005,57852,57853],{"class":4007,"line":4032},[4005,57854,4036],{"emptyLinePlaceholder":4035},[4005,57856,57857,57859,57862,57864],{"class":4007,"line":4039},[4005,57858,4809],{"class":4171},[4005,57860,57861],{"class":4178}," Flyer",[4005,57863,57837],{"class":4171},[4005,57865,5073],{"class":4182},[4005,57867,57868,57871],{"class":4007,"line":4045},[4005,57869,57870],{"class":4302},"    Fly",[4005,57872,5143],{"class":4182},[4005,57874,57875],{"class":4007,"line":4051},[4005,57876,4078],{"class":4182},[4005,57878,57879],{"class":4007,"line":4057},[4005,57880,4036],{"emptyLinePlaceholder":4035},[4005,57882,57883,57885,57888,57890],{"class":4007,"line":4063},[4005,57884,4809],{"class":4171},[4005,57886,57887],{"class":4178}," Swimmer",[4005,57889,57837],{"class":4171},[4005,57891,5073],{"class":4182},[4005,57893,57894,57897],{"class":4007,"line":4069},[4005,57895,57896],{"class":4302},"    Swim",[4005,57898,5143],{"class":4182},[4005,57900,57901],{"class":4007,"line":4075},[4005,57902,4078],{"class":4182},[4005,57904,57905],{"class":4007,"line":4081},[4005,57906,4036],{"emptyLinePlaceholder":4035},[4005,57908,57909],{"class":4007,"line":4086},[4005,57910,57911],{"class":4190},"\u002F\u002F Пінгвін реалізує лише те, що йому потрібно\n",[4005,57913,57914,57916,57918,57920],{"class":4007,"line":4092},[4005,57915,4809],{"class":4171},[4005,57917,57628],{"class":4178},[4005,57919,10957],{"class":4171},[4005,57921,5073],{"class":4182},[4005,57923,57924,57926],{"class":4007,"line":4098},[4005,57925,20769],{"class":4174},[4005,57927,20772],{"class":4178},[4005,57929,57930],{"class":4007,"line":4104},[4005,57931,4078],{"class":4182},[4005,57933,57934],{"class":4007,"line":4110},[4005,57935,4036],{"emptyLinePlaceholder":4035},[4005,57937,57938,57940,57942,57944,57947,57949,57952],{"class":4007,"line":4937},[4005,57939,4299],{"class":4171},[4005,57941,4761],{"class":4182},[4005,57943,55980],{"class":4174},[4005,57945,57946],{"class":4178},"Penguin",[4005,57948,4498],{"class":4182},[4005,57950,57951],{"class":4302},"Eat",[4005,57953,4306],{"class":4182},[4005,57955,57956,57958,57960,57962,57964,57966,57968,57970,57972,57975],{"class":4007,"line":4942},[4005,57957,5370],{"class":4174},[4005,57959,3769],{"class":4182},[4005,57961,5348],{"class":4302},[4005,57963,4611],{"class":4182},[4005,57965,3908],{"class":4174},[4005,57967,3769],{"class":4182},[4005,57969,20803],{"class":4174},[4005,57971,3836],{"class":4182},[4005,57973,57974],{"class":4330},"\"їсть рибу\"",[4005,57976,4482],{"class":4182},[4005,57978,57979],{"class":4007,"line":4947},[4005,57980,4078],{"class":4182},[4005,57982,57983],{"class":4007,"line":4953},[4005,57984,4036],{"emptyLinePlaceholder":4035},[4005,57986,57987,57989,57991,57993,57995,57997,58000],{"class":4007,"line":4960},[4005,57988,4299],{"class":4171},[4005,57990,4761],{"class":4182},[4005,57992,55980],{"class":4174},[4005,57994,57946],{"class":4178},[4005,57996,4498],{"class":4182},[4005,57998,57999],{"class":4302},"Swim",[4005,58001,4306],{"class":4182},[4005,58003,58004,58006,58008,58010,58012,58014,58016,58018,58020,58023],{"class":4007,"line":4973},[4005,58005,5370],{"class":4174},[4005,58007,3769],{"class":4182},[4005,58009,5348],{"class":4302},[4005,58011,4611],{"class":4182},[4005,58013,3908],{"class":4174},[4005,58015,3769],{"class":4182},[4005,58017,20803],{"class":4174},[4005,58019,3836],{"class":4182},[4005,58021,58022],{"class":4330},"\"пливе\"",[4005,58024,4482],{"class":4182},[4005,58026,58027],{"class":4007,"line":4985},[4005,58028,4078],{"class":4182},[4005,58030,58031],{"class":4007,"line":7813},[4005,58032,58033],{"class":4190},"\u002F\u002F Метод Fly() просто не реалізовано — і це OK!\n",[4005,58035,58036],{"class":4007,"line":7819},[4005,58037,4036],{"emptyLinePlaceholder":4035},[4005,58039,58040],{"class":4007,"line":7826},[4005,58041,58042],{"class":4190},"\u002F\u002F Качка реалізує всі три інтерфейси\n",[4005,58044,58045,58047,58049,58051],{"class":4007,"line":7839},[4005,58046,4809],{"class":4171},[4005,58048,57697],{"class":4178},[4005,58050,10957],{"class":4171},[4005,58052,5073],{"class":4182},[4005,58054,58055,58057],{"class":4007,"line":7864},[4005,58056,20769],{"class":4174},[4005,58058,20772],{"class":4178},[4005,58060,58061],{"class":4007,"line":7872},[4005,58062,4078],{"class":4182},[4005,58064,58065],{"class":4007,"line":7881},[4005,58066,4036],{"emptyLinePlaceholder":4035},[4005,58068,58069,58071,58073,58076,58079,58081,58083],{"class":4007,"line":7890},[4005,58070,4299],{"class":4171},[4005,58072,4761],{"class":4182},[4005,58074,58075],{"class":4174},"d ",[4005,58077,58078],{"class":4178},"Duck",[4005,58080,4498],{"class":4182},[4005,58082,57951],{"class":4302},[4005,58084,57582],{"class":4182},[4005,58086,58087,58089,58091,58093,58095,58097,58100],{"class":4007,"line":7895},[4005,58088,4299],{"class":4171},[4005,58090,4761],{"class":4182},[4005,58092,58075],{"class":4174},[4005,58094,58078],{"class":4178},[4005,58096,4498],{"class":4182},[4005,58098,58099],{"class":4302},"Fly",[4005,58101,57582],{"class":4182},[4005,58103,58104,58106,58108,58110,58112,58114,58116],{"class":4007,"line":7900},[4005,58105,4299],{"class":4171},[4005,58107,4761],{"class":4182},[4005,58109,58075],{"class":4174},[4005,58111,58078],{"class":4178},[4005,58113,4498],{"class":4182},[4005,58115,57999],{"class":4302},[4005,58117,57582],{"class":4182},[3908,58119,58120],{},[3871,58121,13352],{},[3746,58123,58124,58127,58130,58133],{},[3749,58125,58126],{},"Гнучкість (реалізуєш лише потрібне)",[3749,58128,58129],{},"Немає жорсткої ієрархії",[3749,58131,58132],{},"\"Множинне наслідування\" через інтерфейси",[3749,58134,58135],{},"Явні залежності",[9014,58137,58139],{"id":58138},"що-таке-композиція","Що таке композиція?",[3908,58141,58142,58145],{},[3871,58143,58144],{},"Композиція"," — це коли один тип містить інші типи як поля. Замість \"A є B\" (is-a), ми кажемо \"A має B\" (has-a).",[3908,58147,58148],{},[3871,58149,11878],{},[3746,58151,58152,58162],{},[3749,58153,58154,58157,58158,58161],{},[3871,58155,58156],{},"Наслідування:"," \"Автомобіль ",[3871,58159,58160],{},"є"," транспортний засіб\" (is-a)",[3749,58163,58164,58157,58167,58170],{},[3871,58165,58166],{},"Композиція:",[3871,58168,58169],{},"має"," двигун, колеса, керування\" (has-a)",[3908,58172,58173],{},[3871,58174,58175],{},"Простий приклад:",[3984,58177,58179],{"className":4162,"code":58178,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\n\u002F\u002F Окремі компоненти\ntype Engine struct {\n    Power int  \u002F\u002F Потужність у к.с.\n}\n\nfunc (e Engine) Start() {\n    fmt.Printf(\"Двигун %d к.с. запущено\\n\", e.Power)\n}\n\ntype Wheels struct {\n    Count int\n}\n\nfunc (w Wheels) Roll() {\n    fmt.Printf(\"%d колеса котяться\\n\", w.Count)\n}\n\n\u002F\u002F Автомобіль МІСТИТЬ компоненти (композиція)\ntype Car struct {\n    Brand  string\n    Engine Engine  \u002F\u002F Має двигун\n    Wheels Wheels  \u002F\u002F Має колеса\n}\n\nfunc main() {\n    car := Car{\n        Brand:  \"Toyota\",\n        Engine: Engine{Power: 150},\n        Wheels: Wheels{Count: 4},\n    }\n    \n    fmt.Println(\"Бренд:\", car.Brand)\n    car.Engine.Start()  \u002F\u002F Доступ через поле\n    car.Wheels.Roll()\n}\n",[3753,58180,58181,58187,58191,58197,58201,58206,58217,58227,58231,58235,58253,58286,58290,58294,58305,58312,58316,58320,58339,58370,58374,58378,58383,58394,58401,58411,58421,58425,58429,58437,58449,58461,58481,58500,58504,58508,58533,58550,58564],{"__ignoreMap":3992},[4005,58182,58183,58185],{"class":4007,"line":4008},[4005,58184,5739],{"class":4171},[4005,58186,5742],{"class":4178},[4005,58188,58189],{"class":4007,"line":4014},[4005,58190,4036],{"emptyLinePlaceholder":4035},[4005,58192,58193,58195],{"class":4007,"line":4020},[4005,58194,3917],{"class":4836},[4005,58196,7656],{"class":4330},[4005,58198,58199],{"class":4007,"line":4026},[4005,58200,4036],{"emptyLinePlaceholder":4035},[4005,58202,58203],{"class":4007,"line":4032},[4005,58204,58205],{"class":4190},"\u002F\u002F Окремі компоненти\n",[4005,58207,58208,58210,58213,58215],{"class":4007,"line":4039},[4005,58209,4809],{"class":4171},[4005,58211,58212],{"class":4178}," Engine",[4005,58214,10957],{"class":4171},[4005,58216,5073],{"class":4182},[4005,58218,58219,58222,58224],{"class":4007,"line":4045},[4005,58220,58221],{"class":4174},"    Power",[4005,58223,4224],{"class":4178},[4005,58225,58226],{"class":4190},"  \u002F\u002F Потужність у к.с.\n",[4005,58228,58229],{"class":4007,"line":4051},[4005,58230,4078],{"class":4182},[4005,58232,58233],{"class":4007,"line":4057},[4005,58234,4036],{"emptyLinePlaceholder":4035},[4005,58236,58237,58239,58241,58244,58247,58249,58251],{"class":4007,"line":4063},[4005,58238,4299],{"class":4171},[4005,58240,4761],{"class":4182},[4005,58242,58243],{"class":4174},"e ",[4005,58245,58246],{"class":4178},"Engine",[4005,58248,4498],{"class":4182},[4005,58250,25318],{"class":4302},[4005,58252,4306],{"class":4182},[4005,58254,58255,58257,58259,58261,58263,58266,58268,58271,58273,58275,58277,58279,58281,58284],{"class":4007,"line":4069},[4005,58256,5370],{"class":4174},[4005,58258,3769],{"class":4182},[4005,58260,7945],{"class":4302},[4005,58262,4611],{"class":4182},[4005,58264,58265],{"class":4330},"\"Двигун ",[4005,58267,7959],{"class":4174},[4005,58269,58270],{"class":4330}," к.с. запущено",[4005,58272,7965],{"class":7964},[4005,58274,7968],{"class":4330},[4005,58276,3836],{"class":4182},[4005,58278,24791],{"class":4174},[4005,58280,3769],{"class":4182},[4005,58282,58283],{"class":4174},"Power",[4005,58285,4482],{"class":4182},[4005,58287,58288],{"class":4007,"line":4075},[4005,58289,4078],{"class":4182},[4005,58291,58292],{"class":4007,"line":4081},[4005,58293,4036],{"emptyLinePlaceholder":4035},[4005,58295,58296,58298,58301,58303],{"class":4007,"line":4086},[4005,58297,4809],{"class":4171},[4005,58299,58300],{"class":4178}," Wheels",[4005,58302,10957],{"class":4171},[4005,58304,5073],{"class":4182},[4005,58306,58307,58310],{"class":4007,"line":4092},[4005,58308,58309],{"class":4174},"    Count",[4005,58311,4926],{"class":4178},[4005,58313,58314],{"class":4007,"line":4098},[4005,58315,4078],{"class":4182},[4005,58317,58318],{"class":4007,"line":4104},[4005,58319,4036],{"emptyLinePlaceholder":4035},[4005,58321,58322,58324,58326,58329,58332,58334,58337],{"class":4007,"line":4110},[4005,58323,4299],{"class":4171},[4005,58325,4761],{"class":4182},[4005,58327,58328],{"class":4174},"w ",[4005,58330,58331],{"class":4178},"Wheels",[4005,58333,4498],{"class":4182},[4005,58335,58336],{"class":4302},"Roll",[4005,58338,4306],{"class":4182},[4005,58340,58341,58343,58345,58347,58349,58351,58353,58356,58358,58360,58362,58364,58366,58368],{"class":4007,"line":4937},[4005,58342,5370],{"class":4174},[4005,58344,3769],{"class":4182},[4005,58346,7945],{"class":4302},[4005,58348,4611],{"class":4182},[4005,58350,7968],{"class":4330},[4005,58352,7959],{"class":4174},[4005,58354,58355],{"class":4330}," колеса котяться",[4005,58357,7965],{"class":7964},[4005,58359,7968],{"class":4330},[4005,58361,3836],{"class":4182},[4005,58363,35092],{"class":4174},[4005,58365,3769],{"class":4182},[4005,58367,14081],{"class":4174},[4005,58369,4482],{"class":4182},[4005,58371,58372],{"class":4007,"line":4942},[4005,58373,4078],{"class":4182},[4005,58375,58376],{"class":4007,"line":4947},[4005,58377,4036],{"emptyLinePlaceholder":4035},[4005,58379,58380],{"class":4007,"line":4953},[4005,58381,58382],{"class":4190},"\u002F\u002F Автомобіль МІСТИТЬ компоненти (композиція)\n",[4005,58384,58385,58387,58390,58392],{"class":4007,"line":4960},[4005,58386,4809],{"class":4171},[4005,58388,58389],{"class":4178}," Car",[4005,58391,10957],{"class":4171},[4005,58393,5073],{"class":4182},[4005,58395,58396,58399],{"class":4007,"line":4973},[4005,58397,58398],{"class":4174},"    Brand",[4005,58400,49536],{"class":4178},[4005,58402,58403,58406,58408],{"class":4007,"line":4985},[4005,58404,58405],{"class":4174},"    Engine",[4005,58407,58212],{"class":4178},[4005,58409,58410],{"class":4190},"  \u002F\u002F Має двигун\n",[4005,58412,58413,58416,58418],{"class":4007,"line":7813},[4005,58414,58415],{"class":4174},"    Wheels",[4005,58417,58300],{"class":4178},[4005,58419,58420],{"class":4190},"  \u002F\u002F Має колеса\n",[4005,58422,58423],{"class":4007,"line":7819},[4005,58424,4078],{"class":4182},[4005,58426,58427],{"class":4007,"line":7826},[4005,58428,4036],{"emptyLinePlaceholder":4035},[4005,58430,58431,58433,58435],{"class":4007,"line":7839},[4005,58432,4299],{"class":4171},[4005,58434,5764],{"class":4302},[4005,58436,4306],{"class":4182},[4005,58438,58439,58442,58444,58447],{"class":4007,"line":7864},[4005,58440,58441],{"class":4174},"    car",[4005,58443,4314],{"class":4182},[4005,58445,58446],{"class":4178},"Car",[4005,58448,29461],{"class":4182},[4005,58450,58451,58454,58456,58459],{"class":4007,"line":7872},[4005,58452,58453],{"class":4174},"        Brand",[4005,58455,49627],{"class":4182},[4005,58457,58458],{"class":4330},"\"Toyota\"",[4005,58460,29475],{"class":4182},[4005,58462,58463,58466,58468,58470,58472,58474,58476,58479],{"class":4007,"line":7881},[4005,58464,58465],{"class":4174},"        Engine",[4005,58467,11172],{"class":4182},[4005,58469,58246],{"class":4178},[4005,58471,16268],{"class":4182},[4005,58473,58283],{"class":4174},[4005,58475,11172],{"class":4182},[4005,58477,58478],{"class":4186},"150",[4005,58480,38437],{"class":4182},[4005,58482,58483,58486,58488,58490,58492,58494,58496,58498],{"class":4007,"line":7890},[4005,58484,58485],{"class":4174},"        Wheels",[4005,58487,11172],{"class":4182},[4005,58489,58331],{"class":4178},[4005,58491,16268],{"class":4182},[4005,58493,14081],{"class":4174},[4005,58495,11172],{"class":4182},[4005,58497,8245],{"class":4186},[4005,58499,38437],{"class":4182},[4005,58501,58502],{"class":4007,"line":7895},[4005,58503,5127],{"class":4182},[4005,58505,58506],{"class":4007,"line":7900},[4005,58507,5214],{"class":4182},[4005,58509,58510,58512,58514,58516,58518,58521,58523,58526,58528,58531],{"class":4007,"line":7909},[4005,58511,5370],{"class":4174},[4005,58513,3769],{"class":4182},[4005,58515,5348],{"class":4302},[4005,58517,4611],{"class":4182},[4005,58519,58520],{"class":4330},"\"Бренд:\"",[4005,58522,3836],{"class":4182},[4005,58524,58525],{"class":4174},"car",[4005,58527,3769],{"class":4182},[4005,58529,58530],{"class":4174},"Brand",[4005,58532,4482],{"class":4182},[4005,58534,58535,58537,58539,58541,58543,58545,58547],{"class":4007,"line":7915},[4005,58536,58441],{"class":4174},[4005,58538,3769],{"class":4182},[4005,58540,58246],{"class":4174},[4005,58542,3769],{"class":4182},[4005,58544,25318],{"class":4302},[4005,58546,5491],{"class":4182},[4005,58548,58549],{"class":4190},"\u002F\u002F Доступ через поле\n",[4005,58551,58552,58554,58556,58558,58560,58562],{"class":4007,"line":7921},[4005,58553,58441],{"class":4174},[4005,58555,3769],{"class":4182},[4005,58557,58331],{"class":4174},[4005,58559,3769],{"class":4182},[4005,58561,58336],{"class":4302},[4005,58563,5143],{"class":4182},[4005,58565,58566],{"class":4007,"line":7938},[4005,58567,4078],{"class":4182},[3908,58569,58570],{},[3871,58571,11778],{},[3984,58573,58576],{"className":58574,"code":58575,"language":3989},[3987],"Бренд: Toyota\nДвигун 150 к.с. запущено\n4 колеса котяться\n",[3753,58577,58575],{"__ignoreMap":3992},[9014,58579,58581],{"id":58580},"два-типи-композиції-в-go","Два типи композиції в Go",[3908,58583,58584],{},"Go підтримує два способи включення одного типу в інший:",[3908,58586,58587],{},[3871,58588,58589],{},"1. Іменоване поле (Named Field) — явна композиція",[3984,58591,58593],{"className":4162,"code":58592,"language":4164,"meta":3992,"style":3992},"type Car struct {\n    Brand  string\n    Engine Engine  \u002F\u002F ← Поле з ім'ям \"Engine\"\n}\n\ncar := Car{Engine: Engine{Power: 150}}\ncar.Engine.Start()  \u002F\u002F Доступ через ім'я поля\n",[3753,58594,58595,58605,58611,58620,58624,58628,58655],{"__ignoreMap":3992},[4005,58596,58597,58599,58601,58603],{"class":4007,"line":4008},[4005,58598,4809],{"class":4171},[4005,58600,58389],{"class":4178},[4005,58602,10957],{"class":4171},[4005,58604,5073],{"class":4182},[4005,58606,58607,58609],{"class":4007,"line":4014},[4005,58608,58398],{"class":4174},[4005,58610,49536],{"class":4178},[4005,58612,58613,58615,58617],{"class":4007,"line":4020},[4005,58614,58405],{"class":4174},[4005,58616,58212],{"class":4178},[4005,58618,58619],{"class":4190},"  \u002F\u002F ← Поле з ім'ям \"Engine\"\n",[4005,58621,58622],{"class":4007,"line":4026},[4005,58623,4078],{"class":4182},[4005,58625,58626],{"class":4007,"line":4032},[4005,58627,4036],{"emptyLinePlaceholder":4035},[4005,58629,58630,58632,58634,58636,58638,58640,58642,58644,58646,58648,58650,58652],{"class":4007,"line":4039},[4005,58631,58525],{"class":4174},[4005,58633,4314],{"class":4182},[4005,58635,58446],{"class":4178},[4005,58637,16268],{"class":4182},[4005,58639,58246],{"class":4174},[4005,58641,11172],{"class":4182},[4005,58643,58246],{"class":4178},[4005,58645,16268],{"class":4182},[4005,58647,58283],{"class":4174},[4005,58649,11172],{"class":4182},[4005,58651,58478],{"class":4186},[4005,58653,58654],{"class":4182},"}}\n",[4005,58656,58657,58659,58661,58663,58665,58667,58669],{"class":4007,"line":4045},[4005,58658,58525],{"class":4174},[4005,58660,3769],{"class":4182},[4005,58662,58246],{"class":4174},[4005,58664,3769],{"class":4182},[4005,58666,25318],{"class":4302},[4005,58668,5491],{"class":4182},[4005,58670,58671],{"class":4190},"\u002F\u002F Доступ через ім'я поля\n",[3908,58673,58674],{},[3871,58675,58676],{},"2. Анонімне поле (Embedded Field) — вбудовування",[3984,58678,58680],{"className":4162,"code":58679,"language":4164,"meta":3992,"style":3992},"type Car struct {\n    Brand  string\n    Engine  \u002F\u002F ← Без імені поля (тільки тип)\n}\n\ncar := Car{Engine: Engine{Power: 150}}\ncar.Start()  \u002F\u002F Прямий доступ (promotion)!\n",[3753,58681,58682,58692,58698,58705,58709,58713,58739],{"__ignoreMap":3992},[4005,58683,58684,58686,58688,58690],{"class":4007,"line":4008},[4005,58685,4809],{"class":4171},[4005,58687,58389],{"class":4178},[4005,58689,10957],{"class":4171},[4005,58691,5073],{"class":4182},[4005,58693,58694,58696],{"class":4007,"line":4014},[4005,58695,58398],{"class":4174},[4005,58697,49536],{"class":4178},[4005,58699,58700,58702],{"class":4007,"line":4020},[4005,58701,58405],{"class":4178},[4005,58703,58704],{"class":4190},"  \u002F\u002F ← Без імені поля (тільки тип)\n",[4005,58706,58707],{"class":4007,"line":4026},[4005,58708,4078],{"class":4182},[4005,58710,58711],{"class":4007,"line":4032},[4005,58712,4036],{"emptyLinePlaceholder":4035},[4005,58714,58715,58717,58719,58721,58723,58725,58727,58729,58731,58733,58735,58737],{"class":4007,"line":4039},[4005,58716,58525],{"class":4174},[4005,58718,4314],{"class":4182},[4005,58720,58446],{"class":4178},[4005,58722,16268],{"class":4182},[4005,58724,58246],{"class":4174},[4005,58726,11172],{"class":4182},[4005,58728,58246],{"class":4178},[4005,58730,16268],{"class":4182},[4005,58732,58283],{"class":4174},[4005,58734,11172],{"class":4182},[4005,58736,58478],{"class":4186},[4005,58738,58654],{"class":4182},[4005,58740,58741,58743,58745,58747,58749],{"class":4007,"line":4045},[4005,58742,58525],{"class":4174},[4005,58744,3769],{"class":4182},[4005,58746,25318],{"class":4302},[4005,58748,5491],{"class":4182},[4005,58750,58751],{"class":4190},"\u002F\u002F Прямий доступ (promotion)!\n",[9014,58753,58755],{"id":58754},"embedding-анонімне-вбудовування-структур","Embedding: анонімне вбудовування структур",[3908,58757,58758,58761,58762,58765],{},[3871,58759,58760],{},"Embedding (вбудовування)"," — це коли структура містить інший тип ",[3871,58763,58764],{},"без імені поля",". Усі поля та методи вбудованого типу \"спливають\" (promote) до зовнішньої структури.",[3908,58767,58768],{},[3871,58769,4787],{},[3984,58771,58773],{"className":4162,"code":58772,"language":4164,"meta":3992,"style":3992},"type Outer struct {\n    InnerType  \u002F\u002F Анонімне вбудовування (без імені поля)\n    \u002F\u002F Власні поля\n}\n",[3753,58774,58775,58786,58794,58799],{"__ignoreMap":3992},[4005,58776,58777,58779,58782,58784],{"class":4007,"line":4008},[4005,58778,4809],{"class":4171},[4005,58780,58781],{"class":4178}," Outer",[4005,58783,10957],{"class":4171},[4005,58785,5073],{"class":4182},[4005,58787,58788,58791],{"class":4007,"line":4014},[4005,58789,58790],{"class":4178},"    InnerType",[4005,58792,58793],{"class":4190},"  \u002F\u002F Анонімне вбудовування (без імені поля)\n",[4005,58795,58796],{"class":4007,"line":4020},[4005,58797,58798],{"class":4190},"    \u002F\u002F Власні поля\n",[4005,58800,58801],{"class":4007,"line":4026},[4005,58802,4078],{"class":4182},[3908,58804,58805],{},[3871,58806,58807],{},"Детальний приклад з promotion:",[12533,58809,58810,59048],{},[12536,58811,58813,59028,59032],{"icon":62,"label":58812},"З іменованим полем",[3984,58814,58816],{"className":4162,"code":58815,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Address struct {\n    City   string\n    Street string\n}\n\ntype Person struct {\n    Name    string\n    Address Address  \u002F\u002F ← Іменоване поле\n}\n\nfunc main() {\n    person := Person{\n        Name: \"Олег\",\n        Address: Address{\n            City:   \"Київ\",\n            Street: \"Хрещатик\",\n        },\n    }\n    \n    \u002F\u002F Доступ лише через ім'я поля:\n    fmt.Println(person.Address.City)    \u002F\u002F ✅ Київ\n    \u002F\u002F fmt.Println(person.City)         \u002F\u002F ❌ Помилка!\n}\n",[3753,58817,58818,58824,58828,58834,58838,58849,58857,58864,58868,58872,58883,58889,58899,58903,58907,58915,58927,58937,58949,58960,58972,58976,58980,58984,58989,59016,59024],{"__ignoreMap":3992},[4005,58819,58820,58822],{"class":4007,"line":4008},[4005,58821,5739],{"class":4171},[4005,58823,5742],{"class":4178},[4005,58825,58826],{"class":4007,"line":4014},[4005,58827,4036],{"emptyLinePlaceholder":4035},[4005,58829,58830,58832],{"class":4007,"line":4020},[4005,58831,3917],{"class":4836},[4005,58833,7656],{"class":4330},[4005,58835,58836],{"class":4007,"line":4026},[4005,58837,4036],{"emptyLinePlaceholder":4035},[4005,58839,58840,58842,58845,58847],{"class":4007,"line":4032},[4005,58841,4809],{"class":4171},[4005,58843,58844],{"class":4178}," Address",[4005,58846,10957],{"class":4171},[4005,58848,5073],{"class":4182},[4005,58850,58851,58854],{"class":4007,"line":4039},[4005,58852,58853],{"class":4174},"    City",[4005,58855,58856],{"class":4178},"   string\n",[4005,58858,58859,58862],{"class":4007,"line":4045},[4005,58860,58861],{"class":4174},"    Street",[4005,58863,20772],{"class":4178},[4005,58865,58866],{"class":4007,"line":4051},[4005,58867,4078],{"class":4182},[4005,58869,58870],{"class":4007,"line":4057},[4005,58871,4036],{"emptyLinePlaceholder":4035},[4005,58873,58874,58876,58879,58881],{"class":4007,"line":4063},[4005,58875,4809],{"class":4171},[4005,58877,58878],{"class":4178}," Person",[4005,58880,10957],{"class":4171},[4005,58882,5073],{"class":4182},[4005,58884,58885,58887],{"class":4007,"line":4069},[4005,58886,20769],{"class":4174},[4005,58888,7527],{"class":4178},[4005,58890,58891,58894,58896],{"class":4007,"line":4075},[4005,58892,58893],{"class":4174},"    Address",[4005,58895,58844],{"class":4178},[4005,58897,58898],{"class":4190},"  \u002F\u002F ← Іменоване поле\n",[4005,58900,58901],{"class":4007,"line":4081},[4005,58902,4078],{"class":4182},[4005,58904,58905],{"class":4007,"line":4086},[4005,58906,4036],{"emptyLinePlaceholder":4035},[4005,58908,58909,58911,58913],{"class":4007,"line":4092},[4005,58910,4299],{"class":4171},[4005,58912,5764],{"class":4302},[4005,58914,4306],{"class":4182},[4005,58916,58917,58920,58922,58925],{"class":4007,"line":4098},[4005,58918,58919],{"class":4174},"    person",[4005,58921,4314],{"class":4182},[4005,58923,58924],{"class":4178},"Person",[4005,58926,29461],{"class":4182},[4005,58928,58929,58931,58933,58935],{"class":4007,"line":4104},[4005,58930,37207],{"class":4174},[4005,58932,11172],{"class":4182},[4005,58934,15780],{"class":4330},[4005,58936,29475],{"class":4182},[4005,58938,58939,58942,58944,58947],{"class":4007,"line":4110},[4005,58940,58941],{"class":4174},"        Address",[4005,58943,11172],{"class":4182},[4005,58945,58946],{"class":4178},"Address",[4005,58948,29461],{"class":4182},[4005,58950,58951,58954,58956,58958],{"class":4007,"line":4937},[4005,58952,58953],{"class":4174},"            City",[4005,58955,29469],{"class":4182},[4005,58957,11342],{"class":4330},[4005,58959,29475],{"class":4182},[4005,58961,58962,58965,58967,58970],{"class":4007,"line":4942},[4005,58963,58964],{"class":4174},"            Street",[4005,58966,11172],{"class":4182},[4005,58968,58969],{"class":4330},"\"Хрещатик\"",[4005,58971,29475],{"class":4182},[4005,58973,58974],{"class":4007,"line":4947},[4005,58975,38879],{"class":4182},[4005,58977,58978],{"class":4007,"line":4953},[4005,58979,5127],{"class":4182},[4005,58981,58982],{"class":4007,"line":4960},[4005,58983,5214],{"class":4182},[4005,58985,58986],{"class":4007,"line":4973},[4005,58987,58988],{"class":4190},"    \u002F\u002F Доступ лише через ім'я поля:\n",[4005,58990,58991,58993,58995,58997,58999,59002,59004,59006,59008,59011,59013],{"class":4007,"line":4985},[4005,58992,5370],{"class":4174},[4005,58994,3769],{"class":4182},[4005,58996,5348],{"class":4302},[4005,58998,4611],{"class":4182},[4005,59000,59001],{"class":4174},"person",[4005,59003,3769],{"class":4182},[4005,59005,58946],{"class":4174},[4005,59007,3769],{"class":4182},[4005,59009,59010],{"class":4174},"City",[4005,59012,12303],{"class":4182},[4005,59014,59015],{"class":4190},"\u002F\u002F ✅ Київ\n",[4005,59017,59018,59021],{"class":4007,"line":7813},[4005,59019,59020],{"class":4190},"    \u002F\u002F fmt.Println(person.City)",[4005,59022,59023],{"class":4190},"         \u002F\u002F ❌ Помилка!\n",[4005,59025,59026],{"class":4007,"line":7819},[4005,59027,4078],{"class":4182},[3908,59029,59030],{},[3871,59031,48080],{},[3746,59033,59034,59040],{},[3749,59035,59036,59037],{},"Довгі шляхи: ",[3753,59038,59039],{},"person.Address.City",[3749,59041,59042,59043,59045,59046],{},"Не можна використати ",[3753,59044,58924],{}," замість ",[3753,59047,58946],{},[12536,59049,59052,59263,59267],{"icon":59050,"label":59051},"i-lucide-package-open","З вбудованим полем (embedding)",[3984,59053,59055],{"className":4162,"code":59054,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Address struct {\n    City   string\n    Street string\n}\n\ntype Person struct {\n    Name    string\n    Address  \u002F\u002F ← Анонімне вбудовування (embedding)\n}\n\nfunc main() {\n    person := Person{\n        Name: \"Олег\",\n        Address: Address{\n            City:   \"Київ\",\n            Street: \"Хрещатик\",\n        },\n    }\n    \n    \u002F\u002F Прямий доступ (promotion):\n    fmt.Println(person.City)         \u002F\u002F ✅ Київ (коротше!)\n    fmt.Println(person.Address.City) \u002F\u002F ✅ Київ (також працює)\n}\n",[3753,59056,59057,59063,59067,59073,59077,59087,59093,59099,59103,59107,59117,59123,59130,59134,59138,59146,59156,59166,59176,59186,59196,59200,59204,59208,59213,59234,59259],{"__ignoreMap":3992},[4005,59058,59059,59061],{"class":4007,"line":4008},[4005,59060,5739],{"class":4171},[4005,59062,5742],{"class":4178},[4005,59064,59065],{"class":4007,"line":4014},[4005,59066,4036],{"emptyLinePlaceholder":4035},[4005,59068,59069,59071],{"class":4007,"line":4020},[4005,59070,3917],{"class":4836},[4005,59072,7656],{"class":4330},[4005,59074,59075],{"class":4007,"line":4026},[4005,59076,4036],{"emptyLinePlaceholder":4035},[4005,59078,59079,59081,59083,59085],{"class":4007,"line":4032},[4005,59080,4809],{"class":4171},[4005,59082,58844],{"class":4178},[4005,59084,10957],{"class":4171},[4005,59086,5073],{"class":4182},[4005,59088,59089,59091],{"class":4007,"line":4039},[4005,59090,58853],{"class":4174},[4005,59092,58856],{"class":4178},[4005,59094,59095,59097],{"class":4007,"line":4045},[4005,59096,58861],{"class":4174},[4005,59098,20772],{"class":4178},[4005,59100,59101],{"class":4007,"line":4051},[4005,59102,4078],{"class":4182},[4005,59104,59105],{"class":4007,"line":4057},[4005,59106,4036],{"emptyLinePlaceholder":4035},[4005,59108,59109,59111,59113,59115],{"class":4007,"line":4063},[4005,59110,4809],{"class":4171},[4005,59112,58878],{"class":4178},[4005,59114,10957],{"class":4171},[4005,59116,5073],{"class":4182},[4005,59118,59119,59121],{"class":4007,"line":4069},[4005,59120,20769],{"class":4174},[4005,59122,7527],{"class":4178},[4005,59124,59125,59127],{"class":4007,"line":4075},[4005,59126,58893],{"class":4178},[4005,59128,59129],{"class":4190},"  \u002F\u002F ← Анонімне вбудовування (embedding)\n",[4005,59131,59132],{"class":4007,"line":4081},[4005,59133,4078],{"class":4182},[4005,59135,59136],{"class":4007,"line":4086},[4005,59137,4036],{"emptyLinePlaceholder":4035},[4005,59139,59140,59142,59144],{"class":4007,"line":4092},[4005,59141,4299],{"class":4171},[4005,59143,5764],{"class":4302},[4005,59145,4306],{"class":4182},[4005,59147,59148,59150,59152,59154],{"class":4007,"line":4098},[4005,59149,58919],{"class":4174},[4005,59151,4314],{"class":4182},[4005,59153,58924],{"class":4178},[4005,59155,29461],{"class":4182},[4005,59157,59158,59160,59162,59164],{"class":4007,"line":4104},[4005,59159,37207],{"class":4174},[4005,59161,11172],{"class":4182},[4005,59163,15780],{"class":4330},[4005,59165,29475],{"class":4182},[4005,59167,59168,59170,59172,59174],{"class":4007,"line":4110},[4005,59169,58941],{"class":4174},[4005,59171,11172],{"class":4182},[4005,59173,58946],{"class":4178},[4005,59175,29461],{"class":4182},[4005,59177,59178,59180,59182,59184],{"class":4007,"line":4937},[4005,59179,58953],{"class":4174},[4005,59181,29469],{"class":4182},[4005,59183,11342],{"class":4330},[4005,59185,29475],{"class":4182},[4005,59187,59188,59190,59192,59194],{"class":4007,"line":4942},[4005,59189,58964],{"class":4174},[4005,59191,11172],{"class":4182},[4005,59193,58969],{"class":4330},[4005,59195,29475],{"class":4182},[4005,59197,59198],{"class":4007,"line":4947},[4005,59199,38879],{"class":4182},[4005,59201,59202],{"class":4007,"line":4953},[4005,59203,5127],{"class":4182},[4005,59205,59206],{"class":4007,"line":4960},[4005,59207,5214],{"class":4182},[4005,59209,59210],{"class":4007,"line":4973},[4005,59211,59212],{"class":4190},"    \u002F\u002F Прямий доступ (promotion):\n",[4005,59214,59215,59217,59219,59221,59223,59225,59227,59229,59231],{"class":4007,"line":4985},[4005,59216,5370],{"class":4174},[4005,59218,3769],{"class":4182},[4005,59220,5348],{"class":4302},[4005,59222,4611],{"class":4182},[4005,59224,59001],{"class":4174},[4005,59226,3769],{"class":4182},[4005,59228,59010],{"class":4174},[4005,59230,21280],{"class":4182},[4005,59232,59233],{"class":4190},"\u002F\u002F ✅ Київ (коротше!)\n",[4005,59235,59236,59238,59240,59242,59244,59246,59248,59250,59252,59254,59256],{"class":4007,"line":7813},[4005,59237,5370],{"class":4174},[4005,59239,3769],{"class":4182},[4005,59241,5348],{"class":4302},[4005,59243,4611],{"class":4182},[4005,59245,59001],{"class":4174},[4005,59247,3769],{"class":4182},[4005,59249,58946],{"class":4174},[4005,59251,3769],{"class":4182},[4005,59253,59010],{"class":4174},[4005,59255,4498],{"class":4182},[4005,59257,59258],{"class":4190},"\u002F\u002F ✅ Київ (також працює)\n",[4005,59260,59261],{"class":4007,"line":7819},[4005,59262,4078],{"class":4182},[3908,59264,59265],{},[3871,59266,13352],{},[3746,59268,59269,59275,59278],{},[3749,59270,59271,59272],{},"Короткий доступ: ",[3753,59273,59274],{},"person.City",[3749,59276,59277],{},"Поля \"спливають\" нагору",[3749,59279,59280],{},"Методи також спливають",[9014,59282,59284],{"id":59283},"method-promotion-спливання-методів","Method Promotion: спливання методів",[3908,59286,59287,59288,59291],{},"Коли ви вбудовуєте структуру, ",[3871,59289,59290],{},"всі її методи"," також стають доступними напряму:",[3984,59293,59295],{"className":4162,"code":59294,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Logger struct {\n    Prefix string\n}\n\nfunc (l Logger) Info(msg string) {\n    fmt.Printf(\"[%s INFO] %s\\n\", l.Prefix, msg)\n}\n\nfunc (l Logger) Error(msg string) {\n    fmt.Printf(\"[%s ERROR] %s\\n\", l.Prefix, msg)\n}\n\n\u002F\u002F Сервіс вбудовує Logger\ntype UserService struct {\n    Logger  \u002F\u002F Анонімне вбудовування\n    DB      string\n}\n\nfunc (s UserService) CreateUser(name string) {\n    \u002F\u002F Можемо викликати методи Logger напряму!\n    s.Info(\"Створення користувача: \" + name)\n    \u002F\u002F ... логіка створення\n    s.Info(\"Користувача створено\")\n}\n\nfunc main() {\n    service := UserService{\n        Logger: Logger{Prefix: \"UserService\"},\n        DB:     \"postgres\",\n    }\n    \n    service.CreateUser(\"Олег\")\n    \u002F\u002F service.Info() та service.Error() доступні!\n    service.Error(\"Помилка підключення до БД\")\n}\n",[3753,59296,59297,59303,59307,59313,59317,59328,59335,59339,59343,59369,59409,59413,59417,59440,59477,59481,59485,59490,59501,59509,59516,59520,59524,59548,59553,59573,59578,59593,59597,59601,59609,59620,59640,59652,59656,59660,59674,59679,59694],{"__ignoreMap":3992},[4005,59298,59299,59301],{"class":4007,"line":4008},[4005,59300,5739],{"class":4171},[4005,59302,5742],{"class":4178},[4005,59304,59305],{"class":4007,"line":4014},[4005,59306,4036],{"emptyLinePlaceholder":4035},[4005,59308,59309,59311],{"class":4007,"line":4020},[4005,59310,3917],{"class":4836},[4005,59312,7656],{"class":4330},[4005,59314,59315],{"class":4007,"line":4026},[4005,59316,4036],{"emptyLinePlaceholder":4035},[4005,59318,59319,59321,59324,59326],{"class":4007,"line":4032},[4005,59320,4809],{"class":4171},[4005,59322,59323],{"class":4178}," Logger",[4005,59325,10957],{"class":4171},[4005,59327,5073],{"class":4182},[4005,59329,59330,59333],{"class":4007,"line":4039},[4005,59331,59332],{"class":4174},"    Prefix",[4005,59334,20772],{"class":4178},[4005,59336,59337],{"class":4007,"line":4045},[4005,59338,4078],{"class":4182},[4005,59340,59341],{"class":4007,"line":4051},[4005,59342,4036],{"emptyLinePlaceholder":4035},[4005,59344,59345,59347,59349,59352,59355,59357,59360,59362,59365,59367],{"class":4007,"line":4057},[4005,59346,4299],{"class":4171},[4005,59348,4761],{"class":4182},[4005,59350,59351],{"class":4174},"l ",[4005,59353,59354],{"class":4178},"Logger",[4005,59356,4498],{"class":4182},[4005,59358,59359],{"class":4302},"Info",[4005,59361,4611],{"class":4182},[4005,59363,59364],{"class":4174},"msg",[4005,59366,4237],{"class":4178},[4005,59368,12789],{"class":4182},[4005,59370,59371,59373,59375,59377,59379,59382,59384,59387,59389,59391,59393,59395,59398,59400,59403,59405,59407],{"class":4007,"line":4063},[4005,59372,5370],{"class":4174},[4005,59374,3769],{"class":4182},[4005,59376,7945],{"class":4302},[4005,59378,4611],{"class":4182},[4005,59380,59381],{"class":4330},"\"[",[4005,59383,16775],{"class":4174},[4005,59385,59386],{"class":4330}," INFO] ",[4005,59388,16775],{"class":4174},[4005,59390,7965],{"class":7964},[4005,59392,7968],{"class":4330},[4005,59394,3836],{"class":4182},[4005,59396,59397],{"class":4174},"l",[4005,59399,3769],{"class":4182},[4005,59401,59402],{"class":4174},"Prefix",[4005,59404,3836],{"class":4182},[4005,59406,59364],{"class":4174},[4005,59408,4482],{"class":4182},[4005,59410,59411],{"class":4007,"line":4069},[4005,59412,4078],{"class":4182},[4005,59414,59415],{"class":4007,"line":4075},[4005,59416,4036],{"emptyLinePlaceholder":4035},[4005,59418,59419,59421,59423,59425,59427,59429,59432,59434,59436,59438],{"class":4007,"line":4081},[4005,59420,4299],{"class":4171},[4005,59422,4761],{"class":4182},[4005,59424,59351],{"class":4174},[4005,59426,59354],{"class":4178},[4005,59428,4498],{"class":4182},[4005,59430,59431],{"class":4302},"Error",[4005,59433,4611],{"class":4182},[4005,59435,59364],{"class":4174},[4005,59437,4237],{"class":4178},[4005,59439,12789],{"class":4182},[4005,59441,59442,59444,59446,59448,59450,59452,59454,59457,59459,59461,59463,59465,59467,59469,59471,59473,59475],{"class":4007,"line":4086},[4005,59443,5370],{"class":4174},[4005,59445,3769],{"class":4182},[4005,59447,7945],{"class":4302},[4005,59449,4611],{"class":4182},[4005,59451,59381],{"class":4330},[4005,59453,16775],{"class":4174},[4005,59455,59456],{"class":4330}," ERROR] ",[4005,59458,16775],{"class":4174},[4005,59460,7965],{"class":7964},[4005,59462,7968],{"class":4330},[4005,59464,3836],{"class":4182},[4005,59466,59397],{"class":4174},[4005,59468,3769],{"class":4182},[4005,59470,59402],{"class":4174},[4005,59472,3836],{"class":4182},[4005,59474,59364],{"class":4174},[4005,59476,4482],{"class":4182},[4005,59478,59479],{"class":4007,"line":4092},[4005,59480,4078],{"class":4182},[4005,59482,59483],{"class":4007,"line":4098},[4005,59484,4036],{"emptyLinePlaceholder":4035},[4005,59486,59487],{"class":4007,"line":4104},[4005,59488,59489],{"class":4190},"\u002F\u002F Сервіс вбудовує Logger\n",[4005,59491,59492,59494,59497,59499],{"class":4007,"line":4110},[4005,59493,4809],{"class":4171},[4005,59495,59496],{"class":4178}," UserService",[4005,59498,10957],{"class":4171},[4005,59500,5073],{"class":4182},[4005,59502,59503,59506],{"class":4007,"line":4937},[4005,59504,59505],{"class":4178},"    Logger",[4005,59507,59508],{"class":4190},"  \u002F\u002F Анонімне вбудовування\n",[4005,59510,59511,59514],{"class":4007,"line":4942},[4005,59512,59513],{"class":4174},"    DB",[4005,59515,37133],{"class":4178},[4005,59517,59518],{"class":4007,"line":4947},[4005,59519,4078],{"class":4182},[4005,59521,59522],{"class":4007,"line":4953},[4005,59523,4036],{"emptyLinePlaceholder":4035},[4005,59525,59526,59528,59530,59532,59535,59537,59540,59542,59544,59546],{"class":4007,"line":4960},[4005,59527,4299],{"class":4171},[4005,59529,4761],{"class":4182},[4005,59531,7335],{"class":4174},[4005,59533,59534],{"class":4178},"UserService",[4005,59536,4498],{"class":4182},[4005,59538,59539],{"class":4302},"CreateUser",[4005,59541,4611],{"class":4182},[4005,59543,4650],{"class":4174},[4005,59545,4237],{"class":4178},[4005,59547,12789],{"class":4182},[4005,59549,59550],{"class":4007,"line":4973},[4005,59551,59552],{"class":4190},"    \u002F\u002F Можемо викликати методи Logger напряму!\n",[4005,59554,59555,59558,59560,59562,59564,59567,59569,59571],{"class":4007,"line":4985},[4005,59556,59557],{"class":4174},"    s",[4005,59559,3769],{"class":4182},[4005,59561,59359],{"class":4302},[4005,59563,4611],{"class":4182},[4005,59565,59566],{"class":4330},"\"Створення користувача: \"",[4005,59568,6289],{"class":4182},[4005,59570,4650],{"class":4174},[4005,59572,4482],{"class":4182},[4005,59574,59575],{"class":4007,"line":7813},[4005,59576,59577],{"class":4190},"    \u002F\u002F ... логіка створення\n",[4005,59579,59580,59582,59584,59586,59588,59591],{"class":4007,"line":7819},[4005,59581,59557],{"class":4174},[4005,59583,3769],{"class":4182},[4005,59585,59359],{"class":4302},[4005,59587,4611],{"class":4182},[4005,59589,59590],{"class":4330},"\"Користувача створено\"",[4005,59592,4482],{"class":4182},[4005,59594,59595],{"class":4007,"line":7826},[4005,59596,4078],{"class":4182},[4005,59598,59599],{"class":4007,"line":7839},[4005,59600,4036],{"emptyLinePlaceholder":4035},[4005,59602,59603,59605,59607],{"class":4007,"line":7864},[4005,59604,4299],{"class":4171},[4005,59606,5764],{"class":4302},[4005,59608,4306],{"class":4182},[4005,59610,59611,59614,59616,59618],{"class":4007,"line":7872},[4005,59612,59613],{"class":4174},"    service",[4005,59615,4314],{"class":4182},[4005,59617,59534],{"class":4178},[4005,59619,29461],{"class":4182},[4005,59621,59622,59625,59627,59629,59631,59633,59635,59638],{"class":4007,"line":7881},[4005,59623,59624],{"class":4174},"        Logger",[4005,59626,11172],{"class":4182},[4005,59628,59354],{"class":4178},[4005,59630,16268],{"class":4182},[4005,59632,59402],{"class":4174},[4005,59634,11172],{"class":4182},[4005,59636,59637],{"class":4330},"\"UserService\"",[4005,59639,38437],{"class":4182},[4005,59641,59642,59645,59647,59650],{"class":4007,"line":7890},[4005,59643,59644],{"class":4174},"        DB",[4005,59646,49638],{"class":4182},[4005,59648,59649],{"class":4330},"\"postgres\"",[4005,59651,29475],{"class":4182},[4005,59653,59654],{"class":4007,"line":7895},[4005,59655,5127],{"class":4182},[4005,59657,59658],{"class":4007,"line":7900},[4005,59659,5214],{"class":4182},[4005,59661,59662,59664,59666,59668,59670,59672],{"class":4007,"line":7909},[4005,59663,59613],{"class":4174},[4005,59665,3769],{"class":4182},[4005,59667,59539],{"class":4302},[4005,59669,4611],{"class":4182},[4005,59671,15780],{"class":4330},[4005,59673,4482],{"class":4182},[4005,59675,59676],{"class":4007,"line":7915},[4005,59677,59678],{"class":4190},"    \u002F\u002F service.Info() та service.Error() доступні!\n",[4005,59680,59681,59683,59685,59687,59689,59692],{"class":4007,"line":7921},[4005,59682,59613],{"class":4174},[4005,59684,3769],{"class":4182},[4005,59686,59431],{"class":4302},[4005,59688,4611],{"class":4182},[4005,59690,59691],{"class":4330},"\"Помилка підключення до БД\"",[4005,59693,4482],{"class":4182},[4005,59695,59696],{"class":4007,"line":7938},[4005,59697,4078],{"class":4182},[3908,59699,59700],{},[3871,59701,11778],{},[3984,59703,59706],{"className":59704,"code":59705,"language":3989},[3987],"[UserService INFO] Створення користувача: Олег\n[UserService INFO] Користувача створено\n[UserService ERROR] Помилка підключення до БД\n",[3753,59707,59705],{"__ignoreMap":3992},[9014,59709,59711],{"id":59710},"практичний-приклад-baseentity-для-orm","Практичний приклад: BaseEntity для ORM",[3908,59713,59714],{},"Типовий патерн у Go-додатках — базова структура для моделей бази даних:",[3984,59716,59718],{"className":4162,"code":59717,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\n\u002F\u002F Базова структура для всіх моделей\ntype BaseEntity struct {\n    ID        int64\n    CreatedAt time.Time\n    UpdatedAt time.Time\n}\n\nfunc (b BaseEntity) GetAge() time.Duration {\n    return time.Since(b.CreatedAt)\n}\n\nfunc (b BaseEntity) FormattedCreated() string {\n    return b.CreatedAt.Format(\"2006-01-02 15:04:05\")\n}\n\n\u002F\u002F Модель користувача\ntype User struct {\n    BaseEntity  \u002F\u002F Вбудовуємо базові поля\n    Email       string\n    Username    string\n}\n\n\u002F\u002F Модель продукту\ntype Product struct {\n    BaseEntity  \u002F\u002F Вбудовуємо базові поля\n    Name        string\n    Price       float64\n}\n\nfunc main() {\n    user := User{\n        BaseEntity: BaseEntity{\n            ID:        1,\n            CreatedAt: time.Now().Add(-24 * time.Hour),\n            UpdatedAt: time.Now(),\n        },\n        Email:    \"user@kostyl.dev\",\n        Username: \"alex\",\n    }\n    \n    \u002F\u002F Прямий доступ до полів BaseEntity:\n    fmt.Printf(\"User ID: %d\\n\", user.ID)\n    fmt.Printf(\"Created: %s\\n\", user.FormattedCreated())\n    fmt.Printf(\"Age: %v\\n\", user.GetAge())\n    \n    \u002F\u002F Також працює з Product:\n    product := Product{\n        BaseEntity: BaseEntity{\n            ID:        100,\n            CreatedAt: time.Now(),\n        },\n        Name:  \"Ноутбук\",\n        Price: 25000,\n    }\n    \n    fmt.Printf(\"\\nProduct ID: %d\\n\", product.ID)\n    fmt.Printf(\"Created: %s\\n\", product.FormattedCreated())\n}\n",[3753,59719,59720,59726,59730,59736,59740,59744,59748,59752,59757,59768,59774,59784,59795,59799,59803,59830,59851,59855,59859,59880,59902,59906,59910,59915,59925,59933,59939,59945,59949,59953,59958,59968,59974,59980,59986,59990,59994,60002,60012,60023,60034,60065,60080,60084,60095,60105,60109,60113,60118,60147,60176,60205,60209,60214,60225,60235,60245,60259,60263,60274,60286,60290,60294,60327,60355],{"__ignoreMap":3992},[4005,59721,59722,59724],{"class":4007,"line":4008},[4005,59723,5739],{"class":4171},[4005,59725,5742],{"class":4178},[4005,59727,59728],{"class":4007,"line":4014},[4005,59729,4036],{"emptyLinePlaceholder":4035},[4005,59731,59732,59734],{"class":4007,"line":4020},[4005,59733,3917],{"class":4836},[4005,59735,4439],{"class":4182},[4005,59737,59738],{"class":4007,"line":4026},[4005,59739,4843],{"class":4330},[4005,59741,59742],{"class":4007,"line":4032},[4005,59743,25973],{"class":4330},[4005,59745,59746],{"class":4007,"line":4039},[4005,59747,4482],{"class":4182},[4005,59749,59750],{"class":4007,"line":4045},[4005,59751,4036],{"emptyLinePlaceholder":4035},[4005,59753,59754],{"class":4007,"line":4051},[4005,59755,59756],{"class":4190},"\u002F\u002F Базова структура для всіх моделей\n",[4005,59758,59759,59761,59764,59766],{"class":4007,"line":4057},[4005,59760,4809],{"class":4171},[4005,59762,59763],{"class":4178}," BaseEntity",[4005,59765,10957],{"class":4171},[4005,59767,5073],{"class":4182},[4005,59769,59770,59772],{"class":4007,"line":4063},[4005,59771,46381],{"class":4174},[4005,59773,49529],{"class":4178},[4005,59775,59776,59778,59780,59782],{"class":4007,"line":4069},[4005,59777,47333],{"class":4174},[4005,59779,5939],{"class":4178},[4005,59781,3769],{"class":4182},[4005,59783,47341],{"class":4178},[4005,59785,59786,59789,59791,59793],{"class":4007,"line":4075},[4005,59787,59788],{"class":4174},"    UpdatedAt",[4005,59790,5939],{"class":4178},[4005,59792,3769],{"class":4182},[4005,59794,47341],{"class":4178},[4005,59796,59797],{"class":4007,"line":4081},[4005,59798,4078],{"class":4182},[4005,59800,59801],{"class":4007,"line":4086},[4005,59802,4036],{"emptyLinePlaceholder":4035},[4005,59804,59805,59807,59809,59812,59815,59817,59820,59822,59824,59826,59828],{"class":4007,"line":4092},[4005,59806,4299],{"class":4171},[4005,59808,4761],{"class":4182},[4005,59810,59811],{"class":4174},"b ",[4005,59813,59814],{"class":4178},"BaseEntity",[4005,59816,4498],{"class":4182},[4005,59818,59819],{"class":4302},"GetAge",[4005,59821,7346],{"class":4182},[4005,59823,26006],{"class":4178},[4005,59825,3769],{"class":4182},[4005,59827,5944],{"class":4178},[4005,59829,5073],{"class":4182},[4005,59831,59832,59834,59836,59838,59840,59842,59844,59846,59849],{"class":4007,"line":4098},[4005,59833,5260],{"class":4836},[4005,59835,5939],{"class":4174},[4005,59837,3769],{"class":4182},[4005,59839,37594],{"class":4302},[4005,59841,4611],{"class":4182},[4005,59843,4381],{"class":4174},[4005,59845,3769],{"class":4182},[4005,59847,59848],{"class":4174},"CreatedAt",[4005,59850,4482],{"class":4182},[4005,59852,59853],{"class":4007,"line":4104},[4005,59854,4078],{"class":4182},[4005,59856,59857],{"class":4007,"line":4110},[4005,59858,4036],{"emptyLinePlaceholder":4035},[4005,59860,59861,59863,59865,59867,59869,59871,59874,59876,59878],{"class":4007,"line":4937},[4005,59862,4299],{"class":4171},[4005,59864,4761],{"class":4182},[4005,59866,59811],{"class":4174},[4005,59868,59814],{"class":4178},[4005,59870,4498],{"class":4182},[4005,59872,59873],{"class":4302},"FormattedCreated",[4005,59875,7346],{"class":4182},[4005,59877,7004],{"class":4178},[4005,59879,5073],{"class":4182},[4005,59881,59882,59884,59886,59888,59890,59892,59895,59897,59900],{"class":4007,"line":4942},[4005,59883,5260],{"class":4836},[4005,59885,6087],{"class":4174},[4005,59887,3769],{"class":4182},[4005,59889,59848],{"class":4174},[4005,59891,3769],{"class":4182},[4005,59893,59894],{"class":4302},"Format",[4005,59896,4611],{"class":4182},[4005,59898,59899],{"class":4330},"\"2006-01-02 15:04:05\"",[4005,59901,4482],{"class":4182},[4005,59903,59904],{"class":4007,"line":4947},[4005,59905,4078],{"class":4182},[4005,59907,59908],{"class":4007,"line":4953},[4005,59909,4036],{"emptyLinePlaceholder":4035},[4005,59911,59912],{"class":4007,"line":4960},[4005,59913,59914],{"class":4190},"\u002F\u002F Модель користувача\n",[4005,59916,59917,59919,59921,59923],{"class":4007,"line":4973},[4005,59918,4809],{"class":4171},[4005,59920,20760],{"class":4178},[4005,59922,10957],{"class":4171},[4005,59924,5073],{"class":4182},[4005,59926,59927,59930],{"class":4007,"line":4985},[4005,59928,59929],{"class":4178},"    BaseEntity",[4005,59931,59932],{"class":4190},"  \u002F\u002F Вбудовуємо базові поля\n",[4005,59934,59935,59937],{"class":4007,"line":7813},[4005,59936,4931],{"class":4174},[4005,59938,33481],{"class":4178},[4005,59940,59941,59943],{"class":4007,"line":7819},[4005,59942,33486],{"class":4174},[4005,59944,7527],{"class":4178},[4005,59946,59947],{"class":4007,"line":7826},[4005,59948,4078],{"class":4182},[4005,59950,59951],{"class":4007,"line":7839},[4005,59952,4036],{"emptyLinePlaceholder":4035},[4005,59954,59955],{"class":4007,"line":7864},[4005,59956,59957],{"class":4190},"\u002F\u002F Модель продукту\n",[4005,59959,59960,59962,59964,59966],{"class":4007,"line":7872},[4005,59961,4809],{"class":4171},[4005,59963,47284],{"class":4178},[4005,59965,10957],{"class":4171},[4005,59967,5073],{"class":4182},[4005,59969,59970,59972],{"class":4007,"line":7881},[4005,59971,59929],{"class":4178},[4005,59973,59932],{"class":4190},[4005,59975,59976,59978],{"class":4007,"line":7890},[4005,59977,20769],{"class":4174},[4005,59979,47302],{"class":4178},[4005,59981,59982,59984],{"class":4007,"line":7895},[4005,59983,47307],{"class":4174},[4005,59985,47310],{"class":4178},[4005,59987,59988],{"class":4007,"line":7900},[4005,59989,4078],{"class":4182},[4005,59991,59992],{"class":4007,"line":7909},[4005,59993,4036],{"emptyLinePlaceholder":4035},[4005,59995,59996,59998,60000],{"class":4007,"line":7915},[4005,59997,4299],{"class":4171},[4005,59999,5764],{"class":4302},[4005,60001,4306],{"class":4182},[4005,60003,60004,60006,60008,60010],{"class":4007,"line":7921},[4005,60005,49952],{"class":4174},[4005,60007,4314],{"class":4182},[4005,60009,20798],{"class":4178},[4005,60011,29461],{"class":4182},[4005,60013,60014,60017,60019,60021],{"class":4007,"line":7938},[4005,60015,60016],{"class":4174},"        BaseEntity",[4005,60018,11172],{"class":4182},[4005,60020,59814],{"class":4178},[4005,60022,29461],{"class":4182},[4005,60024,60025,60028,60030,60032],{"class":4007,"line":7982},[4005,60026,60027],{"class":4174},"            ID",[4005,60029,49611],{"class":4182},[4005,60031,4393],{"class":4186},[4005,60033,29475],{"class":4182},[4005,60035,60036,60039,60041,60043,60045,60047,60049,60051,60053,60055,60057,60059,60061,60063],{"class":4007,"line":7987},[4005,60037,60038],{"class":4174},"            CreatedAt",[4005,60040,11172],{"class":4182},[4005,60042,26006],{"class":4174},[4005,60044,3769],{"class":4182},[4005,60046,26011],{"class":4302},[4005,60048,12903],{"class":4182},[4005,60050,56069],{"class":4302},[4005,60052,10727],{"class":4182},[4005,60054,8580],{"class":4186},[4005,60056,6735],{"class":4182},[4005,60058,26006],{"class":4174},[4005,60060,3769],{"class":4182},[4005,60062,26016],{"class":4174},[4005,60064,51332],{"class":4182},[4005,60066,60067,60070,60072,60074,60076,60078],{"class":4007,"line":7993},[4005,60068,60069],{"class":4174},"            UpdatedAt",[4005,60071,11172],{"class":4182},[4005,60073,26006],{"class":4174},[4005,60075,3769],{"class":4182},[4005,60077,26011],{"class":4302},[4005,60079,51306],{"class":4182},[4005,60081,60082],{"class":4007,"line":8016},[4005,60083,38879],{"class":4182},[4005,60085,60086,60088,60090,60093],{"class":4007,"line":8035},[4005,60087,49063],{"class":4174},[4005,60089,44670],{"class":4182},[4005,60091,60092],{"class":4330},"\"user@kostyl.dev\"",[4005,60094,29475],{"class":4182},[4005,60096,60097,60099,60101,60103],{"class":4007,"line":8063},[4005,60098,49052],{"class":4174},[4005,60100,11172],{"class":4182},[4005,60102,46446],{"class":4330},[4005,60104,29475],{"class":4182},[4005,60106,60107],{"class":4007,"line":8090},[4005,60108,5127],{"class":4182},[4005,60110,60111],{"class":4007,"line":8095},[4005,60112,5214],{"class":4182},[4005,60114,60115],{"class":4007,"line":8101},[4005,60116,60117],{"class":4190},"    \u002F\u002F Прямий доступ до полів BaseEntity:\n",[4005,60119,60120,60122,60124,60126,60128,60131,60133,60135,60137,60139,60141,60143,60145],{"class":4007,"line":8135},[4005,60121,5370],{"class":4174},[4005,60123,3769],{"class":4182},[4005,60125,7945],{"class":4302},[4005,60127,4611],{"class":4182},[4005,60129,60130],{"class":4330},"\"User ID: ",[4005,60132,7959],{"class":4174},[4005,60134,7965],{"class":7964},[4005,60136,7968],{"class":4330},[4005,60138,3836],{"class":4182},[4005,60140,20793],{"class":4174},[4005,60142,3769],{"class":4182},[4005,60144,47055],{"class":4174},[4005,60146,4482],{"class":4182},[4005,60148,60149,60151,60153,60155,60157,60160,60162,60164,60166,60168,60170,60172,60174],{"class":4007,"line":41104},[4005,60150,5370],{"class":4174},[4005,60152,3769],{"class":4182},[4005,60154,7945],{"class":4302},[4005,60156,4611],{"class":4182},[4005,60158,60159],{"class":4330},"\"Created: ",[4005,60161,16775],{"class":4174},[4005,60163,7965],{"class":7964},[4005,60165,7968],{"class":4330},[4005,60167,3836],{"class":4182},[4005,60169,20793],{"class":4174},[4005,60171,3769],{"class":4182},[4005,60173,59873],{"class":4302},[4005,60175,54899],{"class":4182},[4005,60177,60178,60180,60182,60184,60186,60189,60191,60193,60195,60197,60199,60201,60203],{"class":4007,"line":41109},[4005,60179,5370],{"class":4174},[4005,60181,3769],{"class":4182},[4005,60183,7945],{"class":4302},[4005,60185,4611],{"class":4182},[4005,60187,60188],{"class":4330},"\"Age: ",[4005,60190,10666],{"class":4174},[4005,60192,7965],{"class":7964},[4005,60194,7968],{"class":4330},[4005,60196,3836],{"class":4182},[4005,60198,20793],{"class":4174},[4005,60200,3769],{"class":4182},[4005,60202,59819],{"class":4302},[4005,60204,54899],{"class":4182},[4005,60206,60207],{"class":4007,"line":49973},[4005,60208,5214],{"class":4182},[4005,60210,60211],{"class":4007,"line":49979},[4005,60212,60213],{"class":4190},"    \u002F\u002F Також працює з Product:\n",[4005,60215,60216,60219,60221,60223],{"class":4007,"line":50000},[4005,60217,60218],{"class":4174},"    product",[4005,60220,4314],{"class":4182},[4005,60222,50938],{"class":4178},[4005,60224,29461],{"class":4182},[4005,60226,60227,60229,60231,60233],{"class":4007,"line":50012},[4005,60228,60016],{"class":4174},[4005,60230,11172],{"class":4182},[4005,60232,59814],{"class":4178},[4005,60234,29461],{"class":4182},[4005,60236,60237,60239,60241,60243],{"class":4007,"line":50017},[4005,60238,60027],{"class":4174},[4005,60240,49611],{"class":4182},[4005,60242,6478],{"class":4186},[4005,60244,29475],{"class":4182},[4005,60246,60247,60249,60251,60253,60255,60257],{"class":4007,"line":50022},[4005,60248,60038],{"class":4174},[4005,60250,11172],{"class":4182},[4005,60252,26006],{"class":4174},[4005,60254,3769],{"class":4182},[4005,60256,26011],{"class":4302},[4005,60258,51306],{"class":4182},[4005,60260,60261],{"class":4007,"line":50030},[4005,60262,38879],{"class":4182},[4005,60264,60265,60267,60269,60272],{"class":4007,"line":50035},[4005,60266,37207],{"class":4174},[4005,60268,49627],{"class":4182},[4005,60270,60271],{"class":4330},"\"Ноутбук\"",[4005,60273,29475],{"class":4182},[4005,60275,60276,60279,60281,60284],{"class":4007,"line":50040},[4005,60277,60278],{"class":4174},"        Price",[4005,60280,11172],{"class":4182},[4005,60282,60283],{"class":4186},"25000",[4005,60285,29475],{"class":4182},[4005,60287,60288],{"class":4007,"line":50046},[4005,60289,5127],{"class":4182},[4005,60291,60292],{"class":4007,"line":50060},[4005,60293,5214],{"class":4182},[4005,60295,60296,60298,60300,60302,60304,60306,60308,60311,60313,60315,60317,60319,60321,60323,60325],{"class":4007,"line":50078},[4005,60297,5370],{"class":4174},[4005,60299,3769],{"class":4182},[4005,60301,7945],{"class":4302},[4005,60303,4611],{"class":4182},[4005,60305,7968],{"class":4330},[4005,60307,7965],{"class":7964},[4005,60309,60310],{"class":4330},"Product ID: ",[4005,60312,7959],{"class":4174},[4005,60314,7965],{"class":7964},[4005,60316,7968],{"class":4330},[4005,60318,3836],{"class":4182},[4005,60320,10087],{"class":4174},[4005,60322,3769],{"class":4182},[4005,60324,47055],{"class":4174},[4005,60326,4482],{"class":4182},[4005,60328,60329,60331,60333,60335,60337,60339,60341,60343,60345,60347,60349,60351,60353],{"class":4007,"line":50083},[4005,60330,5370],{"class":4174},[4005,60332,3769],{"class":4182},[4005,60334,7945],{"class":4302},[4005,60336,4611],{"class":4182},[4005,60338,60159],{"class":4330},[4005,60340,16775],{"class":4174},[4005,60342,7965],{"class":7964},[4005,60344,7968],{"class":4330},[4005,60346,3836],{"class":4182},[4005,60348,10087],{"class":4174},[4005,60350,3769],{"class":4182},[4005,60352,59873],{"class":4302},[4005,60354,54899],{"class":4182},[4005,60356,60357],{"class":4007,"line":50088},[4005,60358,4078],{"class":4182},[9014,60360,60362],{"id":60361},"конфлікти-імен-при-embedding","Конфлікти імен при embedding",[3908,60364,60365],{},"Що буде, якщо вбудована структура і зовнішня мають поля з однаковими іменами?",[3984,60367,60369],{"className":4162,"code":60368,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\ntype Inner struct {\n    Name string\n}\n\ntype Outer struct {\n    Inner\n    Name string  \u002F\u002F ← Конфлікт імен!\n}\n\nfunc main() {\n    obj := Outer{\n        Inner: Inner{Name: \"Inner Name\"},\n        Name:  \"Outer Name\",\n    }\n    \n    fmt.Println(obj.Name)        \u002F\u002F \"Outer Name\" — зовнішнє поле має пріоритет\n    fmt.Println(obj.Inner.Name)  \u002F\u002F \"Inner Name\" — доступ через явне поле\n}\n",[3753,60370,60371,60377,60381,60387,60391,60402,60408,60412,60416,60426,60431,60440,60444,60448,60456,60468,60489,60500,60504,60508,60530,60555],{"__ignoreMap":3992},[4005,60372,60373,60375],{"class":4007,"line":4008},[4005,60374,5739],{"class":4171},[4005,60376,5742],{"class":4178},[4005,60378,60379],{"class":4007,"line":4014},[4005,60380,4036],{"emptyLinePlaceholder":4035},[4005,60382,60383,60385],{"class":4007,"line":4020},[4005,60384,3917],{"class":4836},[4005,60386,7656],{"class":4330},[4005,60388,60389],{"class":4007,"line":4026},[4005,60390,4036],{"emptyLinePlaceholder":4035},[4005,60392,60393,60395,60398,60400],{"class":4007,"line":4032},[4005,60394,4809],{"class":4171},[4005,60396,60397],{"class":4178}," Inner",[4005,60399,10957],{"class":4171},[4005,60401,5073],{"class":4182},[4005,60403,60404,60406],{"class":4007,"line":4039},[4005,60405,20769],{"class":4174},[4005,60407,20772],{"class":4178},[4005,60409,60410],{"class":4007,"line":4045},[4005,60411,4078],{"class":4182},[4005,60413,60414],{"class":4007,"line":4051},[4005,60415,4036],{"emptyLinePlaceholder":4035},[4005,60417,60418,60420,60422,60424],{"class":4007,"line":4057},[4005,60419,4809],{"class":4171},[4005,60421,58781],{"class":4178},[4005,60423,10957],{"class":4171},[4005,60425,5073],{"class":4182},[4005,60427,60428],{"class":4007,"line":4063},[4005,60429,60430],{"class":4178},"    Inner\n",[4005,60432,60433,60435,60437],{"class":4007,"line":4069},[4005,60434,20769],{"class":4174},[4005,60436,4237],{"class":4178},[4005,60438,60439],{"class":4190},"  \u002F\u002F ← Конфлікт імен!\n",[4005,60441,60442],{"class":4007,"line":4075},[4005,60443,4078],{"class":4182},[4005,60445,60446],{"class":4007,"line":4081},[4005,60447,4036],{"emptyLinePlaceholder":4035},[4005,60449,60450,60452,60454],{"class":4007,"line":4086},[4005,60451,4299],{"class":4171},[4005,60453,5764],{"class":4302},[4005,60455,4306],{"class":4182},[4005,60457,60458,60461,60463,60466],{"class":4007,"line":4092},[4005,60459,60460],{"class":4174},"    obj",[4005,60462,4314],{"class":4182},[4005,60464,60465],{"class":4178},"Outer",[4005,60467,29461],{"class":4182},[4005,60469,60470,60473,60475,60478,60480,60482,60484,60487],{"class":4007,"line":4098},[4005,60471,60472],{"class":4174},"        Inner",[4005,60474,11172],{"class":4182},[4005,60476,60477],{"class":4178},"Inner",[4005,60479,16268],{"class":4182},[4005,60481,20803],{"class":4174},[4005,60483,11172],{"class":4182},[4005,60485,60486],{"class":4330},"\"Inner Name\"",[4005,60488,38437],{"class":4182},[4005,60490,60491,60493,60495,60498],{"class":4007,"line":4104},[4005,60492,37207],{"class":4174},[4005,60494,49627],{"class":4182},[4005,60496,60497],{"class":4330},"\"Outer Name\"",[4005,60499,29475],{"class":4182},[4005,60501,60502],{"class":4007,"line":4110},[4005,60503,5127],{"class":4182},[4005,60505,60506],{"class":4007,"line":4937},[4005,60507,5214],{"class":4182},[4005,60509,60510,60512,60514,60516,60518,60521,60523,60525,60527],{"class":4007,"line":4942},[4005,60511,5370],{"class":4174},[4005,60513,3769],{"class":4182},[4005,60515,5348],{"class":4302},[4005,60517,4611],{"class":4182},[4005,60519,60520],{"class":4174},"obj",[4005,60522,3769],{"class":4182},[4005,60524,20803],{"class":4174},[4005,60526,16007],{"class":4182},[4005,60528,60529],{"class":4190},"\u002F\u002F \"Outer Name\" — зовнішнє поле має пріоритет\n",[4005,60531,60532,60534,60536,60538,60540,60542,60544,60546,60548,60550,60552],{"class":4007,"line":4947},[4005,60533,5370],{"class":4174},[4005,60535,3769],{"class":4182},[4005,60537,5348],{"class":4302},[4005,60539,4611],{"class":4182},[4005,60541,60520],{"class":4174},[4005,60543,3769],{"class":4182},[4005,60545,60477],{"class":4174},[4005,60547,3769],{"class":4182},[4005,60549,20803],{"class":4174},[4005,60551,5196],{"class":4182},[4005,60553,60554],{"class":4190},"\u002F\u002F \"Inner Name\" — доступ через явне поле\n",[4005,60556,60557],{"class":4007,"line":4953},[4005,60558,4078],{"class":4182},[3908,60560,60561,60563,60564,60567],{},[3871,60562,53977],{}," зовнішнє поле ",[3871,60565,60566],{},"перекриває"," вбудоване. Доступ до вбудованого лише через явну назву типу.",[44169,60569,60570,60575,60748],{},[3908,60571,60572],{},[3871,60573,60574],{},"Конфлікт методів:",[3984,60576,60578],{"className":4162,"code":60577,"language":4164,"meta":3992,"style":3992},"type A struct{}\nfunc (a A) Print() { fmt.Println(\"A\") }\n\ntype B struct{}\nfunc (b B) Print() { fmt.Println(\"B\") }\n\ntype C struct {\n    A\n    B\n}\n\nc := C{}\n\u002F\u002F c.Print()  \u002F\u002F ❌ Помилка компіляції: ambiguous selector c.Print\nc.A.Print()   \u002F\u002F ✅ OK: викликаємо явно\nc.B.Print()   \u002F\u002F ✅ OK\n",[3753,60579,60580,60590,60621,60625,60635,60664,60668,60678,60683,60688,60692,60696,60706,60714,60732],{"__ignoreMap":3992},[4005,60581,60582,60584,60586,60588],{"class":4007,"line":4008},[4005,60583,4809],{"class":4171},[4005,60585,57735],{"class":4178},[4005,60587,10957],{"class":4171},[4005,60589,17635],{"class":4182},[4005,60591,60592,60594,60596,60599,60601,60603,60605,60607,60609,60611,60613,60615,60618],{"class":4007,"line":4014},[4005,60593,4299],{"class":4171},[4005,60595,4761],{"class":4182},[4005,60597,60598],{"class":4174},"a ",[4005,60600,21053],{"class":4178},[4005,60602,4498],{"class":4182},[4005,60604,20553],{"class":4302},[4005,60606,46720],{"class":4182},[4005,60608,3785],{"class":4174},[4005,60610,3769],{"class":4182},[4005,60612,5348],{"class":4302},[4005,60614,4611],{"class":4182},[4005,60616,60617],{"class":4330},"\"A\"",[4005,60619,60620],{"class":4182},") }\n",[4005,60622,60623],{"class":4007,"line":4020},[4005,60624,4036],{"emptyLinePlaceholder":4035},[4005,60626,60627,60629,60631,60633],{"class":4007,"line":4026},[4005,60628,4809],{"class":4171},[4005,60630,57752],{"class":4178},[4005,60632,10957],{"class":4171},[4005,60634,17635],{"class":4182},[4005,60636,60637,60639,60641,60643,60645,60647,60649,60651,60653,60655,60657,60659,60662],{"class":4007,"line":4032},[4005,60638,4299],{"class":4171},[4005,60640,4761],{"class":4182},[4005,60642,59811],{"class":4174},[4005,60644,48558],{"class":4178},[4005,60646,4498],{"class":4182},[4005,60648,20553],{"class":4302},[4005,60650,46720],{"class":4182},[4005,60652,3785],{"class":4174},[4005,60654,3769],{"class":4182},[4005,60656,5348],{"class":4302},[4005,60658,4611],{"class":4182},[4005,60660,60661],{"class":4330},"\"B\"",[4005,60663,60620],{"class":4182},[4005,60665,60666],{"class":4007,"line":4039},[4005,60667,4036],{"emptyLinePlaceholder":4035},[4005,60669,60670,60672,60674,60676],{"class":4007,"line":4045},[4005,60671,4809],{"class":4171},[4005,60673,57765],{"class":4178},[4005,60675,10957],{"class":4171},[4005,60677,5073],{"class":4182},[4005,60679,60680],{"class":4007,"line":4051},[4005,60681,60682],{"class":4178},"    A\n",[4005,60684,60685],{"class":4007,"line":4057},[4005,60686,60687],{"class":4178},"    B\n",[4005,60689,60690],{"class":4007,"line":4063},[4005,60691,4078],{"class":4182},[4005,60693,60694],{"class":4007,"line":4069},[4005,60695,4036],{"emptyLinePlaceholder":4035},[4005,60697,60698,60700,60702,60704],{"class":4007,"line":4075},[4005,60699,4386],{"class":4174},[4005,60701,4314],{"class":4182},[4005,60703,41702],{"class":4178},[4005,60705,17635],{"class":4182},[4005,60707,60708,60711],{"class":4007,"line":4081},[4005,60709,60710],{"class":4190},"\u002F\u002F c.Print()",[4005,60712,60713],{"class":4190},"  \u002F\u002F ❌ Помилка компіляції: ambiguous selector c.Print\n",[4005,60715,60716,60718,60720,60722,60724,60726,60729],{"class":4007,"line":4086},[4005,60717,4386],{"class":4174},[4005,60719,3769],{"class":4182},[4005,60721,21053],{"class":4174},[4005,60723,3769],{"class":4182},[4005,60725,20553],{"class":4302},[4005,60727,60728],{"class":4182},"()   ",[4005,60730,60731],{"class":4190},"\u002F\u002F ✅ OK: викликаємо явно\n",[4005,60733,60734,60736,60738,60740,60742,60744,60746],{"class":4007,"line":4092},[4005,60735,4386],{"class":4174},[4005,60737,3769],{"class":4182},[4005,60739,48558],{"class":4174},[4005,60741,3769],{"class":4182},[4005,60743,20553],{"class":4302},[4005,60745,60728],{"class":4182},[4005,60747,45340],{"class":4190},[3908,60749,60750,60751,3769],{},"Якщо два вбудовані типи мають методи з однаковою назвою — ",[3871,60752,60753],{},"компілятор вимагає явного вибору",[9014,60755,60757],{"id":60756},"коли-використовувати-embedding-vs-named-field","Коли використовувати embedding vs named field?",[5991,60759,60760,60772],{},[5994,60761,60762],{},[5997,60763,60764,60766,60769],{},[6000,60765,44409],{},[6000,60767,60768],{},"Named Field",[6000,60770,60771],{},"Embedding",[6010,60773,60774,60787,60800,60813,60826],{},[5997,60775,60776,60781,60784],{},[6015,60777,60778],{},[3871,60779,60780],{},"Ясність коду",[6015,60782,60783],{},"✅ Явно видно зв'язок",[6015,60785,60786],{},"⚠️ Менш очевидно",[5997,60788,60789,60794,60797],{},[6015,60790,60791],{},[3871,60792,60793],{},"Довжина запису",[6015,60795,60796],{},"❌ Довші шляхи",[6015,60798,60799],{},"✅ Короткі шляхи",[5997,60801,60802,60807,60810],{},[6015,60803,60804],{},[3871,60805,60806],{},"Можливість конфліктів",[6015,60808,60809],{},"✅ Немає",[6015,60811,60812],{},"⚠️ Є ризик",[5997,60814,60815,60820,60823],{},[6015,60816,60817],{},[3871,60818,60819],{},"Реалізація інтерфейсів",[6015,60821,60822],{},"❌ Не успадковується",[6015,60824,60825],{},"✅ Автоматично",[5997,60827,60828,60832,60835],{},[6015,60829,60830],{},[3871,60831,9923],{},[6015,60833,60834],{},"Коли є \"має\" (has-a)",[6015,60836,60837],{},"Коли є \"поводиться як\" (is-like-a)",[3908,60839,60840],{},[3871,60841,60842],{},"Практичні рекомендації:",[3908,60844,60845],{},[3871,60846,60847],{},"✅ Використовуйте Embedding коли:",[3746,60849,60850,60858,60865,60868],{},[3749,60851,60852,60853,3836,60855,5032],{},"Базові структури (",[3753,60854,59814],{},[3753,60856,60857],{},"BaseModel",[3749,60859,60860,60861,3836,60863,5032],{},"Міксини (",[3753,60862,55894],{},[3753,60864,59354],{},[3749,60866,60867],{},"Хочете реалізувати інтерфейс автоматично",[3749,60869,60870],{},"Короткі шляхи важливі",[3984,60872,60874],{"className":4162,"code":60873,"language":4164,"meta":3992,"style":3992},"type UserService struct {\n    sync.Mutex  \u002F\u002F Embedding для блокування\n    Logger      \u002F\u002F Embedding для логування\n    \u002F\u002F ...\n}\n",[3753,60875,60876,60886,60898,60905,60909],{"__ignoreMap":3992},[4005,60877,60878,60880,60882,60884],{"class":4007,"line":4008},[4005,60879,4809],{"class":4171},[4005,60881,59496],{"class":4178},[4005,60883,10957],{"class":4171},[4005,60885,5073],{"class":4182},[4005,60887,60888,60890,60892,60895],{"class":4007,"line":4014},[4005,60889,56380],{"class":4178},[4005,60891,3769],{"class":4182},[4005,60893,60894],{"class":4178},"Mutex",[4005,60896,60897],{"class":4190},"  \u002F\u002F Embedding для блокування\n",[4005,60899,60900,60902],{"class":4007,"line":4020},[4005,60901,59505],{"class":4178},[4005,60903,60904],{"class":4190},"      \u002F\u002F Embedding для логування\n",[4005,60906,60907],{"class":4007,"line":4026},[4005,60908,13723],{"class":4190},[4005,60910,60911],{"class":4007,"line":4032},[4005,60912,4078],{"class":4182},[3908,60914,60915],{},[3871,60916,60917],{},"✅ Використовуйте Named Field коли:",[3746,60919,60920,60923,60926,60929],{},[3749,60921,60922],{},"Зв'язок не є \"is-like-a\"",[3749,60924,60925],{},"Потрібна явна ізоляція",[3749,60927,60928],{},"Ризик конфліктів імен",[3749,60930,60931],{},"Читабельність важливіша за короткість",[3984,60933,60935],{"className":4162,"code":60934,"language":4164,"meta":3992,"style":3992},"type Car struct {\n    Engine Engine  \u002F\u002F Named: машина має двигун, але не є двигуном\n    Owner  Person  \u002F\u002F Named: явний зв'язок\n}\n",[3753,60936,60937,60947,60956,60967],{"__ignoreMap":3992},[4005,60938,60939,60941,60943,60945],{"class":4007,"line":4008},[4005,60940,4809],{"class":4171},[4005,60942,58389],{"class":4178},[4005,60944,10957],{"class":4171},[4005,60946,5073],{"class":4182},[4005,60948,60949,60951,60953],{"class":4007,"line":4014},[4005,60950,58405],{"class":4174},[4005,60952,58212],{"class":4178},[4005,60954,60955],{"class":4190},"  \u002F\u002F Named: машина має двигун, але не є двигуном\n",[4005,60957,60958,60961,60964],{"class":4007,"line":4020},[4005,60959,60960],{"class":4174},"    Owner",[4005,60962,60963],{"class":4178},"  Person",[4005,60965,60966],{"class":4190},"  \u002F\u002F Named: явний зв'язок\n",[4005,60968,60969],{"class":4007,"line":4026},[4005,60970,4078],{"class":4182},[4484,60972,60973,60977,60983,60986,60997],{"icon":4486},[3908,60974,60975],{},[3871,60976,24711],{},[3908,60978,60979,60980,60982],{},"Якщо сумніваєтесь — використовуйте ",[3871,60981,60768],{},". Це явніше і безпечніше.",[3908,60984,60985],{},"Embedding додавайте лише коли:",[4781,60987,60988,60991,60994],{},[3749,60989,60990],{},"Точно знаєте, що робите",[3749,60992,60993],{},"Хочете коротший синтаксис",[3749,60995,60996],{},"Потрібно реалізувати інтерфейс",[3908,60998,60999,61002],{},[3871,61000,61001],{},"\"Явне краще за неявне\""," — один з принципів Go.",[3900,61004],{},[3976,61006,61008],{"id":61007},"методи-на-будь-якому-визначеному-типі-а-не-лише-на-структурах-для-допитливих","Методи на будь-якому визначеному типі, а не лише на структурах — для допитливих",[3908,61010,61011,61014,61015,61018,61019,61021],{},[3871,61012,61013],{},"Проста теорія наперед:"," поки що достатньо ",[3753,61016,61017],{},"func (u User) String()"," на структурах. Нижче — як той самий прийом працює на ",[3753,61020,8437],{}," чи зрізах.",[3908,61023,61024,61025,3880,61028,7036,61030,61033],{},"На відміну від Java\u002FC#, в Go метод можна прив'язати до ",[3871,61026,61027],{},"будь-якого",[3753,61029,4809],{},[3753,61031,61032],{},"type X T"," (крім покажчиків та інтерфейсів):",[3984,61035,61037],{"className":4162,"code":61036,"language":4164,"meta":3992,"style":3992},"type Celsius float64\nfunc (c Celsius) String() string { return fmt.Sprintf(\"%.1f°C\", float64(c)) }\nfunc (c Celsius) ToFahrenheit() Celsius { return Celsius(float64(c)*9\u002F5 + 32) }\n\ntype UserIDs []int64\nfunc (ids UserIDs) Contains(id int64) bool {\n    for _, v := range ids { if v == id { return true } }\n    return false\n}\n\nvar temp Celsius = 36.6\nfmt.Println(temp.String()) \u002F\u002F 36.6°C — метод на float64!\nvar ids UserIDs = []int64{1,2,3}\nfmt.Println(ids.Contains(2)) \u002F\u002F true\n",[3753,61038,61039,61047,61094,61141,61145,61157,61185,61221,61227,61231,61235,61249,61270,61298],{"__ignoreMap":3992},[4005,61040,61041,61043,61045],{"class":4007,"line":4008},[4005,61042,4809],{"class":4171},[4005,61044,45741],{"class":4178},[4005,61046,45744],{"class":4178},[4005,61048,61049,61051,61053,61055,61057,61059,61061,61063,61065,61067,61069,61071,61073,61075,61077,61079,61081,61083,61085,61087,61089,61091],{"class":4007,"line":4014},[4005,61050,4299],{"class":4171},[4005,61052,4761],{"class":4182},[4005,61054,45771],{"class":4174},[4005,61056,45774],{"class":4178},[4005,61058,4498],{"class":4182},[4005,61060,7343],{"class":4302},[4005,61062,7346],{"class":4182},[4005,61064,7004],{"class":4178},[4005,61066,35469],{"class":4182},[4005,61068,35265],{"class":4836},[4005,61070,32994],{"class":4174},[4005,61072,3769],{"class":4182},[4005,61074,32999],{"class":4302},[4005,61076,4611],{"class":4182},[4005,61078,7968],{"class":4330},[4005,61080,29134],{"class":4174},[4005,61082,45859],{"class":4330},[4005,61084,3836],{"class":4182},[4005,61086,8437],{"class":4178},[4005,61088,4611],{"class":4182},[4005,61090,4386],{"class":4174},[4005,61092,61093],{"class":4182},")) }\n",[4005,61095,61096,61098,61100,61102,61104,61106,61108,61110,61112,61114,61116,61118,61120,61122,61124,61126,61129,61131,61133,61135,61137,61139],{"class":4007,"line":4020},[4005,61097,4299],{"class":4171},[4005,61099,4761],{"class":4182},[4005,61101,45771],{"class":4174},[4005,61103,45774],{"class":4178},[4005,61105,4498],{"class":4182},[4005,61107,45779],{"class":4302},[4005,61109,7346],{"class":4182},[4005,61111,45774],{"class":4178},[4005,61113,35469],{"class":4182},[4005,61115,35265],{"class":4836},[4005,61117,45741],{"class":4302},[4005,61119,4611],{"class":4182},[4005,61121,8437],{"class":4178},[4005,61123,4611],{"class":4182},[4005,61125,4386],{"class":4174},[4005,61127,61128],{"class":4182},")*",[4005,61130,45801],{"class":4186},[4005,61132,3858],{"class":4182},[4005,61134,5869],{"class":4186},[4005,61136,6289],{"class":4182},[4005,61138,45810],{"class":4186},[4005,61140,60620],{"class":4182},[4005,61142,61143],{"class":4007,"line":4026},[4005,61144,4036],{"emptyLinePlaceholder":4035},[4005,61146,61147,61149,61152,61154],{"class":4007,"line":4032},[4005,61148,4809],{"class":4171},[4005,61150,61151],{"class":4178}," UserIDs",[4005,61153,26632],{"class":4182},[4005,61155,61156],{"class":4178},"int64\n",[4005,61158,61159,61161,61163,61166,61169,61171,61173,61175,61177,61179,61181,61183],{"class":4007,"line":4039},[4005,61160,4299],{"class":4171},[4005,61162,4761],{"class":4182},[4005,61164,61165],{"class":4174},"ids ",[4005,61167,61168],{"class":4178},"UserIDs",[4005,61170,4498],{"class":4182},[4005,61172,13786],{"class":4302},[4005,61174,4611],{"class":4182},[4005,61176,7180],{"class":4174},[4005,61178,4179],{"class":4178},[4005,61180,4498],{"class":4182},[4005,61182,8505],{"class":4178},[4005,61184,5073],{"class":4182},[4005,61186,61187,61189,61191,61193,61195,61197,61199,61202,61204,61206,61208,61210,61212,61214,61216,61218],{"class":4007,"line":4045},[4005,61188,12138],{"class":4836},[4005,61190,17642],{"class":4174},[4005,61192,3836],{"class":4182},[4005,61194,26507],{"class":4174},[4005,61196,4314],{"class":4182},[4005,61198,12151],{"class":4836},[4005,61200,61201],{"class":4174}," ids",[4005,61203,35469],{"class":4182},[4005,61205,3800],{"class":4836},[4005,61207,26457],{"class":4174},[4005,61209,5473],{"class":4182},[4005,61211,7180],{"class":4174},[4005,61213,35469],{"class":4182},[4005,61215,35265],{"class":4836},[4005,61217,5323],{"class":4171},[4005,61219,61220],{"class":4182}," } }\n",[4005,61222,61223,61225],{"class":4007,"line":4051},[4005,61224,5260],{"class":4836},[4005,61226,50263],{"class":4171},[4005,61228,61229],{"class":4007,"line":4057},[4005,61230,4078],{"class":4182},[4005,61232,61233],{"class":4007,"line":4063},[4005,61234,4036],{"emptyLinePlaceholder":4035},[4005,61236,61237,61239,61242,61244,61246],{"class":4007,"line":4069},[4005,61238,3963],{"class":4171},[4005,61240,61241],{"class":4174}," temp",[4005,61243,45741],{"class":4178},[4005,61245,4183],{"class":4182},[4005,61247,61248],{"class":4186},"36.6\n",[4005,61250,61251,61253,61255,61257,61259,61261,61263,61265,61267],{"class":4007,"line":4075},[4005,61252,3785],{"class":4174},[4005,61254,3769],{"class":4182},[4005,61256,5348],{"class":4302},[4005,61258,4611],{"class":4182},[4005,61260,46028],{"class":4174},[4005,61262,3769],{"class":4182},[4005,61264,7343],{"class":4302},[4005,61266,39042],{"class":4182},[4005,61268,61269],{"class":4190},"\u002F\u002F 36.6°C — метод на float64!\n",[4005,61271,61272,61274,61276,61278,61281,61283,61285,61287,61290,61292,61294,61296],{"class":4007,"line":4081},[4005,61273,3963],{"class":4171},[4005,61275,61201],{"class":4174},[4005,61277,61151],{"class":4178},[4005,61279,61280],{"class":4182}," = []",[4005,61282,4154],{"class":4178},[4005,61284,16268],{"class":4182},[4005,61286,4393],{"class":4186},[4005,61288,61289],{"class":4182},",",[4005,61291,4398],{"class":4186},[4005,61293,61289],{"class":4182},[4005,61295,6286],{"class":4186},[4005,61297,4078],{"class":4182},[4005,61299,61300,61302,61304,61306,61308,61311,61313,61315,61317,61319,61321],{"class":4007,"line":4086},[4005,61301,3785],{"class":4174},[4005,61303,3769],{"class":4182},[4005,61305,5348],{"class":4302},[4005,61307,4611],{"class":4182},[4005,61309,61310],{"class":4174},"ids",[4005,61312,3769],{"class":4182},[4005,61314,13786],{"class":4302},[4005,61316,4611],{"class":4182},[4005,61318,4398],{"class":4186},[4005,61320,42089],{"class":4182},[4005,61322,61323],{"class":4190},"\u002F\u002F true\n",[3940,61325,61326,61327,61330,61331,4498,61333,61336,61337,61339,61340,61343,61344,61346,61347,61349,61350,61352],{},"Псевдонім ",[3753,61328,61329],{},"type MyInt = int"," (зі знаком ",[3753,61332,45122],{},[3871,61334,61335],{},"не може"," мати власних методів — він тотожний ",[3753,61338,4158],{},". Лише ",[3753,61341,61342],{},"type MyInt int"," (без ",[3753,61345,45122],{},") створює новий тип із власним набором методів. Тому в ",[3753,61348,9258],{}," методи не додати, а в ",[3753,61351,9269],{}," — можна.",[3900,61354],{},[3976,61356,61358],{"id":61357},"теги-структур-struct-tags-для-мережевих-контрактів-jsonsql","Теги структур (Struct Tags) для мережевих контрактів JSON\u002FSQL",[3908,61360,61361],{},"У клієнт-серверних вебзастосунках бекенд постійно конвертує дані між внутрішніми структурами Go та зовнішніми форматами (JSON для HTTP REST API, колонками реляційних баз даних PostgreSQL\u002FMySQL, XML тощо).",[3908,61363,61364,61370,61371,61374],{},[3871,61365,61366,61367,5032],{},"Тег поля структури (",[3753,61368,61369],{},"Struct Tag"," — це рядок метаданих, записаний у зворотних апострофах після типу поля, який зчитується стандартними пакетами (наприклад, ",[3753,61372,61373],{},"encoding\u002Fjson"," або ORM-бібліотеками) за допомогою рефлексії.",[3984,61376,61378],{"className":4162,"code":61377,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"encoding\u002Fjson\"\n    \"fmt\"\n)\n\ntype APIUserResponse struct {\n    \u002F\u002F 1. `json:\"id\"` — перейменовує поле ID у нижній регістр \"id\" для клієнта\n    ID int64 `json:\"id\"`\n\n    \u002F\u002F 2. `json:\"user_name\"` — кастомне ім'я поля в JSON\n    Username string `json:\"user_name\"`\n\n    \u002F\u002F 3. `json:\"bio,omitempty\"` — якщо рядок порожній (\"\"), поле взагалі ВИКЛЮЧАЄТЬСЯ з JSON!\n    Bio string `json:\"bio,omitempty\"`\n\n    \u002F\u002F 4. `json:\"-\"` — поле повністю ІГНОРУЄТЬСЯ і ніколи не потрапить у відповідь (захист паролів)\n    PasswordHash string `json:\"-\"`\n\n    \u002F\u002F 5. `json:\",string\"` — кодує число як рядок у JSON (\"8080\" замість 8080)\n    Port int `json:\"port,string\"`\n}\n\nfunc main() {\n    user := APIUserResponse{\n        ID:           42,\n        Username:     \"taras_shevchenko\",\n        Bio:          \"\", \u002F\u002F Порожнє: omitempty виключить його з виводу\n        PasswordHash: \"super_secret_bcrypt_hash_999\",\n        Port:         8080,\n    }\n\n    \u002F\u002F Серіалізація структури в красивий відформатований JSON:\n    jsonData, err := json.MarshalIndent(user, \"\", \"  \")\n    if err != nil {\n        fmt.Println(\"Помилка серіалізації:\", err)\n        return\n    }\n\n    fmt.Println(\"Згенерований JSON для клієнта:\")\n    fmt.Println(string(jsonData))\n}\n",[3753,61379,61380,61386,61390,61396,61400,61404,61408,61412,61423,61428,61437,61441,61446,61455,61459,61464,61474,61478,61483,61493,61497,61502,61511,61515,61519,61527,61538,61549,61560,61575,61587,61598,61602,61606,61611,61644,61656,61675,61679,61683,61687,61702,61720],{"__ignoreMap":3992},[4005,61381,61382,61384],{"class":4007,"line":4008},[4005,61383,5739],{"class":4171},[4005,61385,5742],{"class":4178},[4005,61387,61388],{"class":4007,"line":4014},[4005,61389,4036],{"emptyLinePlaceholder":4035},[4005,61391,61392,61394],{"class":4007,"line":4020},[4005,61393,3917],{"class":4836},[4005,61395,4439],{"class":4182},[4005,61397,61398],{"class":4007,"line":4026},[4005,61399,4853],{"class":4330},[4005,61401,61402],{"class":4007,"line":4032},[4005,61403,4843],{"class":4330},[4005,61405,61406],{"class":4007,"line":4039},[4005,61407,4482],{"class":4182},[4005,61409,61410],{"class":4007,"line":4045},[4005,61411,4036],{"emptyLinePlaceholder":4035},[4005,61413,61414,61416,61419,61421],{"class":4007,"line":4051},[4005,61415,4809],{"class":4171},[4005,61417,61418],{"class":4178}," APIUserResponse",[4005,61420,10957],{"class":4171},[4005,61422,5073],{"class":4182},[4005,61424,61425],{"class":4007,"line":4057},[4005,61426,61427],{"class":4190},"    \u002F\u002F 1. `json:\"id\"` — перейменовує поле ID у нижній регістр \"id\" для клієнта\n",[4005,61429,61430,61432,61434],{"class":4007,"line":4063},[4005,61431,46381],{"class":4174},[4005,61433,4179],{"class":4178},[4005,61435,61436],{"class":4330}," `json:\"id\"`\n",[4005,61438,61439],{"class":4007,"line":4069},[4005,61440,4036],{"emptyLinePlaceholder":4035},[4005,61442,61443],{"class":4007,"line":4075},[4005,61444,61445],{"class":4190},"    \u002F\u002F 2. `json:\"user_name\"` — кастомне ім'я поля в JSON\n",[4005,61447,61448,61450,61452],{"class":4007,"line":4081},[4005,61449,33486],{"class":4174},[4005,61451,4237],{"class":4178},[4005,61453,61454],{"class":4330}," `json:\"user_name\"`\n",[4005,61456,61457],{"class":4007,"line":4086},[4005,61458,4036],{"emptyLinePlaceholder":4035},[4005,61460,61461],{"class":4007,"line":4092},[4005,61462,61463],{"class":4190},"    \u002F\u002F 3. `json:\"bio,omitempty\"` — якщо рядок порожній (\"\"), поле взагалі ВИКЛЮЧАЄТЬСЯ з JSON!\n",[4005,61465,61466,61469,61471],{"class":4007,"line":4098},[4005,61467,61468],{"class":4174},"    Bio",[4005,61470,4237],{"class":4178},[4005,61472,61473],{"class":4330}," `json:\"bio,omitempty\"`\n",[4005,61475,61476],{"class":4007,"line":4104},[4005,61477,4036],{"emptyLinePlaceholder":4035},[4005,61479,61480],{"class":4007,"line":4110},[4005,61481,61482],{"class":4190},"    \u002F\u002F 4. `json:\"-\"` — поле повністю ІГНОРУЄТЬСЯ і ніколи не потрапить у відповідь (захист паролів)\n",[4005,61484,61485,61488,61490],{"class":4007,"line":4937},[4005,61486,61487],{"class":4174},"    PasswordHash",[4005,61489,4237],{"class":4178},[4005,61491,61492],{"class":4330}," `json:\"-\"`\n",[4005,61494,61495],{"class":4007,"line":4942},[4005,61496,4036],{"emptyLinePlaceholder":4035},[4005,61498,61499],{"class":4007,"line":4947},[4005,61500,61501],{"class":4190},"    \u002F\u002F 5. `json:\",string\"` — кодує число як рядок у JSON (\"8080\" замість 8080)\n",[4005,61503,61504,61506,61508],{"class":4007,"line":4953},[4005,61505,44596],{"class":4174},[4005,61507,4224],{"class":4178},[4005,61509,61510],{"class":4330}," `json:\"port,string\"`\n",[4005,61512,61513],{"class":4007,"line":4960},[4005,61514,4078],{"class":4182},[4005,61516,61517],{"class":4007,"line":4973},[4005,61518,4036],{"emptyLinePlaceholder":4035},[4005,61520,61521,61523,61525],{"class":4007,"line":4985},[4005,61522,4299],{"class":4171},[4005,61524,5764],{"class":4302},[4005,61526,4306],{"class":4182},[4005,61528,61529,61531,61533,61536],{"class":4007,"line":7813},[4005,61530,49952],{"class":4174},[4005,61532,4314],{"class":4182},[4005,61534,61535],{"class":4178},"APIUserResponse",[4005,61537,29461],{"class":4182},[4005,61539,61540,61542,61545,61547],{"class":4007,"line":7819},[4005,61541,49041],{"class":4174},[4005,61543,61544],{"class":4182},":           ",[4005,61546,9440],{"class":4186},[4005,61548,29475],{"class":4182},[4005,61550,61551,61553,61555,61558],{"class":4007,"line":7826},[4005,61552,49052],{"class":4174},[4005,61554,49638],{"class":4182},[4005,61556,61557],{"class":4330},"\"taras_shevchenko\"",[4005,61559,29475],{"class":4182},[4005,61561,61562,61565,61568,61570,61572],{"class":4007,"line":7839},[4005,61563,61564],{"class":4174},"        Bio",[4005,61566,61567],{"class":4182},":          ",[4005,61569,4203],{"class":4330},[4005,61571,3836],{"class":4182},[4005,61573,61574],{"class":4190},"\u002F\u002F Порожнє: omitempty виключить його з виводу\n",[4005,61576,61577,61580,61582,61585],{"class":4007,"line":7864},[4005,61578,61579],{"class":4174},"        PasswordHash",[4005,61581,11172],{"class":4182},[4005,61583,61584],{"class":4330},"\"super_secret_bcrypt_hash_999\"",[4005,61586,29475],{"class":4182},[4005,61588,61589,61591,61594,61596],{"class":4007,"line":7872},[4005,61590,44667],{"class":4174},[4005,61592,61593],{"class":4182},":         ",[4005,61595,9563],{"class":4186},[4005,61597,29475],{"class":4182},[4005,61599,61600],{"class":4007,"line":7881},[4005,61601,5127],{"class":4182},[4005,61603,61604],{"class":4007,"line":7890},[4005,61605,4036],{"emptyLinePlaceholder":4035},[4005,61607,61608],{"class":4007,"line":7895},[4005,61609,61610],{"class":4190},"    \u002F\u002F Серіалізація структури в красивий відформатований JSON:\n",[4005,61612,61613,61616,61618,61620,61622,61624,61626,61629,61631,61633,61635,61637,61639,61642],{"class":4007,"line":7900},[4005,61614,61615],{"class":4174},"    jsonData",[4005,61617,3836],{"class":4182},[4005,61619,4598],{"class":4174},[4005,61621,4314],{"class":4182},[4005,61623,51453],{"class":4174},[4005,61625,3769],{"class":4182},[4005,61627,61628],{"class":4302},"MarshalIndent",[4005,61630,4611],{"class":4182},[4005,61632,20793],{"class":4174},[4005,61634,3836],{"class":4182},[4005,61636,4203],{"class":4330},[4005,61638,3836],{"class":4182},[4005,61640,61641],{"class":4330},"\"  \"",[4005,61643,4482],{"class":4182},[4005,61645,61646,61648,61650,61652,61654],{"class":4007,"line":7909},[4005,61647,5104],{"class":4836},[4005,61649,5107],{"class":4174},[4005,61651,5110],{"class":4182},[4005,61653,4209],{"class":4171},[4005,61655,5073],{"class":4182},[4005,61657,61658,61660,61662,61664,61666,61669,61671,61673],{"class":4007,"line":7915},[4005,61659,5343],{"class":4174},[4005,61661,3769],{"class":4182},[4005,61663,5348],{"class":4302},[4005,61665,4611],{"class":4182},[4005,61667,61668],{"class":4330},"\"Помилка серіалізації:\"",[4005,61670,3836],{"class":4182},[4005,61672,4598],{"class":4174},[4005,61674,4482],{"class":4182},[4005,61676,61677],{"class":4007,"line":7921},[4005,61678,34935],{"class":4836},[4005,61680,61681],{"class":4007,"line":7938},[4005,61682,5127],{"class":4182},[4005,61684,61685],{"class":4007,"line":7982},[4005,61686,4036],{"emptyLinePlaceholder":4035},[4005,61688,61689,61691,61693,61695,61697,61700],{"class":4007,"line":7987},[4005,61690,5370],{"class":4174},[4005,61692,3769],{"class":4182},[4005,61694,5348],{"class":4302},[4005,61696,4611],{"class":4182},[4005,61698,61699],{"class":4330},"\"Згенерований JSON для клієнта:\"",[4005,61701,4482],{"class":4182},[4005,61703,61704,61706,61708,61710,61712,61714,61716,61718],{"class":4007,"line":7993},[4005,61705,5370],{"class":4174},[4005,61707,3769],{"class":4182},[4005,61709,5348],{"class":4302},[4005,61711,4611],{"class":4182},[4005,61713,7004],{"class":4178},[4005,61715,4611],{"class":4182},[4005,61717,51796],{"class":4174},[4005,61719,25552],{"class":4182},[4005,61721,61722],{"class":4007,"line":8016},[4005,61723,4078],{"class":4182},[44780,61725,61727,61730,61740,61750,61760],{":cursor":4206,"title":61726},"Вихідний результат JSON-серіалізації",[44784,61728,16268],{"className":61729},[4007],[44784,61731,61733,61734,61739],{"className":61732},[4007],"  ",[4005,61735,61738],{"className":61736},[61737],"text-blue-400","\"id\"",": 42,",[44784,61741,61733,61743,11172,61747,61289],{"className":61742},[4007],[4005,61744,61746],{"className":61745},[61737],"\"user_name\"",[4005,61748,61557],{"className":61749},[44813],[44784,61751,61733,61753,11172,61756],{"className":61752},[4007],[4005,61754,38251],{"className":61755},[61737],[4005,61757,61759],{"className":61758},[44813],"\"8080\"",[44784,61761,16278],{"className":61762},[4007],[3900,61764],{},[3903,61766,61768],{"id":61767},"динамічні-колекції-зрізи-slices-та-словники-maps","Динамічні колекції: Зрізи (Slices) та Словники (Maps)",[3976,61770,61772],{"id":61771},"вступ-навіщо-потрібні-динамічні-колекції","Вступ: навіщо потрібні динамічні колекції?",[3908,61774,61775],{},"У реальних програмах розмір даних часто невідомий заздалегідь:",[3746,61777,61778,61781,61784,61787],{},[3749,61779,61780],{},"Кількість записів з бази даних",[3749,61782,61783],{},"Список підключених користувачів",[3749,61785,61786],{},"Елементи у кошику покупок",[3749,61788,61789],{},"Конфігурації з файлу",[3908,61791,61792,61793,61796],{},"Статичні масиви ",[3753,61794,61795],{},"[10]int"," не підходять — треба знати розмір при компіляції. Go надає дві динамічні колекції:",[3746,61798,61799,61805],{},[3749,61800,61801,61804],{},[3871,61802,61803],{},"Слайси (Slices)"," — динамічні списки елементів",[3749,61806,61807,61810],{},[3871,61808,61809],{},"Словники (Maps)"," — пари ключ-значення",[3900,61812],{},[3976,61814,61816],{"id":61815},"частина-1-зрізи-slices-динамічні-списки","Частина 1: Зрізи (Slices) — динамічні списки",[9014,61818,61820],{"id":61819},"що-таке-зріз","Що таке зріз?",[3908,61822,61823,61826],{},[3871,61824,61825],{},"Зріз (Slice)"," — це динамічний список елементів, який може змінювати розмір під час виконання програми.",[3908,61828,61829],{},[3871,61830,10831],{},[12533,61832,61833,62135],{},[12536,61834,61836,62110,62115],{"icon":12538,"label":61835},"Go — Slice",[3984,61837,61839],{"className":4162,"code":61838,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Створення зрізу\n    numbers := []int{10, 20, 30}\n    \n    \u002F\u002F Додавання елементів (розмір зростає автоматично)\n    numbers = append(numbers, 40)\n    numbers = append(numbers, 50)\n    \n    \u002F\u002F Довжина\n    fmt.Println(\"Довжина:\", len(numbers))  \u002F\u002F 5\n    \n    \u002F\u002F Доступ до елементів\n    fmt.Println(\"Перший:\", numbers[0])     \u002F\u002F 10\n    fmt.Println(\"Останній:\", numbers[len(numbers)-1])  \u002F\u002F 50\n    \n    \u002F\u002F Ітерація\n    for i, value := range numbers {\n        fmt.Printf(\"[%d] = %d\\n\", i, value)\n    }\n}\n",[3753,61840,61841,61847,61851,61857,61861,61869,61874,61896,61900,61905,61923,61941,61945,61950,61975,61979,61984,62010,62043,62047,62052,62070,62102,62106],{"__ignoreMap":3992},[4005,61842,61843,61845],{"class":4007,"line":4008},[4005,61844,5739],{"class":4171},[4005,61846,5742],{"class":4178},[4005,61848,61849],{"class":4007,"line":4014},[4005,61850,4036],{"emptyLinePlaceholder":4035},[4005,61852,61853,61855],{"class":4007,"line":4020},[4005,61854,3917],{"class":4836},[4005,61856,7656],{"class":4330},[4005,61858,61859],{"class":4007,"line":4026},[4005,61860,4036],{"emptyLinePlaceholder":4035},[4005,61862,61863,61865,61867],{"class":4007,"line":4032},[4005,61864,4299],{"class":4171},[4005,61866,5764],{"class":4302},[4005,61868,4306],{"class":4182},[4005,61870,61871],{"class":4007,"line":4039},[4005,61872,61873],{"class":4190},"    \u002F\u002F Створення зрізу\n",[4005,61875,61876,61878,61880,61882,61884,61886,61888,61890,61892,61894],{"class":4007,"line":4045},[4005,61877,29722],{"class":4174},[4005,61879,11583],{"class":4182},[4005,61881,4158],{"class":4178},[4005,61883,16268],{"class":4182},[4005,61885,4631],{"class":4186},[4005,61887,3836],{"class":4182},[4005,61889,5335],{"class":4186},[4005,61891,3836],{"class":4182},[4005,61893,4276],{"class":4186},[4005,61895,4078],{"class":4182},[4005,61897,61898],{"class":4007,"line":4051},[4005,61899,5214],{"class":4182},[4005,61901,61902],{"class":4007,"line":4057},[4005,61903,61904],{"class":4190},"    \u002F\u002F Додавання елементів (розмір зростає автоматично)\n",[4005,61906,61907,61909,61911,61913,61915,61917,61919,61921],{"class":4007,"line":4063},[4005,61908,29722],{"class":4174},[4005,61910,4183],{"class":4182},[4005,61912,17678],{"class":4302},[4005,61914,4611],{"class":4182},[4005,61916,29814],{"class":4174},[4005,61918,3836],{"class":4182},[4005,61920,30569],{"class":4186},[4005,61922,4482],{"class":4182},[4005,61924,61925,61927,61929,61931,61933,61935,61937,61939],{"class":4007,"line":4069},[4005,61926,29722],{"class":4174},[4005,61928,4183],{"class":4182},[4005,61930,17678],{"class":4302},[4005,61932,4611],{"class":4182},[4005,61934,29814],{"class":4174},[4005,61936,3836],{"class":4182},[4005,61938,26330],{"class":4186},[4005,61940,4482],{"class":4182},[4005,61942,61943],{"class":4007,"line":4075},[4005,61944,5214],{"class":4182},[4005,61946,61947],{"class":4007,"line":4081},[4005,61948,61949],{"class":4190},"    \u002F\u002F Довжина\n",[4005,61951,61952,61954,61956,61958,61960,61963,61965,61967,61969,61971,61973],{"class":4007,"line":4086},[4005,61953,5370],{"class":4174},[4005,61955,3769],{"class":4182},[4005,61957,5348],{"class":4302},[4005,61959,4611],{"class":4182},[4005,61961,61962],{"class":4330},"\"Довжина:\"",[4005,61964,3836],{"class":4182},[4005,61966,11465],{"class":4302},[4005,61968,4611],{"class":4182},[4005,61970,29814],{"class":4174},[4005,61972,11472],{"class":4182},[4005,61974,23912],{"class":4190},[4005,61976,61977],{"class":4007,"line":4092},[4005,61978,5214],{"class":4182},[4005,61980,61981],{"class":4007,"line":4098},[4005,61982,61983],{"class":4190},"    \u002F\u002F Доступ до елементів\n",[4005,61985,61986,61988,61990,61992,61994,61997,61999,62001,62003,62005,62008],{"class":4007,"line":4104},[4005,61987,5370],{"class":4174},[4005,61989,3769],{"class":4182},[4005,61991,5348],{"class":4302},[4005,61993,4611],{"class":4182},[4005,61995,61996],{"class":4330},"\"Перший:\"",[4005,61998,3836],{"class":4182},[4005,62000,29814],{"class":4174},[4005,62002,11561],{"class":4182},[4005,62004,4200],{"class":4186},[4005,62006,62007],{"class":4182},"])     ",[4005,62009,23836],{"class":4190},[4005,62011,62012,62014,62016,62018,62020,62023,62025,62027,62029,62031,62033,62035,62037,62039,62041],{"class":4007,"line":4110},[4005,62013,5370],{"class":4174},[4005,62015,3769],{"class":4182},[4005,62017,5348],{"class":4302},[4005,62019,4611],{"class":4182},[4005,62021,62022],{"class":4330},"\"Останній:\"",[4005,62024,3836],{"class":4182},[4005,62026,29814],{"class":4174},[4005,62028,11561],{"class":4182},[4005,62030,11465],{"class":4302},[4005,62032,4611],{"class":4182},[4005,62034,29814],{"class":4174},[4005,62036,50195],{"class":4182},[4005,62038,4393],{"class":4186},[4005,62040,11623],{"class":4182},[4005,62042,36008],{"class":4190},[4005,62044,62045],{"class":4007,"line":4937},[4005,62046,5214],{"class":4182},[4005,62048,62049],{"class":4007,"line":4942},[4005,62050,62051],{"class":4190},"    \u002F\u002F Ітерація\n",[4005,62053,62054,62056,62058,62060,62062,62064,62066,62068],{"class":4007,"line":4947},[4005,62055,12138],{"class":4836},[4005,62057,6592],{"class":4174},[4005,62059,3836],{"class":4182},[4005,62061,26445],{"class":4174},[4005,62063,4314],{"class":4182},[4005,62065,12151],{"class":4836},[4005,62067,29774],{"class":4174},[4005,62069,5073],{"class":4182},[4005,62071,62072,62074,62076,62078,62080,62082,62084,62086,62088,62090,62092,62094,62096,62098,62100],{"class":4007,"line":4953},[4005,62073,5343],{"class":4174},[4005,62075,3769],{"class":4182},[4005,62077,7945],{"class":4302},[4005,62079,4611],{"class":4182},[4005,62081,59381],{"class":4330},[4005,62083,7959],{"class":4174},[4005,62085,12081],{"class":4330},[4005,62087,7959],{"class":4174},[4005,62089,7965],{"class":7964},[4005,62091,7968],{"class":4330},[4005,62093,3836],{"class":4182},[4005,62095,27826],{"class":4174},[4005,62097,3836],{"class":4182},[4005,62099,26445],{"class":4174},[4005,62101,4482],{"class":4182},[4005,62103,62104],{"class":4007,"line":4960},[4005,62105,5127],{"class":4182},[4005,62107,62108],{"class":4007,"line":4973},[4005,62109,4078],{"class":4182},[3908,62111,62112],{},[3871,62113,62114],{},"Особливості Go:",[3746,62116,62117,62123,62126,62132],{},[3749,62118,62119,62120],{},"Немає класу ",[3753,62121,62122],{},"ArrayList",[3749,62124,62125],{},"Зріз — вбудований тип мови",[3749,62127,62128,62131],{},[3753,62129,62130],{},"append()"," — вбудована функція",[3749,62133,62134],{},"Автоматичне управління пам'яттю",[12536,62136,62138,62498,62503],{"icon":12743,"label":62137},"Java — ArrayList",[3984,62139,62141],{"className":12746,"code":62140,"language":12748,"meta":3992,"style":3992},"import java.util.ArrayList;\n\npublic class Main {\n    public static void main(String[] args) {\n        \u002F\u002F Створення списку\n        ArrayList\u003CInteger> numbers = new ArrayList\u003C>();\n        numbers.add(10);\n        numbers.add(20);\n        numbers.add(30);\n        \n        \u002F\u002F Додавання елементів\n        numbers.add(40);\n        numbers.add(50);\n        \n        \u002F\u002F Розмір\n        System.out.println(\"Розмір: \" + numbers.size());  \u002F\u002F 5\n        \n        \u002F\u002F Доступ до елементів\n        System.out.println(\"Перший: \" + numbers.get(0));  \u002F\u002F 10\n        System.out.println(\"Останній: \" + numbers.get(numbers.size()-1));  \u002F\u002F 50\n        \n        \u002F\u002F Ітерація\n        for (int i = 0; i \u003C numbers.size(); i++) {\n            System.out.println(\"[\" + i + \"] = \" + numbers.get(i));\n        }\n    }\n}\n",[3753,62142,62143,62150,62154,62165,62185,62190,62215,62229,62243,62257,62261,62266,62280,62294,62298,62303,62333,62337,62342,62377,62419,62423,62428,62452,62486,62490,62494],{"__ignoreMap":3992},[4005,62144,62145,62147],{"class":4007,"line":4008},[4005,62146,3917],{"class":4171},[4005,62148,62149],{"class":4182}," java.util.ArrayList;\n",[4005,62151,62152],{"class":4007,"line":4014},[4005,62153,4036],{"emptyLinePlaceholder":4035},[4005,62155,62156,62158,62160,62163],{"class":4007,"line":4020},[4005,62157,12755],{"class":4171},[4005,62159,12758],{"class":4171},[4005,62161,62162],{"class":4178}," Main",[4005,62164,5073],{"class":4182},[4005,62166,62167,62169,62171,62173,62175,62177,62179,62181,62183],{"class":4007,"line":4026},[4005,62168,12768],{"class":4171},[4005,62170,12771],{"class":4171},[4005,62172,12774],{"class":4178},[4005,62174,5764],{"class":4302},[4005,62176,4611],{"class":4182},[4005,62178,7343],{"class":4178},[4005,62180,12783],{"class":4182},[4005,62182,12786],{"class":4174},[4005,62184,12789],{"class":4182},[4005,62186,62187],{"class":4007,"line":4032},[4005,62188,62189],{"class":4190},"        \u002F\u002F Створення списку\n",[4005,62191,62192,62195,62197,62200,62203,62205,62207,62209,62212],{"class":4007,"line":4039},[4005,62193,62194],{"class":4178},"        ArrayList",[4005,62196,22863],{"class":4182},[4005,62198,62199],{"class":4178},"Integer",[4005,62201,62202],{"class":4182},"> ",[4005,62204,29814],{"class":4174},[4005,62206,4183],{"class":4182},[4005,62208,3768],{"class":4836},[4005,62210,62211],{"class":4178}," ArrayList",[4005,62213,62214],{"class":4182},"\u003C>();\n",[4005,62216,62217,62219,62221,62223,62225,62227],{"class":4007,"line":4045},[4005,62218,29847],{"class":4174},[4005,62220,3769],{"class":4182},[4005,62222,36280],{"class":4302},[4005,62224,4611],{"class":4182},[4005,62226,4631],{"class":4186},[4005,62228,12932],{"class":4182},[4005,62230,62231,62233,62235,62237,62239,62241],{"class":4007,"line":4051},[4005,62232,29847],{"class":4174},[4005,62234,3769],{"class":4182},[4005,62236,36280],{"class":4302},[4005,62238,4611],{"class":4182},[4005,62240,5335],{"class":4186},[4005,62242,12932],{"class":4182},[4005,62244,62245,62247,62249,62251,62253,62255],{"class":4007,"line":4057},[4005,62246,29847],{"class":4174},[4005,62248,3769],{"class":4182},[4005,62250,36280],{"class":4302},[4005,62252,4611],{"class":4182},[4005,62254,4276],{"class":4186},[4005,62256,12932],{"class":4182},[4005,62258,62259],{"class":4007,"line":4063},[4005,62260,12810],{"class":4182},[4005,62262,62263],{"class":4007,"line":4069},[4005,62264,62265],{"class":4190},"        \u002F\u002F Додавання елементів\n",[4005,62267,62268,62270,62272,62274,62276,62278],{"class":4007,"line":4075},[4005,62269,29847],{"class":4174},[4005,62271,3769],{"class":4182},[4005,62273,36280],{"class":4302},[4005,62275,4611],{"class":4182},[4005,62277,30569],{"class":4186},[4005,62279,12932],{"class":4182},[4005,62281,62282,62284,62286,62288,62290,62292],{"class":4007,"line":4081},[4005,62283,29847],{"class":4174},[4005,62285,3769],{"class":4182},[4005,62287,36280],{"class":4302},[4005,62289,4611],{"class":4182},[4005,62291,26330],{"class":4186},[4005,62293,12932],{"class":4182},[4005,62295,62296],{"class":4007,"line":4086},[4005,62297,12810],{"class":4182},[4005,62299,62300],{"class":4007,"line":4092},[4005,62301,62302],{"class":4190},"        \u002F\u002F Розмір\n",[4005,62304,62305,62307,62309,62311,62313,62315,62317,62320,62322,62324,62326,62329,62331],{"class":4007,"line":4098},[4005,62306,12815],{"class":4174},[4005,62308,3769],{"class":4182},[4005,62310,12820],{"class":4174},[4005,62312,3769],{"class":4182},[4005,62314,12825],{"class":4302},[4005,62316,4611],{"class":4182},[4005,62318,62319],{"class":4330},"\"Розмір: \"",[4005,62321,6289],{"class":4182},[4005,62323,29814],{"class":4174},[4005,62325,3769],{"class":4182},[4005,62327,62328],{"class":4302},"size",[4005,62330,12837],{"class":4182},[4005,62332,23912],{"class":4190},[4005,62334,62335],{"class":4007,"line":4104},[4005,62336,12810],{"class":4182},[4005,62338,62339],{"class":4007,"line":4110},[4005,62340,62341],{"class":4190},"        \u002F\u002F Доступ до елементів\n",[4005,62343,62344,62346,62348,62350,62352,62354,62356,62359,62361,62363,62365,62368,62370,62372,62375],{"class":4007,"line":4937},[4005,62345,12815],{"class":4174},[4005,62347,3769],{"class":4182},[4005,62349,12820],{"class":4174},[4005,62351,3769],{"class":4182},[4005,62353,12825],{"class":4302},[4005,62355,4611],{"class":4182},[4005,62357,62358],{"class":4330},"\"Перший: \"",[4005,62360,6289],{"class":4182},[4005,62362,29814],{"class":4174},[4005,62364,3769],{"class":4182},[4005,62366,62367],{"class":4302},"get",[4005,62369,4611],{"class":4182},[4005,62371,4200],{"class":4186},[4005,62373,62374],{"class":4182},"));  ",[4005,62376,23836],{"class":4190},[4005,62378,62379,62381,62383,62385,62387,62389,62391,62394,62396,62398,62400,62402,62404,62406,62408,62410,62413,62415,62417],{"class":4007,"line":4942},[4005,62380,12815],{"class":4174},[4005,62382,3769],{"class":4182},[4005,62384,12820],{"class":4174},[4005,62386,3769],{"class":4182},[4005,62388,12825],{"class":4302},[4005,62390,4611],{"class":4182},[4005,62392,62393],{"class":4330},"\"Останній: \"",[4005,62395,6289],{"class":4182},[4005,62397,29814],{"class":4174},[4005,62399,3769],{"class":4182},[4005,62401,62367],{"class":4302},[4005,62403,4611],{"class":4182},[4005,62405,29814],{"class":4174},[4005,62407,3769],{"class":4182},[4005,62409,62328],{"class":4302},[4005,62411,62412],{"class":4182},"()-",[4005,62414,4393],{"class":4186},[4005,62416,62374],{"class":4182},[4005,62418,36008],{"class":4190},[4005,62420,62421],{"class":4007,"line":4947},[4005,62422,12810],{"class":4182},[4005,62424,62425],{"class":4007,"line":4953},[4005,62426,62427],{"class":4190},"        \u002F\u002F Ітерація\n",[4005,62429,62430,62432,62434,62436,62438,62440,62442,62444,62446,62448,62450],{"class":4007,"line":4960},[4005,62431,14396],{"class":4836},[4005,62433,4761],{"class":4182},[4005,62435,4158],{"class":4178},[4005,62437,6592],{"class":4174},[4005,62439,4183],{"class":4182},[4005,62441,4200],{"class":4186},[4005,62443,15373],{"class":4182},[4005,62445,29814],{"class":4174},[4005,62447,3769],{"class":4182},[4005,62449,62328],{"class":4302},[4005,62451,15382],{"class":4182},[4005,62453,62454,62456,62458,62460,62462,62464,62466,62469,62472,62475,62477,62479,62481,62483],{"class":4007,"line":4973},[4005,62455,12917],{"class":4174},[4005,62457,3769],{"class":4182},[4005,62459,12820],{"class":4174},[4005,62461,3769],{"class":4182},[4005,62463,12825],{"class":4302},[4005,62465,4611],{"class":4182},[4005,62467,62468],{"class":4330},"\"[\"",[4005,62470,62471],{"class":4182}," + i + ",[4005,62473,62474],{"class":4330},"\"] = \"",[4005,62476,6289],{"class":4182},[4005,62478,29814],{"class":4174},[4005,62480,3769],{"class":4182},[4005,62482,62367],{"class":4302},[4005,62484,62485],{"class":4182},"(i));\n",[4005,62487,62488],{"class":4007,"line":4985},[4005,62489,12937],{"class":4182},[4005,62491,62492],{"class":4007,"line":7813},[4005,62493,5127],{"class":4182},[4005,62495,62496],{"class":4007,"line":7819},[4005,62497,4078],{"class":4182},[3908,62499,62500],{},[3871,62501,62502],{},"Особливості Java:",[3746,62504,62505,62511,62514,62521],{},[3749,62506,62507,62508],{},"Потрібен імпорт ",[3753,62509,62510],{},"java.util.ArrayList",[3749,62512,62513],{},"Об'єкт класу (не примітив)",[3749,62515,62516,62517,62520],{},"Метод ",[3753,62518,62519],{},".add()"," для додавання",[3749,62522,62516,62523,62526],{},[3753,62524,62525],{},".get(i)"," для доступу",[3908,62528,62529],{},[3871,62530,46836],{},[5991,62532,62533,62548],{},[5994,62534,62535],{},[5997,62536,62537,62539,62543],{},[6000,62538,10840],{},[6000,62540,10843,62541],{},[3753,62542,8577],{},[6000,62544,10848,62545],{},[3753,62546,62547],{},"ArrayList\u003CT>",[6010,62549,62550,62562,62578,62594,62611,62628],{},[5997,62551,62552,62556,62559],{},[6015,62553,62554],{},[3871,62555,8179],{},[6015,62557,62558],{},"Вбудований у мову",[6015,62560,62561],{},"Клас з бібліотеки",[5997,62563,62564,62568,62573],{},[6015,62565,62566],{},[3871,62567,28707],{},[6015,62569,62570],{},[3753,62571,62572],{},"[]int",[6015,62574,62575],{},[3753,62576,62577],{},"ArrayList\u003CInteger>",[5997,62579,62580,62584,62589],{},[6015,62581,62582],{},[3871,62583,22672],{},[6015,62585,62586],{},[3753,62587,62588],{},"append(slice, value)",[6015,62590,62591],{},[3753,62592,62593],{},"list.add(value)",[5997,62595,62596,62601,62606],{},[6015,62597,62598],{},[3871,62599,62600],{},"Доступ",[6015,62602,62603],{},[3753,62604,62605],{},"slice[i]",[6015,62607,62608],{},[3753,62609,62610],{},"list.get(i)",[5997,62612,62613,62618,62623],{},[6015,62614,62615],{},[3871,62616,62617],{},"Довжина",[6015,62619,62620],{},[3753,62621,62622],{},"len(slice)",[6015,62624,62625],{},[3753,62626,62627],{},"list.size()",[5997,62629,62630,62635,62638],{},[6015,62631,62632],{},[3871,62633,62634],{},"Примітиви",[6015,62636,62637],{},"✅ Підтримуються",[6015,62639,62640,62641,5032],{},"❌ Лише обгортки (",[3753,62642,62199],{},[9014,62644,62646],{"id":62645},"способи-створення-зрізів","Способи створення зрізів",[12533,62648,62649,62993],{},[12536,62650,62652],{"icon":12538,"label":62651},"Go — 5 способів",[3984,62653,62655],{"className":4162,"code":62654,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F 1. Nil зріз (порожній, не виділена пам'ять)\n    var nilSlice []int\n    fmt.Println(\"nil:\", nilSlice == nil, len(nilSlice))  \u002F\u002F true 0\n    \n    \u002F\u002F 2. Літерал зрізу\n    fruits := []string{\"яблуко\", \"банан\", \"апельсин\"}\n    fmt.Println(\"Літерал:\", fruits)\n    \n    \u002F\u002F 3. make() з довжиною\n    numbers := make([]int, 5)  \u002F\u002F [0 0 0 0 0]\n    fmt.Println(\"make(len):\", numbers)\n    \n    \u002F\u002F 4. make() з довжиною та місткістю\n    buffer := make([]int, 3, 10)  \u002F\u002F len=3, cap=10\n    fmt.Println(\"make(len, cap):\", len(buffer), cap(buffer))\n    \n    \u002F\u002F 5. Зрізання масиву або іншого зрізу\n    arr := [5]int{1, 2, 3, 4, 5}\n    slice := arr[1:4]  \u002F\u002F [2 3 4]\n    fmt.Println(\"Зрізання:\", slice)\n}\n",[3753,62656,62657,62663,62667,62673,62677,62685,62690,62701,62736,62740,62745,62767,62786,62790,62795,62816,62835,62839,62844,62870,62902,62906,62911,62946,62970,62989],{"__ignoreMap":3992},[4005,62658,62659,62661],{"class":4007,"line":4008},[4005,62660,5739],{"class":4171},[4005,62662,5742],{"class":4178},[4005,62664,62665],{"class":4007,"line":4014},[4005,62666,4036],{"emptyLinePlaceholder":4035},[4005,62668,62669,62671],{"class":4007,"line":4020},[4005,62670,3917],{"class":4836},[4005,62672,7656],{"class":4330},[4005,62674,62675],{"class":4007,"line":4026},[4005,62676,4036],{"emptyLinePlaceholder":4035},[4005,62678,62679,62681,62683],{"class":4007,"line":4032},[4005,62680,4299],{"class":4171},[4005,62682,5764],{"class":4302},[4005,62684,4306],{"class":4182},[4005,62686,62687],{"class":4007,"line":4039},[4005,62688,62689],{"class":4190},"    \u002F\u002F 1. Nil зріз (порожній, не виділена пам'ять)\n",[4005,62691,62692,62694,62697,62699],{"class":4007,"line":4045},[4005,62693,9412],{"class":4171},[4005,62695,62696],{"class":4174}," nilSlice",[4005,62698,26632],{"class":4182},[4005,62700,14224],{"class":4178},[4005,62702,62703,62705,62707,62709,62711,62714,62716,62719,62721,62723,62725,62727,62729,62731,62733],{"class":4007,"line":4051},[4005,62704,5370],{"class":4174},[4005,62706,3769],{"class":4182},[4005,62708,5348],{"class":4302},[4005,62710,4611],{"class":4182},[4005,62712,62713],{"class":4330},"\"nil:\"",[4005,62715,3836],{"class":4182},[4005,62717,62718],{"class":4174},"nilSlice",[4005,62720,5473],{"class":4182},[4005,62722,4209],{"class":4171},[4005,62724,3836],{"class":4182},[4005,62726,11465],{"class":4302},[4005,62728,4611],{"class":4182},[4005,62730,62718],{"class":4174},[4005,62732,11472],{"class":4182},[4005,62734,62735],{"class":4190},"\u002F\u002F true 0\n",[4005,62737,62738],{"class":4007,"line":4057},[4005,62739,5214],{"class":4182},[4005,62741,62742],{"class":4007,"line":4063},[4005,62743,62744],{"class":4190},"    \u002F\u002F 2. Літерал зрізу\n",[4005,62746,62747,62749,62751,62753,62755,62757,62759,62761,62763,62765],{"class":4007,"line":4069},[4005,62748,34327],{"class":4174},[4005,62750,11583],{"class":4182},[4005,62752,7004],{"class":4178},[4005,62754,16268],{"class":4182},[4005,62756,34301],{"class":4330},[4005,62758,3836],{"class":4182},[4005,62760,34306],{"class":4330},[4005,62762,3836],{"class":4182},[4005,62764,34311],{"class":4330},[4005,62766,4078],{"class":4182},[4005,62768,62769,62771,62773,62775,62777,62780,62782,62784],{"class":4007,"line":4075},[4005,62770,5370],{"class":4174},[4005,62772,3769],{"class":4182},[4005,62774,5348],{"class":4302},[4005,62776,4611],{"class":4182},[4005,62778,62779],{"class":4330},"\"Літерал:\"",[4005,62781,3836],{"class":4182},[4005,62783,34354],{"class":4174},[4005,62785,4482],{"class":4182},[4005,62787,62788],{"class":4007,"line":4081},[4005,62789,5214],{"class":4182},[4005,62791,62792],{"class":4007,"line":4086},[4005,62793,62794],{"class":4190},"    \u002F\u002F 3. make() з довжиною\n",[4005,62796,62797,62799,62801,62803,62805,62807,62809,62811,62813],{"class":4007,"line":4092},[4005,62798,29722],{"class":4174},[4005,62800,4314],{"class":4182},[4005,62802,3764],{"class":4302},[4005,62804,5159],{"class":4182},[4005,62806,4158],{"class":4178},[4005,62808,3836],{"class":4182},[4005,62810,5869],{"class":4186},[4005,62812,5196],{"class":4182},[4005,62814,62815],{"class":4190},"\u002F\u002F [0 0 0 0 0]\n",[4005,62817,62818,62820,62822,62824,62826,62829,62831,62833],{"class":4007,"line":4098},[4005,62819,5370],{"class":4174},[4005,62821,3769],{"class":4182},[4005,62823,5348],{"class":4302},[4005,62825,4611],{"class":4182},[4005,62827,62828],{"class":4330},"\"make(len):\"",[4005,62830,3836],{"class":4182},[4005,62832,29814],{"class":4174},[4005,62834,4482],{"class":4182},[4005,62836,62837],{"class":4007,"line":4104},[4005,62838,5214],{"class":4182},[4005,62840,62841],{"class":4007,"line":4110},[4005,62842,62843],{"class":4190},"    \u002F\u002F 4. make() з довжиною та місткістю\n",[4005,62845,62846,62849,62851,62853,62855,62857,62859,62861,62863,62865,62867],{"class":4007,"line":4937},[4005,62847,62848],{"class":4174},"    buffer",[4005,62850,4314],{"class":4182},[4005,62852,3764],{"class":4302},[4005,62854,5159],{"class":4182},[4005,62856,4158],{"class":4178},[4005,62858,3836],{"class":4182},[4005,62860,6286],{"class":4186},[4005,62862,3836],{"class":4182},[4005,62864,4631],{"class":4186},[4005,62866,5196],{"class":4182},[4005,62868,62869],{"class":4190},"\u002F\u002F len=3, cap=10\n",[4005,62871,62872,62874,62876,62878,62880,62883,62885,62887,62889,62892,62894,62896,62898,62900],{"class":4007,"line":4942},[4005,62873,5370],{"class":4174},[4005,62875,3769],{"class":4182},[4005,62877,5348],{"class":4302},[4005,62879,4611],{"class":4182},[4005,62881,62882],{"class":4330},"\"make(len, cap):\"",[4005,62884,3836],{"class":4182},[4005,62886,11465],{"class":4302},[4005,62888,4611],{"class":4182},[4005,62890,62891],{"class":4174},"buffer",[4005,62893,31601],{"class":4182},[4005,62895,31701],{"class":4302},[4005,62897,4611],{"class":4182},[4005,62899,62891],{"class":4174},[4005,62901,25552],{"class":4182},[4005,62903,62904],{"class":4007,"line":4947},[4005,62905,5214],{"class":4182},[4005,62907,62908],{"class":4007,"line":4953},[4005,62909,62910],{"class":4190},"    \u002F\u002F 5. Зрізання масиву або іншого зрізу\n",[4005,62912,62913,62916,62918,62920,62922,62924,62926,62928,62930,62932,62934,62936,62938,62940,62942,62944],{"class":4007,"line":4960},[4005,62914,62915],{"class":4174},"    arr",[4005,62917,30024],{"class":4182},[4005,62919,5869],{"class":4186},[4005,62921,28540],{"class":4182},[4005,62923,4158],{"class":4178},[4005,62925,16268],{"class":4182},[4005,62927,4393],{"class":4186},[4005,62929,3836],{"class":4182},[4005,62931,4398],{"class":4186},[4005,62933,3836],{"class":4182},[4005,62935,6286],{"class":4186},[4005,62937,3836],{"class":4182},[4005,62939,8245],{"class":4186},[4005,62941,3836],{"class":4182},[4005,62943,5869],{"class":4186},[4005,62945,4078],{"class":4182},[4005,62947,62948,62951,62953,62956,62958,62960,62962,62964,62967],{"class":4007,"line":4973},[4005,62949,62950],{"class":4174},"    slice",[4005,62952,4314],{"class":4182},[4005,62954,62955],{"class":4174},"arr",[4005,62957,11561],{"class":4182},[4005,62959,4393],{"class":4186},[4005,62961,5831],{"class":4182},[4005,62963,8245],{"class":4186},[4005,62965,62966],{"class":4182},"]  ",[4005,62968,62969],{"class":4190},"\u002F\u002F [2 3 4]\n",[4005,62971,62972,62974,62976,62978,62980,62983,62985,62987],{"class":4007,"line":4985},[4005,62973,5370],{"class":4174},[4005,62975,3769],{"class":4182},[4005,62977,5348],{"class":4302},[4005,62979,4611],{"class":4182},[4005,62981,62982],{"class":4330},"\"Зрізання:\"",[4005,62984,3836],{"class":4182},[4005,62986,52679],{"class":4174},[4005,62988,4482],{"class":4182},[4005,62990,62991],{"class":4007,"line":7813},[4005,62992,4078],{"class":4182},[12536,62994,62996],{"icon":12743,"label":62995},"Java — 3 способи",[3984,62997,62999],{"className":12746,"code":62998,"language":12748,"meta":3992,"style":3992},"import java.util.*;\n\npublic class Main {\n    public static void main(String[] args) {\n        \u002F\u002F 1. Порожній список\n        ArrayList\u003CInteger> empty = new ArrayList\u003C>();\n        System.out.println(\"Порожній: \" + empty.isEmpty());  \u002F\u002F true\n        \n        \u002F\u002F 2. З початковим розміром\n        ArrayList\u003CInteger> sized = new ArrayList\u003C>(10);\n        System.out.println(\"Capacity: 10, size: \" + sized.size());  \u002F\u002F 0\n        \n        \u002F\u002F 3. З початковими даними\n        ArrayList\u003CString> fruits = new ArrayList\u003C>(\n            Arrays.asList(\"яблуко\", \"банан\", \"апельсин\")\n        );\n        System.out.println(\"З даними: \" + fruits);\n        \n        \u002F\u002F 4. Зі старого списку\n        ArrayList\u003CString> copy = new ArrayList\u003C>(fruits);\n        System.out.println(\"Копія: \" + copy);\n    }\n}\n",[3753,63000,63001,63008,63012,63022,63042,63047,63068,63098,63102,63107,63133,63162,63166,63171,63192,63216,63221,63241,63245,63250,63271,63291,63295],{"__ignoreMap":3992},[4005,63002,63003,63005],{"class":4007,"line":4008},[4005,63004,3917],{"class":4171},[4005,63006,63007],{"class":4182}," java.util.*;\n",[4005,63009,63010],{"class":4007,"line":4014},[4005,63011,4036],{"emptyLinePlaceholder":4035},[4005,63013,63014,63016,63018,63020],{"class":4007,"line":4020},[4005,63015,12755],{"class":4171},[4005,63017,12758],{"class":4171},[4005,63019,62162],{"class":4178},[4005,63021,5073],{"class":4182},[4005,63023,63024,63026,63028,63030,63032,63034,63036,63038,63040],{"class":4007,"line":4026},[4005,63025,12768],{"class":4171},[4005,63027,12771],{"class":4171},[4005,63029,12774],{"class":4178},[4005,63031,5764],{"class":4302},[4005,63033,4611],{"class":4182},[4005,63035,7343],{"class":4178},[4005,63037,12783],{"class":4182},[4005,63039,12786],{"class":4174},[4005,63041,12789],{"class":4182},[4005,63043,63044],{"class":4007,"line":4032},[4005,63045,63046],{"class":4190},"        \u002F\u002F 1. Порожній список\n",[4005,63048,63049,63051,63053,63055,63057,63060,63062,63064,63066],{"class":4007,"line":4039},[4005,63050,62194],{"class":4178},[4005,63052,22863],{"class":4182},[4005,63054,62199],{"class":4178},[4005,63056,62202],{"class":4182},[4005,63058,63059],{"class":4174},"empty",[4005,63061,4183],{"class":4182},[4005,63063,3768],{"class":4836},[4005,63065,62211],{"class":4178},[4005,63067,62214],{"class":4182},[4005,63069,63070,63072,63074,63076,63078,63080,63082,63085,63087,63089,63091,63094,63096],{"class":4007,"line":4045},[4005,63071,12815],{"class":4174},[4005,63073,3769],{"class":4182},[4005,63075,12820],{"class":4174},[4005,63077,3769],{"class":4182},[4005,63079,12825],{"class":4302},[4005,63081,4611],{"class":4182},[4005,63083,63084],{"class":4330},"\"Порожній: \"",[4005,63086,6289],{"class":4182},[4005,63088,63059],{"class":4174},[4005,63090,3769],{"class":4182},[4005,63092,63093],{"class":4302},"isEmpty",[4005,63095,12837],{"class":4182},[4005,63097,61323],{"class":4190},[4005,63099,63100],{"class":4007,"line":4051},[4005,63101,12810],{"class":4182},[4005,63103,63104],{"class":4007,"line":4057},[4005,63105,63106],{"class":4190},"        \u002F\u002F 2. З початковим розміром\n",[4005,63108,63109,63111,63113,63115,63117,63120,63122,63124,63126,63129,63131],{"class":4007,"line":4063},[4005,63110,62194],{"class":4178},[4005,63112,22863],{"class":4182},[4005,63114,62199],{"class":4178},[4005,63116,62202],{"class":4182},[4005,63118,63119],{"class":4174},"sized",[4005,63121,4183],{"class":4182},[4005,63123,3768],{"class":4836},[4005,63125,62211],{"class":4178},[4005,63127,63128],{"class":4182},"\u003C>(",[4005,63130,4631],{"class":4186},[4005,63132,12932],{"class":4182},[4005,63134,63135,63137,63139,63141,63143,63145,63147,63150,63152,63154,63156,63158,63160],{"class":4007,"line":4069},[4005,63136,12815],{"class":4174},[4005,63138,3769],{"class":4182},[4005,63140,12820],{"class":4174},[4005,63142,3769],{"class":4182},[4005,63144,12825],{"class":4302},[4005,63146,4611],{"class":4182},[4005,63148,63149],{"class":4330},"\"Capacity: 10, size: \"",[4005,63151,6289],{"class":4182},[4005,63153,63119],{"class":4174},[4005,63155,3769],{"class":4182},[4005,63157,62328],{"class":4302},[4005,63159,12837],{"class":4182},[4005,63161,55428],{"class":4190},[4005,63163,63164],{"class":4007,"line":4075},[4005,63165,12810],{"class":4182},[4005,63167,63168],{"class":4007,"line":4081},[4005,63169,63170],{"class":4190},"        \u002F\u002F 3. З початковими даними\n",[4005,63172,63173,63175,63177,63179,63181,63183,63185,63187,63189],{"class":4007,"line":4086},[4005,63174,62194],{"class":4178},[4005,63176,22863],{"class":4182},[4005,63178,7343],{"class":4178},[4005,63180,62202],{"class":4182},[4005,63182,34354],{"class":4174},[4005,63184,4183],{"class":4182},[4005,63186,3768],{"class":4836},[4005,63188,62211],{"class":4178},[4005,63190,63191],{"class":4182},"\u003C>(\n",[4005,63193,63194,63197,63199,63202,63204,63206,63208,63210,63212,63214],{"class":4007,"line":4092},[4005,63195,63196],{"class":4174},"            Arrays",[4005,63198,3769],{"class":4182},[4005,63200,63201],{"class":4302},"asList",[4005,63203,4611],{"class":4182},[4005,63205,34301],{"class":4330},[4005,63207,3836],{"class":4182},[4005,63209,34306],{"class":4330},[4005,63211,3836],{"class":4182},[4005,63213,34311],{"class":4330},[4005,63215,4482],{"class":4182},[4005,63217,63218],{"class":4007,"line":4098},[4005,63219,63220],{"class":4182},"        );\n",[4005,63222,63223,63225,63227,63229,63231,63233,63235,63238],{"class":4007,"line":4104},[4005,63224,12815],{"class":4174},[4005,63226,3769],{"class":4182},[4005,63228,12820],{"class":4174},[4005,63230,3769],{"class":4182},[4005,63232,12825],{"class":4302},[4005,63234,4611],{"class":4182},[4005,63236,63237],{"class":4330},"\"З даними: \"",[4005,63239,63240],{"class":4182}," + fruits);\n",[4005,63242,63243],{"class":4007,"line":4110},[4005,63244,12810],{"class":4182},[4005,63246,63247],{"class":4007,"line":4937},[4005,63248,63249],{"class":4190},"        \u002F\u002F 4. Зі старого списку\n",[4005,63251,63252,63254,63256,63258,63260,63262,63264,63266,63268],{"class":4007,"line":4942},[4005,63253,62194],{"class":4178},[4005,63255,22863],{"class":4182},[4005,63257,7343],{"class":4178},[4005,63259,62202],{"class":4182},[4005,63261,54042],{"class":4174},[4005,63263,4183],{"class":4182},[4005,63265,3768],{"class":4836},[4005,63267,62211],{"class":4178},[4005,63269,63270],{"class":4182},"\u003C>(fruits);\n",[4005,63272,63273,63275,63277,63279,63281,63283,63285,63288],{"class":4007,"line":4947},[4005,63274,12815],{"class":4174},[4005,63276,3769],{"class":4182},[4005,63278,12820],{"class":4174},[4005,63280,3769],{"class":4182},[4005,63282,12825],{"class":4302},[4005,63284,4611],{"class":4182},[4005,63286,63287],{"class":4330},"\"Копія: \"",[4005,63289,63290],{"class":4182}," + copy);\n",[4005,63292,63293],{"class":4007,"line":4953},[4005,63294,5127],{"class":4182},[4005,63296,63297],{"class":4007,"line":4960},[4005,63298,4078],{"class":4182},[9014,63300,63302],{"id":63301},"внутрішня-будова-зрізу","Внутрішня будова зрізу",[3908,63304,63305,63306,63309,63310,63313],{},"Зріз — це ",[3871,63307,63308],{},"дескриптор",", який займає ",[3871,63311,63312],{},"24 байти"," і містить 3 поля:",[3984,63315,63317],{"className":4162,"code":63316,"language":4164,"meta":3992,"style":3992},"type SliceHeader struct {\n    Data uintptr  \u002F\u002F Покажчик на масив (8 байт)\n    Len  int      \u002F\u002F Довжина (8 байт)\n    Cap  int      \u002F\u002F Місткість (8 байт)\n}\n",[3753,63318,63319,63330,63339,63348,63358],{"__ignoreMap":3992},[4005,63320,63321,63323,63326,63328],{"class":4007,"line":4008},[4005,63322,4809],{"class":4171},[4005,63324,63325],{"class":4178}," SliceHeader",[4005,63327,10957],{"class":4171},[4005,63329,5073],{"class":4182},[4005,63331,63332,63334,63336],{"class":4007,"line":4014},[4005,63333,10964],{"class":4174},[4005,63335,10967],{"class":4178},[4005,63337,63338],{"class":4190},"  \u002F\u002F Покажчик на масив (8 байт)\n",[4005,63340,63341,63343,63345],{"class":4007,"line":4020},[4005,63342,10975],{"class":4174},[4005,63344,10978],{"class":4178},[4005,63346,63347],{"class":4190},"      \u002F\u002F Довжина (8 байт)\n",[4005,63349,63350,63353,63355],{"class":4007,"line":4026},[4005,63351,63352],{"class":4174},"    Cap",[4005,63354,10978],{"class":4178},[4005,63356,63357],{"class":4190},"      \u002F\u002F Місткість (8 байт)\n",[4005,63359,63360],{"class":4007,"line":4032},[4005,63361,4078],{"class":4182},[3908,63363,63364],{},[3871,63365,10990],{},[3994,63367,63368],{"alt":63302},[3984,63369,63371],{"className":3999,"code":63370,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 12\n\npackage \"Зріз: s := []int{10, 20, 30}\" #F8FAFC {\n    rectangle \"Data\\nПокажчик\\n0x1000\" as Ptr #DBEAFE\n    rectangle \"Len\\nДовжина\\n3\" as Len #DCFCE7\n    rectangle \"Cap\\nМісткість\\n3\" as Cap #FEF3C7\n    Ptr -right-> Len\n    Len -right-> Cap\n}\n\npackage \"Базовий масив у пам'яті\" #FFFFFF {\n    rectangle \"[0]: 10\" as A0 #DCFCE7\n    rectangle \"[1]: 20\" as A1 #DCFCE7\n    rectangle \"[2]: 30\" as A2 #DCFCE7\n\n    A0 -right-> A1\n    A1 -right-> A2\n}\n\nPtr -down-> A0 : Data вказує сюди\n@enduml\n",[3753,63372,63373,63377,63381,63385,63389,63393,63398,63403,63408,63413,63418,63423,63427,63431,63436,63441,63446,63451,63455,63460,63465,63469,63473,63478],{"__ignoreMap":3992},[4005,63374,63375],{"class":4007,"line":4008},[4005,63376,4011],{},[4005,63378,63379],{"class":4007,"line":4014},[4005,63380,4017],{},[4005,63382,63383],{"class":4007,"line":4020},[4005,63384,4023],{},[4005,63386,63387],{"class":4007,"line":4026},[4005,63388,30872],{},[4005,63390,63391],{"class":4007,"line":4032},[4005,63392,4036],{"emptyLinePlaceholder":4035},[4005,63394,63395],{"class":4007,"line":4039},[4005,63396,63397],{},"package \"Зріз: s := []int{10, 20, 30}\" #F8FAFC {\n",[4005,63399,63400],{"class":4007,"line":4045},[4005,63401,63402],{},"    rectangle \"Data\\nПокажчик\\n0x1000\" as Ptr #DBEAFE\n",[4005,63404,63405],{"class":4007,"line":4051},[4005,63406,63407],{},"    rectangle \"Len\\nДовжина\\n3\" as Len #DCFCE7\n",[4005,63409,63410],{"class":4007,"line":4057},[4005,63411,63412],{},"    rectangle \"Cap\\nМісткість\\n3\" as Cap #FEF3C7\n",[4005,63414,63415],{"class":4007,"line":4063},[4005,63416,63417],{},"    Ptr -right-> Len\n",[4005,63419,63420],{"class":4007,"line":4069},[4005,63421,63422],{},"    Len -right-> Cap\n",[4005,63424,63425],{"class":4007,"line":4075},[4005,63426,4078],{},[4005,63428,63429],{"class":4007,"line":4081},[4005,63430,4036],{"emptyLinePlaceholder":4035},[4005,63432,63433],{"class":4007,"line":4086},[4005,63434,63435],{},"package \"Базовий масив у пам'яті\" #FFFFFF {\n",[4005,63437,63438],{"class":4007,"line":4092},[4005,63439,63440],{},"    rectangle \"[0]: 10\" as A0 #DCFCE7\n",[4005,63442,63443],{"class":4007,"line":4098},[4005,63444,63445],{},"    rectangle \"[1]: 20\" as A1 #DCFCE7\n",[4005,63447,63448],{"class":4007,"line":4104},[4005,63449,63450],{},"    rectangle \"[2]: 30\" as A2 #DCFCE7\n",[4005,63452,63453],{"class":4007,"line":4110},[4005,63454,4036],{"emptyLinePlaceholder":4035},[4005,63456,63457],{"class":4007,"line":4937},[4005,63458,63459],{},"    A0 -right-> A1\n",[4005,63461,63462],{"class":4007,"line":4942},[4005,63463,63464],{},"    A1 -right-> A2\n",[4005,63466,63467],{"class":4007,"line":4947},[4005,63468,4078],{},[4005,63470,63471],{"class":4007,"line":4953},[4005,63472,4036],{"emptyLinePlaceholder":4035},[4005,63474,63475],{"class":4007,"line":4960},[4005,63476,63477],{},"Ptr -down-> A0 : Data вказує сюди\n",[4005,63479,63480],{"class":4007,"line":4973},[4005,63481,4113],{},[3908,63483,63484],{},[3871,63485,63486,63487,5831],{},"Приклад з ",[3753,63488,63489],{},"make()",[3984,63491,63493],{"className":4162,"code":63492,"language":4164,"meta":3992,"style":3992},"s := make([]int, 3, 5)\n\u002F\u002F Data: покажчик на масив [0, 0, 0, _, _]\n\u002F\u002F Len: 3 (доступні 3 елементи)\n\u002F\u002F Cap: 5 (виділено місце для 5)\n\ns[0] = 10\ns[1] = 20\ns[2] = 30\n\u002F\u002F s[3] = 40  \u002F\u002F ❌ Помилка: index out of range\n\ns = append(s, 40)  \u002F\u002F ✅ Тепер len=4\n",[3753,63494,63495,63517,63522,63527,63532,63536,63548,63560,63572,63580,63584],{"__ignoreMap":3992},[4005,63496,63497,63499,63501,63503,63505,63507,63509,63511,63513,63515],{"class":4007,"line":4008},[4005,63498,7550],{"class":4174},[4005,63500,4314],{"class":4182},[4005,63502,3764],{"class":4302},[4005,63504,5159],{"class":4182},[4005,63506,4158],{"class":4178},[4005,63508,3836],{"class":4182},[4005,63510,6286],{"class":4186},[4005,63512,3836],{"class":4182},[4005,63514,5869],{"class":4186},[4005,63516,4482],{"class":4182},[4005,63518,63519],{"class":4007,"line":4014},[4005,63520,63521],{"class":4190},"\u002F\u002F Data: покажчик на масив [0, 0, 0, _, _]\n",[4005,63523,63524],{"class":4007,"line":4020},[4005,63525,63526],{"class":4190},"\u002F\u002F Len: 3 (доступні 3 елементи)\n",[4005,63528,63529],{"class":4007,"line":4026},[4005,63530,63531],{"class":4190},"\u002F\u002F Cap: 5 (виділено місце для 5)\n",[4005,63533,63534],{"class":4007,"line":4032},[4005,63535,4036],{"emptyLinePlaceholder":4035},[4005,63537,63538,63540,63542,63544,63546],{"class":4007,"line":4039},[4005,63539,7550],{"class":4174},[4005,63541,11561],{"class":4182},[4005,63543,4200],{"class":4186},[4005,63545,12081],{"class":4182},[4005,63547,7167],{"class":4186},[4005,63549,63550,63552,63554,63556,63558],{"class":4007,"line":4045},[4005,63551,7550],{"class":4174},[4005,63553,11561],{"class":4182},[4005,63555,4393],{"class":4186},[4005,63557,12081],{"class":4182},[4005,63559,4636],{"class":4186},[4005,63561,63562,63564,63566,63568,63570],{"class":4007,"line":4051},[4005,63563,7550],{"class":4174},[4005,63565,11561],{"class":4182},[4005,63567,4398],{"class":4186},[4005,63569,12081],{"class":4182},[4005,63571,4721],{"class":4186},[4005,63573,63574,63577],{"class":4007,"line":4057},[4005,63575,63576],{"class":4190},"\u002F\u002F s[3] = 40",[4005,63578,63579],{"class":4190},"  \u002F\u002F ❌ Помилка: index out of range\n",[4005,63581,63582],{"class":4007,"line":4063},[4005,63583,4036],{"emptyLinePlaceholder":4035},[4005,63585,63586,63588,63590,63592,63594,63596,63598,63600,63602],{"class":4007,"line":4069},[4005,63587,7550],{"class":4174},[4005,63589,4183],{"class":4182},[4005,63591,17678],{"class":4302},[4005,63593,4611],{"class":4182},[4005,63595,7550],{"class":4174},[4005,63597,3836],{"class":4182},[4005,63599,30569],{"class":4186},[4005,63601,5196],{"class":4182},[4005,63603,63604],{"class":4190},"\u002F\u002F ✅ Тепер len=4\n",[3908,63606,63607],{},[3871,63608,63609,63610,8157,63612,5831],{},"Різниця між ",[3753,63611,11465],{},[3753,63613,31701],{},[5991,63615,63616,63627],{},[5994,63617,63618],{},[5997,63619,63620,63623,63625],{},[6000,63621,63622],{},"Параметр",[6000,63624,10132],{},[6000,63626,35357],{},[6010,63628,63629,63645],{},[5997,63630,63631,63636,63639],{},[6015,63632,63633,63635],{},[3871,63634,11465],{}," (довжина)",[6015,63637,63638],{},"Кількість елементів зараз",[6015,63640,63641,63642],{},"Можна читати\u002Fписати ",[3753,63643,63644],{},"s[0]...s[len-1]",[5997,63646,63647,63652,63655],{},[6015,63648,63649,63651],{},[3871,63650,31701],{}," (місткість)",[6015,63653,63654],{},"Виділено місця",[6015,63656,63657,63658,63660],{},"Резерв для ",[3753,63659,62130],{}," без реалокації",[3984,63662,63664],{"className":4162,"code":63663,"language":4164,"meta":3992,"style":3992},"s := make([]int, 3, 10)\nfmt.Println(len(s))  \u002F\u002F 3  — можна використати 3 елементи\nfmt.Println(cap(s))  \u002F\u002F 10 — виділено місця для 10\n\ns = append(s, 40, 50, 60, 70)  \u002F\u002F Додаємо 4 елементи\nfmt.Println(len(s))  \u002F\u002F 7  — тепер 7 елементів\nfmt.Println(cap(s))  \u002F\u002F 10 — досі в межах виділеної пам'яті\n",[3753,63665,63666,63688,63709,63730,63734,63769,63790],{"__ignoreMap":3992},[4005,63667,63668,63670,63672,63674,63676,63678,63680,63682,63684,63686],{"class":4007,"line":4008},[4005,63669,7550],{"class":4174},[4005,63671,4314],{"class":4182},[4005,63673,3764],{"class":4302},[4005,63675,5159],{"class":4182},[4005,63677,4158],{"class":4178},[4005,63679,3836],{"class":4182},[4005,63681,6286],{"class":4186},[4005,63683,3836],{"class":4182},[4005,63685,4631],{"class":4186},[4005,63687,4482],{"class":4182},[4005,63689,63690,63692,63694,63696,63698,63700,63702,63704,63706],{"class":4007,"line":4014},[4005,63691,3785],{"class":4174},[4005,63693,3769],{"class":4182},[4005,63695,5348],{"class":4302},[4005,63697,4611],{"class":4182},[4005,63699,11465],{"class":4302},[4005,63701,4611],{"class":4182},[4005,63703,7550],{"class":4174},[4005,63705,11472],{"class":4182},[4005,63707,63708],{"class":4190},"\u002F\u002F 3  — можна використати 3 елементи\n",[4005,63710,63711,63713,63715,63717,63719,63721,63723,63725,63727],{"class":4007,"line":4020},[4005,63712,3785],{"class":4174},[4005,63714,3769],{"class":4182},[4005,63716,5348],{"class":4302},[4005,63718,4611],{"class":4182},[4005,63720,31701],{"class":4302},[4005,63722,4611],{"class":4182},[4005,63724,7550],{"class":4174},[4005,63726,11472],{"class":4182},[4005,63728,63729],{"class":4190},"\u002F\u002F 10 — виділено місця для 10\n",[4005,63731,63732],{"class":4007,"line":4026},[4005,63733,4036],{"emptyLinePlaceholder":4035},[4005,63735,63736,63738,63740,63742,63744,63746,63748,63750,63752,63754,63756,63759,63761,63764,63766],{"class":4007,"line":4032},[4005,63737,7550],{"class":4174},[4005,63739,4183],{"class":4182},[4005,63741,17678],{"class":4302},[4005,63743,4611],{"class":4182},[4005,63745,7550],{"class":4174},[4005,63747,3836],{"class":4182},[4005,63749,30569],{"class":4186},[4005,63751,3836],{"class":4182},[4005,63753,26330],{"class":4186},[4005,63755,3836],{"class":4182},[4005,63757,63758],{"class":4186},"60",[4005,63760,3836],{"class":4182},[4005,63762,63763],{"class":4186},"70",[4005,63765,5196],{"class":4182},[4005,63767,63768],{"class":4190},"\u002F\u002F Додаємо 4 елементи\n",[4005,63770,63771,63773,63775,63777,63779,63781,63783,63785,63787],{"class":4007,"line":4039},[4005,63772,3785],{"class":4174},[4005,63774,3769],{"class":4182},[4005,63776,5348],{"class":4302},[4005,63778,4611],{"class":4182},[4005,63780,11465],{"class":4302},[4005,63782,4611],{"class":4182},[4005,63784,7550],{"class":4174},[4005,63786,11472],{"class":4182},[4005,63788,63789],{"class":4190},"\u002F\u002F 7  — тепер 7 елементів\n",[4005,63791,63792,63794,63796,63798,63800,63802,63804,63806,63808],{"class":4007,"line":4045},[4005,63793,3785],{"class":4174},[4005,63795,3769],{"class":4182},[4005,63797,5348],{"class":4302},[4005,63799,4611],{"class":4182},[4005,63801,31701],{"class":4302},[4005,63803,4611],{"class":4182},[4005,63805,7550],{"class":4174},[4005,63807,11472],{"class":4182},[4005,63809,63810],{"class":4190},"\u002F\u002F 10 — досі в межах виділеної пам'яті\n",[3900,63812],{},[9014,63814,63816,63817,5032],{"id":63815},"оператор-зрізання-та-ефект-спільної-памяті-underlying-array","Оператор зрізання та ефект спільної пам'яті (",[3758,63818,63819],{},"Underlying Array",[3908,63821,63822,3880,63825,63828,63829,63832],{},[3871,63823,63824],{},"Проста теорія:",[3753,63826,63827],{},"s[1:4]"," — візьми елементи з 1 по 3 (4 не включно). Поки що запам'ятайте це. Формули ",[3753,63830,63831],{},"len\u002Fcap"," нижче — для допитливих.",[3908,63834,63835,63836,5831],{},"Зріз можна створити з уже існуючого масиву або іншого зрізу за допомогою оператора зрізання ",[3871,63837,63838],{},[3753,63839,63840],{},"s[low:high]",[3746,63842,63843,63853,63859],{},[3749,63844,63845,63846,63849,63850,3769],{},"Діапазон береться за напівінтервалом: індекси від ",[3753,63847,63848],{},"low"," до ",[3753,63851,63852],{},"high - 1",[3749,63854,63855,63856,3769],{},"Довжина отриманого зрізу: ",[3753,63857,63858],{},"len = high - low",[3749,63860,63861,63862,3769],{},"Місткість отриманого зрізу: ",[3753,63863,63864],{},"cap = cap(оригіналу) - low",[3984,63866,63868],{"className":4162,"code":63867,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F Створюємо базовий масив\n    baseArray := [6]int{10, 20, 30, 40, 50, 60}\n\n    \u002F\u002F Створюємо зріз з 1 по 3 індекси (елементи 20, 30, 40)\n    sliceA := baseArray[1:4]\n    sliceB := sliceA[1:3] \u002F\u002F Зріз від зрізу (елементи 30, 40)\n\n    fmt.Printf(\"sliceA: len=%d, cap=%d, %v\\n\", len(sliceA), cap(sliceA), sliceA) \u002F\u002F len=3, cap=5\n    fmt.Printf(\"sliceB: len=%d, cap=%d, %v\\n\", len(sliceB), cap(sliceB), sliceB) \u002F\u002F len=2, cap=4\n\n    \u002F\u002F ⚠️ УВАГА: Ефект спільної пам'яті (Slice Mutation Bug)!\n    \u002F\u002F Зміна елемента в sliceB фізично змінює комірку в baseArray та sliceA:\n    sliceB[0] = 999\n\n    fmt.Println(\"\\nПісля модифікації sliceB[0] = 999:\")\n    fmt.Printf(\"  baseArray: %v\\n\", baseArray) \u002F\u002F [10, 20, 999, 40, 50, 60] — ОРИГІНАЛ ЗМІНИВСЯ!\n    fmt.Printf(\"  sliceA:    %v\\n\", sliceA)    \u002F\u002F [20, 999, 40]\n}\n",[3753,63869,63870,63876,63880,63886,63890,63898,63903,63942,63946,63951,63971,63995,63999,64052,64105,64109,64114,64119,64131,64135,64154,64182,64210],{"__ignoreMap":3992},[4005,63871,63872,63874],{"class":4007,"line":4008},[4005,63873,5739],{"class":4171},[4005,63875,5742],{"class":4178},[4005,63877,63878],{"class":4007,"line":4014},[4005,63879,4036],{"emptyLinePlaceholder":4035},[4005,63881,63882,63884],{"class":4007,"line":4020},[4005,63883,3917],{"class":4836},[4005,63885,7656],{"class":4330},[4005,63887,63888],{"class":4007,"line":4026},[4005,63889,4036],{"emptyLinePlaceholder":4035},[4005,63891,63892,63894,63896],{"class":4007,"line":4032},[4005,63893,4299],{"class":4171},[4005,63895,5764],{"class":4302},[4005,63897,4306],{"class":4182},[4005,63899,63900],{"class":4007,"line":4039},[4005,63901,63902],{"class":4190},"    \u002F\u002F Створюємо базовий масив\n",[4005,63904,63905,63908,63910,63912,63914,63916,63918,63920,63922,63924,63926,63928,63930,63932,63934,63936,63938,63940],{"class":4007,"line":4045},[4005,63906,63907],{"class":4174},"    baseArray",[4005,63909,30024],{"class":4182},[4005,63911,26030],{"class":4186},[4005,63913,28540],{"class":4182},[4005,63915,4158],{"class":4178},[4005,63917,16268],{"class":4182},[4005,63919,4631],{"class":4186},[4005,63921,3836],{"class":4182},[4005,63923,5335],{"class":4186},[4005,63925,3836],{"class":4182},[4005,63927,4276],{"class":4186},[4005,63929,3836],{"class":4182},[4005,63931,30569],{"class":4186},[4005,63933,3836],{"class":4182},[4005,63935,26330],{"class":4186},[4005,63937,3836],{"class":4182},[4005,63939,63758],{"class":4186},[4005,63941,4078],{"class":4182},[4005,63943,63944],{"class":4007,"line":4051},[4005,63945,4036],{"emptyLinePlaceholder":4035},[4005,63947,63948],{"class":4007,"line":4057},[4005,63949,63950],{"class":4190},"    \u002F\u002F Створюємо зріз з 1 по 3 індекси (елементи 20, 30, 40)\n",[4005,63952,63953,63956,63958,63961,63963,63965,63967,63969],{"class":4007,"line":4063},[4005,63954,63955],{"class":4174},"    sliceA",[4005,63957,4314],{"class":4182},[4005,63959,63960],{"class":4174},"baseArray",[4005,63962,11561],{"class":4182},[4005,63964,4393],{"class":4186},[4005,63966,5831],{"class":4182},[4005,63968,8245],{"class":4186},[4005,63970,51672],{"class":4182},[4005,63972,63973,63976,63978,63981,63983,63985,63987,63989,63992],{"class":4007,"line":4069},[4005,63974,63975],{"class":4174},"    sliceB",[4005,63977,4314],{"class":4182},[4005,63979,63980],{"class":4174},"sliceA",[4005,63982,11561],{"class":4182},[4005,63984,4393],{"class":4186},[4005,63986,5831],{"class":4182},[4005,63988,6286],{"class":4186},[4005,63990,63991],{"class":4182},"] ",[4005,63993,63994],{"class":4190},"\u002F\u002F Зріз від зрізу (елементи 30, 40)\n",[4005,63996,63997],{"class":4007,"line":4075},[4005,63998,4036],{"emptyLinePlaceholder":4035},[4005,64000,64001,64003,64005,64007,64009,64012,64014,64017,64019,64021,64023,64025,64027,64029,64031,64033,64035,64037,64039,64041,64043,64045,64047,64049],{"class":4007,"line":4081},[4005,64002,5370],{"class":4174},[4005,64004,3769],{"class":4182},[4005,64006,7945],{"class":4302},[4005,64008,4611],{"class":4182},[4005,64010,64011],{"class":4330},"\"sliceA: len=",[4005,64013,7959],{"class":4174},[4005,64015,64016],{"class":4330},", cap=",[4005,64018,7959],{"class":4174},[4005,64020,3836],{"class":4330},[4005,64022,10666],{"class":4174},[4005,64024,7965],{"class":7964},[4005,64026,7968],{"class":4330},[4005,64028,3836],{"class":4182},[4005,64030,11465],{"class":4302},[4005,64032,4611],{"class":4182},[4005,64034,63980],{"class":4174},[4005,64036,31601],{"class":4182},[4005,64038,31701],{"class":4302},[4005,64040,4611],{"class":4182},[4005,64042,63980],{"class":4174},[4005,64044,31601],{"class":4182},[4005,64046,63980],{"class":4174},[4005,64048,4498],{"class":4182},[4005,64050,64051],{"class":4190},"\u002F\u002F len=3, cap=5\n",[4005,64053,64054,64056,64058,64060,64062,64065,64067,64069,64071,64073,64075,64077,64079,64081,64083,64085,64088,64090,64092,64094,64096,64098,64100,64102],{"class":4007,"line":4086},[4005,64055,5370],{"class":4174},[4005,64057,3769],{"class":4182},[4005,64059,7945],{"class":4302},[4005,64061,4611],{"class":4182},[4005,64063,64064],{"class":4330},"\"sliceB: len=",[4005,64066,7959],{"class":4174},[4005,64068,64016],{"class":4330},[4005,64070,7959],{"class":4174},[4005,64072,3836],{"class":4330},[4005,64074,10666],{"class":4174},[4005,64076,7965],{"class":7964},[4005,64078,7968],{"class":4330},[4005,64080,3836],{"class":4182},[4005,64082,11465],{"class":4302},[4005,64084,4611],{"class":4182},[4005,64086,64087],{"class":4174},"sliceB",[4005,64089,31601],{"class":4182},[4005,64091,31701],{"class":4302},[4005,64093,4611],{"class":4182},[4005,64095,64087],{"class":4174},[4005,64097,31601],{"class":4182},[4005,64099,64087],{"class":4174},[4005,64101,4498],{"class":4182},[4005,64103,64104],{"class":4190},"\u002F\u002F len=2, cap=4\n",[4005,64106,64107],{"class":4007,"line":4092},[4005,64108,4036],{"emptyLinePlaceholder":4035},[4005,64110,64111],{"class":4007,"line":4098},[4005,64112,64113],{"class":4190},"    \u002F\u002F ⚠️ УВАГА: Ефект спільної пам'яті (Slice Mutation Bug)!\n",[4005,64115,64116],{"class":4007,"line":4104},[4005,64117,64118],{"class":4190},"    \u002F\u002F Зміна елемента в sliceB фізично змінює комірку в baseArray та sliceA:\n",[4005,64120,64121,64123,64125,64127,64129],{"class":4007,"line":4110},[4005,64122,63975],{"class":4174},[4005,64124,11561],{"class":4182},[4005,64126,4200],{"class":4186},[4005,64128,12081],{"class":4182},[4005,64130,32169],{"class":4186},[4005,64132,64133],{"class":4007,"line":4937},[4005,64134,4036],{"emptyLinePlaceholder":4035},[4005,64136,64137,64139,64141,64143,64145,64147,64149,64152],{"class":4007,"line":4942},[4005,64138,5370],{"class":4174},[4005,64140,3769],{"class":4182},[4005,64142,5348],{"class":4302},[4005,64144,4611],{"class":4182},[4005,64146,7968],{"class":4330},[4005,64148,7965],{"class":7964},[4005,64150,64151],{"class":4330},"Після модифікації sliceB[0] = 999:\"",[4005,64153,4482],{"class":4182},[4005,64155,64156,64158,64160,64162,64164,64167,64169,64171,64173,64175,64177,64179],{"class":4007,"line":4947},[4005,64157,5370],{"class":4174},[4005,64159,3769],{"class":4182},[4005,64161,7945],{"class":4302},[4005,64163,4611],{"class":4182},[4005,64165,64166],{"class":4330},"\"  baseArray: ",[4005,64168,10666],{"class":4174},[4005,64170,7965],{"class":7964},[4005,64172,7968],{"class":4330},[4005,64174,3836],{"class":4182},[4005,64176,63960],{"class":4174},[4005,64178,4498],{"class":4182},[4005,64180,64181],{"class":4190},"\u002F\u002F [10, 20, 999, 40, 50, 60] — ОРИГІНАЛ ЗМІНИВСЯ!\n",[4005,64183,64184,64186,64188,64190,64192,64195,64197,64199,64201,64203,64205,64207],{"class":4007,"line":4953},[4005,64185,5370],{"class":4174},[4005,64187,3769],{"class":4182},[4005,64189,7945],{"class":4302},[4005,64191,4611],{"class":4182},[4005,64193,64194],{"class":4330},"\"  sliceA:    ",[4005,64196,10666],{"class":4174},[4005,64198,7965],{"class":7964},[4005,64200,7968],{"class":4330},[4005,64202,3836],{"class":4182},[4005,64204,63980],{"class":4174},[4005,64206,12303],{"class":4182},[4005,64208,64209],{"class":4190},"\u002F\u002F [20, 999, 40]\n",[4005,64211,64212],{"class":4007,"line":4960},[4005,64213,4078],{"class":4182},[4748,64215,64216,64222,64223,64225,64226,64228,64229,64232,64233,64235,64236,64239,64240,64242],{},[3871,64217,64218,64219,64221],{},"Повний 3-індексний зріз ",[3753,64220,3843],{}," (Full Slice Expression):","\nЩоб захистити базовий масив від випадкової перезаписи через подальший ",[3753,64224,17678],{},", використовується третій параметр ",[3753,64227,33346],{},", який жорстко обмежує місткість зрізу: ",[3753,64230,64231],{},"safeSlice := baseArray[1:4:4]",". У цьому випадку ",[3753,64234,31701],{}," дорівнюватиме ",[3753,64237,64238],{},"4 - 1 = 3",", і перший же ",[3753,64241,17678],{}," змусить Go виділити новий масив.",[3900,64244],{},[9014,64246,64248,64249,64251,64252],{"id":64247},"динамічне-розширення-функція-append-та-механіка-growslice","Динамічне розширення: функція ",[3753,64250,62130],{}," та механіка ",[3753,64253,3839],{},[3908,64255,42797,64256,64260],{},[3871,64257,64258],{},[3753,64259,62130],{}," додає нові елементи в кінець зрізу.",[3908,64262,64263],{},[3871,64264,64265,64266,64268],{},"Як працює ",[3753,64267,62130],{}," під капотом — аналогія «блокнот на пружині»:",[3908,64270,64271,64272,64274,64275,64277,64278,64281,64282,64285],{},"Уявіть зріз як блокнот: ",[3753,64273,11465],{}," — списані аркуші (закладка), ",[3753,64276,31701],{}," — всього аркушів у блокноті, ",[3753,64279,64280],{},"Data"," — адреса першого аркуша. Порожні аркуші ",[3753,64283,64284],{},"cap-len"," — запас без походу в магазин.",[4781,64287,64288,64302],{},[3749,64289,64290,64291,64294,64295,64298,64299,3826],{},"Якщо ",[3753,64292,64293],{},"len + нові \u003C= cap",", Go пише на наступний чистий аркуш у ",[3871,64296,64297],{},"тому самому"," блокноті і зсуває закладку (",[3753,64300,64301],{},"len++",[3749,64303,64304,64305,64308,64309,7370,64314],{},"Якщо аркуші скінчились (",[3753,64306,64307],{},"len == cap","), викликається ",[3871,64310,64311],{},[3753,64312,64313],{},"runtime.growslice",[3746,64315,64316,64339,64342,64345,64353],{},[3749,64317,64318,64319,64322,64323,64326,64327,64330,64331,64334,64335,64338],{},"Купує ",[3871,64320,64321],{},"новий блокнот"," за правилом Go 1.18+: якщо ",[3753,64324,64325],{},"cap \u003C 256",", новий ",[3753,64328,64329],{},"cap ≈ 2×старий",", інакше ",[3753,64332,64333],{},"≈ 1.25×старий"," з округленням до ",[3758,64336,64337],{},"size class"," (щоб фури пам'яті не фрагментували склад).",[3749,64340,64341],{},"Переписує всі старі аркуші.",[3749,64343,64344],{},"Додає нові.",[3749,64346,64347,64348,64350,64351,3769],{},"Повертає новий ",[3753,64349,3835],{}," з новою адресою ",[3753,64352,64280],{},[3749,64354,64355,64358,64359,64362,64363,64366],{},[3871,64356,64357],{},"Старий блокнот здають в макулатуру (GC), якщо на нього більше немає вікон-зрізів"," — увага: ",[3753,64360,64361],{},"t := s[1:3]"," тримає ",[3871,64364,64365],{},"весь"," старий блокнот живим, навіть якщо бачить лише 2 аркуші!",[44169,64368,64369,64377,64378,8512,64380,64383],{},[3871,64370,11683,64371,64374,64375,5831],{},[3753,64372,64373],{},"a:=s[0:2]; a[0]=99"," псує ",[3753,64376,7550],{}," обидва вікна дивляться в один блокнот. Зміна через одне вікно видна через друге. Для ізоляції — ",[3753,64379,54042],{},[3753,64381,64382],{},"s[0:2:2]"," (full slice).",[3984,64385,64387],{"className":4162,"code":64386,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    var numbers []int \u002F\u002F nil зріз\n\n    for i := 1; i \u003C= 5; i++ {\n        prevCap := cap(numbers)\n        numbers = append(numbers, i*10)\n\n        \u002F\u002F Якщо місткість змінилася — відбулася реалокація пам'яті в купі!\n        if cap(numbers) != prevCap {\n            fmt.Printf(\"🔥 Реалокація growslice! len: %d, новий cap: %d\\n\", len(numbers), cap(numbers))\n        }\n    }\n\n    \u002F\u002F Злиття двох зрізів за допомогою синтаксису розпакування slice...\n    extra := []int{60, 70, 80}\n    numbers = append(numbers, extra...)\n    fmt.Println(\"Підсумковий зріз після злиття:\", numbers)\n}\n",[3753,64388,64389,64395,64399,64405,64409,64417,64430,64434,64458,64473,64495,64499,64504,64522,64564,64568,64572,64576,64581,64605,64624,64643],{"__ignoreMap":3992},[4005,64390,64391,64393],{"class":4007,"line":4008},[4005,64392,5739],{"class":4171},[4005,64394,5742],{"class":4178},[4005,64396,64397],{"class":4007,"line":4014},[4005,64398,4036],{"emptyLinePlaceholder":4035},[4005,64400,64401,64403],{"class":4007,"line":4020},[4005,64402,3917],{"class":4836},[4005,64404,7656],{"class":4330},[4005,64406,64407],{"class":4007,"line":4026},[4005,64408,4036],{"emptyLinePlaceholder":4035},[4005,64410,64411,64413,64415],{"class":4007,"line":4032},[4005,64412,4299],{"class":4171},[4005,64414,5764],{"class":4302},[4005,64416,4306],{"class":4182},[4005,64418,64419,64421,64423,64425,64427],{"class":4007,"line":4039},[4005,64420,9412],{"class":4171},[4005,64422,29774],{"class":4174},[4005,64424,26632],{"class":4182},[4005,64426,4158],{"class":4178},[4005,64428,64429],{"class":4190}," \u002F\u002F nil зріз\n",[4005,64431,64432],{"class":4007,"line":4045},[4005,64433,4036],{"emptyLinePlaceholder":4035},[4005,64435,64436,64438,64440,64442,64444,64446,64448,64450,64452,64454,64456],{"class":4007,"line":4051},[4005,64437,12138],{"class":4836},[4005,64439,6592],{"class":4174},[4005,64441,4314],{"class":4182},[4005,64443,4393],{"class":4186},[4005,64445,23796],{"class":4182},[4005,64447,27826],{"class":4174},[4005,64449,10375],{"class":4182},[4005,64451,5869],{"class":4186},[4005,64453,23796],{"class":4182},[4005,64455,27826],{"class":4174},[4005,64457,27837],{"class":4182},[4005,64459,64460,64463,64465,64467,64469,64471],{"class":4007,"line":4057},[4005,64461,64462],{"class":4174},"        prevCap",[4005,64464,4314],{"class":4182},[4005,64466,31701],{"class":4302},[4005,64468,4611],{"class":4182},[4005,64470,29814],{"class":4174},[4005,64472,4482],{"class":4182},[4005,64474,64475,64477,64479,64481,64483,64485,64487,64489,64491,64493],{"class":4007,"line":4063},[4005,64476,29847],{"class":4174},[4005,64478,4183],{"class":4182},[4005,64480,17678],{"class":4302},[4005,64482,4611],{"class":4182},[4005,64484,29814],{"class":4174},[4005,64486,3836],{"class":4182},[4005,64488,27826],{"class":4174},[4005,64490,8128],{"class":4182},[4005,64492,4631],{"class":4186},[4005,64494,4482],{"class":4182},[4005,64496,64497],{"class":4007,"line":4069},[4005,64498,4036],{"emptyLinePlaceholder":4035},[4005,64500,64501],{"class":4007,"line":4075},[4005,64502,64503],{"class":4190},"        \u002F\u002F Якщо місткість змінилася — відбулася реалокація пам'яті в купі!\n",[4005,64505,64506,64508,64511,64513,64515,64517,64520],{"class":4007,"line":4081},[4005,64507,12892],{"class":4836},[4005,64509,64510],{"class":4302}," cap",[4005,64512,4611],{"class":4182},[4005,64514,29814],{"class":4174},[4005,64516,8010],{"class":4182},[4005,64518,64519],{"class":4174},"prevCap",[4005,64521,5073],{"class":4182},[4005,64523,64524,64526,64528,64530,64532,64535,64537,64540,64542,64544,64546,64548,64550,64552,64554,64556,64558,64560,64562],{"class":4007,"line":4086},[4005,64525,26586],{"class":4174},[4005,64527,3769],{"class":4182},[4005,64529,7945],{"class":4302},[4005,64531,4611],{"class":4182},[4005,64533,64534],{"class":4330},"\"🔥 Реалокація growslice! len: ",[4005,64536,7959],{"class":4174},[4005,64538,64539],{"class":4330},", новий cap: ",[4005,64541,7959],{"class":4174},[4005,64543,7965],{"class":7964},[4005,64545,7968],{"class":4330},[4005,64547,3836],{"class":4182},[4005,64549,11465],{"class":4302},[4005,64551,4611],{"class":4182},[4005,64553,29814],{"class":4174},[4005,64555,31601],{"class":4182},[4005,64557,31701],{"class":4302},[4005,64559,4611],{"class":4182},[4005,64561,29814],{"class":4174},[4005,64563,25552],{"class":4182},[4005,64565,64566],{"class":4007,"line":4092},[4005,64567,12937],{"class":4182},[4005,64569,64570],{"class":4007,"line":4098},[4005,64571,5127],{"class":4182},[4005,64573,64574],{"class":4007,"line":4104},[4005,64575,4036],{"emptyLinePlaceholder":4035},[4005,64577,64578],{"class":4007,"line":4110},[4005,64579,64580],{"class":4190},"    \u002F\u002F Злиття двох зрізів за допомогою синтаксису розпакування slice...\n",[4005,64582,64583,64586,64588,64590,64592,64594,64596,64598,64600,64603],{"class":4007,"line":4937},[4005,64584,64585],{"class":4174},"    extra",[4005,64587,11583],{"class":4182},[4005,64589,4158],{"class":4178},[4005,64591,16268],{"class":4182},[4005,64593,63758],{"class":4186},[4005,64595,3836],{"class":4182},[4005,64597,63763],{"class":4186},[4005,64599,3836],{"class":4182},[4005,64601,64602],{"class":4186},"80",[4005,64604,4078],{"class":4182},[4005,64606,64607,64609,64611,64613,64615,64617,64619,64622],{"class":4007,"line":4942},[4005,64608,29722],{"class":4174},[4005,64610,4183],{"class":4182},[4005,64612,17678],{"class":4302},[4005,64614,4611],{"class":4182},[4005,64616,29814],{"class":4174},[4005,64618,3836],{"class":4182},[4005,64620,64621],{"class":4174},"extra",[4005,64623,34446],{"class":4182},[4005,64625,64626,64628,64630,64632,64634,64637,64639,64641],{"class":4007,"line":4947},[4005,64627,5370],{"class":4174},[4005,64629,3769],{"class":4182},[4005,64631,5348],{"class":4302},[4005,64633,4611],{"class":4182},[4005,64635,64636],{"class":4330},"\"Підсумковий зріз після злиття:\"",[4005,64638,3836],{"class":4182},[4005,64640,29814],{"class":4174},[4005,64642,4482],{"class":4182},[4005,64644,64645],{"class":4007,"line":4953},[4005,64646,4078],{"class":4182},[3900,64648],{},[9014,64650,64652],{"id":64651},"двовимірні-зрізи-та-сортування-для-допитливих","Двовимірні зрізи та сортування — для допитливих",[3908,64654,64655,3880,64657,64660,64661,3769],{},[3871,64656,63824],{},[3753,64658,64659],{},"[][]int"," — таблиця де кожен рядок може мати різну довжину. Поки що достатньо ",[3753,64662,62572],{},[3908,64664,64665,64666,64669,64670,64672],{},"На відміну від прямокутних масивів ",[3753,64667,64668],{},"[2][3]int"," (де всі рядки по 3 елементи), зріз зрізів ",[3753,64671,64659],{}," — це зріз покажчиків на незалежні базові масиви, тому рядки можуть мати різну довжину (ідеально для матриць суміжності графа):",[3984,64674,64676],{"className":4162,"code":64675,"language":4164,"meta":3992,"style":3992},"matrix := [][]int{\n    {1, 2, 3},\n    {4, 5},       \u002F\u002F коротший рядок — валідно!\n    {6, 7, 8, 9},\n}\nmatrix[1] = append(matrix[1], 99) \u002F\u002F розширює лише другий рядок\n",[3753,64677,64678,64689,64706,64722,64742,64746],{"__ignoreMap":3992},[4005,64679,64680,64682,64685,64687],{"class":4007,"line":4008},[4005,64681,30693],{"class":4174},[4005,64683,64684],{"class":4182}," := [][]",[4005,64686,4158],{"class":4178},[4005,64688,29461],{"class":4182},[4005,64690,64691,64694,64696,64698,64700,64702,64704],{"class":4007,"line":4014},[4005,64692,64693],{"class":4182},"    {",[4005,64695,4393],{"class":4186},[4005,64697,3836],{"class":4182},[4005,64699,4398],{"class":4186},[4005,64701,3836],{"class":4182},[4005,64703,6286],{"class":4186},[4005,64705,38437],{"class":4182},[4005,64707,64708,64710,64712,64714,64716,64719],{"class":4007,"line":4020},[4005,64709,64693],{"class":4182},[4005,64711,8245],{"class":4186},[4005,64713,3836],{"class":4182},[4005,64715,5869],{"class":4186},[4005,64717,64718],{"class":4182},"},       ",[4005,64720,64721],{"class":4190},"\u002F\u002F коротший рядок — валідно!\n",[4005,64723,64724,64726,64728,64730,64732,64734,64736,64738,64740],{"class":4007,"line":4026},[4005,64725,64693],{"class":4182},[4005,64727,26030],{"class":4186},[4005,64729,3836],{"class":4182},[4005,64731,13258],{"class":4186},[4005,64733,3836],{"class":4182},[4005,64735,8264],{"class":4186},[4005,64737,3836],{"class":4182},[4005,64739,45801],{"class":4186},[4005,64741,38437],{"class":4182},[4005,64743,64744],{"class":4007,"line":4032},[4005,64745,4078],{"class":4182},[4005,64747,64748,64750,64752,64754,64756,64758,64760,64762,64764,64766,64768,64771,64773],{"class":4007,"line":4039},[4005,64749,30693],{"class":4174},[4005,64751,11561],{"class":4182},[4005,64753,4393],{"class":4186},[4005,64755,12081],{"class":4182},[4005,64757,17678],{"class":4302},[4005,64759,4611],{"class":4182},[4005,64761,30693],{"class":4174},[4005,64763,11561],{"class":4182},[4005,64765,4393],{"class":4186},[4005,64767,12048],{"class":4182},[4005,64769,64770],{"class":4186},"99",[4005,64772,4498],{"class":4182},[4005,64774,64775],{"class":4190},"\u002F\u002F розширює лише другий рядок\n",[3908,64777,64778,64779,64782,64783,31583,64786,3836,64789,3836,64792,64795,64796,64799,64800,64803],{},"Для впорядкування використовуйте ",[3753,64780,64781],{},"sort"," (не повторює ",[3753,64784,64785],{},"01",[3753,64787,64788],{},"sort.Ints(s)",[3753,64790,64791],{},"sort.Strings(s)",[3753,64793,64794],{},"sort.Slice(s, func(i,j int) bool{...})"," для структур. Пошук ",[3753,64797,64798],{},"sort.SearchInts(sorted, 33)"," вимагає ",[3871,64801,64802],{},"відсортованого"," зрізу — на невідсортованому поверне хибний індекс, бо це бінарний пошук $O(\\log N)$.",[3900,64805],{},[9014,64807,64809,64810,64813],{"id":64808},"повна-ізоляція-вбудована-функція-copy-та-видалення-елементів","Повна ізоляція: вбудована функція ",[3753,64811,64812],{},"copy()"," та видалення елементів",[3908,64815,64816,64817,5831],{},"Якщо вам необхідно отримати повністю незалежну копію даних без спільного базового масиву, використовується функція ",[3871,64818,64819],{},[3753,64820,64821],{},"copy(dst, src)",[3984,64823,64825],{"className":4162,"code":64824,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    original := []int{10, 20, 30, 40, 50}\n\n    \u002F\u002F 1. Правильне клонування зрізу:\n    \u002F\u002F Приймальний зріз ОБОВ'ЯЗКОВО повинен мати виділену довжину len!\n    clone := make([]int, len(original))\n    copiedCount := copy(clone, original) \u002F\u002F Копіює 5 елементів\n    fmt.Printf(\"Скопійовано %d елементів. Клон: %v\\n\", copiedCount, clone)\n\n    clone[0] = 777 \u002F\u002F original НЕ зміниться!\n    fmt.Printf(\"Оригінал: %v, Клон: %v\\n\", original, clone)\n\n    \u002F\u002F 2. Стандартне видалення елемента за індексом i (наприклад, видаляємо індекс 2 — число 30):\n    indexToRemove := 2\n    original = append(original[:indexToRemove], original[indexToRemove+1:]...)\n    fmt.Println(\"Зріз після видалення елемента [2]:\", original) \u002F\u002F [10, 20, 40, 50]\n}\n",[3753,64826,64827,64833,64837,64843,64847,64855,64885,64889,64894,64899,64922,64945,64980,64984,64999,65032,65036,65041,65050,65082,65104],{"__ignoreMap":3992},[4005,64828,64829,64831],{"class":4007,"line":4008},[4005,64830,5739],{"class":4171},[4005,64832,5742],{"class":4178},[4005,64834,64835],{"class":4007,"line":4014},[4005,64836,4036],{"emptyLinePlaceholder":4035},[4005,64838,64839,64841],{"class":4007,"line":4020},[4005,64840,3917],{"class":4836},[4005,64842,7656],{"class":4330},[4005,64844,64845],{"class":4007,"line":4026},[4005,64846,4036],{"emptyLinePlaceholder":4035},[4005,64848,64849,64851,64853],{"class":4007,"line":4032},[4005,64850,4299],{"class":4171},[4005,64852,5764],{"class":4302},[4005,64854,4306],{"class":4182},[4005,64856,64857,64859,64861,64863,64865,64867,64869,64871,64873,64875,64877,64879,64881,64883],{"class":4007,"line":4039},[4005,64858,32265],{"class":4174},[4005,64860,11583],{"class":4182},[4005,64862,4158],{"class":4178},[4005,64864,16268],{"class":4182},[4005,64866,4631],{"class":4186},[4005,64868,3836],{"class":4182},[4005,64870,5335],{"class":4186},[4005,64872,3836],{"class":4182},[4005,64874,4276],{"class":4186},[4005,64876,3836],{"class":4182},[4005,64878,30569],{"class":4186},[4005,64880,3836],{"class":4182},[4005,64882,26330],{"class":4186},[4005,64884,4078],{"class":4182},[4005,64886,64887],{"class":4007,"line":4045},[4005,64888,4036],{"emptyLinePlaceholder":4035},[4005,64890,64891],{"class":4007,"line":4051},[4005,64892,64893],{"class":4190},"    \u002F\u002F 1. Правильне клонування зрізу:\n",[4005,64895,64896],{"class":4007,"line":4057},[4005,64897,64898],{"class":4190},"    \u002F\u002F Приймальний зріз ОБОВ'ЯЗКОВО повинен мати виділену довжину len!\n",[4005,64900,64901,64904,64906,64908,64910,64912,64914,64916,64918,64920],{"class":4007,"line":4063},[4005,64902,64903],{"class":4174},"    clone",[4005,64905,4314],{"class":4182},[4005,64907,3764],{"class":4302},[4005,64909,5159],{"class":4182},[4005,64911,4158],{"class":4178},[4005,64913,3836],{"class":4182},[4005,64915,11465],{"class":4302},[4005,64917,4611],{"class":4182},[4005,64919,32347],{"class":4174},[4005,64921,25552],{"class":4182},[4005,64923,64924,64927,64929,64931,64933,64936,64938,64940,64942],{"class":4007,"line":4069},[4005,64925,64926],{"class":4174},"    copiedCount",[4005,64928,4314],{"class":4182},[4005,64930,54042],{"class":4302},[4005,64932,4611],{"class":4182},[4005,64934,64935],{"class":4174},"clone",[4005,64937,3836],{"class":4182},[4005,64939,32347],{"class":4174},[4005,64941,4498],{"class":4182},[4005,64943,64944],{"class":4190},"\u002F\u002F Копіює 5 елементів\n",[4005,64946,64947,64949,64951,64953,64955,64958,64960,64963,64965,64967,64969,64971,64974,64976,64978],{"class":4007,"line":4075},[4005,64948,5370],{"class":4174},[4005,64950,3769],{"class":4182},[4005,64952,7945],{"class":4302},[4005,64954,4611],{"class":4182},[4005,64956,64957],{"class":4330},"\"Скопійовано ",[4005,64959,7959],{"class":4174},[4005,64961,64962],{"class":4330}," елементів. Клон: ",[4005,64964,10666],{"class":4174},[4005,64966,7965],{"class":7964},[4005,64968,7968],{"class":4330},[4005,64970,3836],{"class":4182},[4005,64972,64973],{"class":4174},"copiedCount",[4005,64975,3836],{"class":4182},[4005,64977,64935],{"class":4174},[4005,64979,4482],{"class":4182},[4005,64981,64982],{"class":4007,"line":4081},[4005,64983,4036],{"emptyLinePlaceholder":4035},[4005,64985,64986,64988,64990,64992,64994,64996],{"class":4007,"line":4086},[4005,64987,64903],{"class":4174},[4005,64989,11561],{"class":4182},[4005,64991,4200],{"class":4186},[4005,64993,12081],{"class":4182},[4005,64995,32241],{"class":4186},[4005,64997,64998],{"class":4190}," \u002F\u002F original НЕ зміниться!\n",[4005,65000,65001,65003,65005,65007,65009,65011,65013,65016,65018,65020,65022,65024,65026,65028,65030],{"class":4007,"line":4092},[4005,65002,5370],{"class":4174},[4005,65004,3769],{"class":4182},[4005,65006,7945],{"class":4302},[4005,65008,4611],{"class":4182},[4005,65010,32336],{"class":4330},[4005,65012,10666],{"class":4174},[4005,65014,65015],{"class":4330},", Клон: ",[4005,65017,10666],{"class":4174},[4005,65019,7965],{"class":7964},[4005,65021,7968],{"class":4330},[4005,65023,3836],{"class":4182},[4005,65025,32347],{"class":4174},[4005,65027,3836],{"class":4182},[4005,65029,64935],{"class":4174},[4005,65031,4482],{"class":4182},[4005,65033,65034],{"class":4007,"line":4098},[4005,65035,4036],{"emptyLinePlaceholder":4035},[4005,65037,65038],{"class":4007,"line":4104},[4005,65039,65040],{"class":4190},"    \u002F\u002F 2. Стандартне видалення елемента за індексом i (наприклад, видаляємо індекс 2 — число 30):\n",[4005,65042,65043,65046,65048],{"class":4007,"line":4110},[4005,65044,65045],{"class":4174},"    indexToRemove",[4005,65047,4314],{"class":4182},[4005,65049,24389],{"class":4186},[4005,65051,65052,65054,65056,65058,65060,65062,65064,65067,65069,65071,65073,65075,65077,65079],{"class":4007,"line":4937},[4005,65053,32265],{"class":4174},[4005,65055,4183],{"class":4182},[4005,65057,17678],{"class":4302},[4005,65059,4611],{"class":4182},[4005,65061,32347],{"class":4174},[4005,65063,13705],{"class":4182},[4005,65065,65066],{"class":4174},"indexToRemove",[4005,65068,12048],{"class":4182},[4005,65070,32347],{"class":4174},[4005,65072,11561],{"class":4182},[4005,65074,65066],{"class":4174},[4005,65076,14837],{"class":4182},[4005,65078,4393],{"class":4186},[4005,65080,65081],{"class":4182},":]...)\n",[4005,65083,65084,65086,65088,65090,65092,65095,65097,65099,65101],{"class":4007,"line":4942},[4005,65085,5370],{"class":4174},[4005,65087,3769],{"class":4182},[4005,65089,5348],{"class":4302},[4005,65091,4611],{"class":4182},[4005,65093,65094],{"class":4330},"\"Зріз після видалення елемента [2]:\"",[4005,65096,3836],{"class":4182},[4005,65098,32347],{"class":4174},[4005,65100,4498],{"class":4182},[4005,65102,65103],{"class":4190},"\u002F\u002F [10, 20, 40, 50]\n",[4005,65105,65106],{"class":4007,"line":4947},[4005,65107,4078],{"class":4182},[3900,65109],{},[3976,65111,65113,65114,65116],{"id":65112},"карти-mapkv-вбудовані-хеш-таблиці","Карти (",[3753,65115,8629],{},"): вбудовані хеш-таблиці",[3908,65118,65119,65125,65126,65129],{},[3871,65120,65121,65122,5032],{},"Карта (",[3758,65123,65124],{},"Map"," — це невпорядкована колекція пар «ключ-значення» (",[3758,65127,65128],{},"Key-Value","), яка забезпечує надшвидкий пошук, додавання та видалення даних за константний середній час $O(1)$.",[9014,65131,65133],{"id":65132},"вимоги-до-типів-ключів","Вимоги до типів ключів",[3908,65135,65136,65138,65139,65141,65142,3858,65144,65146,65147,65149],{},[3871,65137,61013],{}," ключ карти — як підпис на шухляді, має бути порівнюваним (",[3753,65140,12976],{},"). Поки що користуйтесь ",[3753,65143,7004],{},[3753,65145,4158],{}," — вони завжди порівнювані. Деталі про ",[3753,65148,3853],{}," — нижче для допитливих.",[3908,65151,65152,65153,65158,65159,8157,65161,4159],{},"Тип ключа $K$ ",[3871,65154,65155,65156],{},"зобов'язаний бути ",[3753,65157,3853],{}," (підтримувати ",[3753,65160,12976],{},[3753,65162,22859],{},[3746,65164,65165,65187],{},[3749,65166,65167,3880,65170,3836,65172,3836,65174,3836,65176,3836,65178,65180,65181,65183,65184,65186],{},[3871,65168,65169],{},"Дозволені ключі:",[3753,65171,7004],{},[3753,65173,4158],{},[3753,65175,8379],{},[3753,65177,8437],{},[3753,65179,8505],{},", покажчики, канали, структури (якщо всі їхні поля ",[3753,65182,3853],{},") та фіксовані масиви ",[3753,65185,31094],{}," (порівнюються поелементно).",[3749,65188,65189,65192,65193,65195,65196,65198,65199,65202,65203,3769],{},[3871,65190,65191],{},"Заборонені ключі:"," зрізи ",[3753,65194,8577],{},", карти ",[3753,65197,8629],{}," та функції ",[3753,65200,65201],{},"func()",", оскільки вони не підтримують рівність ",[3753,65204,12976],{},[3984,65206,65208],{"className":4162,"code":65207,"language":4164,"meta":3992,"style":3992},"type Point struct{ X, Y int } \u002F\u002F comparable — всі поля comparable\nvar m1 map[Point]string = map[Point]string{{1,2}: \"a\"} \u002F\u002F OK\nvar m2 map[[2]int]string = map[[2]int]string{{1,2}: \"a\"} \u002F\u002F OK: масив comparable\n\u002F\u002F var m3 map[[]int]string \u002F\u002F ❌ invalid map key type []int\n\u002F\u002F var m4 map[map[string]int]string \u002F\u002F ❌ invalid map key\n",[3753,65209,65210,65234,65281,65336,65344],{"__ignoreMap":3992},[4005,65211,65212,65214,65216,65218,65220,65222,65224,65226,65228,65231],{"class":4007,"line":4008},[4005,65213,4809],{"class":4171},[4005,65215,48465],{"class":4178},[4005,65217,10957],{"class":4171},[4005,65219,47394],{"class":4182},[4005,65221,48507],{"class":4174},[4005,65223,3836],{"class":4182},[4005,65225,48479],{"class":4174},[4005,65227,4224],{"class":4178},[4005,65229,65230],{"class":4182}," } ",[4005,65232,65233],{"class":4190},"\u002F\u002F comparable — всі поля comparable\n",[4005,65235,65236,65238,65241,65243,65245,65247,65249,65251,65253,65255,65257,65259,65261,65263,65265,65267,65269,65271,65274,65277,65279],{"class":4007,"line":4014},[4005,65237,3963],{"class":4171},[4005,65239,65240],{"class":4174}," m1",[4005,65242,43696],{"class":4171},[4005,65244,11561],{"class":4182},[4005,65246,48502],{"class":4178},[4005,65248,28540],{"class":4182},[4005,65250,7004],{"class":4178},[4005,65252,4183],{"class":4182},[4005,65254,8793],{"class":4171},[4005,65256,11561],{"class":4182},[4005,65258,48502],{"class":4178},[4005,65260,28540],{"class":4182},[4005,65262,7004],{"class":4178},[4005,65264,30709],{"class":4182},[4005,65266,4393],{"class":4186},[4005,65268,61289],{"class":4182},[4005,65270,4398],{"class":4186},[4005,65272,65273],{"class":4182},"}: ",[4005,65275,65276],{"class":4330},"\"a\"",[4005,65278,25516],{"class":4182},[4005,65280,34015],{"class":4190},[4005,65282,65283,65285,65288,65290,65293,65295,65297,65299,65301,65303,65305,65307,65309,65311,65313,65315,65317,65319,65321,65323,65325,65327,65329,65331,65333],{"class":4007,"line":4020},[4005,65284,3963],{"class":4171},[4005,65286,65287],{"class":4174}," m2",[4005,65289,43696],{"class":4171},[4005,65291,65292],{"class":4182},"[[",[4005,65294,4398],{"class":4186},[4005,65296,28540],{"class":4182},[4005,65298,4158],{"class":4178},[4005,65300,28540],{"class":4182},[4005,65302,7004],{"class":4178},[4005,65304,4183],{"class":4182},[4005,65306,8793],{"class":4171},[4005,65308,65292],{"class":4182},[4005,65310,4398],{"class":4186},[4005,65312,28540],{"class":4182},[4005,65314,4158],{"class":4178},[4005,65316,28540],{"class":4182},[4005,65318,7004],{"class":4178},[4005,65320,30709],{"class":4182},[4005,65322,4393],{"class":4186},[4005,65324,61289],{"class":4182},[4005,65326,4398],{"class":4186},[4005,65328,65273],{"class":4182},[4005,65330,65276],{"class":4330},[4005,65332,25516],{"class":4182},[4005,65334,65335],{"class":4190},"\u002F\u002F OK: масив comparable\n",[4005,65337,65338,65341],{"class":4007,"line":4026},[4005,65339,65340],{"class":4190},"\u002F\u002F var m3 map[[]int]string",[4005,65342,65343],{"class":4190}," \u002F\u002F ❌ invalid map key type []int\n",[4005,65345,65346,65349],{"class":4007,"line":4032},[4005,65347,65348],{"class":4190},"\u002F\u002F var m4 map[map[string]int]string",[4005,65350,65351],{"class":4190}," \u002F\u002F ❌ invalid map key\n",[3908,65353,65354,65357,65358,65360,65361,65363,65364,3769],{},[3871,65355,65356],{},"Чому зріз не може бути ключем:"," зріз — це дескриптор ",[3753,65359,3835],{}," з покажчиком на heap, його порівняння вимагало б глибокого порівняння базового масиву, що порушує константний час $O(1)$. Якщо потрібен ключ-колекція, використовуйте масив ",[3753,65362,8600],{}," або хешуйте зріз у ",[3753,65365,7004],{},[3900,65367],{},[9014,65369,65371],{"id":65370},"практичні-операції-з-картами","Практичні операції з картами",[3984,65373,65375],{"className":4162,"code":65374,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    \u002F\u002F 1. Оголошення та ініціалізація через make() або літерал\n    \u002F\u002F Зауваження: var m map[string]int створить nil-карту.\n    \u002F\u002F Читати з nil-карти можна, але спроба ЗАПИСУ викличе паніку!\n    userRoles := make(map[string]string)\n\n    \u002F\u002F Додавання та оновлення записів:\n    userRoles[\"alex\"] = \"admin\"\n    userRoles[\"maria\"] = \"lead_developer\"\n    userRoles[\"taras\"] = \"devops\"\n\n    \u002F\u002F 2. Читання за ключем:\n    \u002F\u002F Якщо ключа немає в карті, вона повертає Zero Value типу значення (\"\"):\n    fmt.Println(\"Роль alex:\", userRoles[\"alex\"])\n    fmt.Println(\"Роль неіснуючого ivan:\", userRoles[\"ivan\"]) \u002F\u002F Поверне порожній рядок \"\"\n\n    \u002F\u002F 3. Патерн Comma-ok (Безпечна перевірка існування ключа):\n    role, exists := userRoles[\"ivan\"]\n    if !exists {\n        fmt.Println(\"❌ Користувача 'ivan' не знайдено в базі ролей!\")\n    } else {\n        fmt.Println(\"✅ Знайдено роль:\", role)\n    }\n\n    \u002F\u002F 4. Видалення запису за допомогою delete(map, key):\n    delete(userRoles, \"taras\")\n    \u002F\u002F Видалення неіснуючого ключа абсолютно безпечне і не викликає помилок:\n    delete(userRoles, \"unknown_user\")\n\n    \u002F\u002F 5. Ітерація по карті:\n    \u002F\u002F ⚠️ УВАГА: порядок обходу ключів є ВИПАДКОВИМ при кожному запуску програми!\n    \u002F\u002F Go навмисно рандомізує стартовий бакет (fastrand) з Go 1.0, щоб код не залежав від порядку.\n    \u002F\u002F Якщо потрібен детермінований порядок — відсортуйте ключі:\n    \u002F\u002F keys := make([]string, 0, len(userRoles)); for k := range userRoles { keys = append(keys, k) }; sort.Strings(keys)\n    fmt.Println(\"\\nСписок користувачів у системі:\")\n    for username, r := range userRoles {\n        fmt.Printf(\"  • %s => %s\\n\", username, r)\n    }\n}\n",[3753,65376,65377,65383,65387,65393,65397,65405,65410,65415,65420,65443,65447,65452,65465,65478,65492,65496,65501,65506,65530,65557,65561,65566,65586,65596,65611,65619,65639,65643,65647,65652,65667,65672,65687,65691,65696,65701,65706,65711,65716,65735,65754,65788,65792],{"__ignoreMap":3992},[4005,65378,65379,65381],{"class":4007,"line":4008},[4005,65380,5739],{"class":4171},[4005,65382,5742],{"class":4178},[4005,65384,65385],{"class":4007,"line":4014},[4005,65386,4036],{"emptyLinePlaceholder":4035},[4005,65388,65389,65391],{"class":4007,"line":4020},[4005,65390,3917],{"class":4836},[4005,65392,7656],{"class":4330},[4005,65394,65395],{"class":4007,"line":4026},[4005,65396,4036],{"emptyLinePlaceholder":4035},[4005,65398,65399,65401,65403],{"class":4007,"line":4032},[4005,65400,4299],{"class":4171},[4005,65402,5764],{"class":4302},[4005,65404,4306],{"class":4182},[4005,65406,65407],{"class":4007,"line":4039},[4005,65408,65409],{"class":4190},"    \u002F\u002F 1. Оголошення та ініціалізація через make() або літерал\n",[4005,65411,65412],{"class":4007,"line":4045},[4005,65413,65414],{"class":4190},"    \u002F\u002F Зауваження: var m map[string]int створить nil-карту.\n",[4005,65416,65417],{"class":4007,"line":4051},[4005,65418,65419],{"class":4190},"    \u002F\u002F Читати з nil-карти можна, але спроба ЗАПИСУ викличе паніку!\n",[4005,65421,65422,65425,65427,65429,65431,65433,65435,65437,65439,65441],{"class":4007,"line":4057},[4005,65423,65424],{"class":4174},"    userRoles",[4005,65426,4314],{"class":4182},[4005,65428,3764],{"class":4302},[4005,65430,4611],{"class":4182},[4005,65432,8793],{"class":4171},[4005,65434,11561],{"class":4182},[4005,65436,7004],{"class":4178},[4005,65438,28540],{"class":4182},[4005,65440,7004],{"class":4178},[4005,65442,4482],{"class":4182},[4005,65444,65445],{"class":4007,"line":4063},[4005,65446,4036],{"emptyLinePlaceholder":4035},[4005,65448,65449],{"class":4007,"line":4069},[4005,65450,65451],{"class":4190},"    \u002F\u002F Додавання та оновлення записів:\n",[4005,65453,65454,65456,65458,65460,65462],{"class":4007,"line":4075},[4005,65455,65424],{"class":4174},[4005,65457,11561],{"class":4182},[4005,65459,46446],{"class":4330},[4005,65461,12081],{"class":4182},[4005,65463,65464],{"class":4330},"\"admin\"\n",[4005,65466,65467,65469,65471,65473,65475],{"class":4007,"line":4081},[4005,65468,65424],{"class":4174},[4005,65470,11561],{"class":4182},[4005,65472,50365],{"class":4330},[4005,65474,12081],{"class":4182},[4005,65476,65477],{"class":4330},"\"lead_developer\"\n",[4005,65479,65480,65482,65484,65487,65489],{"class":4007,"line":4086},[4005,65481,65424],{"class":4174},[4005,65483,11561],{"class":4182},[4005,65485,65486],{"class":4330},"\"taras\"",[4005,65488,12081],{"class":4182},[4005,65490,65491],{"class":4330},"\"devops\"\n",[4005,65493,65494],{"class":4007,"line":4092},[4005,65495,4036],{"emptyLinePlaceholder":4035},[4005,65497,65498],{"class":4007,"line":4098},[4005,65499,65500],{"class":4190},"    \u002F\u002F 2. Читання за ключем:\n",[4005,65502,65503],{"class":4007,"line":4104},[4005,65504,65505],{"class":4190},"    \u002F\u002F Якщо ключа немає в карті, вона повертає Zero Value типу значення (\"\"):\n",[4005,65507,65508,65510,65512,65514,65516,65519,65521,65524,65526,65528],{"class":4007,"line":4110},[4005,65509,5370],{"class":4174},[4005,65511,3769],{"class":4182},[4005,65513,5348],{"class":4302},[4005,65515,4611],{"class":4182},[4005,65517,65518],{"class":4330},"\"Роль alex:\"",[4005,65520,3836],{"class":4182},[4005,65522,65523],{"class":4174},"userRoles",[4005,65525,11561],{"class":4182},[4005,65527,46446],{"class":4330},[4005,65529,11566],{"class":4182},[4005,65531,65532,65534,65536,65538,65540,65543,65545,65547,65549,65552,65554],{"class":4007,"line":4937},[4005,65533,5370],{"class":4174},[4005,65535,3769],{"class":4182},[4005,65537,5348],{"class":4302},[4005,65539,4611],{"class":4182},[4005,65541,65542],{"class":4330},"\"Роль неіснуючого ivan:\"",[4005,65544,3836],{"class":4182},[4005,65546,65523],{"class":4174},[4005,65548,11561],{"class":4182},[4005,65550,65551],{"class":4330},"\"ivan\"",[4005,65553,31683],{"class":4182},[4005,65555,65556],{"class":4190},"\u002F\u002F Поверне порожній рядок \"\"\n",[4005,65558,65559],{"class":4007,"line":4942},[4005,65560,4036],{"emptyLinePlaceholder":4035},[4005,65562,65563],{"class":4007,"line":4947},[4005,65564,65565],{"class":4190},"    \u002F\u002F 3. Патерн Comma-ok (Безпечна перевірка існування ключа):\n",[4005,65567,65568,65571,65573,65576,65578,65580,65582,65584],{"class":4007,"line":4953},[4005,65569,65570],{"class":4174},"    role",[4005,65572,3836],{"class":4182},[4005,65574,65575],{"class":4174},"exists",[4005,65577,4314],{"class":4182},[4005,65579,65523],{"class":4174},[4005,65581,11561],{"class":4182},[4005,65583,65551],{"class":4330},[4005,65585,51672],{"class":4182},[4005,65587,65588,65590,65592,65594],{"class":4007,"line":4960},[4005,65589,5104],{"class":4836},[4005,65591,18149],{"class":4182},[4005,65593,65575],{"class":4174},[4005,65595,5073],{"class":4182},[4005,65597,65598,65600,65602,65604,65606,65609],{"class":4007,"line":4973},[4005,65599,5343],{"class":4174},[4005,65601,3769],{"class":4182},[4005,65603,5348],{"class":4302},[4005,65605,4611],{"class":4182},[4005,65607,65608],{"class":4330},"\"❌ Користувача 'ivan' не знайдено в базі ролей!\"",[4005,65610,4482],{"class":4182},[4005,65612,65613,65615,65617],{"class":4007,"line":4985},[4005,65614,25065],{"class":4182},[4005,65616,24962],{"class":4836},[4005,65618,5073],{"class":4182},[4005,65620,65621,65623,65625,65627,65629,65632,65634,65637],{"class":4007,"line":7813},[4005,65622,5343],{"class":4174},[4005,65624,3769],{"class":4182},[4005,65626,5348],{"class":4302},[4005,65628,4611],{"class":4182},[4005,65630,65631],{"class":4330},"\"✅ Знайдено роль:\"",[4005,65633,3836],{"class":4182},[4005,65635,65636],{"class":4174},"role",[4005,65638,4482],{"class":4182},[4005,65640,65641],{"class":4007,"line":7819},[4005,65642,5127],{"class":4182},[4005,65644,65645],{"class":4007,"line":7826},[4005,65646,4036],{"emptyLinePlaceholder":4035},[4005,65648,65649],{"class":4007,"line":7839},[4005,65650,65651],{"class":4190},"    \u002F\u002F 4. Видалення запису за допомогою delete(map, key):\n",[4005,65653,65654,65657,65659,65661,65663,65665],{"class":4007,"line":7864},[4005,65655,65656],{"class":4302},"    delete",[4005,65658,4611],{"class":4182},[4005,65660,65523],{"class":4174},[4005,65662,3836],{"class":4182},[4005,65664,65486],{"class":4330},[4005,65666,4482],{"class":4182},[4005,65668,65669],{"class":4007,"line":7872},[4005,65670,65671],{"class":4190},"    \u002F\u002F Видалення неіснуючого ключа абсолютно безпечне і не викликає помилок:\n",[4005,65673,65674,65676,65678,65680,65682,65685],{"class":4007,"line":7881},[4005,65675,65656],{"class":4302},[4005,65677,4611],{"class":4182},[4005,65679,65523],{"class":4174},[4005,65681,3836],{"class":4182},[4005,65683,65684],{"class":4330},"\"unknown_user\"",[4005,65686,4482],{"class":4182},[4005,65688,65689],{"class":4007,"line":7890},[4005,65690,4036],{"emptyLinePlaceholder":4035},[4005,65692,65693],{"class":4007,"line":7895},[4005,65694,65695],{"class":4190},"    \u002F\u002F 5. Ітерація по карті:\n",[4005,65697,65698],{"class":4007,"line":7900},[4005,65699,65700],{"class":4190},"    \u002F\u002F ⚠️ УВАГА: порядок обходу ключів є ВИПАДКОВИМ при кожному запуску програми!\n",[4005,65702,65703],{"class":4007,"line":7909},[4005,65704,65705],{"class":4190},"    \u002F\u002F Go навмисно рандомізує стартовий бакет (fastrand) з Go 1.0, щоб код не залежав від порядку.\n",[4005,65707,65708],{"class":4007,"line":7915},[4005,65709,65710],{"class":4190},"    \u002F\u002F Якщо потрібен детермінований порядок — відсортуйте ключі:\n",[4005,65712,65713],{"class":4007,"line":7921},[4005,65714,65715],{"class":4190},"    \u002F\u002F keys := make([]string, 0, len(userRoles)); for k := range userRoles { keys = append(keys, k) }; sort.Strings(keys)\n",[4005,65717,65718,65720,65722,65724,65726,65728,65730,65733],{"class":4007,"line":7938},[4005,65719,5370],{"class":4174},[4005,65721,3769],{"class":4182},[4005,65723,5348],{"class":4302},[4005,65725,4611],{"class":4182},[4005,65727,7968],{"class":4330},[4005,65729,7965],{"class":7964},[4005,65731,65732],{"class":4330},"Список користувачів у системі:\"",[4005,65734,4482],{"class":4182},[4005,65736,65737,65739,65741,65743,65745,65747,65749,65752],{"class":4007,"line":7982},[4005,65738,12138],{"class":4836},[4005,65740,46584],{"class":4174},[4005,65742,3836],{"class":4182},[4005,65744,12146],{"class":4174},[4005,65746,4314],{"class":4182},[4005,65748,12151],{"class":4836},[4005,65750,65751],{"class":4174}," userRoles",[4005,65753,5073],{"class":4182},[4005,65755,65756,65758,65760,65762,65764,65767,65769,65772,65774,65776,65778,65780,65782,65784,65786],{"class":4007,"line":7987},[4005,65757,5343],{"class":4174},[4005,65759,3769],{"class":4182},[4005,65761,7945],{"class":4302},[4005,65763,4611],{"class":4182},[4005,65765,65766],{"class":4330},"\"  • ",[4005,65768,16775],{"class":4174},[4005,65770,65771],{"class":4330}," => ",[4005,65773,16775],{"class":4174},[4005,65775,7965],{"class":7964},[4005,65777,7968],{"class":4330},[4005,65779,3836],{"class":4182},[4005,65781,33385],{"class":4174},[4005,65783,3836],{"class":4182},[4005,65785,12146],{"class":4174},[4005,65787,4482],{"class":4182},[4005,65789,65790],{"class":4007,"line":7993},[4005,65791,5127],{"class":4182},[4005,65793,65794],{"class":4007,"line":8016},[4005,65795,4078],{"class":4182},[3900,65797],{},[9014,65799,65801,65802,8157,65805,65807],{"id":65800},"внутрішня-архітектура-карт-у-go-runtimehmap-та-bmap-для-допитливих","Внутрішня архітектура карт у Go (",[3753,65803,65804],{},"runtime.hmap",[3753,65806,3850],{},") — для допитливих",[3908,65809,65810,61014,65812,3836,65814,3836,65817,65820],{},[3871,65811,61013],{},[3753,65813,8995],{},[3753,65815,65816],{},"delete(m,\"k\")",[3753,65818,65819],{},"_,ok:=m[\"k\"]",". Як влаштовано всередині — нижче.",[3908,65822,65823,65824,65826,65827,5831],{},"У Go тип ",[3753,65825,8629],{}," — це не об'єкт у пам'яті, а ",[3871,65828,65829,65830],{},"покажчик на внутрішню структуру ",[3753,65831,65804],{},[3994,65833,65835],{"alt":65834},"Внутрішня будова хеш-таблиці Go map",[3984,65836,65838],{"className":3999,"code":65837,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 12\n\npackage \"Заголовок хеш-таблиці runtime.hmap (48 байтів)\" #F8FAFC {\n    rectangle \"count: кількість пар (3)\\n• B: логарифм бакетів (2^B = 1)\\n• buckets: покажчик на масив бакетів\" as HMap #DBEAFE\n}\n\npackage \"Масив бакетів (bmap)\" #FFFFFF {\n    rectangle \"Бакет 0 (Рівно 8 комірок)\\n• tophash[8]: старші байти хешів\\n• keys[8]: масив ключів\\n• values[8]: масив значень\\n• overflow: покажчик переповнення\" as B0 #DCFCE7\n    rectangle \"Бакет 1 (Рівно 8 комірок)\\n• tophash[8]\\n• keys[8]\\n• values[8]\" as B1 #DCFCE7\n}\n\nHMap -down-> B0\nHMap -down-> B1\n@enduml\n",[3753,65839,65840,65844,65848,65852,65856,65860,65865,65870,65874,65878,65883,65888,65893,65897,65901,65906,65911],{"__ignoreMap":3992},[4005,65841,65842],{"class":4007,"line":4008},[4005,65843,4011],{},[4005,65845,65846],{"class":4007,"line":4014},[4005,65847,4017],{},[4005,65849,65850],{"class":4007,"line":4020},[4005,65851,4023],{},[4005,65853,65854],{"class":4007,"line":4026},[4005,65855,30872],{},[4005,65857,65858],{"class":4007,"line":4032},[4005,65859,4036],{"emptyLinePlaceholder":4035},[4005,65861,65862],{"class":4007,"line":4039},[4005,65863,65864],{},"package \"Заголовок хеш-таблиці runtime.hmap (48 байтів)\" #F8FAFC {\n",[4005,65866,65867],{"class":4007,"line":4045},[4005,65868,65869],{},"    rectangle \"count: кількість пар (3)\\n• B: логарифм бакетів (2^B = 1)\\n• buckets: покажчик на масив бакетів\" as HMap #DBEAFE\n",[4005,65871,65872],{"class":4007,"line":4051},[4005,65873,4078],{},[4005,65875,65876],{"class":4007,"line":4057},[4005,65877,4036],{"emptyLinePlaceholder":4035},[4005,65879,65880],{"class":4007,"line":4063},[4005,65881,65882],{},"package \"Масив бакетів (bmap)\" #FFFFFF {\n",[4005,65884,65885],{"class":4007,"line":4069},[4005,65886,65887],{},"    rectangle \"Бакет 0 (Рівно 8 комірок)\\n• tophash[8]: старші байти хешів\\n• keys[8]: масив ключів\\n• values[8]: масив значень\\n• overflow: покажчик переповнення\" as B0 #DCFCE7\n",[4005,65889,65890],{"class":4007,"line":4075},[4005,65891,65892],{},"    rectangle \"Бакет 1 (Рівно 8 комірок)\\n• tophash[8]\\n• keys[8]\\n• values[8]\" as B1 #DCFCE7\n",[4005,65894,65895],{"class":4007,"line":4081},[4005,65896,4078],{},[4005,65898,65899],{"class":4007,"line":4086},[4005,65900,4036],{"emptyLinePlaceholder":4035},[4005,65902,65903],{"class":4007,"line":4092},[4005,65904,65905],{},"HMap -down-> B0\n",[4005,65907,65908],{"class":4007,"line":4098},[4005,65909,65910],{},"HMap -down-> B1\n",[4005,65912,65913],{"class":4007,"line":4104},[4005,65914,4113],{},[3908,65916,65917],{},[3871,65918,65919],{},"Як працює пошук у карті:",[4781,65921,65922,65925,65932,65948,65956,65962],{},[3749,65923,65924],{},"Алгоритм хешування обчислює 64-бітний хеш переданого ключа.",[3749,65926,65927,65928,65931],{},"Молодші біти хешу визначають ",[3871,65929,65930],{},"номер бакета"," у масиві.",[3749,65933,65934,65935,65937,65938,65944,65945,65947],{},"Кожен бакет ",[3753,65936,3850],{}," містить фіксований масив ",[3871,65939,65940,65943],{},[3753,65941,65942],{},"tophash"," на 8 байтів",". Go спочатку швидко сканує ",[3753,65946,65942],{}," на рівні регістрів процесора.",[3749,65949,65950,65951,65953,65954,3769],{},"Тільки при збігу байта ",[3753,65952,65942],{}," Go порівнює реальний ключ через ",[3753,65955,12976],{},[3749,65957,65958,65959,3769],{},"Якщо бакет заповнюється (понад 8 пар), Go створює ланцюжок через покажчик ",[3753,65960,65961],{},"overflow",[3749,65963,65964,65965,65968,65969,65972],{},"При зростанні коефіцієнта навантаження (",[3758,65966,65967],{},"Load Factor"," > 6.5) Go автоматично виконує фоновий ",[3871,65970,65971],{},"рехешинг",", поступово переносячи дані у вдвічі більший масив бакетів.",[3900,65974],{},[3976,65976,65978],{"id":65977},"критичні-правила-безпеки-при-роботі-з-картами","Критичні правила безпеки при роботі з картами",[24920,65980,65981],{},[4781,65982,65983,65998,66017],{},[3749,65984,65985,65988,65989,65991,65992,65994,65995,3769],{},[3871,65986,65987],{},"Карта завжди передається за посиланням:","\nОскільки змінна ",[3753,65990,8793],{}," є покажчиком на ",[3753,65993,3847],{},", зміна карти всередині будь-якої функції завжди мутує оригінальну карту без потреби передавати покажчик ",[3753,65996,65997],{},"*map",[3749,65999,66000,66006,66007,24055,66010,4761,66013,66016],{},[3871,66001,66002,66003,4159],{},"Заборона взяття адреси елемента карти (",[3753,66004,66005],{},"&m[key]","\nВираз ",[3753,66008,66009],{},"p := &userRoles[\"alex\"]",[3871,66011,66012],{},"помилкою компілятора",[3753,66014,66015],{},"cannot take the address of userRoles[\"alex\"]","). Оскільки при динамічному рехешингу бакети переміщуються в пам'яті, збережений покажчик миттєво став би невалідним.",[3749,66018,66019,66025,66026,66029,66030,66033,66034,8512,66037,3769],{},[3871,66020,66021,66022,4159],{},"Небезпека гонитви даних (",[3758,66023,66024],{},"Race Condition","\nВбудована карта в Go ",[3871,66027,66028],{},"не є потокобезпечною",". Якщо одна горутина читає карту, а інша в цей самий момент записує в неї дані без синхронізації, Go Runtime аварійно завершить процес неперехоплюваною фатальною помилкою: ",[3753,66031,66032],{},"fatal error: concurrent map read and map write",". Для багатопотокового доступу слід використовувати ",[3753,66035,66036],{},"sync.RWMutex",[3753,66038,66039],{},"sync.Map",[3900,66041],{},[3903,66043,66045],{"id":66044},"обробка-помилок-та-відкладене-виконання","Обробка помилок та відкладене виконання",[3976,66047,66049],{"id":66048},"частина-1-обробка-помилок-у-go","Частина 1: Обробка помилок у Go",[9014,66051,66053],{"id":66052},"філософія-go-помилки-як-значення","Філософія Go: помилки як значення",[3908,66055,10416,66056,66059,66060,66063,66064,66066],{},[3871,66057,66058],{},"немає винятків"," (exceptions) як у Java, Python або C#. Замість цього Go використовує ",[3871,66061,66062],{},"помилки як значення"," — спеціальний тип ",[3753,66065,3857],{},", який повертається з функцій разом із результатом.",[3908,66068,66069,66072],{},[3871,66070,66071],{},"Філософія:"," помилка — це нормальна частина виконання програми, а не щось виняткове. Тому її треба обробляти явно.",[3976,66074,66076,66077,66079],{"id":66075},"інтерфейс-error-помилка-як-значення","Інтерфейс ",[3753,66078,3857],{},": помилка як значення",[9014,66081,66083],{"id":66082},"порівняння-go-і-java","Порівняння Go і Java",[12533,66085,66086,66424],{},[12536,66087,66089,66394,66399],{"icon":12743,"label":66088},"Java — винятки",[3984,66090,66092],{"className":12746,"code":66091,"language":12748,"meta":3992,"style":3992},"import java.io.*;\n\npublic class FileExample {\n    \u002F\u002F Метод ДЕКЛАРУЄ що може викинути виняток\n    public static String readFile(String path) throws IOException {\n        BufferedReader reader = new BufferedReader(\n            new FileReader(path)\n        );\n        \n        try {\n            return reader.readLine();\n        } finally {\n            reader.close();  \u002F\u002F Завжди закриваємо\n        }\n    }\n    \n    public static void main(String[] args) {\n        try {\n            \u002F\u002F Обгортаємо виклик у try-catch\n            String content = readFile(\"config.txt\");\n            System.out.println(\"Вміст: \" + content);\n        } catch (FileNotFoundException e) {\n            System.err.println(\"Файл не знайдено\");\n        } catch (IOException e) {\n            System.err.println(\"Помилка читання\");\n        }\n    }\n}\n",[3753,66093,66094,66101,66105,66116,66121,66148,66166,66177,66181,66185,66192,66205,66214,66230,66234,66238,66242,66262,66268,66273,66292,66312,66329,66348,66363,66382,66386,66390],{"__ignoreMap":3992},[4005,66095,66096,66098],{"class":4007,"line":4008},[4005,66097,3917],{"class":4171},[4005,66099,66100],{"class":4182}," java.io.*;\n",[4005,66102,66103],{"class":4007,"line":4014},[4005,66104,4036],{"emptyLinePlaceholder":4035},[4005,66106,66107,66109,66111,66114],{"class":4007,"line":4020},[4005,66108,12755],{"class":4171},[4005,66110,12758],{"class":4171},[4005,66112,66113],{"class":4178}," FileExample",[4005,66115,5073],{"class":4182},[4005,66117,66118],{"class":4007,"line":4026},[4005,66119,66120],{"class":4190},"    \u002F\u002F Метод ДЕКЛАРУЄ що може викинути виняток\n",[4005,66122,66123,66125,66127,66129,66132,66134,66136,66138,66140,66143,66146],{"class":4007,"line":4032},[4005,66124,12768],{"class":4171},[4005,66126,12771],{"class":4171},[4005,66128,46581],{"class":4178},[4005,66130,66131],{"class":4302}," readFile",[4005,66133,4611],{"class":4182},[4005,66135,7343],{"class":4178},[4005,66137,15188],{"class":4174},[4005,66139,4498],{"class":4182},[4005,66141,66142],{"class":4171},"throws",[4005,66144,66145],{"class":4178}," IOException",[4005,66147,5073],{"class":4182},[4005,66149,66150,66153,66156,66158,66160,66163],{"class":4007,"line":4039},[4005,66151,66152],{"class":4178},"        BufferedReader",[4005,66154,66155],{"class":4174}," reader",[4005,66157,4183],{"class":4182},[4005,66159,3768],{"class":4836},[4005,66161,66162],{"class":4302}," BufferedReader",[4005,66164,66165],{"class":4182},"(\n",[4005,66167,66168,66171,66174],{"class":4007,"line":4045},[4005,66169,66170],{"class":4836},"            new",[4005,66172,66173],{"class":4302}," FileReader",[4005,66175,66176],{"class":4182},"(path)\n",[4005,66178,66179],{"class":4007,"line":4051},[4005,66180,63220],{"class":4182},[4005,66182,66183],{"class":4007,"line":4057},[4005,66184,12810],{"class":4182},[4005,66186,66187,66190],{"class":4007,"line":4063},[4005,66188,66189],{"class":4836},"        try",[4005,66191,5073],{"class":4182},[4005,66193,66194,66196,66198,66200,66203],{"class":4007,"line":4069},[4005,66195,40840],{"class":4836},[4005,66197,66155],{"class":4174},[4005,66199,3769],{"class":4182},[4005,66201,66202],{"class":4302},"readLine",[4005,66204,18448],{"class":4182},[4005,66206,66207,66209,66212],{"class":4007,"line":4075},[4005,66208,26602],{"class":4182},[4005,66210,66211],{"class":4836},"finally",[4005,66213,5073],{"class":4182},[4005,66215,66216,66219,66221,66224,66227],{"class":4007,"line":4081},[4005,66217,66218],{"class":4174},"            reader",[4005,66220,3769],{"class":4182},[4005,66222,66223],{"class":4302},"close",[4005,66225,66226],{"class":4182},"();  ",[4005,66228,66229],{"class":4190},"\u002F\u002F Завжди закриваємо\n",[4005,66231,66232],{"class":4007,"line":4086},[4005,66233,12937],{"class":4182},[4005,66235,66236],{"class":4007,"line":4092},[4005,66237,5127],{"class":4182},[4005,66239,66240],{"class":4007,"line":4098},[4005,66241,5214],{"class":4182},[4005,66243,66244,66246,66248,66250,66252,66254,66256,66258,66260],{"class":4007,"line":4104},[4005,66245,12768],{"class":4171},[4005,66247,12771],{"class":4171},[4005,66249,12774],{"class":4178},[4005,66251,5764],{"class":4302},[4005,66253,4611],{"class":4182},[4005,66255,7343],{"class":4178},[4005,66257,12783],{"class":4182},[4005,66259,12786],{"class":4174},[4005,66261,12789],{"class":4182},[4005,66263,66264,66266],{"class":4007,"line":4110},[4005,66265,66189],{"class":4836},[4005,66267,5073],{"class":4182},[4005,66269,66270],{"class":4007,"line":4937},[4005,66271,66272],{"class":4190},"            \u002F\u002F Обгортаємо виклик у try-catch\n",[4005,66274,66275,66277,66280,66282,66285,66287,66290],{"class":4007,"line":4942},[4005,66276,13600],{"class":4178},[4005,66278,66279],{"class":4174}," content",[4005,66281,4183],{"class":4182},[4005,66283,66284],{"class":4302},"readFile",[4005,66286,4611],{"class":4182},[4005,66288,66289],{"class":4330},"\"config.txt\"",[4005,66291,12932],{"class":4182},[4005,66293,66294,66296,66298,66300,66302,66304,66306,66309],{"class":4007,"line":4947},[4005,66295,12917],{"class":4174},[4005,66297,3769],{"class":4182},[4005,66299,12820],{"class":4174},[4005,66301,3769],{"class":4182},[4005,66303,12825],{"class":4302},[4005,66305,4611],{"class":4182},[4005,66307,66308],{"class":4330},"\"Вміст: \"",[4005,66310,66311],{"class":4182}," + content);\n",[4005,66313,66314,66316,66319,66321,66324,66327],{"class":4007,"line":4953},[4005,66315,26602],{"class":4182},[4005,66317,66318],{"class":4836},"catch",[4005,66320,4761],{"class":4182},[4005,66322,66323],{"class":4178},"FileNotFoundException",[4005,66325,66326],{"class":4174}," e",[4005,66328,12789],{"class":4182},[4005,66330,66331,66333,66335,66337,66339,66341,66343,66346],{"class":4007,"line":4960},[4005,66332,12917],{"class":4174},[4005,66334,3769],{"class":4182},[4005,66336,4598],{"class":4174},[4005,66338,3769],{"class":4182},[4005,66340,12825],{"class":4302},[4005,66342,4611],{"class":4182},[4005,66344,66345],{"class":4330},"\"Файл не знайдено\"",[4005,66347,12932],{"class":4182},[4005,66349,66350,66352,66354,66356,66359,66361],{"class":4007,"line":4973},[4005,66351,26602],{"class":4182},[4005,66353,66318],{"class":4836},[4005,66355,4761],{"class":4182},[4005,66357,66358],{"class":4178},"IOException",[4005,66360,66326],{"class":4174},[4005,66362,12789],{"class":4182},[4005,66364,66365,66367,66369,66371,66373,66375,66377,66380],{"class":4007,"line":4985},[4005,66366,12917],{"class":4174},[4005,66368,3769],{"class":4182},[4005,66370,4598],{"class":4174},[4005,66372,3769],{"class":4182},[4005,66374,12825],{"class":4302},[4005,66376,4611],{"class":4182},[4005,66378,66379],{"class":4330},"\"Помилка читання\"",[4005,66381,12932],{"class":4182},[4005,66383,66384],{"class":4007,"line":7813},[4005,66385,12937],{"class":4182},[4005,66387,66388],{"class":4007,"line":7819},[4005,66389,5127],{"class":4182},[4005,66391,66392],{"class":4007,"line":7826},[4005,66393,4078],{"class":4182},[3908,66395,66396],{},[3871,66397,66398],{},"Як працює в Java:",[3746,66400,66401,66407,66413,66416,66419],{},[3749,66402,66403,66404],{},"Метод декларує ",[3753,66405,66406],{},"throws IOException",[3749,66408,66409,66410],{},"Виклик обгортається в ",[3753,66411,66412],{},"try-catch",[3749,66414,66415],{},"Виняток \"летить вгору\" по стеку",[3749,66417,66418],{},"Якщо не спіймати — програма падає",[3749,66420,66421,66423],{},[3753,66422,66211],{}," виконується завжди",[12536,66425,66427,66765,66770],{"icon":12538,"label":66426},"Go — помилки як значення",[3984,66428,66430],{"className":4162,"code":66429,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"os\"\n)\n\n\u002F\u002F Функція повертає (результат, помилку)\nfunc readFile(path string) (string, error) {\n    file, err := os.Open(path)\n    if err != nil {\n        \u002F\u002F Повертаємо помилку як значення\n        return \"\", err\n    }\n    defer file.Close()  \u002F\u002F Відкладене закриття\n    \n    buffer := make([]byte, 1024)\n    n, err := file.Read(buffer)\n    if err != nil {\n        return \"\", err\n    }\n    \n    return string(buffer[:n]), nil  \u002F\u002F nil = немає помилки\n}\n\nfunc main() {\n    content, err := readFile(\"config.txt\")\n    if err != nil {\n        \u002F\u002F Явна перевірка помилки\n        fmt.Println(\"Помилка:\", err)\n        return\n    }\n    \n    fmt.Println(\"Вміст:\", content)\n}\n",[3753,66431,66432,66438,66442,66448,66452,66457,66461,66465,66470,66492,66515,66527,66532,66543,66547,66563,66567,66585,66607,66619,66629,66633,66637,66659,66663,66667,66675,66694,66706,66711,66729,66733,66737,66741,66761],{"__ignoreMap":3992},[4005,66433,66434,66436],{"class":4007,"line":4008},[4005,66435,5739],{"class":4171},[4005,66437,5742],{"class":4178},[4005,66439,66440],{"class":4007,"line":4014},[4005,66441,4036],{"emptyLinePlaceholder":4035},[4005,66443,66444,66446],{"class":4007,"line":4020},[4005,66445,3917],{"class":4836},[4005,66447,4439],{"class":4182},[4005,66449,66450],{"class":4007,"line":4026},[4005,66451,4843],{"class":4330},[4005,66453,66454],{"class":4007,"line":4032},[4005,66455,66456],{"class":4330},"    \"os\"\n",[4005,66458,66459],{"class":4007,"line":4039},[4005,66460,4482],{"class":4182},[4005,66462,66463],{"class":4007,"line":4045},[4005,66464,4036],{"emptyLinePlaceholder":4035},[4005,66466,66467],{"class":4007,"line":4051},[4005,66468,66469],{"class":4190},"\u002F\u002F Функція повертає (результат, помилку)\n",[4005,66471,66472,66474,66476,66478,66480,66482,66484,66486,66488,66490],{"class":4007,"line":4057},[4005,66473,4299],{"class":4171},[4005,66475,66131],{"class":4302},[4005,66477,4611],{"class":4182},[4005,66479,5064],{"class":4174},[4005,66481,4237],{"class":4178},[4005,66483,34788],{"class":4182},[4005,66485,7004],{"class":4178},[4005,66487,3836],{"class":4182},[4005,66489,3857],{"class":4178},[4005,66491,12789],{"class":4182},[4005,66493,66494,66497,66499,66501,66503,66505,66507,66509,66511,66513],{"class":4007,"line":4063},[4005,66495,66496],{"class":4174},"    file",[4005,66498,3836],{"class":4182},[4005,66500,4598],{"class":4174},[4005,66502,4314],{"class":4182},[4005,66504,4603],{"class":4174},[4005,66506,3769],{"class":4182},[4005,66508,4608],{"class":4302},[4005,66510,4611],{"class":4182},[4005,66512,5064],{"class":4174},[4005,66514,4482],{"class":4182},[4005,66516,66517,66519,66521,66523,66525],{"class":4007,"line":4069},[4005,66518,5104],{"class":4836},[4005,66520,5107],{"class":4174},[4005,66522,5110],{"class":4182},[4005,66524,4209],{"class":4171},[4005,66526,5073],{"class":4182},[4005,66528,66529],{"class":4007,"line":4075},[4005,66530,66531],{"class":4190},"        \u002F\u002F Повертаємо помилку як значення\n",[4005,66533,66534,66536,66539,66541],{"class":4007,"line":4081},[4005,66535,5119],{"class":4836},[4005,66537,66538],{"class":4330}," \"\"",[4005,66540,3836],{"class":4182},[4005,66542,51481],{"class":4174},[4005,66544,66545],{"class":4007,"line":4086},[4005,66546,5127],{"class":4182},[4005,66548,66549,66551,66554,66556,66558,66560],{"class":4007,"line":4092},[4005,66550,5132],{"class":4836},[4005,66552,66553],{"class":4174}," file",[4005,66555,3769],{"class":4182},[4005,66557,5140],{"class":4302},[4005,66559,5491],{"class":4182},[4005,66561,66562],{"class":4190},"\u002F\u002F Відкладене закриття\n",[4005,66564,66565],{"class":4007,"line":4098},[4005,66566,5214],{"class":4182},[4005,66568,66569,66571,66573,66575,66577,66579,66581,66583],{"class":4007,"line":4104},[4005,66570,62848],{"class":4174},[4005,66572,4314],{"class":4182},[4005,66574,3764],{"class":4302},[4005,66576,5159],{"class":4182},[4005,66578,5162],{"class":4178},[4005,66580,3836],{"class":4182},[4005,66582,5167],{"class":4186},[4005,66584,4482],{"class":4182},[4005,66586,66587,66589,66591,66593,66595,66597,66599,66601,66603,66605],{"class":4007,"line":4110},[4005,66588,5174],{"class":4174},[4005,66590,3836],{"class":4182},[4005,66592,4598],{"class":4174},[4005,66594,4314],{"class":4182},[4005,66596,4593],{"class":4174},[4005,66598,3769],{"class":4182},[4005,66600,5188],{"class":4302},[4005,66602,4611],{"class":4182},[4005,66604,62891],{"class":4174},[4005,66606,4482],{"class":4182},[4005,66608,66609,66611,66613,66615,66617],{"class":4007,"line":4937},[4005,66610,5104],{"class":4836},[4005,66612,5107],{"class":4174},[4005,66614,5110],{"class":4182},[4005,66616,4209],{"class":4171},[4005,66618,5073],{"class":4182},[4005,66620,66621,66623,66625,66627],{"class":4007,"line":4942},[4005,66622,5119],{"class":4836},[4005,66624,66538],{"class":4330},[4005,66626,3836],{"class":4182},[4005,66628,51481],{"class":4174},[4005,66630,66631],{"class":4007,"line":4947},[4005,66632,5127],{"class":4182},[4005,66634,66635],{"class":4007,"line":4953},[4005,66636,5214],{"class":4182},[4005,66638,66639,66641,66643,66645,66647,66649,66651,66654,66656],{"class":4007,"line":4960},[4005,66640,5260],{"class":4836},[4005,66642,4237],{"class":4178},[4005,66644,4611],{"class":4182},[4005,66646,62891],{"class":4174},[4005,66648,13705],{"class":4182},[4005,66650,11101],{"class":4174},[4005,66652,66653],{"class":4182},"]), ",[4005,66655,4209],{"class":4171},[4005,66657,66658],{"class":4190},"  \u002F\u002F nil = немає помилки\n",[4005,66660,66661],{"class":4007,"line":4973},[4005,66662,4078],{"class":4182},[4005,66664,66665],{"class":4007,"line":4985},[4005,66666,4036],{"emptyLinePlaceholder":4035},[4005,66668,66669,66671,66673],{"class":4007,"line":7813},[4005,66670,4299],{"class":4171},[4005,66672,5764],{"class":4302},[4005,66674,4306],{"class":4182},[4005,66676,66677,66680,66682,66684,66686,66688,66690,66692],{"class":4007,"line":7819},[4005,66678,66679],{"class":4174},"    content",[4005,66681,3836],{"class":4182},[4005,66683,4598],{"class":4174},[4005,66685,4314],{"class":4182},[4005,66687,66284],{"class":4302},[4005,66689,4611],{"class":4182},[4005,66691,66289],{"class":4330},[4005,66693,4482],{"class":4182},[4005,66695,66696,66698,66700,66702,66704],{"class":4007,"line":7826},[4005,66697,5104],{"class":4836},[4005,66699,5107],{"class":4174},[4005,66701,5110],{"class":4182},[4005,66703,4209],{"class":4171},[4005,66705,5073],{"class":4182},[4005,66707,66708],{"class":4007,"line":7839},[4005,66709,66710],{"class":4190},"        \u002F\u002F Явна перевірка помилки\n",[4005,66712,66713,66715,66717,66719,66721,66723,66725,66727],{"class":4007,"line":7864},[4005,66714,5343],{"class":4174},[4005,66716,3769],{"class":4182},[4005,66718,5348],{"class":4302},[4005,66720,4611],{"class":4182},[4005,66722,34924],{"class":4330},[4005,66724,3836],{"class":4182},[4005,66726,4598],{"class":4174},[4005,66728,4482],{"class":4182},[4005,66730,66731],{"class":4007,"line":7872},[4005,66732,34935],{"class":4836},[4005,66734,66735],{"class":4007,"line":7881},[4005,66736,5127],{"class":4182},[4005,66738,66739],{"class":4007,"line":7890},[4005,66740,5214],{"class":4182},[4005,66742,66743,66745,66747,66749,66751,66754,66756,66759],{"class":4007,"line":7895},[4005,66744,5370],{"class":4174},[4005,66746,3769],{"class":4182},[4005,66748,5348],{"class":4302},[4005,66750,4611],{"class":4182},[4005,66752,66753],{"class":4330},"\"Вміст:\"",[4005,66755,3836],{"class":4182},[4005,66757,66758],{"class":4174},"content",[4005,66760,4482],{"class":4182},[4005,66762,66763],{"class":4007,"line":7900},[4005,66764,4078],{"class":4182},[3908,66766,66767],{},[3871,66768,66769],{},"Як працює в Go:",[3746,66771,66772,66775,66781,66784,66787],{},[3749,66773,66774],{},"Функція повертає два значення",[3749,66776,66777,66778],{},"Перевіряємо ",[3753,66779,66780],{},"if err != nil",[3749,66782,66783],{},"Помилка не \"летить\", а повертається",[3749,66785,66786],{},"Якщо не перевірити — проігноровано",[3749,66788,66789,66791],{},[3753,66790,3861],{}," для cleanup",[3908,66793,66794],{},[3871,66795,66796],{},"Таблиця відмінностей:",[5991,66798,66799,66809],{},[5994,66800,66801],{},[5997,66802,66803,66805,66807],{},[6000,66804,10840],{},[6000,66806,2367],{},[6000,66808,12539],{},[6010,66810,66811,66824,66839,66856,66869,66881,66893],{},[5997,66812,66813,66818,66821],{},[6015,66814,66815],{},[3871,66816,66817],{},"Механізм",[6015,66819,66820],{},"Винятки (exceptions)",[6015,66822,66823],{},"Значення (values)",[5997,66825,66826,66830,66835],{},[6015,66827,66828],{},[3871,66829,28707],{},[6015,66831,66832],{},[3753,66833,66834],{},"try-catch-finally",[6015,66836,66837],{},[3753,66838,66780],{},[5997,66840,66841,66846,66851],{},[6015,66842,66843],{},[3871,66844,66845],{},"Декларація",[6015,66847,66848],{},[3753,66849,66850],{},"throws Exception",[6015,66852,66853],{},[3753,66854,66855],{},"(T, error)",[5997,66857,66858,66863,66866],{},[6015,66859,66860],{},[3871,66861,66862],{},"Примусовість",[6015,66864,66865],{},"Checked — так",[6015,66867,66868],{},"Ні",[5997,66870,66871,66876,66879],{},[6015,66872,66873],{},[3871,66874,66875],{},"\"Політ вгору\"",[6015,66877,66878],{},"Так (stack unwinding)",[6015,66880,66868],{},[5997,66882,66883,66887,66890],{},[6015,66884,66885],{},[3871,66886,55868],{},[6015,66888,66889],{},"Повільніше",[6015,66891,66892],{},"Швидше",[5997,66894,66895,66900,66904],{},[6015,66896,66897],{},[3871,66898,66899],{},"Cleanup",[6015,66901,66902],{},[3753,66903,66211],{},[6015,66905,66906],{},[3753,66907,3861],{},[3908,66909,66910,66912,66913,3836,66916,3836,66918,66921,66922,66925],{},[3871,66911,43803],{}," у клієнт-серверному коді кожен виклик ",[3753,66914,66915],{},"os.Open",[3753,66917,44233],{},[3753,66919,66920],{},"sql.Query"," може не вдатися (немає файлу, обірвано мережу). Go змушує перевіряти це явно, повертаючи помилку як ",[3871,66923,66924],{},"останнє"," значення.",[9014,66927,66929,66930,6406],{"id":66928},"що-таке-тип-error","Що таке тип ",[3753,66931,3857],{},[3908,66933,66934,3880,66936,66938,66939,66942],{},[3871,66935,9062],{},[3753,66937,3857],{}," — це вбудований інтерфейс (інтерфейси детально — в наступній лекції, поки достатньо знати що це «тип з методом ",[3753,66940,66941],{},"Error() string","»):",[3984,66944,66946],{"className":4162,"code":66945,"language":4164,"meta":3992,"style":3992},"type error interface {\n    Error() string  \u002F\u002F Повертає текст помилки\n}\n",[3753,66947,66948,66959,66971],{"__ignoreMap":3992},[4005,66949,66950,66952,66955,66957],{"class":4007,"line":4008},[4005,66951,4809],{"class":4171},[4005,66953,66954],{"class":4178}," error",[4005,66956,57837],{"class":4171},[4005,66958,5073],{"class":4182},[4005,66960,66961,66964,66966,66968],{"class":4007,"line":4014},[4005,66962,66963],{"class":4302},"    Error",[4005,66965,7346],{"class":4182},[4005,66967,7004],{"class":4178},[4005,66969,66970],{"class":4190},"  \u002F\u002F Повертає текст помилки\n",[4005,66972,66973],{"class":4007,"line":4020},[4005,66974,4078],{"class":4182},[3908,66976,66977,66978,24055,66980,3769],{},"Будь-який тип з методом ",[3753,66979,66941],{},[3753,66981,3857],{},[3908,66983,66984],{},[3871,66985,66986],{},"Найпростіший спосіб створити помилку:",[3984,66988,66990],{"className":4162,"code":66989,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"errors\"\n    \"fmt\"\n)\n\nfunc main() {\n    \u002F\u002F Створення помилки\n    err := errors.New(\"щось пішло не так\")\n    \n    \u002F\u002F Виведення\n    fmt.Println(err)          \u002F\u002F \"щось пішло не так\"\n    fmt.Println(err.Error())  \u002F\u002F те саме\n}\n",[3753,66991,66992,66998,67002,67008,67012,67016,67020,67024,67032,67037,67056,67060,67065,67082,67103],{"__ignoreMap":3992},[4005,66993,66994,66996],{"class":4007,"line":4008},[4005,66995,5739],{"class":4171},[4005,66997,5742],{"class":4178},[4005,66999,67000],{"class":4007,"line":4014},[4005,67001,4036],{"emptyLinePlaceholder":4035},[4005,67003,67004,67006],{"class":4007,"line":4020},[4005,67005,3917],{"class":4836},[4005,67007,4439],{"class":4182},[4005,67009,67010],{"class":4007,"line":4026},[4005,67011,34749],{"class":4330},[4005,67013,67014],{"class":4007,"line":4032},[4005,67015,4843],{"class":4330},[4005,67017,67018],{"class":4007,"line":4039},[4005,67019,4482],{"class":4182},[4005,67021,67022],{"class":4007,"line":4045},[4005,67023,4036],{"emptyLinePlaceholder":4035},[4005,67025,67026,67028,67030],{"class":4007,"line":4051},[4005,67027,4299],{"class":4171},[4005,67029,5764],{"class":4302},[4005,67031,4306],{"class":4182},[4005,67033,67034],{"class":4007,"line":4057},[4005,67035,67036],{"class":4190},"    \u002F\u002F Створення помилки\n",[4005,67038,67039,67041,67043,67045,67047,67049,67051,67054],{"class":4007,"line":4063},[4005,67040,51448],{"class":4174},[4005,67042,4314],{"class":4182},[4005,67044,34821],{"class":4174},[4005,67046,3769],{"class":4182},[4005,67048,34826],{"class":4302},[4005,67050,4611],{"class":4182},[4005,67052,67053],{"class":4330},"\"щось пішло не так\"",[4005,67055,4482],{"class":4182},[4005,67057,67058],{"class":4007,"line":4069},[4005,67059,5214],{"class":4182},[4005,67061,67062],{"class":4007,"line":4075},[4005,67063,67064],{"class":4190},"    \u002F\u002F Виведення\n",[4005,67066,67067,67069,67071,67073,67075,67077,67079],{"class":4007,"line":4081},[4005,67068,5370],{"class":4174},[4005,67070,3769],{"class":4182},[4005,67072,5348],{"class":4302},[4005,67074,4611],{"class":4182},[4005,67076,4598],{"class":4174},[4005,67078,45337],{"class":4182},[4005,67080,67081],{"class":4190},"\u002F\u002F \"щось пішло не так\"\n",[4005,67083,67084,67086,67088,67090,67092,67094,67096,67098,67100],{"class":4007,"line":4086},[4005,67085,5370],{"class":4174},[4005,67087,3769],{"class":4182},[4005,67089,5348],{"class":4302},[4005,67091,4611],{"class":4182},[4005,67093,4598],{"class":4174},[4005,67095,3769],{"class":4182},[4005,67097,59431],{"class":4302},[4005,67099,39609],{"class":4182},[4005,67101,67102],{"class":4190},"\u002F\u002F те саме\n",[4005,67104,67105],{"class":4007,"line":4092},[4005,67106,4078],{"class":4182},[3908,67108,67109,67110,67113,67114,8157,67117,67120],{},"На цьому етапі створюйте через ",[3753,67111,67112],{},"errors.New(\"...\")",". Далі розглянемо ",[3753,67115,67116],{},"fmt.Errorf(\"...: %w\", err)",[3753,67118,67119],{},"errors.Is\u002FAs"," для обгортання.",[3984,67122,67124],{"className":4162,"code":67123,"language":4164,"meta":3992,"style":3992},"func safeDivide(a, b float64) (float64, error) {\n    if b == 0 {\n        return 0, errors.New(\"ділення на нуль неможливе\")\n    }\n    return a \u002F b, nil \u002F\u002F nil — відсутність помилки (немає heap алокації)\n}\n\nval, err := safeDivide(10, 0)\nif err != nil {\n    log.Printf(\"помилка: %v\", err) \u002F\u002F явна перевірка — немає прихованих винятків\n    return err\n}\nfmt.Println(val)\n",[3753,67125,67126,67152,67164,67185,67189,67206,67210,67214,67236,67248,67274,67280,67284],{"__ignoreMap":3992},[4005,67127,67128,67130,67132,67134,67136,67138,67140,67142,67144,67146,67148,67150],{"class":4007,"line":4008},[4005,67129,4299],{"class":4171},[4005,67131,34773],{"class":4302},[4005,67133,4611],{"class":4182},[4005,67135,9306],{"class":4174},[4005,67137,3836],{"class":4182},[4005,67139,4381],{"class":4174},[4005,67141,5907],{"class":4178},[4005,67143,34788],{"class":4182},[4005,67145,8437],{"class":4178},[4005,67147,3836],{"class":4182},[4005,67149,3857],{"class":4178},[4005,67151,12789],{"class":4182},[4005,67153,67154,67156,67158,67160,67162],{"class":4007,"line":4014},[4005,67155,5104],{"class":4836},[4005,67157,6087],{"class":4174},[4005,67159,5473],{"class":4182},[4005,67161,4200],{"class":4186},[4005,67163,5073],{"class":4182},[4005,67165,67166,67168,67170,67172,67174,67176,67178,67180,67183],{"class":4007,"line":4020},[4005,67167,5119],{"class":4836},[4005,67169,34816],{"class":4186},[4005,67171,3836],{"class":4182},[4005,67173,34821],{"class":4174},[4005,67175,3769],{"class":4182},[4005,67177,34826],{"class":4302},[4005,67179,4611],{"class":4182},[4005,67181,67182],{"class":4330},"\"ділення на нуль неможливе\"",[4005,67184,4482],{"class":4182},[4005,67186,67187],{"class":4007,"line":4026},[4005,67188,5127],{"class":4182},[4005,67190,67191,67193,67195,67197,67199,67201,67203],{"class":4007,"line":4032},[4005,67192,5260],{"class":4836},[4005,67194,4376],{"class":4174},[4005,67196,15549],{"class":4182},[4005,67198,4381],{"class":4174},[4005,67200,3836],{"class":4182},[4005,67202,4209],{"class":4171},[4005,67204,67205],{"class":4190}," \u002F\u002F nil — відсутність помилки (немає heap алокації)\n",[4005,67207,67208],{"class":4007,"line":4039},[4005,67209,4078],{"class":4182},[4005,67211,67212],{"class":4007,"line":4045},[4005,67213,4036],{"emptyLinePlaceholder":4035},[4005,67215,67216,67218,67220,67222,67224,67226,67228,67230,67232,67234],{"class":4007,"line":4051},[4005,67217,43338],{"class":4174},[4005,67219,3836],{"class":4182},[4005,67221,4598],{"class":4174},[4005,67223,4314],{"class":4182},[4005,67225,34889],{"class":4302},[4005,67227,4611],{"class":4182},[4005,67229,4631],{"class":4186},[4005,67231,3836],{"class":4182},[4005,67233,4200],{"class":4186},[4005,67235,4482],{"class":4182},[4005,67237,67238,67240,67242,67244,67246],{"class":4007,"line":4057},[4005,67239,3800],{"class":4836},[4005,67241,5107],{"class":4174},[4005,67243,5110],{"class":4182},[4005,67245,4209],{"class":4171},[4005,67247,5073],{"class":4182},[4005,67249,67250,67252,67254,67256,67258,67261,67263,67265,67267,67269,67271],{"class":4007,"line":4063},[4005,67251,19802],{"class":4174},[4005,67253,3769],{"class":4182},[4005,67255,7945],{"class":4302},[4005,67257,4611],{"class":4182},[4005,67259,67260],{"class":4330},"\"помилка: ",[4005,67262,10666],{"class":4174},[4005,67264,7968],{"class":4330},[4005,67266,3836],{"class":4182},[4005,67268,4598],{"class":4174},[4005,67270,4498],{"class":4182},[4005,67272,67273],{"class":4190},"\u002F\u002F явна перевірка — немає прихованих винятків\n",[4005,67275,67276,67278],{"class":4007,"line":4069},[4005,67277,5260],{"class":4836},[4005,67279,5122],{"class":4174},[4005,67281,67282],{"class":4007,"line":4075},[4005,67283,4078],{"class":4182},[4005,67285,67286,67288,67290,67292,67294,67296],{"class":4007,"line":4081},[4005,67287,3785],{"class":4174},[4005,67289,3769],{"class":4182},[4005,67291,5348],{"class":4302},[4005,67293,4611],{"class":4182},[4005,67295,43338],{"class":4174},[4005,67297,4482],{"class":4182},[4748,67299,67300,67302,67303,67306,67307,7036,67310,8157,67313,67316,67317,3769],{},[3871,67301,61013],{}," завжди пишіть ",[3753,67304,67305],{},"if err != nil { return err }"," одразу після виклику. Поки що достатньо цього. ",[3753,67308,67309],{},"fmt.Errorf(\"open %s: %w\", path, err)",[3753,67311,67312],{},"%w",[3753,67314,67315],{},"errors.Is"," — для наступних лекцій про шари ",[3753,67318,67319],{},"UseCase → Repository",[3908,67321,67322,67325,67326,67328,67329,67332,67333,67335,67336,3769],{},[3871,67323,67324],{},"Trade-off vs винятки:"," явний ",[3753,67327,3857],{}," робить шлях помилки видимим у сигнатурі (",[3753,67330,67331],{},"(User, error)","), але вимагає дисципліни — ",[3753,67334,24863],{}," не ловить ігнорування ",[3753,67337,67338],{},"_, _ = f()",[9014,67340,67342],{"id":67341},"базові-приклади-обробки-помилок","Базові приклади обробки помилок",[3908,67344,67345],{},[3871,67346,67347],{},"1. Проста функція з помилкою:",[3984,67349,67351],{"className":4162,"code":67350,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"errors\"\n    \"fmt\"\n)\n\nfunc divide(a, b float64) (float64, error) {\n    if b == 0 {\n        return 0, errors.New(\"ділення на нуль\")\n    }\n    return a \u002F b, nil  \u002F\u002F nil означає \"немає помилки\"\n}\n\nfunc main() {\n    \u002F\u002F Успішний виклик\n    result, err := divide(10, 2)\n    if err != nil {\n        fmt.Println(\"Помилка:\", err)\n        return\n    }\n    fmt.Println(\"Результат:\", result)  \u002F\u002F 5\n    \n    \u002F\u002F Виклик з помилкою\n    result, err = divide(10, 0)\n    if err != nil {\n        fmt.Println(\"Помилка:\", err)  \u002F\u002F \"ділення на нуль\"\n        return\n    }\n}\n",[3753,67352,67353,67359,67363,67369,67373,67377,67381,67385,67412,67424,67445,67449,67466,67470,67474,67482,67487,67510,67522,67540,67544,67548,67568,67572,67577,67599,67611,67632,67636,67640],{"__ignoreMap":3992},[4005,67354,67355,67357],{"class":4007,"line":4008},[4005,67356,5739],{"class":4171},[4005,67358,5742],{"class":4178},[4005,67360,67361],{"class":4007,"line":4014},[4005,67362,4036],{"emptyLinePlaceholder":4035},[4005,67364,67365,67367],{"class":4007,"line":4020},[4005,67366,3917],{"class":4836},[4005,67368,4439],{"class":4182},[4005,67370,67371],{"class":4007,"line":4026},[4005,67372,34749],{"class":4330},[4005,67374,67375],{"class":4007,"line":4032},[4005,67376,4843],{"class":4330},[4005,67378,67379],{"class":4007,"line":4039},[4005,67380,4482],{"class":4182},[4005,67382,67383],{"class":4007,"line":4045},[4005,67384,4036],{"emptyLinePlaceholder":4035},[4005,67386,67387,67389,67392,67394,67396,67398,67400,67402,67404,67406,67408,67410],{"class":4007,"line":4051},[4005,67388,4299],{"class":4171},[4005,67390,67391],{"class":4302}," divide",[4005,67393,4611],{"class":4182},[4005,67395,9306],{"class":4174},[4005,67397,3836],{"class":4182},[4005,67399,4381],{"class":4174},[4005,67401,5907],{"class":4178},[4005,67403,34788],{"class":4182},[4005,67405,8437],{"class":4178},[4005,67407,3836],{"class":4182},[4005,67409,3857],{"class":4178},[4005,67411,12789],{"class":4182},[4005,67413,67414,67416,67418,67420,67422],{"class":4007,"line":4057},[4005,67415,5104],{"class":4836},[4005,67417,6087],{"class":4174},[4005,67419,5473],{"class":4182},[4005,67421,4200],{"class":4186},[4005,67423,5073],{"class":4182},[4005,67425,67426,67428,67430,67432,67434,67436,67438,67440,67443],{"class":4007,"line":4063},[4005,67427,5119],{"class":4836},[4005,67429,34816],{"class":4186},[4005,67431,3836],{"class":4182},[4005,67433,34821],{"class":4174},[4005,67435,3769],{"class":4182},[4005,67437,34826],{"class":4302},[4005,67439,4611],{"class":4182},[4005,67441,67442],{"class":4330},"\"ділення на нуль\"",[4005,67444,4482],{"class":4182},[4005,67446,67447],{"class":4007,"line":4069},[4005,67448,5127],{"class":4182},[4005,67450,67451,67453,67455,67457,67459,67461,67463],{"class":4007,"line":4075},[4005,67452,5260],{"class":4836},[4005,67454,4376],{"class":4174},[4005,67456,15549],{"class":4182},[4005,67458,4381],{"class":4174},[4005,67460,3836],{"class":4182},[4005,67462,4209],{"class":4171},[4005,67464,67465],{"class":4190},"  \u002F\u002F nil означає \"немає помилки\"\n",[4005,67467,67468],{"class":4007,"line":4081},[4005,67469,4078],{"class":4182},[4005,67471,67472],{"class":4007,"line":4086},[4005,67473,4036],{"emptyLinePlaceholder":4035},[4005,67475,67476,67478,67480],{"class":4007,"line":4092},[4005,67477,4299],{"class":4171},[4005,67479,5764],{"class":4302},[4005,67481,4306],{"class":4182},[4005,67483,67484],{"class":4007,"line":4098},[4005,67485,67486],{"class":4190},"    \u002F\u002F Успішний виклик\n",[4005,67488,67489,67491,67493,67495,67497,67500,67502,67504,67506,67508],{"class":4007,"line":4104},[4005,67490,15757],{"class":4174},[4005,67492,3836],{"class":4182},[4005,67494,4598],{"class":4174},[4005,67496,4314],{"class":4182},[4005,67498,67499],{"class":4302},"divide",[4005,67501,4611],{"class":4182},[4005,67503,4631],{"class":4186},[4005,67505,3836],{"class":4182},[4005,67507,4398],{"class":4186},[4005,67509,4482],{"class":4182},[4005,67511,67512,67514,67516,67518,67520],{"class":4007,"line":4110},[4005,67513,5104],{"class":4836},[4005,67515,5107],{"class":4174},[4005,67517,5110],{"class":4182},[4005,67519,4209],{"class":4171},[4005,67521,5073],{"class":4182},[4005,67523,67524,67526,67528,67530,67532,67534,67536,67538],{"class":4007,"line":4937},[4005,67525,5343],{"class":4174},[4005,67527,3769],{"class":4182},[4005,67529,5348],{"class":4302},[4005,67531,4611],{"class":4182},[4005,67533,34924],{"class":4330},[4005,67535,3836],{"class":4182},[4005,67537,4598],{"class":4174},[4005,67539,4482],{"class":4182},[4005,67541,67542],{"class":4007,"line":4942},[4005,67543,34935],{"class":4836},[4005,67545,67546],{"class":4007,"line":4947},[4005,67547,5127],{"class":4182},[4005,67549,67550,67552,67554,67556,67558,67560,67562,67564,67566],{"class":4007,"line":4953},[4005,67551,5370],{"class":4174},[4005,67553,3769],{"class":4182},[4005,67555,5348],{"class":4302},[4005,67557,4611],{"class":4182},[4005,67559,35671],{"class":4330},[4005,67561,3836],{"class":4182},[4005,67563,5695],{"class":4174},[4005,67565,5196],{"class":4182},[4005,67567,23912],{"class":4190},[4005,67569,67570],{"class":4007,"line":4960},[4005,67571,5214],{"class":4182},[4005,67573,67574],{"class":4007,"line":4973},[4005,67575,67576],{"class":4190},"    \u002F\u002F Виклик з помилкою\n",[4005,67578,67579,67581,67583,67585,67587,67589,67591,67593,67595,67597],{"class":4007,"line":4985},[4005,67580,15757],{"class":4174},[4005,67582,3836],{"class":4182},[4005,67584,4598],{"class":4174},[4005,67586,4183],{"class":4182},[4005,67588,67499],{"class":4302},[4005,67590,4611],{"class":4182},[4005,67592,4631],{"class":4186},[4005,67594,3836],{"class":4182},[4005,67596,4200],{"class":4186},[4005,67598,4482],{"class":4182},[4005,67600,67601,67603,67605,67607,67609],{"class":4007,"line":7813},[4005,67602,5104],{"class":4836},[4005,67604,5107],{"class":4174},[4005,67606,5110],{"class":4182},[4005,67608,4209],{"class":4171},[4005,67610,5073],{"class":4182},[4005,67612,67613,67615,67617,67619,67621,67623,67625,67627,67629],{"class":4007,"line":7819},[4005,67614,5343],{"class":4174},[4005,67616,3769],{"class":4182},[4005,67618,5348],{"class":4302},[4005,67620,4611],{"class":4182},[4005,67622,34924],{"class":4330},[4005,67624,3836],{"class":4182},[4005,67626,4598],{"class":4174},[4005,67628,5196],{"class":4182},[4005,67630,67631],{"class":4190},"\u002F\u002F \"ділення на нуль\"\n",[4005,67633,67634],{"class":4007,"line":7826},[4005,67635,34935],{"class":4836},[4005,67637,67638],{"class":4007,"line":7839},[4005,67639,5127],{"class":4182},[4005,67641,67642],{"class":4007,"line":7864},[4005,67643,4078],{"class":4182},[3908,67645,67646],{},[3871,67647,67648,67649,5831],{},"2. Форматування помилок з контекстом через ",[3753,67650,67651],{},"fmt.Errorf()",[3984,67653,67655],{"className":4162,"code":67654,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc readConfig(filename string) (map[string]string, error) {\n    if filename == \"\" {\n        return nil, fmt.Errorf(\"ім'я файлу не може бути порожнім\")\n    }\n    \n    \u002F\u002F Симулюємо помилку з контекстом\n    return nil, fmt.Errorf(\"не вдалося відкрити файл %s: файл не існує\", filename)\n}\n\nfunc main() {\n    config, err := readConfig(\"config.yaml\")\n    if err != nil {\n        fmt.Println(\"Помилка:\", err)\n        \u002F\u002F Виведе: \"не вдалося відкрити файл config.yaml: файл не існує\"\n        return\n    }\n    \n    fmt.Println(\"Конфіг:\", config)\n}\n",[3753,67656,67657,67663,67667,67673,67677,67708,67720,67742,67746,67750,67755,67785,67789,67793,67801,67820,67832,67850,67855,67859,67863,67867,67886],{"__ignoreMap":3992},[4005,67658,67659,67661],{"class":4007,"line":4008},[4005,67660,5739],{"class":4171},[4005,67662,5742],{"class":4178},[4005,67664,67665],{"class":4007,"line":4014},[4005,67666,4036],{"emptyLinePlaceholder":4035},[4005,67668,67669,67671],{"class":4007,"line":4020},[4005,67670,3917],{"class":4836},[4005,67672,7656],{"class":4330},[4005,67674,67675],{"class":4007,"line":4026},[4005,67676,4036],{"emptyLinePlaceholder":4035},[4005,67678,67679,67681,67684,67686,67688,67690,67692,67694,67696,67698,67700,67702,67704,67706],{"class":4007,"line":4032},[4005,67680,4299],{"class":4171},[4005,67682,67683],{"class":4302}," readConfig",[4005,67685,4611],{"class":4182},[4005,67687,13169],{"class":4174},[4005,67689,4237],{"class":4178},[4005,67691,34788],{"class":4182},[4005,67693,8793],{"class":4171},[4005,67695,11561],{"class":4182},[4005,67697,7004],{"class":4178},[4005,67699,28540],{"class":4182},[4005,67701,7004],{"class":4178},[4005,67703,3836],{"class":4182},[4005,67705,3857],{"class":4178},[4005,67707,12789],{"class":4182},[4005,67709,67710,67712,67714,67716,67718],{"class":4007,"line":4039},[4005,67711,5104],{"class":4836},[4005,67713,13435],{"class":4174},[4005,67715,5473],{"class":4182},[4005,67717,4203],{"class":4330},[4005,67719,5073],{"class":4182},[4005,67721,67722,67724,67726,67728,67730,67732,67735,67737,67740],{"class":4007,"line":4045},[4005,67723,5119],{"class":4836},[4005,67725,49738],{"class":4171},[4005,67727,3836],{"class":4182},[4005,67729,3785],{"class":4174},[4005,67731,3769],{"class":4182},[4005,67733,67734],{"class":4302},"Errorf",[4005,67736,4611],{"class":4182},[4005,67738,67739],{"class":4330},"\"ім'я файлу не може бути порожнім\"",[4005,67741,4482],{"class":4182},[4005,67743,67744],{"class":4007,"line":4051},[4005,67745,5127],{"class":4182},[4005,67747,67748],{"class":4007,"line":4057},[4005,67749,5214],{"class":4182},[4005,67751,67752],{"class":4007,"line":4063},[4005,67753,67754],{"class":4190},"    \u002F\u002F Симулюємо помилку з контекстом\n",[4005,67756,67757,67759,67761,67763,67765,67767,67769,67771,67774,67776,67779,67781,67783],{"class":4007,"line":4069},[4005,67758,5260],{"class":4836},[4005,67760,49738],{"class":4171},[4005,67762,3836],{"class":4182},[4005,67764,3785],{"class":4174},[4005,67766,3769],{"class":4182},[4005,67768,67734],{"class":4302},[4005,67770,4611],{"class":4182},[4005,67772,67773],{"class":4330},"\"не вдалося відкрити файл ",[4005,67775,16775],{"class":4174},[4005,67777,67778],{"class":4330},": файл не існує\"",[4005,67780,3836],{"class":4182},[4005,67782,13169],{"class":4174},[4005,67784,4482],{"class":4182},[4005,67786,67787],{"class":4007,"line":4075},[4005,67788,4078],{"class":4182},[4005,67790,67791],{"class":4007,"line":4081},[4005,67792,4036],{"emptyLinePlaceholder":4035},[4005,67794,67795,67797,67799],{"class":4007,"line":4086},[4005,67796,4299],{"class":4171},[4005,67798,5764],{"class":4302},[4005,67800,4306],{"class":4182},[4005,67802,67803,67805,67807,67809,67811,67814,67816,67818],{"class":4007,"line":4092},[4005,67804,38188],{"class":4174},[4005,67806,3836],{"class":4182},[4005,67808,4598],{"class":4174},[4005,67810,4314],{"class":4182},[4005,67812,67813],{"class":4302},"readConfig",[4005,67815,4611],{"class":4182},[4005,67817,13440],{"class":4330},[4005,67819,4482],{"class":4182},[4005,67821,67822,67824,67826,67828,67830],{"class":4007,"line":4098},[4005,67823,5104],{"class":4836},[4005,67825,5107],{"class":4174},[4005,67827,5110],{"class":4182},[4005,67829,4209],{"class":4171},[4005,67831,5073],{"class":4182},[4005,67833,67834,67836,67838,67840,67842,67844,67846,67848],{"class":4007,"line":4104},[4005,67835,5343],{"class":4174},[4005,67837,3769],{"class":4182},[4005,67839,5348],{"class":4302},[4005,67841,4611],{"class":4182},[4005,67843,34924],{"class":4330},[4005,67845,3836],{"class":4182},[4005,67847,4598],{"class":4174},[4005,67849,4482],{"class":4182},[4005,67851,67852],{"class":4007,"line":4110},[4005,67853,67854],{"class":4190},"        \u002F\u002F Виведе: \"не вдалося відкрити файл config.yaml: файл не існує\"\n",[4005,67856,67857],{"class":4007,"line":4937},[4005,67858,34935],{"class":4836},[4005,67860,67861],{"class":4007,"line":4942},[4005,67862,5127],{"class":4182},[4005,67864,67865],{"class":4007,"line":4947},[4005,67866,5214],{"class":4182},[4005,67868,67869,67871,67873,67875,67877,67880,67882,67884],{"class":4007,"line":4953},[4005,67870,5370],{"class":4174},[4005,67872,3769],{"class":4182},[4005,67874,5348],{"class":4302},[4005,67876,4611],{"class":4182},[4005,67878,67879],{"class":4330},"\"Конфіг:\"",[4005,67881,3836],{"class":4182},[4005,67883,38339],{"class":4174},[4005,67885,4482],{"class":4182},[4005,67887,67888],{"class":4007,"line":4960},[4005,67889,4078],{"class":4182},[3908,67891,67892],{},[3871,67893,67894,67895,67897],{},"3. Ланцюжок помилок через ",[3753,67896,67312],{}," (wrapping):",[3984,67899,67901],{"className":4162,"code":67900,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"os\"\n)\n\nfunc loadData(filename string) ([]byte, error) {\n    data, err := os.ReadFile(filename)\n    if err != nil {\n        \u002F\u002F %w зберігає оригінальну помилку\n        return nil, fmt.Errorf(\"loadData: %w\", err)\n    }\n    return data, nil\n}\n\nfunc processFile(filename string) error {\n    data, err := loadData(filename)\n    if err != nil {\n        \u002F\u002F Ще один рівень обгортання\n        return fmt.Errorf(\"processFile: %w\", err)\n    }\n    \n    fmt.Printf(\"Завантажено %d байт\\n\", len(data))\n    return nil\n}\n\nfunc main() {\n    err := processFile(\"data.txt\")\n    if err != nil {\n        fmt.Println(\"Помилка:\", err)\n        \u002F\u002F Виведе весь ланцюжок:\n        \u002F\u002F \"processFile: loadData: open data.txt: no such file or directory\"\n    }\n}\n",[3753,67902,67903,67909,67913,67919,67923,67927,67931,67935,67959,67981,67993,67998,68027,68031,68041,68045,68049,68067,68086,68098,68103,68128,68132,68136,68167,68173,68177,68181,68189,68204,68216,68234,68239,68244,68248],{"__ignoreMap":3992},[4005,67904,67905,67907],{"class":4007,"line":4008},[4005,67906,5739],{"class":4171},[4005,67908,5742],{"class":4178},[4005,67910,67911],{"class":4007,"line":4014},[4005,67912,4036],{"emptyLinePlaceholder":4035},[4005,67914,67915,67917],{"class":4007,"line":4020},[4005,67916,3917],{"class":4836},[4005,67918,4439],{"class":4182},[4005,67920,67921],{"class":4007,"line":4026},[4005,67922,4843],{"class":4330},[4005,67924,67925],{"class":4007,"line":4032},[4005,67926,66456],{"class":4330},[4005,67928,67929],{"class":4007,"line":4039},[4005,67930,4482],{"class":4182},[4005,67932,67933],{"class":4007,"line":4045},[4005,67934,4036],{"emptyLinePlaceholder":4035},[4005,67936,67937,67939,67942,67944,67946,67948,67951,67953,67955,67957],{"class":4007,"line":4051},[4005,67938,4299],{"class":4171},[4005,67940,67941],{"class":4302}," loadData",[4005,67943,4611],{"class":4182},[4005,67945,13169],{"class":4174},[4005,67947,4237],{"class":4178},[4005,67949,67950],{"class":4182},") ([]",[4005,67952,5162],{"class":4178},[4005,67954,3836],{"class":4182},[4005,67956,3857],{"class":4178},[4005,67958,12789],{"class":4182},[4005,67960,67961,67963,67965,67967,67969,67971,67973,67975,67977,67979],{"class":4007,"line":4057},[4005,67962,5152],{"class":4174},[4005,67964,3836],{"class":4182},[4005,67966,4598],{"class":4174},[4005,67968,4314],{"class":4182},[4005,67970,4603],{"class":4174},[4005,67972,3769],{"class":4182},[4005,67974,25473],{"class":4302},[4005,67976,4611],{"class":4182},[4005,67978,13169],{"class":4174},[4005,67980,4482],{"class":4182},[4005,67982,67983,67985,67987,67989,67991],{"class":4007,"line":4063},[4005,67984,5104],{"class":4836},[4005,67986,5107],{"class":4174},[4005,67988,5110],{"class":4182},[4005,67990,4209],{"class":4171},[4005,67992,5073],{"class":4182},[4005,67994,67995],{"class":4007,"line":4069},[4005,67996,67997],{"class":4190},"        \u002F\u002F %w зберігає оригінальну помилку\n",[4005,67999,68000,68002,68004,68006,68008,68010,68012,68014,68017,68019,68021,68023,68025],{"class":4007,"line":4075},[4005,68001,5119],{"class":4836},[4005,68003,49738],{"class":4171},[4005,68005,3836],{"class":4182},[4005,68007,3785],{"class":4174},[4005,68009,3769],{"class":4182},[4005,68011,67734],{"class":4302},[4005,68013,4611],{"class":4182},[4005,68015,68016],{"class":4330},"\"loadData: ",[4005,68018,67312],{"class":4174},[4005,68020,7968],{"class":4330},[4005,68022,3836],{"class":4182},[4005,68024,4598],{"class":4174},[4005,68026,4482],{"class":4182},[4005,68028,68029],{"class":4007,"line":4081},[4005,68030,5127],{"class":4182},[4005,68032,68033,68035,68037,68039],{"class":4007,"line":4086},[4005,68034,5260],{"class":4836},[4005,68036,25460],{"class":4174},[4005,68038,3836],{"class":4182},[4005,68040,49820],{"class":4171},[4005,68042,68043],{"class":4007,"line":4092},[4005,68044,4078],{"class":4182},[4005,68046,68047],{"class":4007,"line":4098},[4005,68048,4036],{"emptyLinePlaceholder":4035},[4005,68050,68051,68053,68055,68057,68059,68061,68063,68065],{"class":4007,"line":4104},[4005,68052,4299],{"class":4171},[4005,68054,5059],{"class":4302},[4005,68056,4611],{"class":4182},[4005,68058,13169],{"class":4174},[4005,68060,4237],{"class":4178},[4005,68062,4498],{"class":4182},[4005,68064,3857],{"class":4178},[4005,68066,5073],{"class":4182},[4005,68068,68069,68071,68073,68075,68077,68080,68082,68084],{"class":4007,"line":4110},[4005,68070,5152],{"class":4174},[4005,68072,3836],{"class":4182},[4005,68074,4598],{"class":4174},[4005,68076,4314],{"class":4182},[4005,68078,68079],{"class":4302},"loadData",[4005,68081,4611],{"class":4182},[4005,68083,13169],{"class":4174},[4005,68085,4482],{"class":4182},[4005,68087,68088,68090,68092,68094,68096],{"class":4007,"line":4937},[4005,68089,5104],{"class":4836},[4005,68091,5107],{"class":4174},[4005,68093,5110],{"class":4182},[4005,68095,4209],{"class":4171},[4005,68097,5073],{"class":4182},[4005,68099,68100],{"class":4007,"line":4942},[4005,68101,68102],{"class":4190},"        \u002F\u002F Ще один рівень обгортання\n",[4005,68104,68105,68107,68109,68111,68113,68115,68118,68120,68122,68124,68126],{"class":4007,"line":4947},[4005,68106,5119],{"class":4836},[4005,68108,32994],{"class":4174},[4005,68110,3769],{"class":4182},[4005,68112,67734],{"class":4302},[4005,68114,4611],{"class":4182},[4005,68116,68117],{"class":4330},"\"processFile: ",[4005,68119,67312],{"class":4174},[4005,68121,7968],{"class":4330},[4005,68123,3836],{"class":4182},[4005,68125,4598],{"class":4174},[4005,68127,4482],{"class":4182},[4005,68129,68130],{"class":4007,"line":4953},[4005,68131,5127],{"class":4182},[4005,68133,68134],{"class":4007,"line":4960},[4005,68135,5214],{"class":4182},[4005,68137,68138,68140,68142,68144,68146,68149,68151,68153,68155,68157,68159,68161,68163,68165],{"class":4007,"line":4973},[4005,68139,5370],{"class":4174},[4005,68141,3769],{"class":4182},[4005,68143,7945],{"class":4302},[4005,68145,4611],{"class":4182},[4005,68147,68148],{"class":4330},"\"Завантажено ",[4005,68150,7959],{"class":4174},[4005,68152,53065],{"class":4330},[4005,68154,7965],{"class":7964},[4005,68156,7968],{"class":4330},[4005,68158,3836],{"class":4182},[4005,68160,11465],{"class":4302},[4005,68162,4611],{"class":4182},[4005,68164,5193],{"class":4174},[4005,68166,25552],{"class":4182},[4005,68168,68169,68171],{"class":4007,"line":4985},[4005,68170,5260],{"class":4836},[4005,68172,5263],{"class":4171},[4005,68174,68175],{"class":4007,"line":7813},[4005,68176,4078],{"class":4182},[4005,68178,68179],{"class":4007,"line":7819},[4005,68180,4036],{"emptyLinePlaceholder":4035},[4005,68182,68183,68185,68187],{"class":4007,"line":7826},[4005,68184,4299],{"class":4171},[4005,68186,5764],{"class":4302},[4005,68188,4306],{"class":4182},[4005,68190,68191,68193,68195,68198,68200,68202],{"class":4007,"line":7839},[4005,68192,51448],{"class":4174},[4005,68194,4314],{"class":4182},[4005,68196,68197],{"class":4302},"processFile",[4005,68199,4611],{"class":4182},[4005,68201,4614],{"class":4330},[4005,68203,4482],{"class":4182},[4005,68205,68206,68208,68210,68212,68214],{"class":4007,"line":7864},[4005,68207,5104],{"class":4836},[4005,68209,5107],{"class":4174},[4005,68211,5110],{"class":4182},[4005,68213,4209],{"class":4171},[4005,68215,5073],{"class":4182},[4005,68217,68218,68220,68222,68224,68226,68228,68230,68232],{"class":4007,"line":7872},[4005,68219,5343],{"class":4174},[4005,68221,3769],{"class":4182},[4005,68223,5348],{"class":4302},[4005,68225,4611],{"class":4182},[4005,68227,34924],{"class":4330},[4005,68229,3836],{"class":4182},[4005,68231,4598],{"class":4174},[4005,68233,4482],{"class":4182},[4005,68235,68236],{"class":4007,"line":7881},[4005,68237,68238],{"class":4190},"        \u002F\u002F Виведе весь ланцюжок:\n",[4005,68240,68241],{"class":4007,"line":7890},[4005,68242,68243],{"class":4190},"        \u002F\u002F \"processFile: loadData: open data.txt: no such file or directory\"\n",[4005,68245,68246],{"class":4007,"line":7895},[4005,68247,5127],{"class":4182},[4005,68249,68250],{"class":4007,"line":7900},[4005,68251,4078],{"class":4182},[4484,68253,68254,68265,68281,68355],{"icon":4750},[3908,68255,68256],{},[3871,68257,68258,3765,68260,3957,68262,5831],{},[3753,68259,67312],{},[3753,68261,10666],{},[3753,68263,68264],{},"fmt.Errorf",[3746,68266,68267,68274],{},[3749,68268,68269,68273],{},[3871,68270,68271],{},[3753,68272,10666],{}," — форматує помилку як текст (оригінальна помилка втрачається)",[3749,68275,68276,68280],{},[3871,68277,68278],{},[3753,68279,67312],{}," — обгортає помилку (зберігає оригінал для пізнішої перевірки)",[3984,68282,68284],{"className":4162,"code":68283,"language":4164,"meta":3992,"style":3992},"\u002F\u002F Без обгортання — оригінал втрачено\nerr1 := fmt.Errorf(\"помилка: %v\", originalErr)\n\n\u002F\u002F З обгортанням — оригінал збережено\nerr2 := fmt.Errorf(\"помилка: %w\", originalErr)\n",[3753,68285,68286,68291,68319,68323,68328],{"__ignoreMap":3992},[4005,68287,68288],{"class":4007,"line":4008},[4005,68289,68290],{"class":4190},"\u002F\u002F Без обгортання — оригінал втрачено\n",[4005,68292,68293,68296,68298,68300,68302,68304,68306,68308,68310,68312,68314,68317],{"class":4007,"line":4014},[4005,68294,68295],{"class":4174},"err1",[4005,68297,4314],{"class":4182},[4005,68299,3785],{"class":4174},[4005,68301,3769],{"class":4182},[4005,68303,67734],{"class":4302},[4005,68305,4611],{"class":4182},[4005,68307,67260],{"class":4330},[4005,68309,10666],{"class":4174},[4005,68311,7968],{"class":4330},[4005,68313,3836],{"class":4182},[4005,68315,68316],{"class":4174},"originalErr",[4005,68318,4482],{"class":4182},[4005,68320,68321],{"class":4007,"line":4020},[4005,68322,4036],{"emptyLinePlaceholder":4035},[4005,68324,68325],{"class":4007,"line":4026},[4005,68326,68327],{"class":4190},"\u002F\u002F З обгортанням — оригінал збережено\n",[4005,68329,68330,68333,68335,68337,68339,68341,68343,68345,68347,68349,68351,68353],{"class":4007,"line":4032},[4005,68331,68332],{"class":4174},"err2",[4005,68334,4314],{"class":4182},[4005,68336,3785],{"class":4174},[4005,68338,3769],{"class":4182},[4005,68340,67734],{"class":4302},[4005,68342,4611],{"class":4182},[4005,68344,67260],{"class":4330},[4005,68346,67312],{"class":4174},[4005,68348,7968],{"class":4330},[4005,68350,3836],{"class":4182},[4005,68352,68316],{"class":4174},[4005,68354,4482],{"class":4182},[3908,68356,68357,68358,8512,68361,3769],{},"Обгортання дозволяє перевіряти первинну помилку через ",[3753,68359,68360],{},"errors.Is()",[3753,68362,68363],{},"errors.As()",[9014,68365,68367],{"id":68366},"патерни-обробки-помилок","Патерни обробки помилок",[3908,68369,68370],{},[3871,68371,68372],{},"1. Ранній вихід (early return) — найпопулярніший:",[3984,68374,68376],{"className":4162,"code":68375,"language":4164,"meta":3992,"style":3992},"func processUser(id int) error {\n    user, err := getUserFromDB(id)\n    if err != nil {\n        return err  \u002F\u002F Одразу виходимо\n    }\n    \n    email, err := getEmailFromAPI(user.Email)\n    if err != nil {\n        return err  \u002F\u002F Одразу виходимо\n    }\n    \n    err = sendNotification(email)\n    if err != nil {\n        return err  \u002F\u002F Одразу виходимо\n    }\n    \n    return nil  \u002F\u002F Успіх\n}\n",[3753,68377,68378,68397,68416,68428,68437,68441,68445,68468,68480,68488,68492,68496,68511,68523,68531,68535,68539,68548],{"__ignoreMap":3992},[4005,68379,68380,68382,68385,68387,68389,68391,68393,68395],{"class":4007,"line":4008},[4005,68381,4299],{"class":4171},[4005,68383,68384],{"class":4302}," processUser",[4005,68386,4611],{"class":4182},[4005,68388,7180],{"class":4174},[4005,68390,4224],{"class":4178},[4005,68392,4498],{"class":4182},[4005,68394,3857],{"class":4178},[4005,68396,5073],{"class":4182},[4005,68398,68399,68401,68403,68405,68407,68410,68412,68414],{"class":4007,"line":4014},[4005,68400,49952],{"class":4174},[4005,68402,3836],{"class":4182},[4005,68404,4598],{"class":4174},[4005,68406,4314],{"class":4182},[4005,68408,68409],{"class":4302},"getUserFromDB",[4005,68411,4611],{"class":4182},[4005,68413,7180],{"class":4174},[4005,68415,4482],{"class":4182},[4005,68417,68418,68420,68422,68424,68426],{"class":4007,"line":4020},[4005,68419,5104],{"class":4836},[4005,68421,5107],{"class":4174},[4005,68423,5110],{"class":4182},[4005,68425,4209],{"class":4171},[4005,68427,5073],{"class":4182},[4005,68429,68430,68432,68434],{"class":4007,"line":4026},[4005,68431,5119],{"class":4836},[4005,68433,5107],{"class":4174},[4005,68435,68436],{"class":4190},"  \u002F\u002F Одразу виходимо\n",[4005,68438,68439],{"class":4007,"line":4032},[4005,68440,5127],{"class":4182},[4005,68442,68443],{"class":4007,"line":4039},[4005,68444,5214],{"class":4182},[4005,68446,68447,68449,68451,68453,68455,68458,68460,68462,68464,68466],{"class":4007,"line":4045},[4005,68448,13864],{"class":4174},[4005,68450,3836],{"class":4182},[4005,68452,4598],{"class":4174},[4005,68454,4314],{"class":4182},[4005,68456,68457],{"class":4302},"getEmailFromAPI",[4005,68459,4611],{"class":4182},[4005,68461,20793],{"class":4174},[4005,68463,3769],{"class":4182},[4005,68465,56258],{"class":4174},[4005,68467,4482],{"class":4182},[4005,68469,68470,68472,68474,68476,68478],{"class":4007,"line":4051},[4005,68471,5104],{"class":4836},[4005,68473,5107],{"class":4174},[4005,68475,5110],{"class":4182},[4005,68477,4209],{"class":4171},[4005,68479,5073],{"class":4182},[4005,68481,68482,68484,68486],{"class":4007,"line":4057},[4005,68483,5119],{"class":4836},[4005,68485,5107],{"class":4174},[4005,68487,68436],{"class":4190},[4005,68489,68490],{"class":4007,"line":4063},[4005,68491,5127],{"class":4182},[4005,68493,68494],{"class":4007,"line":4069},[4005,68495,5214],{"class":4182},[4005,68497,68498,68500,68502,68505,68507,68509],{"class":4007,"line":4075},[4005,68499,51448],{"class":4174},[4005,68501,4183],{"class":4182},[4005,68503,68504],{"class":4302},"sendNotification",[4005,68506,4611],{"class":4182},[4005,68508,13913],{"class":4174},[4005,68510,4482],{"class":4182},[4005,68512,68513,68515,68517,68519,68521],{"class":4007,"line":4081},[4005,68514,5104],{"class":4836},[4005,68516,5107],{"class":4174},[4005,68518,5110],{"class":4182},[4005,68520,4209],{"class":4171},[4005,68522,5073],{"class":4182},[4005,68524,68525,68527,68529],{"class":4007,"line":4086},[4005,68526,5119],{"class":4836},[4005,68528,5107],{"class":4174},[4005,68530,68436],{"class":4190},[4005,68532,68533],{"class":4007,"line":4092},[4005,68534,5127],{"class":4182},[4005,68536,68537],{"class":4007,"line":4098},[4005,68538,5214],{"class":4182},[4005,68540,68541,68543,68545],{"class":4007,"line":4104},[4005,68542,5260],{"class":4836},[4005,68544,49738],{"class":4171},[4005,68546,68547],{"class":4190},"  \u002F\u002F Успіх\n",[4005,68549,68550],{"class":4007,"line":4110},[4005,68551,4078],{"class":4182},[3908,68553,68554],{},[3871,68555,13352],{},[3746,68557,68558,68561,68564],{},[3749,68559,68560],{},"Лінійний код без вкладеності",[3749,68562,68563],{},"Легко читати зверху вниз",[3749,68565,68566],{},"Явний контроль потоку",[3908,68568,68569],{},[3871,68570,68571],{},"2. Логування і продовження:",[3984,68573,68575],{"className":4162,"code":68574,"language":4164,"meta":3992,"style":3992},"func processItems(items []Item) {\n    for _, item := range items {\n        err := processItem(item)\n        if err != nil {\n            \u002F\u002F Логуємо, але продовжуємо\n            log.Printf(\"Помилка обробки %v: %v\", item.ID, err)\n            continue\n        }\n    }\n}\n",[3753,68576,68577,68595,68613,68629,68641,68646,68682,68687,68691,68695],{"__ignoreMap":3992},[4005,68578,68579,68581,68584,68586,68588,68590,68593],{"class":4007,"line":4008},[4005,68580,4299],{"class":4171},[4005,68582,68583],{"class":4302}," processItems",[4005,68585,4611],{"class":4182},[4005,68587,34204],{"class":4174},[4005,68589,26632],{"class":4182},[4005,68591,68592],{"class":4178},"Item",[4005,68594,12789],{"class":4182},[4005,68596,68597,68599,68601,68603,68605,68607,68609,68611],{"class":4007,"line":4014},[4005,68598,12138],{"class":4836},[4005,68600,17642],{"class":4174},[4005,68602,3836],{"class":4182},[4005,68604,34221],{"class":4174},[4005,68606,4314],{"class":4182},[4005,68608,12151],{"class":4836},[4005,68610,34228],{"class":4174},[4005,68612,5073],{"class":4182},[4005,68614,68615,68618,68620,68623,68625,68627],{"class":4007,"line":4020},[4005,68616,68617],{"class":4174},"        err",[4005,68619,4314],{"class":4182},[4005,68621,68622],{"class":4302},"processItem",[4005,68624,4611],{"class":4182},[4005,68626,34221],{"class":4174},[4005,68628,4482],{"class":4182},[4005,68630,68631,68633,68635,68637,68639],{"class":4007,"line":4026},[4005,68632,12892],{"class":4836},[4005,68634,5107],{"class":4174},[4005,68636,5110],{"class":4182},[4005,68638,4209],{"class":4171},[4005,68640,5073],{"class":4182},[4005,68642,68643],{"class":4007,"line":4032},[4005,68644,68645],{"class":4190},"            \u002F\u002F Логуємо, але продовжуємо\n",[4005,68647,68648,68651,68653,68655,68657,68660,68662,68664,68666,68668,68670,68672,68674,68676,68678,68680],{"class":4007,"line":4039},[4005,68649,68650],{"class":4174},"            log",[4005,68652,3769],{"class":4182},[4005,68654,7945],{"class":4302},[4005,68656,4611],{"class":4182},[4005,68658,68659],{"class":4330},"\"Помилка обробки ",[4005,68661,10666],{"class":4174},[4005,68663,11172],{"class":4330},[4005,68665,10666],{"class":4174},[4005,68667,7968],{"class":4330},[4005,68669,3836],{"class":4182},[4005,68671,34221],{"class":4174},[4005,68673,3769],{"class":4182},[4005,68675,47055],{"class":4174},[4005,68677,3836],{"class":4182},[4005,68679,4598],{"class":4174},[4005,68681,4482],{"class":4182},[4005,68683,68684],{"class":4007,"line":4045},[4005,68685,68686],{"class":4836},"            continue\n",[4005,68688,68689],{"class":4007,"line":4051},[4005,68690,12937],{"class":4182},[4005,68692,68693],{"class":4007,"line":4057},[4005,68694,5127],{"class":4182},[4005,68696,68697],{"class":4007,"line":4063},[4005,68698,4078],{"class":4182},[3908,68700,68701],{},[3871,68702,68703],{},"3. Логування + повернення:",[3984,68705,68707],{"className":4162,"code":68706,"language":4164,"meta":3992,"style":3992},"func saveUser(user User) error {\n    err := db.Save(user)\n    if err != nil {\n        log.Printf(\"Не вдалося зберегти %d: %v\", user.ID, err)\n        return fmt.Errorf(\"saveUser: %w\", err)\n    }\n    return nil\n}\n",[3753,68708,68709,68728,68747,68759,68795,68820,68824,68830],{"__ignoreMap":3992},[4005,68710,68711,68713,68716,68718,68720,68722,68724,68726],{"class":4007,"line":4008},[4005,68712,4299],{"class":4171},[4005,68714,68715],{"class":4302}," saveUser",[4005,68717,4611],{"class":4182},[4005,68719,20793],{"class":4174},[4005,68721,20760],{"class":4178},[4005,68723,4498],{"class":4182},[4005,68725,3857],{"class":4178},[4005,68727,5073],{"class":4182},[4005,68729,68730,68732,68734,68736,68738,68741,68743,68745],{"class":4007,"line":4014},[4005,68731,51448],{"class":4174},[4005,68733,4314],{"class":4182},[4005,68735,16595],{"class":4174},[4005,68737,3769],{"class":4182},[4005,68739,68740],{"class":4302},"Save",[4005,68742,4611],{"class":4182},[4005,68744,20793],{"class":4174},[4005,68746,4482],{"class":4182},[4005,68748,68749,68751,68753,68755,68757],{"class":4007,"line":4020},[4005,68750,5104],{"class":4836},[4005,68752,5107],{"class":4174},[4005,68754,5110],{"class":4182},[4005,68756,4209],{"class":4171},[4005,68758,5073],{"class":4182},[4005,68760,68761,68764,68766,68768,68770,68773,68775,68777,68779,68781,68783,68785,68787,68789,68791,68793],{"class":4007,"line":4026},[4005,68762,68763],{"class":4174},"        log",[4005,68765,3769],{"class":4182},[4005,68767,7945],{"class":4302},[4005,68769,4611],{"class":4182},[4005,68771,68772],{"class":4330},"\"Не вдалося зберегти ",[4005,68774,7959],{"class":4174},[4005,68776,11172],{"class":4330},[4005,68778,10666],{"class":4174},[4005,68780,7968],{"class":4330},[4005,68782,3836],{"class":4182},[4005,68784,20793],{"class":4174},[4005,68786,3769],{"class":4182},[4005,68788,47055],{"class":4174},[4005,68790,3836],{"class":4182},[4005,68792,4598],{"class":4174},[4005,68794,4482],{"class":4182},[4005,68796,68797,68799,68801,68803,68805,68807,68810,68812,68814,68816,68818],{"class":4007,"line":4032},[4005,68798,5119],{"class":4836},[4005,68800,32994],{"class":4174},[4005,68802,3769],{"class":4182},[4005,68804,67734],{"class":4302},[4005,68806,4611],{"class":4182},[4005,68808,68809],{"class":4330},"\"saveUser: ",[4005,68811,67312],{"class":4174},[4005,68813,7968],{"class":4330},[4005,68815,3836],{"class":4182},[4005,68817,4598],{"class":4174},[4005,68819,4482],{"class":4182},[4005,68821,68822],{"class":4007,"line":4039},[4005,68823,5127],{"class":4182},[4005,68825,68826,68828],{"class":4007,"line":4045},[4005,68827,5260],{"class":4836},[4005,68829,5263],{"class":4171},[4005,68831,68832],{"class":4007,"line":4051},[4005,68833,4078],{"class":4182},[3900,68835],{},[3976,68837,68839,68840,5032],{"id":68838},"частина-2-відкладене-виконання-defer","Частина 2: Відкладене виконання (",[3753,68841,3861],{},[3976,68843,68845,68847],{"id":68844},"defer-стек-відкладених-викликів",[3753,68846,3861],{},": стек відкладених викликів",[9014,68849,6402,68851,6406],{"id":68850},"що-таке-defer",[3753,68852,3861],{},[3908,68854,68855,68859,68860,68863],{},[3871,68856,68857],{},[3753,68858,3861],{}," — це механізм, який дозволяє відкласти виконання функції до моменту ",[3871,68861,68862],{},"виходу з поточної функції",". Це гарантує, що певний код виконається завжди, навіть якщо функція завершилася з помилкою.",[3908,68865,68866,68869],{},[3871,68867,68868],{},"Призначення:"," автоматичне звільнення ресурсів (закриття файлів, з'єднань, розблокування mutex).",[9014,68871,68873],{"id":68872},"порівняння-з-java","Порівняння з Java",[12533,68875,68876,69079],{},[12536,68877,68879,69057,69061],{"icon":12743,"label":68878},"Java — try-finally",[3984,68880,68882],{"className":12746,"code":68881,"language":12748,"meta":3992,"style":3992},"import java.io.*;\n\npublic class FileExample {\n    public static void readFile(String path) throws IOException {\n        BufferedReader reader = null;\n        \n        try {\n            reader = new BufferedReader(new FileReader(path));\n            String line = reader.readLine();\n            System.out.println(line);\n            \n        } finally {\n            \u002F\u002F Закриття ЗАВЖДИ виконується\n            if (reader != null) {\n                reader.close();\n            }\n        }\n    }\n}\n",[3753,68883,68884,68890,68894,68904,68928,68940,68944,68950,68968,68986,69001,69006,69014,69019,69030,69041,69045,69049,69053],{"__ignoreMap":3992},[4005,68885,68886,68888],{"class":4007,"line":4008},[4005,68887,3917],{"class":4171},[4005,68889,66100],{"class":4182},[4005,68891,68892],{"class":4007,"line":4014},[4005,68893,4036],{"emptyLinePlaceholder":4035},[4005,68895,68896,68898,68900,68902],{"class":4007,"line":4020},[4005,68897,12755],{"class":4171},[4005,68899,12758],{"class":4171},[4005,68901,66113],{"class":4178},[4005,68903,5073],{"class":4182},[4005,68905,68906,68908,68910,68912,68914,68916,68918,68920,68922,68924,68926],{"class":4007,"line":4026},[4005,68907,12768],{"class":4171},[4005,68909,12771],{"class":4171},[4005,68911,12774],{"class":4178},[4005,68913,66131],{"class":4302},[4005,68915,4611],{"class":4182},[4005,68917,7343],{"class":4178},[4005,68919,15188],{"class":4174},[4005,68921,4498],{"class":4182},[4005,68923,66142],{"class":4171},[4005,68925,66145],{"class":4178},[4005,68927,5073],{"class":4182},[4005,68929,68930,68932,68934,68936,68938],{"class":4007,"line":4032},[4005,68931,66152],{"class":4178},[4005,68933,66155],{"class":4174},[4005,68935,4183],{"class":4182},[4005,68937,44237],{"class":4171},[4005,68939,12805],{"class":4182},[4005,68941,68942],{"class":4007,"line":4039},[4005,68943,12810],{"class":4182},[4005,68945,68946,68948],{"class":4007,"line":4045},[4005,68947,66189],{"class":4836},[4005,68949,5073],{"class":4182},[4005,68951,68952,68955,68957,68959,68961,68963,68965],{"class":4007,"line":4051},[4005,68953,68954],{"class":4182},"            reader = ",[4005,68956,3768],{"class":4836},[4005,68958,66162],{"class":4302},[4005,68960,4611],{"class":4182},[4005,68962,3768],{"class":4836},[4005,68964,66173],{"class":4302},[4005,68966,68967],{"class":4182},"(path));\n",[4005,68969,68970,68972,68975,68977,68980,68982,68984],{"class":4007,"line":4057},[4005,68971,13600],{"class":4178},[4005,68973,68974],{"class":4174}," line",[4005,68976,4183],{"class":4182},[4005,68978,68979],{"class":4174},"reader",[4005,68981,3769],{"class":4182},[4005,68983,66202],{"class":4302},[4005,68985,18448],{"class":4182},[4005,68987,68988,68990,68992,68994,68996,68998],{"class":4007,"line":4063},[4005,68989,12917],{"class":4174},[4005,68991,3769],{"class":4182},[4005,68993,12820],{"class":4174},[4005,68995,3769],{"class":4182},[4005,68997,12825],{"class":4302},[4005,68999,69000],{"class":4182},"(line);\n",[4005,69002,69003],{"class":4007,"line":4069},[4005,69004,69005],{"class":4182},"            \n",[4005,69007,69008,69010,69012],{"class":4007,"line":4075},[4005,69009,26602],{"class":4182},[4005,69011,66211],{"class":4836},[4005,69013,5073],{"class":4182},[4005,69015,69016],{"class":4007,"line":4081},[4005,69017,69018],{"class":4190},"            \u002F\u002F Закриття ЗАВЖДИ виконується\n",[4005,69020,69021,69023,69026,69028],{"class":4007,"line":4086},[4005,69022,14421],{"class":4836},[4005,69024,69025],{"class":4182}," (reader != ",[4005,69027,44237],{"class":4171},[4005,69029,12789],{"class":4182},[4005,69031,69032,69035,69037,69039],{"class":4007,"line":4092},[4005,69033,69034],{"class":4174},"                reader",[4005,69036,3769],{"class":4182},[4005,69038,66223],{"class":4302},[4005,69040,18448],{"class":4182},[4005,69042,69043],{"class":4007,"line":4098},[4005,69044,14458],{"class":4182},[4005,69046,69047],{"class":4007,"line":4104},[4005,69048,12937],{"class":4182},[4005,69050,69051],{"class":4007,"line":4110},[4005,69052,5127],{"class":4182},[4005,69054,69055],{"class":4007,"line":4937},[4005,69056,4078],{"class":4182},[3908,69058,69059],{},[3871,69060,49438],{},[3746,69062,69063,69068,69073],{},[3749,69064,24959,69065,69067],{},[3753,69066,66211],{}," в кінці",[3749,69069,69070,69071],{},"Треба перевіряти ",[3753,69072,44237],{},[3749,69074,69075,69076],{},"Один блок на весь ",[3753,69077,69078],{},"try",[12536,69080,69082,69302,69306],{"icon":12538,"label":69081},"Go — defer",[3984,69083,69085],{"className":4162,"code":69084,"language":4164,"meta":3992,"style":3992},"package main\n\nimport (\n    \"fmt\"\n    \"os\"\n)\n\nfunc readFile(path string) error {\n    file, err := os.Open(path)\n    if err != nil {\n        return err\n    }\n    defer file.Close()  \u002F\u002F Закриється при виході\n    \n    buffer := make([]byte, 1024)\n    n, err := file.Read(buffer)\n    if err != nil {\n        return err  \u002F\u002F defer виконається!\n    }\n    \n    fmt.Println(string(buffer[:n]))\n    return nil\n}\n",[3753,69086,69087,69093,69097,69103,69107,69111,69115,69119,69137,69159,69171,69177,69181,69196,69200,69218,69240,69252,69261,69265,69269,69292,69298],{"__ignoreMap":3992},[4005,69088,69089,69091],{"class":4007,"line":4008},[4005,69090,5739],{"class":4171},[4005,69092,5742],{"class":4178},[4005,69094,69095],{"class":4007,"line":4014},[4005,69096,4036],{"emptyLinePlaceholder":4035},[4005,69098,69099,69101],{"class":4007,"line":4020},[4005,69100,3917],{"class":4836},[4005,69102,4439],{"class":4182},[4005,69104,69105],{"class":4007,"line":4026},[4005,69106,4843],{"class":4330},[4005,69108,69109],{"class":4007,"line":4032},[4005,69110,66456],{"class":4330},[4005,69112,69113],{"class":4007,"line":4039},[4005,69114,4482],{"class":4182},[4005,69116,69117],{"class":4007,"line":4045},[4005,69118,4036],{"emptyLinePlaceholder":4035},[4005,69120,69121,69123,69125,69127,69129,69131,69133,69135],{"class":4007,"line":4051},[4005,69122,4299],{"class":4171},[4005,69124,66131],{"class":4302},[4005,69126,4611],{"class":4182},[4005,69128,5064],{"class":4174},[4005,69130,4237],{"class":4178},[4005,69132,4498],{"class":4182},[4005,69134,3857],{"class":4178},[4005,69136,5073],{"class":4182},[4005,69138,69139,69141,69143,69145,69147,69149,69151,69153,69155,69157],{"class":4007,"line":4057},[4005,69140,66496],{"class":4174},[4005,69142,3836],{"class":4182},[4005,69144,4598],{"class":4174},[4005,69146,4314],{"class":4182},[4005,69148,4603],{"class":4174},[4005,69150,3769],{"class":4182},[4005,69152,4608],{"class":4302},[4005,69154,4611],{"class":4182},[4005,69156,5064],{"class":4174},[4005,69158,4482],{"class":4182},[4005,69160,69161,69163,69165,69167,69169],{"class":4007,"line":4063},[4005,69162,5104],{"class":4836},[4005,69164,5107],{"class":4174},[4005,69166,5110],{"class":4182},[4005,69168,4209],{"class":4171},[4005,69170,5073],{"class":4182},[4005,69172,69173,69175],{"class":4007,"line":4069},[4005,69174,5119],{"class":4836},[4005,69176,5122],{"class":4174},[4005,69178,69179],{"class":4007,"line":4075},[4005,69180,5127],{"class":4182},[4005,69182,69183,69185,69187,69189,69191,69193],{"class":4007,"line":4081},[4005,69184,5132],{"class":4836},[4005,69186,66553],{"class":4174},[4005,69188,3769],{"class":4182},[4005,69190,5140],{"class":4302},[4005,69192,5491],{"class":4182},[4005,69194,69195],{"class":4190},"\u002F\u002F Закриється при виході\n",[4005,69197,69198],{"class":4007,"line":4086},[4005,69199,5214],{"class":4182},[4005,69201,69202,69204,69206,69208,69210,69212,69214,69216],{"class":4007,"line":4092},[4005,69203,62848],{"class":4174},[4005,69205,4314],{"class":4182},[4005,69207,3764],{"class":4302},[4005,69209,5159],{"class":4182},[4005,69211,5162],{"class":4178},[4005,69213,3836],{"class":4182},[4005,69215,5167],{"class":4186},[4005,69217,4482],{"class":4182},[4005,69219,69220,69222,69224,69226,69228,69230,69232,69234,69236,69238],{"class":4007,"line":4098},[4005,69221,5174],{"class":4174},[4005,69223,3836],{"class":4182},[4005,69225,4598],{"class":4174},[4005,69227,4314],{"class":4182},[4005,69229,4593],{"class":4174},[4005,69231,3769],{"class":4182},[4005,69233,5188],{"class":4302},[4005,69235,4611],{"class":4182},[4005,69237,62891],{"class":4174},[4005,69239,4482],{"class":4182},[4005,69241,69242,69244,69246,69248,69250],{"class":4007,"line":4104},[4005,69243,5104],{"class":4836},[4005,69245,5107],{"class":4174},[4005,69247,5110],{"class":4182},[4005,69249,4209],{"class":4171},[4005,69251,5073],{"class":4182},[4005,69253,69254,69256,69258],{"class":4007,"line":4110},[4005,69255,5119],{"class":4836},[4005,69257,5107],{"class":4174},[4005,69259,69260],{"class":4190},"  \u002F\u002F defer виконається!\n",[4005,69262,69263],{"class":4007,"line":4937},[4005,69264,5127],{"class":4182},[4005,69266,69267],{"class":4007,"line":4942},[4005,69268,5214],{"class":4182},[4005,69270,69271,69273,69275,69277,69279,69281,69283,69285,69287,69289],{"class":4007,"line":4947},[4005,69272,5370],{"class":4174},[4005,69274,3769],{"class":4182},[4005,69276,5348],{"class":4302},[4005,69278,4611],{"class":4182},[4005,69280,7004],{"class":4178},[4005,69282,4611],{"class":4182},[4005,69284,62891],{"class":4174},[4005,69286,13705],{"class":4182},[4005,69288,11101],{"class":4174},[4005,69290,69291],{"class":4182},"]))\n",[4005,69293,69294,69296],{"class":4007,"line":4953},[4005,69295,5260],{"class":4836},[4005,69297,5263],{"class":4171},[4005,69299,69300],{"class":4007,"line":4960},[4005,69301,4078],{"class":4182},[3908,69303,69304],{},[3871,69305,54235],{},[3746,69307,69308,69313,69318],{},[3749,69309,69310,69312],{},[3753,69311,3861],{}," поруч з отриманням ресурсу",[3749,69314,69315,69316],{},"Не треба перевіряти ",[3753,69317,4209],{},[3749,69319,69320,69321],{},"Можна багато ",[3753,69322,3861],{},[9014,69324,69326],{"id":69325},"lifo-порядок-last-in-first-out","LIFO порядок (Last In, First Out)",[3908,69328,69329,69330,69332,69333,5831],{},"Якщо є кілька ",[3753,69331,3861],{},", вони виконуються в ",[3871,69334,69335],{},"зворотному порядку",[3984,69337,69339],{"className":4162,"code":69338,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    fmt.Println(\"Початок\")\n    \n    defer fmt.Println(\"defer 1\")\n    defer fmt.Println(\"defer 2\")\n    defer fmt.Println(\"defer 3\")\n    \n    fmt.Println(\"Кінець\")\n}\n",[3753,69340,69341,69347,69351,69357,69361,69369,69384,69388,69405,69422,69439,69443,69458],{"__ignoreMap":3992},[4005,69342,69343,69345],{"class":4007,"line":4008},[4005,69344,5739],{"class":4171},[4005,69346,5742],{"class":4178},[4005,69348,69349],{"class":4007,"line":4014},[4005,69350,4036],{"emptyLinePlaceholder":4035},[4005,69352,69353,69355],{"class":4007,"line":4020},[4005,69354,3917],{"class":4836},[4005,69356,7656],{"class":4330},[4005,69358,69359],{"class":4007,"line":4026},[4005,69360,4036],{"emptyLinePlaceholder":4035},[4005,69362,69363,69365,69367],{"class":4007,"line":4032},[4005,69364,4299],{"class":4171},[4005,69366,5764],{"class":4302},[4005,69368,4306],{"class":4182},[4005,69370,69371,69373,69375,69377,69379,69382],{"class":4007,"line":4039},[4005,69372,5370],{"class":4174},[4005,69374,3769],{"class":4182},[4005,69376,5348],{"class":4302},[4005,69378,4611],{"class":4182},[4005,69380,69381],{"class":4330},"\"Початок\"",[4005,69383,4482],{"class":4182},[4005,69385,69386],{"class":4007,"line":4045},[4005,69387,5214],{"class":4182},[4005,69389,69390,69392,69394,69396,69398,69400,69403],{"class":4007,"line":4051},[4005,69391,5132],{"class":4836},[4005,69393,32994],{"class":4174},[4005,69395,3769],{"class":4182},[4005,69397,5348],{"class":4302},[4005,69399,4611],{"class":4182},[4005,69401,69402],{"class":4330},"\"defer 1\"",[4005,69404,4482],{"class":4182},[4005,69406,69407,69409,69411,69413,69415,69417,69420],{"class":4007,"line":4057},[4005,69408,5132],{"class":4836},[4005,69410,32994],{"class":4174},[4005,69412,3769],{"class":4182},[4005,69414,5348],{"class":4302},[4005,69416,4611],{"class":4182},[4005,69418,69419],{"class":4330},"\"defer 2\"",[4005,69421,4482],{"class":4182},[4005,69423,69424,69426,69428,69430,69432,69434,69437],{"class":4007,"line":4063},[4005,69425,5132],{"class":4836},[4005,69427,32994],{"class":4174},[4005,69429,3769],{"class":4182},[4005,69431,5348],{"class":4302},[4005,69433,4611],{"class":4182},[4005,69435,69436],{"class":4330},"\"defer 3\"",[4005,69438,4482],{"class":4182},[4005,69440,69441],{"class":4007,"line":4069},[4005,69442,5214],{"class":4182},[4005,69444,69445,69447,69449,69451,69453,69456],{"class":4007,"line":4075},[4005,69446,5370],{"class":4174},[4005,69448,3769],{"class":4182},[4005,69450,5348],{"class":4302},[4005,69452,4611],{"class":4182},[4005,69454,69455],{"class":4330},"\"Кінець\"",[4005,69457,4482],{"class":4182},[4005,69459,69460],{"class":4007,"line":4081},[4005,69461,4078],{"class":4182},[3908,69463,69464],{},[3871,69465,11778],{},[3984,69467,69470],{"className":69468,"code":69469,"language":3989},[3987],"Початок\nКінець\ndefer 3\ndefer 2\ndefer 1\n",[3753,69471,69469],{"__ignoreMap":3992},[3908,69473,69474],{},[3871,69475,10990],{},[3994,69477,69479],{"alt":69478},"Стек defer - LIFO",[3984,69480,69482],{"className":3999,"code":69481,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 12\n\npackage \"Стек defer\" #F8FAFC {\n    rectangle \"defer 3\\n[останній]\" as D3 #DBEAFE\n    rectangle \"defer 2\" as D2 #DCFCE7\n    rectangle \"defer 1\\n[перший]\" as D1 #FEF3C7\n    \n    D3 -down-> D2 : виконується 1-м ↓\n    D2 -down-> D1 : виконується 2-м ↓\n}\n\n@enduml\n",[3753,69483,69484,69488,69492,69496,69500,69504,69509,69514,69519,69524,69528,69533,69538,69542,69546],{"__ignoreMap":3992},[4005,69485,69486],{"class":4007,"line":4008},[4005,69487,4011],{},[4005,69489,69490],{"class":4007,"line":4014},[4005,69491,4017],{},[4005,69493,69494],{"class":4007,"line":4020},[4005,69495,4023],{},[4005,69497,69498],{"class":4007,"line":4026},[4005,69499,30872],{},[4005,69501,69502],{"class":4007,"line":4032},[4005,69503,4036],{"emptyLinePlaceholder":4035},[4005,69505,69506],{"class":4007,"line":4039},[4005,69507,69508],{},"package \"Стек defer\" #F8FAFC {\n",[4005,69510,69511],{"class":4007,"line":4045},[4005,69512,69513],{},"    rectangle \"defer 3\\n[останній]\" as D3 #DBEAFE\n",[4005,69515,69516],{"class":4007,"line":4051},[4005,69517,69518],{},"    rectangle \"defer 2\" as D2 #DCFCE7\n",[4005,69520,69521],{"class":4007,"line":4057},[4005,69522,69523],{},"    rectangle \"defer 1\\n[перший]\" as D1 #FEF3C7\n",[4005,69525,69526],{"class":4007,"line":4063},[4005,69527,5214],{},[4005,69529,69530],{"class":4007,"line":4069},[4005,69531,69532],{},"    D3 -down-> D2 : виконується 1-м ↓\n",[4005,69534,69535],{"class":4007,"line":4075},[4005,69536,69537],{},"    D2 -down-> D1 : виконується 2-м ↓\n",[4005,69539,69540],{"class":4007,"line":4081},[4005,69541,4078],{},[4005,69543,69544],{"class":4007,"line":4086},[4005,69545,4036],{"emptyLinePlaceholder":4035},[4005,69547,69548],{"class":4007,"line":4092},[4005,69549,4113],{},[9014,69551,69553],{"id":69552},"важлива-особливість-аргументи-обчислюються-одразу","Важлива особливість: аргументи обчислюються одразу",[3984,69555,69557],{"className":4162,"code":69556,"language":4164,"meta":3992,"style":3992},"package main\n\nimport \"fmt\"\n\nfunc main() {\n    x := 10\n    defer fmt.Println(\"x =\", x)  \u002F\u002F x=10 зберігається ЗАРАЗ\n    \n    x = 20\n    fmt.Println(\"main x =\", x)\n}\n",[3753,69558,69559,69565,69569,69575,69579,69587,69595,69619,69623,69631,69650],{"__ignoreMap":3992},[4005,69560,69561,69563],{"class":4007,"line":4008},[4005,69562,5739],{"class":4171},[4005,69564,5742],{"class":4178},[4005,69566,69567],{"class":4007,"line":4014},[4005,69568,4036],{"emptyLinePlaceholder":4035},[4005,69570,69571,69573],{"class":4007,"line":4020},[4005,69572,3917],{"class":4836},[4005,69574,7656],{"class":4330},[4005,69576,69577],{"class":4007,"line":4026},[4005,69578,4036],{"emptyLinePlaceholder":4035},[4005,69580,69581,69583,69585],{"class":4007,"line":4032},[4005,69582,4299],{"class":4171},[4005,69584,5764],{"class":4302},[4005,69586,4306],{"class":4182},[4005,69588,69589,69591,69593],{"class":4007,"line":4039},[4005,69590,5305],{"class":4174},[4005,69592,4314],{"class":4182},[4005,69594,7167],{"class":4186},[4005,69596,69597,69599,69601,69603,69605,69607,69610,69612,69614,69616],{"class":4007,"line":4045},[4005,69598,5132],{"class":4836},[4005,69600,32994],{"class":4174},[4005,69602,3769],{"class":4182},[4005,69604,5348],{"class":4302},[4005,69606,4611],{"class":4182},[4005,69608,69609],{"class":4330},"\"x =\"",[4005,69611,3836],{"class":4182},[4005,69613,4621],{"class":4174},[4005,69615,5196],{"class":4182},[4005,69617,69618],{"class":4190},"\u002F\u002F x=10 зберігається ЗАРАЗ\n",[4005,69620,69621],{"class":4007,"line":4051},[4005,69622,5214],{"class":4182},[4005,69624,69625,69627,69629],{"class":4007,"line":4057},[4005,69626,5305],{"class":4174},[4005,69628,4183],{"class":4182},[4005,69630,4636],{"class":4186},[4005,69632,69633,69635,69637,69639,69641,69644,69646,69648],{"class":4007,"line":4063},[4005,69634,5370],{"class":4174},[4005,69636,3769],{"class":4182},[4005,69638,5348],{"class":4302},[4005,69640,4611],{"class":4182},[4005,69642,69643],{"class":4330},"\"main x =\"",[4005,69645,3836],{"class":4182},[4005,69647,4621],{"class":4174},[4005,69649,4482],{"class":4182},[4005,69651,69652],{"class":4007,"line":4069},[4005,69653,4078],{"class":4182},[3908,69655,69656],{},[3871,69657,11778],{},[3984,69659,69662],{"className":69660,"code":69661,"language":3989},[3987],"main x = 20\nx = 10\n",[3753,69663,69661],{"__ignoreMap":3992},[3908,69665,69666,69667,69669,69670,22913],{},"Значення ",[3753,69668,4621],{}," було скопійоване в момент ",[3753,69671,3861],{},[9014,69673,69675],{"id":69674},"типові-use-cases","Типові use cases",[3908,69677,69678],{},[3871,69679,69680],{},"1. Закриття файлу:",[3984,69682,69684],{"className":4162,"code":69683,"language":4164,"meta":3992,"style":3992},"file, err := os.Open(\"file.txt\")\nif err != nil {\n    return err\n}\ndefer file.Close()\n",[3753,69685,69686,69709,69721,69727,69731],{"__ignoreMap":3992},[4005,69687,69688,69690,69692,69694,69696,69698,69700,69702,69704,69707],{"class":4007,"line":4008},[4005,69689,4593],{"class":4174},[4005,69691,3836],{"class":4182},[4005,69693,4598],{"class":4174},[4005,69695,4314],{"class":4182},[4005,69697,4603],{"class":4174},[4005,69699,3769],{"class":4182},[4005,69701,4608],{"class":4302},[4005,69703,4611],{"class":4182},[4005,69705,69706],{"class":4330},"\"file.txt\"",[4005,69708,4482],{"class":4182},[4005,69710,69711,69713,69715,69717,69719],{"class":4007,"line":4014},[4005,69712,3800],{"class":4836},[4005,69714,5107],{"class":4174},[4005,69716,5110],{"class":4182},[4005,69718,4209],{"class":4171},[4005,69720,5073],{"class":4182},[4005,69722,69723,69725],{"class":4007,"line":4020},[4005,69724,5260],{"class":4836},[4005,69726,5122],{"class":4174},[4005,69728,69729],{"class":4007,"line":4026},[4005,69730,4078],{"class":4182},[4005,69732,69733,69735,69737,69739,69741],{"class":4007,"line":4032},[4005,69734,3861],{"class":4836},[4005,69736,66553],{"class":4174},[4005,69738,3769],{"class":4182},[4005,69740,5140],{"class":4302},[4005,69742,5143],{"class":4182},[3908,69744,69745],{},[3871,69746,69747],{},"2. Закриття HTTP Body:",[3984,69749,69751],{"className":4162,"code":69750,"language":4164,"meta":3992,"style":3992},"resp, err := http.Get(url)\nif err != nil {\n    return err\n}\ndefer resp.Body.Close()\n",[3753,69752,69753,69776,69788,69794,69798],{"__ignoreMap":3992},[4005,69754,69755,69758,69760,69762,69764,69766,69768,69770,69772,69774],{"class":4007,"line":4008},[4005,69756,69757],{"class":4174},"resp",[4005,69759,3836],{"class":4182},[4005,69761,4598],{"class":4174},[4005,69763,4314],{"class":4182},[4005,69765,25581],{"class":4174},[4005,69767,3769],{"class":4182},[4005,69769,25586],{"class":4302},[4005,69771,4611],{"class":4182},[4005,69773,13119],{"class":4174},[4005,69775,4482],{"class":4182},[4005,69777,69778,69780,69782,69784,69786],{"class":4007,"line":4014},[4005,69779,3800],{"class":4836},[4005,69781,5107],{"class":4174},[4005,69783,5110],{"class":4182},[4005,69785,4209],{"class":4171},[4005,69787,5073],{"class":4182},[4005,69789,69790,69792],{"class":4007,"line":4020},[4005,69791,5260],{"class":4836},[4005,69793,5122],{"class":4174},[4005,69795,69796],{"class":4007,"line":4026},[4005,69797,4078],{"class":4182},[4005,69799,69800,69802,69804,69806,69808,69810,69812],{"class":4007,"line":4032},[4005,69801,3861],{"class":4836},[4005,69803,25572],{"class":4174},[4005,69805,3769],{"class":4182},[4005,69807,25643],{"class":4174},[4005,69809,3769],{"class":4182},[4005,69811,5140],{"class":4302},[4005,69813,5143],{"class":4182},[3908,69815,69816],{},[3871,69817,69818],{},"3. Розблокування mutex:",[3984,69820,69822],{"className":4162,"code":69821,"language":4164,"meta":3992,"style":3992},"mu.Lock()\ndefer mu.Unlock()\n\n\u002F\u002F Критична секція\n",[3753,69823,69824,69834,69847,69851],{"__ignoreMap":3992},[4005,69825,69826,69828,69830,69832],{"class":4007,"line":4008},[4005,69827,56428],{"class":4174},[4005,69829,3769],{"class":4182},[4005,69831,56433],{"class":4302},[4005,69833,5143],{"class":4182},[4005,69835,69836,69838,69841,69843,69845],{"class":4007,"line":4014},[4005,69837,3861],{"class":4836},[4005,69839,69840],{"class":4174}," mu",[4005,69842,3769],{"class":4182},[4005,69844,56450],{"class":4302},[4005,69846,5143],{"class":4182},[4005,69848,69849],{"class":4007,"line":4020},[4005,69850,4036],{"emptyLinePlaceholder":4035},[4005,69852,69853],{"class":4007,"line":4026},[4005,69854,69855],{"class":4190},"\u002F\u002F Критична секція\n",[3908,69857,69858],{},[3871,69859,69860],{},"4. Вимірювання часу:",[3984,69862,69864],{"className":4162,"code":69863,"language":4164,"meta":3992,"style":3992},"func process() {\n    start := time.Now()\n    defer func() {\n        fmt.Printf(\"Час: %v\\n\", time.Since(start))\n    }()\n    \n    \u002F\u002F Логіка\n}\n",[3753,69865,69866,69875,69890,69898,69931,69936,69940,69945],{"__ignoreMap":3992},[4005,69867,69868,69870,69873],{"class":4007,"line":4008},[4005,69869,4299],{"class":4171},[4005,69871,69872],{"class":4302}," process",[4005,69874,4306],{"class":4182},[4005,69876,69877,69880,69882,69884,69886,69888],{"class":4007,"line":4014},[4005,69878,69879],{"class":4174},"    start",[4005,69881,4314],{"class":4182},[4005,69883,26006],{"class":4174},[4005,69885,3769],{"class":4182},[4005,69887,26011],{"class":4302},[4005,69889,5143],{"class":4182},[4005,69891,69892,69894,69896],{"class":4007,"line":4020},[4005,69893,5132],{"class":4836},[4005,69895,20015],{"class":4171},[4005,69897,4306],{"class":4182},[4005,69899,69900,69902,69904,69906,69908,69911,69913,69915,69917,69919,69921,69923,69925,69927,69929],{"class":4007,"line":4026},[4005,69901,5343],{"class":4174},[4005,69903,3769],{"class":4182},[4005,69905,7945],{"class":4302},[4005,69907,4611],{"class":4182},[4005,69909,69910],{"class":4330},"\"Час: ",[4005,69912,10666],{"class":4174},[4005,69914,7965],{"class":7964},[4005,69916,7968],{"class":4330},[4005,69918,3836],{"class":4182},[4005,69920,26006],{"class":4174},[4005,69922,3769],{"class":4182},[4005,69924,37594],{"class":4302},[4005,69926,4611],{"class":4182},[4005,69928,37599],{"class":4174},[4005,69930,25552],{"class":4182},[4005,69932,69933],{"class":4007,"line":4032},[4005,69934,69935],{"class":4182},"    }()\n",[4005,69937,69938],{"class":4007,"line":4039},[4005,69939,5214],{"class":4182},[4005,69941,69942],{"class":4007,"line":4045},[4005,69943,69944],{"class":4190},"    \u002F\u002F Логіка\n",[4005,69946,69947],{"class":4007,"line":4051},[4005,69948,4078],{"class":4182},[5427,69950,69951,69956],{},[3908,69952,69953],{},[3871,69954,69955],{},"Пастка: defer у циклі!",[3984,69957,69959],{"className":4162,"code":69958,"language":4164,"meta":3992,"style":3992},"\u002F\u002F ❌ ПОГАНО — усі файли закриються лише при виході з функції\nfor _, filename := range files {\n    f, _ := os.Open(filename)\n    defer f.Close()  \u002F\u002F Накопичується в пам'яті!\n}\n\n\u002F\u002F ✅ ДОБРЕ — використати анонімну функцію\nfor _, filename := range files {\n    func() {\n        f, _ := os.Open(filename)\n        defer f.Close()  \u002F\u002F Закриється після кожної ітерації\n        \u002F\u002F Обробка файлу\n    }()\n}\n",[3753,69960,69961,69966,69985,70007,70022,70026,70030,70035,70053,70059,70082,70098,70103,70107],{"__ignoreMap":3992},[4005,69962,69963],{"class":4007,"line":4008},[4005,69964,69965],{"class":4190},"\u002F\u002F ❌ ПОГАНО — усі файли закриються лише при виході з функції\n",[4005,69967,69968,69970,69972,69974,69976,69978,69980,69983],{"class":4007,"line":4014},[4005,69969,3808],{"class":4836},[4005,69971,17642],{"class":4174},[4005,69973,3836],{"class":4182},[4005,69975,13169],{"class":4174},[4005,69977,4314],{"class":4182},[4005,69979,12151],{"class":4836},[4005,69981,69982],{"class":4174}," files",[4005,69984,5073],{"class":4182},[4005,69986,69987,69989,69991,69993,69995,69997,69999,70001,70003,70005],{"class":4007,"line":4020},[4005,69988,5078],{"class":4174},[4005,69990,3836],{"class":4182},[4005,69992,5680],{"class":4174},[4005,69994,4314],{"class":4182},[4005,69996,4603],{"class":4174},[4005,69998,3769],{"class":4182},[4005,70000,4608],{"class":4302},[4005,70002,4611],{"class":4182},[4005,70004,13169],{"class":4174},[4005,70006,4482],{"class":4182},[4005,70008,70009,70011,70013,70015,70017,70019],{"class":4007,"line":4026},[4005,70010,5132],{"class":4836},[4005,70012,5135],{"class":4174},[4005,70014,3769],{"class":4182},[4005,70016,5140],{"class":4302},[4005,70018,5491],{"class":4182},[4005,70020,70021],{"class":4190},"\u002F\u002F Накопичується в пам'яті!\n",[4005,70023,70024],{"class":4007,"line":4032},[4005,70025,4078],{"class":4182},[4005,70027,70028],{"class":4007,"line":4039},[4005,70029,4036],{"emptyLinePlaceholder":4035},[4005,70031,70032],{"class":4007,"line":4045},[4005,70033,70034],{"class":4190},"\u002F\u002F ✅ ДОБРЕ — використати анонімну функцію\n",[4005,70036,70037,70039,70041,70043,70045,70047,70049,70051],{"class":4007,"line":4051},[4005,70038,3808],{"class":4836},[4005,70040,17642],{"class":4174},[4005,70042,3836],{"class":4182},[4005,70044,13169],{"class":4174},[4005,70046,4314],{"class":4182},[4005,70048,12151],{"class":4836},[4005,70050,69982],{"class":4174},[4005,70052,5073],{"class":4182},[4005,70054,70055,70057],{"class":4007,"line":4057},[4005,70056,38027],{"class":4171},[4005,70058,4306],{"class":4182},[4005,70060,70061,70064,70066,70068,70070,70072,70074,70076,70078,70080],{"class":4007,"line":4063},[4005,70062,70063],{"class":4174},"        f",[4005,70065,3836],{"class":4182},[4005,70067,5680],{"class":4174},[4005,70069,4314],{"class":4182},[4005,70071,4603],{"class":4174},[4005,70073,3769],{"class":4182},[4005,70075,4608],{"class":4302},[4005,70077,4611],{"class":4182},[4005,70079,13169],{"class":4174},[4005,70081,4482],{"class":4182},[4005,70083,70084,70087,70089,70091,70093,70095],{"class":4007,"line":4069},[4005,70085,70086],{"class":4836},"        defer",[4005,70088,5135],{"class":4174},[4005,70090,3769],{"class":4182},[4005,70092,5140],{"class":4302},[4005,70094,5491],{"class":4182},[4005,70096,70097],{"class":4190},"\u002F\u002F Закриється після кожної ітерації\n",[4005,70099,70100],{"class":4007,"line":4075},[4005,70101,70102],{"class":4190},"        \u002F\u002F Обробка файлу\n",[4005,70104,70105],{"class":4007,"line":4081},[4005,70106,69935],{"class":4182},[4005,70108,70109],{"class":4007,"line":4086},[4005,70110,4078],{"class":4182},[3908,70112,70113,70115,70116,70119,70120,3836,70123,70126,70127,70130,70131,70133],{},[3871,70114,43803],{}," сокет ",[3753,70117,70118],{},"net.Conn",", файл ",[3753,70121,70122],{},"os.File",[3753,70124,70125],{},"rows.Close()"," повинні закритися ",[3871,70128,70129],{},"гарантовано",", навіть якщо функція повертає помилку посередині. ",[3753,70132,3861],{}," — це «finally» Go, але зі стековою семантикою.",[3908,70135,70136,3945,70138,70140,70141,70144,70145,70150],{},[3871,70137,9062],{},[3753,70139,3861],{}," поміщає виклик у ",[3871,70142,70143],{},"стек фрейму горутини"," (LIFO — останній доданий виконується першим). Аргументи обчислюються ",[3871,70146,70147,70148],{},"в момент ",[3753,70149,3861],{},", а не в момент виконання:",[3984,70152,70154],{"className":4162,"code":70153,"language":4164,"meta":3992,"style":3992},"func processConn(conn net.Conn) error {\n    defer conn.Close() \u002F\u002F 1) закриється останнім, навіть при return err\n    defer log.Println(\"завершено\") \u002F\u002F 2) виконається першим при виході (LIFO)\n\n    buf := make([]byte, 4096)\n    n, err := conn.Read(buf)\n    if err != nil {\n        return err \u002F\u002F обидва defer все одно виконаються!\n    }\n\n    \u002F\u002F Пастка для допитливих: аргументи копіюються зараз\n    for i := 0; i \u003C 3; i++ {\n        defer fmt.Println(i) \u002F\u002F надрукує 2,1,0 — i скопійовано в момент defer\n    }\n    return nil\n}\n\n::note\n**Поки що достатньо:** `defer f.Close()` закриє файл при виході. Приклад нижче про `named return` — для допитливих, можна пропустити.\n::\n\nfunc withNamedReturn() (result int, err error) {\n    defer func() {\n        if err != nil {\n            result = -1 \u002F\u002F мутація named return після return — просунутий прийом\n        }\n    }()\n    result = 42\n    err = errors.New(\"щось пішло не так\")\n    return \u002F\u002F naked return → defer бачить result=42, err!=nil → result=-1\n}\n",[3753,70155,70156,70182,70198,70219,70223,70243,70266,70278,70287,70291,70295,70300,70324,70343,70347,70353,70357,70361,70368,70433,70438,70442,70463,70471,70483,70495,70499,70503,70511,70529,70536],{"__ignoreMap":3992},[4005,70157,70158,70160,70163,70165,70168,70171,70173,70176,70178,70180],{"class":4007,"line":4008},[4005,70159,4299],{"class":4171},[4005,70161,70162],{"class":4302}," processConn",[4005,70164,4611],{"class":4182},[4005,70166,70167],{"class":4174},"conn",[4005,70169,70170],{"class":4178}," net",[4005,70172,3769],{"class":4182},[4005,70174,70175],{"class":4178},"Conn",[4005,70177,4498],{"class":4182},[4005,70179,3857],{"class":4178},[4005,70181,5073],{"class":4182},[4005,70183,70184,70186,70189,70191,70193,70195],{"class":4007,"line":4014},[4005,70185,5132],{"class":4836},[4005,70187,70188],{"class":4174}," conn",[4005,70190,3769],{"class":4182},[4005,70192,5140],{"class":4302},[4005,70194,7346],{"class":4182},[4005,70196,70197],{"class":4190},"\u002F\u002F 1) закриється останнім, навіть при return err\n",[4005,70199,70200,70202,70205,70207,70209,70211,70214,70216],{"class":4007,"line":4020},[4005,70201,5132],{"class":4836},[4005,70203,70204],{"class":4174}," log",[4005,70206,3769],{"class":4182},[4005,70208,5348],{"class":4302},[4005,70210,4611],{"class":4182},[4005,70212,70213],{"class":4330},"\"завершено\"",[4005,70215,4498],{"class":4182},[4005,70217,70218],{"class":4190},"\u002F\u002F 2) виконається першим при виході (LIFO)\n",[4005,70220,70221],{"class":4007,"line":4026},[4005,70222,4036],{"emptyLinePlaceholder":4035},[4005,70224,70225,70228,70230,70232,70234,70236,70238,70241],{"class":4007,"line":4032},[4005,70226,70227],{"class":4174},"    buf",[4005,70229,4314],{"class":4182},[4005,70231,3764],{"class":4302},[4005,70233,5159],{"class":4182},[4005,70235,5162],{"class":4178},[4005,70237,3836],{"class":4182},[4005,70239,70240],{"class":4186},"4096",[4005,70242,4482],{"class":4182},[4005,70244,70245,70247,70249,70251,70253,70255,70257,70259,70261,70264],{"class":4007,"line":4039},[4005,70246,5174],{"class":4174},[4005,70248,3836],{"class":4182},[4005,70250,4598],{"class":4174},[4005,70252,4314],{"class":4182},[4005,70254,70167],{"class":4174},[4005,70256,3769],{"class":4182},[4005,70258,5188],{"class":4302},[4005,70260,4611],{"class":4182},[4005,70262,70263],{"class":4174},"buf",[4005,70265,4482],{"class":4182},[4005,70267,70268,70270,70272,70274,70276],{"class":4007,"line":4045},[4005,70269,5104],{"class":4836},[4005,70271,5107],{"class":4174},[4005,70273,5110],{"class":4182},[4005,70275,4209],{"class":4171},[4005,70277,5073],{"class":4182},[4005,70279,70280,70282,70284],{"class":4007,"line":4051},[4005,70281,5119],{"class":4836},[4005,70283,5107],{"class":4174},[4005,70285,70286],{"class":4190}," \u002F\u002F обидва defer все одно виконаються!\n",[4005,70288,70289],{"class":4007,"line":4057},[4005,70290,5127],{"class":4182},[4005,70292,70293],{"class":4007,"line":4063},[4005,70294,4036],{"emptyLinePlaceholder":4035},[4005,70296,70297],{"class":4007,"line":4069},[4005,70298,70299],{"class":4190},"    \u002F\u002F Пастка для допитливих: аргументи копіюються зараз\n",[4005,70301,70302,70304,70306,70308,70310,70312,70314,70316,70318,70320,70322],{"class":4007,"line":4075},[4005,70303,12138],{"class":4836},[4005,70305,6592],{"class":4174},[4005,70307,4314],{"class":4182},[4005,70309,4200],{"class":4186},[4005,70311,23796],{"class":4182},[4005,70313,27826],{"class":4174},[4005,70315,10331],{"class":4182},[4005,70317,6286],{"class":4186},[4005,70319,23796],{"class":4182},[4005,70321,27826],{"class":4174},[4005,70323,27837],{"class":4182},[4005,70325,70326,70328,70330,70332,70334,70336,70338,70340],{"class":4007,"line":4081},[4005,70327,70086],{"class":4836},[4005,70329,32994],{"class":4174},[4005,70331,3769],{"class":4182},[4005,70333,5348],{"class":4302},[4005,70335,4611],{"class":4182},[4005,70337,27826],{"class":4174},[4005,70339,4498],{"class":4182},[4005,70341,70342],{"class":4190},"\u002F\u002F надрукує 2,1,0 — i скопійовано в момент defer\n",[4005,70344,70345],{"class":4007,"line":4086},[4005,70346,5127],{"class":4182},[4005,70348,70349,70351],{"class":4007,"line":4092},[4005,70350,5260],{"class":4836},[4005,70352,5263],{"class":4171},[4005,70354,70355],{"class":4007,"line":4098},[4005,70356,4078],{"class":4182},[4005,70358,70359],{"class":4007,"line":4104},[4005,70360,4036],{"emptyLinePlaceholder":4035},[4005,70362,70363,70365],{"class":4007,"line":4110},[4005,70364,5018],{"class":4182},[4005,70366,70367],{"class":4174},"note\n",[4005,70369,70370,70373,70376,70379,70382,70385,70388,70391,70394,70397,70400,70403,70405,70408,70411,70414,70416,70419,70422,70424,70427,70430],{"class":4007,"line":4937},[4005,70371,70372],{"class":4182},"**",[4005,70374,70375],{"class":4174},"Поки",[4005,70377,70378],{"class":4174}," що",[4005,70380,70381],{"class":4174}," достатньо",[4005,70383,70384],{"class":4182},":** ",[4005,70386,70387],{"class":4330},"`defer f.Close()`",[4005,70389,70390],{"class":4174}," закриє",[4005,70392,70393],{"class":4174}," файл",[4005,70395,70396],{"class":4174}," при",[4005,70398,70399],{"class":4174}," виході",[4005,70401,70402],{"class":4182},". ",[4005,70404,6005],{"class":4174},[4005,70406,70407],{"class":4174}," нижче",[4005,70409,70410],{"class":4174}," про",[4005,70412,70413],{"class":4330}," `named return`",[4005,70415,7537],{"class":4182},[4005,70417,70418],{"class":4174},"для",[4005,70420,70421],{"class":4174}," допитливих",[4005,70423,3836],{"class":4182},[4005,70425,70426],{"class":4174},"можна",[4005,70428,70429],{"class":4174}," пропустити",[4005,70431,70432],{"class":4182},".\n",[4005,70434,70435],{"class":4007,"line":4942},[4005,70436,70437],{"class":4182},"::\n",[4005,70439,70440],{"class":4007,"line":4947},[4005,70441,4036],{"emptyLinePlaceholder":4035},[4005,70443,70444,70446,70449,70451,70453,70455,70457,70459,70461],{"class":4007,"line":4953},[4005,70445,4299],{"class":4171},[4005,70447,70448],{"class":4302}," withNamedReturn",[4005,70450,40282],{"class":4182},[4005,70452,5695],{"class":4174},[4005,70454,4224],{"class":4178},[4005,70456,3836],{"class":4182},[4005,70458,4598],{"class":4174},[4005,70460,66954],{"class":4178},[4005,70462,12789],{"class":4182},[4005,70464,70465,70467,70469],{"class":4007,"line":4960},[4005,70466,5132],{"class":4836},[4005,70468,20015],{"class":4171},[4005,70470,4306],{"class":4182},[4005,70472,70473,70475,70477,70479,70481],{"class":4007,"line":4973},[4005,70474,12892],{"class":4836},[4005,70476,5107],{"class":4174},[4005,70478,5110],{"class":4182},[4005,70480,4209],{"class":4171},[4005,70482,5073],{"class":4182},[4005,70484,70485,70488,70490,70492],{"class":4007,"line":4985},[4005,70486,70487],{"class":4174},"            result",[4005,70489,9464],{"class":4182},[4005,70491,4393],{"class":4186},[4005,70493,70494],{"class":4190}," \u002F\u002F мутація named return після return — просунутий прийом\n",[4005,70496,70497],{"class":4007,"line":7813},[4005,70498,12937],{"class":4182},[4005,70500,70501],{"class":4007,"line":7819},[4005,70502,69935],{"class":4182},[4005,70504,70505,70507,70509],{"class":4007,"line":7826},[4005,70506,15757],{"class":4174},[4005,70508,4183],{"class":4182},[4005,70510,7153],{"class":4186},[4005,70512,70513,70515,70517,70519,70521,70523,70525,70527],{"class":4007,"line":7839},[4005,70514,51448],{"class":4174},[4005,70516,4183],{"class":4182},[4005,70518,34821],{"class":4174},[4005,70520,3769],{"class":4182},[4005,70522,34826],{"class":4302},[4005,70524,4611],{"class":4182},[4005,70526,67053],{"class":4330},[4005,70528,4482],{"class":4182},[4005,70530,70531,70533],{"class":4007,"line":7864},[4005,70532,5260],{"class":4836},[4005,70534,70535],{"class":4190}," \u002F\u002F naked return → defer бачить result=42, err!=nil → result=-1\n",[4005,70537,70538],{"class":4007,"line":7872},[4005,70539,4078],{"class":4182},[3994,70541,70543],{"alt":70542},"Стек defer у фреймі горутини (LIFO)",[3984,70544,70546],{"className":3999,"code":70545,"language":4001,"meta":3992,"style":3992},"@startuml\nskinparam style plain\nskinparam backgroundColor #FFFFFF\nskinparam defaultFontSize 12\n\npackage \"Фрейм processConn (стек горутини)\" #F8FAFC {\n    rectangle \"defer conn.Close()  [додано 1-м, виконається 2-м]\" as D1 #DBEAFE\n    rectangle \"defer log.Println   [додано 2-м, виконається 1-м]\" as D2 #DCFCE7\n    D2 -down-> D1 : LIFO порядок\n}\n\npackage \"Виконання при return\" #FFFFFF {\n    rectangle \"1. Обчислити return значення\" as S1 #F1F5F9\n    rectangle \"2. Виконати defer-стек (LIFO)\" as S2 #FEF3C7\n    rectangle \"3. Звільнити фрейм стека\" as S3 #F1F5F9\n    S1 -down-> S2\n    S2 -down-> S3\n}\n@enduml\n",[3753,70547,70548,70552,70556,70560,70564,70568,70573,70578,70583,70588,70592,70596,70601,70606,70611,70616,70621,70626,70630],{"__ignoreMap":3992},[4005,70549,70550],{"class":4007,"line":4008},[4005,70551,4011],{},[4005,70553,70554],{"class":4007,"line":4014},[4005,70555,4017],{},[4005,70557,70558],{"class":4007,"line":4020},[4005,70559,4023],{},[4005,70561,70562],{"class":4007,"line":4026},[4005,70563,30872],{},[4005,70565,70566],{"class":4007,"line":4032},[4005,70567,4036],{"emptyLinePlaceholder":4035},[4005,70569,70570],{"class":4007,"line":4039},[4005,70571,70572],{},"package \"Фрейм processConn (стек горутини)\" #F8FAFC {\n",[4005,70574,70575],{"class":4007,"line":4045},[4005,70576,70577],{},"    rectangle \"defer conn.Close()  [додано 1-м, виконається 2-м]\" as D1 #DBEAFE\n",[4005,70579,70580],{"class":4007,"line":4051},[4005,70581,70582],{},"    rectangle \"defer log.Println   [додано 2-м, виконається 1-м]\" as D2 #DCFCE7\n",[4005,70584,70585],{"class":4007,"line":4057},[4005,70586,70587],{},"    D2 -down-> D1 : LIFO порядок\n",[4005,70589,70590],{"class":4007,"line":4063},[4005,70591,4078],{},[4005,70593,70594],{"class":4007,"line":4069},[4005,70595,4036],{"emptyLinePlaceholder":4035},[4005,70597,70598],{"class":4007,"line":4075},[4005,70599,70600],{},"package \"Виконання при return\" #FFFFFF {\n",[4005,70602,70603],{"class":4007,"line":4081},[4005,70604,70605],{},"    rectangle \"1. Обчислити return значення\" as S1 #F1F5F9\n",[4005,70607,70608],{"class":4007,"line":4086},[4005,70609,70610],{},"    rectangle \"2. Виконати defer-стек (LIFO)\" as S2 #FEF3C7\n",[4005,70612,70613],{"class":4007,"line":4092},[4005,70614,70615],{},"    rectangle \"3. Звільнити фрейм стека\" as S3 #F1F5F9\n",[4005,70617,70618],{"class":4007,"line":4098},[4005,70619,70620],{},"    S1 -down-> S2\n",[4005,70622,70623],{"class":4007,"line":4104},[4005,70624,70625],{},"    S2 -down-> S3\n",[4005,70627,70628],{"class":4007,"line":4110},[4005,70629,4078],{},[4005,70631,70632],{"class":4007,"line":4937},[4005,70633,4113],{},[5427,70635,70636,3880,70642,70645,70646,70649,70650,70653,70654,70657],{},[3871,70637,70638,70639,70641],{},"Де не ставити ",[3753,70640,3861],{}," в циклі:",[3753,70643,70644],{},"for _, f := range files { defer f.Close() }"," — закриє всі файли лише при виході з ",[3871,70647,70648],{},"функції",", а не ітерації, вичерпавши дескриптори. Використовуйте анонімну функцію ",[3753,70651,70652],{},"func(){ f, _ := os.Open(...); defer f.Close(); ... }()"," або явний ",[3753,70655,70656],{},"f.Close()"," в циклі.",[3908,70659,70660,3880,70663,70665,70666,70668,70669,70671,70672,3769],{},[3871,70661,70662],{},"Зв'язок з пам'яттю:",[3753,70664,3861],{}," зберігається у фреймі стека горутини (2 КБ початково, динамічно росте — див. лекцію 01 про горутини), тому тисячі ",[3753,70667,3861],{}," у циклі — це тиск на стек та GC. Для гарячих шляхів бекенду уникайте зайвих ",[3753,70670,3861],{}," всередині ",[3753,70673,3808],{},[3900,70675],{},[3903,70677,70679],{"id":70678},"питання-для-самоперевірки-та-закріплення-знань","Питання для самоперевірки та закріплення знань",[3738,70681,70682,70695,70699,70715,70719,70729,70745],{},[3741,70683,70686,70687,8157,70689,70691,70692,3769],{"icon":70684,"title":70685},"i-lucide-help-circle","1. Чому Go не має прихованого приведення типів?","Go виключає неявні перетворення типів задля абсолютної передбачуваності та безпеки системного коду на етапі компіляції. Будь-яке змішування числових типів різної розрядності (наприклад, ",[3753,70688,8156],{},[3753,70690,4154],{},") вимагає явного приведення ",[3753,70693,70694],{},"int64(x)",[3741,70696,70698],{"icon":70684,"title":70697},"2. Чому розмір масиву [4]int є частиною його типу?","Масив є фіксованим монолітним блоком пам'яті. Компілятор заздалегідь виділяє точну кількість байтів на стеку. Масиви різного розміру несумісні за типом, що забезпечує апаратну швидкодію та захист від виходу за межі пам'яті.",[3741,70700,70702,70703,70706,70707,70709,70710,70712,70713,3769],{"icon":70684,"title":70701},"3. Що відбувається всередині середовища виконання при виклику append()?","Якщо зріз має вільний резерв місткості (",[3753,70704,70705],{},"len \u003C cap","), елемент записується в існуючий масив. Якщо ",[3753,70708,64307],{},", функція ",[3753,70711,64313],{}," виділяє в купі новий удвічі більший базовий масив, копіює туди старі дані, додає нові та повертає новий дескриптор ",[3753,70714,3835],{},[3741,70716,70718],{"icon":70684,"title":70717},"4. Чому спроба взяти адресу елемента карти є помилкою компіляції?","Карта є динамічною хеш-таблицею. При додаванні нових елементів Go автоматично виконує рехешинг та евакуацію бакетів у нові комірки пам'яті, що зробило б збережену адресу недійсною.",[3741,70720,70722,70723,70725,70726,3769],{"icon":70684,"title":70721},"5. Чому порядок range по карті випадковий?","Go рандомізує стартовий бакет при кожному ",[3753,70724,12151],{}," навмисно з Go 1.0, щоб код не залежав від порядку хешування. Для детермінованого виводу відсортуйте ключі: ",[3753,70727,70728],{},"keys := ...; sort.Strings(keys)",[3741,70730,70732,70734,70735,70737,70738,70740,70741,70744],{"icon":70684,"title":70731},"6. Коли defer виконається при return?",[3753,70733,3861],{}," виконується після обчислення ",[3753,70736,35265],{}," значень, але до звільнення фрейму стека (LIFO). Він бачить і може мутувати іменовані ",[3753,70739,35265],{}," змінні, тому ідеальний для ",[3753,70742,70743],{},"conn.Close()"," та логування помилок.",[3741,70746,70748,6413,70750,70752,70753,70755,70756,70758,70759,70761,70762,3769],{"icon":70684,"title":70747},"7. Чому var m map[string]int; m[k]=1 панікує?",[3753,70749,8984],{},[3753,70751,4209],{}," дескриптор ",[3753,70754,3847],{}," без бакетів. Читання повертає zero value, але запис вимагає ініціалізованого ",[3753,70757,3847],{}," через ",[3753,70760,3764],{}," або літерал ",[3753,70763,44189],{},[70765,70766,70767],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .su1O8, html code.shiki .su1O8{--shiki-light:#0000FF;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .sN1BT, html code.shiki .sN1BT{--shiki-light:#267F99;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .sHH4Y, html code.shiki .sHH4Y{--shiki-light:#000000;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .s8Opu, html code.shiki .s8Opu{--shiki-light:#795E26;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .siwwj, html code.shiki .siwwj{--shiki-light:#001080;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sbdoH, html code.shiki .sbdoH{--shiki-light:#A31515;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .spJ8K, html code.shiki .spJ8K{--shiki-light:#008000;--shiki-default:#6A9955;--shiki-dark:#6A9955}html pre.shiki code .s8xlr, html code.shiki .s8xlr{--shiki-light:#AF00DB;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sJj4R, html code.shiki .sJj4R{--shiki-light:#098658;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .sjcCO, html code.shiki .sjcCO{--shiki-light:#EE0000;--shiki-default:#D7BA7D;--shiki-dark:#D7BA7D}html pre.shiki code .s-QsJ, html code.shiki .s-QsJ{--shiki-light:#0070C1;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}",{"title":3992,"searchDepth":4014,"depth":4014,"links":70769},[70770,70775,70791,70796,70803,70810,70818,70835,70848,70863,70874,70876,70882,70893,70900,70909],{"id":3905,"depth":4014,"text":3906,"children":70771},[70772,70773,70774],{"id":3978,"depth":4020,"text":3979},{"id":4132,"depth":4020,"text":4133},{"id":5657,"depth":4020,"text":5658},{"id":5711,"depth":4014,"text":70776,"children":70777},"Константи та генератор послідовностей iota",[70778,70779,70780,70781,70782,70783,70784,70785,70786,70787,70789],{"id":5823,"depth":4020,"text":5824},{"id":6531,"depth":4020,"text":6532},{"id":6563,"depth":4020,"text":6564},{"id":6604,"depth":4020,"text":6605},{"id":6665,"depth":4020,"text":6666},{"id":6790,"depth":4020,"text":6829},{"id":6976,"depth":4020,"text":6977},{"id":7200,"depth":4020,"text":7201},{"id":7222,"depth":4020,"text":7223},{"id":7304,"depth":4020,"text":70788},"Крок 3. Реалізація інтерфейсу форматування fmt.Stringer",{"id":7631,"depth":4020,"text":70790},"Розширені інженерні патерни застосування iota",{"id":8142,"depth":4014,"text":8143,"children":70792},[70793,70794,70795],{"id":8166,"depth":4020,"text":8167},{"id":8803,"depth":4020,"text":8804},{"id":9011,"depth":4020,"text":9012},{"id":12434,"depth":4014,"text":70797,"children":70798},"Робота з рядками: пакет strings",[70799,70800,70801,70802],{"id":12482,"depth":4020,"text":12483},{"id":13778,"depth":4020,"text":13779},{"id":15655,"depth":4020,"text":15656},{"id":17701,"depth":4020,"text":17702},{"id":20431,"depth":4014,"text":70804,"children":70805},"Форматоване виведення: пакет fmt",[70806,70807,70808,70809],{"id":20446,"depth":4020,"text":20447},{"id":20626,"depth":4020,"text":20627},{"id":21734,"depth":4020,"text":21735},{"id":22044,"depth":4020,"text":22045},{"id":22635,"depth":4014,"text":22636,"children":70811},[70812,70813,70814,70815,70817],{"id":22639,"depth":4020,"text":22640},{"id":22838,"depth":4020,"text":22839},{"id":22926,"depth":4020,"text":22927},{"id":23384,"depth":4020,"text":70816},"Складені операції присвоєння (compound assignments)",{"id":24086,"depth":4020,"text":24087},{"id":24885,"depth":4014,"text":24886,"children":70819},[70820,70822,70824,70826,70828,70829,70830,70831,70832,70833,70834],{"id":24903,"depth":4020,"text":70821},"Умовні конструкції if...else та блокова ініціалізація",{"id":25663,"depth":4020,"text":70823},"Багатогілковий перемикач switch",{"id":27704,"depth":4020,"text":70825},"Цикл for: усі форми та патерни організації повторень",{"id":28692,"depth":4020,"text":70827},"Основні форми for-range",{"id":28881,"depth":4020,"text":28882},{"id":29241,"depth":4020,"text":29242},{"id":29401,"depth":4020,"text":29402},{"id":29680,"depth":4020,"text":29681},{"id":29979,"depth":4020,"text":29980},{"id":30132,"depth":4020,"text":30133},{"id":30208,"depth":4020,"text":30209},{"id":30386,"depth":4014,"text":70836,"children":70837},"Статичні фіксовані масиви ([N]T)",[70838,70839,70840,70842,70843,70845,70846,70847],{"id":30395,"depth":4020,"text":30396},{"id":30829,"depth":4020,"text":30830},{"id":30947,"depth":4020,"text":70841},"Залізне правило типу: розмірність N є частиною типу даних",{"id":31110,"depth":4020,"text":31111},{"id":31695,"depth":4020,"text":70844},"Операції над масивами: доступ, функції len\u002Fcap та контроль меж",{"id":31765,"depth":4020,"text":31766},{"id":32084,"depth":4020,"text":32085},{"id":32507,"depth":4020,"text":32508},{"id":32698,"depth":4014,"text":32699,"children":70849},[70850,70851,70853,70854,70855,70856,70857,70858,70859,70860,70861,70862],{"id":32714,"depth":4020,"text":32715},{"id":33554,"depth":4020,"text":70852},"Варіативні функції (...T — Variadic Functions)",{"id":33949,"depth":4020,"text":33950},{"id":34080,"depth":4020,"text":34081},{"id":34161,"depth":4020,"text":34162},{"id":34453,"depth":4020,"text":34454},{"id":34595,"depth":4020,"text":34596},{"id":34702,"depth":4020,"text":34703},{"id":35275,"depth":4020,"text":35276},{"id":37763,"depth":4020,"text":37764},{"id":39350,"depth":4020,"text":39351},{"id":41794,"depth":4020,"text":41795},{"id":42231,"depth":4014,"text":42232,"children":70864},[70865,70866,70868,70870,70872,70873],{"id":42245,"depth":4020,"text":42246},{"id":42356,"depth":4020,"text":70867},"Оператори взяття адреси & та розіменування *",{"id":42661,"depth":4020,"text":70869},"Нульовий покажчик nil та небезпека Nil Pointer Dereference",{"id":42796,"depth":4020,"text":70871},"Вбудована функція new()",{"id":42974,"depth":4020,"text":42975},{"id":43285,"depth":4020,"text":43286},{"id":43577,"depth":4014,"text":70875},"make vs new vs літерал: хто виділяє пам'ять і що повертає",{"id":44258,"depth":4014,"text":44259,"children":70877},[70878,70879,70880],{"id":44399,"depth":4020,"text":44400},{"id":44496,"depth":4020,"text":44497},{"id":44763,"depth":4020,"text":70881},"Дослідження втечі — для допитливих (-gcflags=\"-m\")",{"id":44867,"depth":4014,"text":44868,"children":70883},[70884,70885,70886,70888,70889,70890,70891,70892],{"id":44871,"depth":4020,"text":44872},{"id":44949,"depth":4020,"text":44950},{"id":46323,"depth":4020,"text":70887},"Частина 2: Структури (struct) — групування даних",{"id":52358,"depth":4020,"text":52359},{"id":54068,"depth":4020,"text":54069},{"id":57527,"depth":4020,"text":57528},{"id":61007,"depth":4020,"text":61008},{"id":61357,"depth":4020,"text":61358},{"id":61767,"depth":4014,"text":61768,"children":70894},[70895,70896,70897,70899],{"id":61771,"depth":4020,"text":61772},{"id":61815,"depth":4020,"text":61816},{"id":65112,"depth":4020,"text":70898},"Карти (map[K]V): вбудовані хеш-таблиці",{"id":65977,"depth":4020,"text":65978},{"id":66044,"depth":4014,"text":66045,"children":70901},[70902,70903,70905,70907],{"id":66048,"depth":4020,"text":66049},{"id":66075,"depth":4020,"text":70904},"Інтерфейс error: помилка як значення",{"id":68838,"depth":4020,"text":70906},"Частина 2: Відкладене виконання (defer)",{"id":68844,"depth":4020,"text":70908},"defer: стек відкладених викликів",{"id":70678,"depth":4014,"text":70679},"Повний академічний курс системи типів Go: змінні, тіньове перекриття, числові типи та wrap-around, константи iota, форматування fmt, операції та складені присвоєння, керуючі конструкції, функції, замикання, покажчики, make vs new, стек\u002Fкупа та Escape Analysis, структури з вирівнюванням, композиція, анонімні структури, методи на будь-яких типах, зрізи з growslice та двовимірні зрізи, мапи hmap\u002Fbmap, помилки error та defer.","md",null,{},{"title":3522,"description":70910},"GTnv8ToWkx21AGvpA5FRdQqHfqsigygj8ShNpJ1XyDY",[70917,70919],{"title":3518,"path":3519,"stem":3520,"description":70918,"children":-1},"Фундаментальні засади клієнт-серверної парадигми, багаторівневі моделі N-Tier, гетерогенність клієнтських платформ, мережева модель OSI\u002FTCP-IP та інженерний аналіз платформи Go для побудови високонавантажених сервісів.",{"title":3536,"path":3537,"stem":3538,"description":70920,"children":-1},"Історія розвитку вебтехнологій від статичних сторінок до мікросервісів, архітектура клієнт-сервер та багатошарова побудова застосунків",1788069910451]