[{"data":1,"prerenderedAt":367},["ShallowReactive",2],{"content:\u002F04-advanced\u002Fresources":3},{"title":4,"description":5,"path":6,"body":7},"Дополнительные материалы","Русскоязычные материалы для углубления после продвинутых тем: Хабр, доклады и видео, где можно разобрать generics, reflect, unsafe, память, GC и Go-style ООП в привычном контексте.","\u002F04-advanced\u002Fresources",{"type":8,"value":9,"toc":358},"minimark",[10,14,17,22,103,107,202,205,209,258,262,304,308],[11,12,4],"h1",{"id":13},"дополнительные-материалы",[15,16,5],"p",{},[18,19,21],"h2",{"id":20},"дженерики-и-рефлексия","Дженерики и рефлексия",[23,24,25,55,63,71,88],"ul",{},[26,27,28,35,36,40,41,40,44,40,47,50,51,54],"li",{},[29,30,34],"a",{"href":31,"rel":32},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=PXsojiyWOXA",[33],"nofollow","Пробуем дженерики Go на практике | Николай Тузов, YouTube"," — практический разбор ",[37,38,39],"code",{},"constraints",", ",[37,42,43],{},"comparable",[37,45,46],{},"Map",[37,48,49],{},"Filter"," и ",[37,52,53],{},"Reduce",".",[26,56,57,62],{},[29,58,61],{"href":59,"rel":60},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fskillfactory\u002Farticles\u002F657853\u002F",[33],"Дженерики в Go: подробности из блога разработчиков | Хабр \u002F SkillFactory"," — русскоязычный перевод ключевых идей Go 1.18.",[26,64,65,70],{},[29,66,69],{"href":67,"rel":68},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F942634\u002F",[33],"Generic-интерфейсы в Go: просто, но сложно | Хабр"," — продвинутый материал про параметризованные интерфейсы и ограничения дизайна.",[26,72,73,78,79,40,82,50,85,54],{},[29,74,77],{"href":75,"rel":76},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F415171\u002F",[33],"Законы рефлексии в Go | Хабр"," — русская версия классической статьи Роба Пайка про ",[37,80,81],{},"Type",[37,83,84],{},"Value",[37,86,87],{},"interface{}",[26,89,90,95,96,99,100,54],{},[29,91,94],{"href":92,"rel":93},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fotus\u002Farticles\u002F913690\u002F",[33],"Как устроен reflect.Value и что происходит, когда вы вызываете .Field(i) | Хабр \u002F OTUS"," — разбор внутренностей ",[37,97,98],{},"reflect.Value",", флагов и связи с ",[37,101,102],{},"unsafe.Pointer",[18,104,106],{"id":105},"пакет-unsafe","Пакет unsafe",[23,108,109,132,140,161,172,182,194],{},[26,110,111,116,117,40,119,40,122,40,125,40,128,131],{},[29,112,115],{"href":113,"rel":114},"https:\u002F\u002Fpkg.go.dev\u002Funsafe",[33],"Package unsafe | официальная документация Go"," — источник истины по допустимым паттернам ",[37,118,102],{},[37,120,121],{},"uintptr",[37,123,124],{},"Add",[37,126,127],{},"String",[37,129,130],{},"Slice"," и функциям layout.",[26,133,134,139],{},[29,135,138],{"href":136,"rel":137},"https:\u002F\u002Fpkg.go.dev\u002Funsafe#Pointer",[33],"unsafe.Pointer rules | Go package docs"," — отдельно перечитать перед любым production-кодом с pointer arithmetic.",[26,141,142,147,148,40,150,40,152,40,155,40,158,54],{},[29,143,146],{"href":144,"rel":145},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fotus\u002Farticles\u002F862854\u002F",[33],"Обзор пакета unsafe: как обходить ограничения Go | Хабр \u002F OTUS"," — введение в ",[37,149,102],{},[37,151,121],{},[37,153,154],{},"Sizeof",[37,156,157],{},"Alignof",[37,159,160],{},"Offsetof",[26,162,163,168,169,54],{},[29,164,167],{"href":165,"rel":166},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F1006044\u002F",[33],"Черная магия unsafe в Go: практические примеры и ошибки использования | Хабр"," — прикладные примеры и типичные риски при использовании ",[37,170,171],{},"unsafe",[26,173,174,179,180,54],{},[29,175,178],{"href":176,"rel":177},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fvk\u002Farticles\u002F776766\u002F",[33],"Потрошим Golang: как устроена память | Хабр \u002F VK Cloud"," — наглядное вскрытие интерфейсов, слайсов, map и памяти через ",[37,181,171],{},[26,183,184,189,190,193],{},[29,185,188],{"href":186,"rel":187},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F926732\u002F",[33],"Большой разбор Строк Go | Хабр"," — полезный кейс про строки, ",[37,191,192],{},"[]byte",", runtime-представление и zero-copy-трюки.",[26,195,196,201],{},[29,197,200],{"href":198,"rel":199},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F325468\u002F",[33],"Как не наступать на грабли в Go | Хабр"," — старый, но полезный материал про указатели, слайсы, интерфейсы и опасные интуитивные ошибки.",[15,203,204],{},"После чтения unsafe полезно сразу вернуться к аллокатору и GC: большинство ошибок там не про синтаксис, а про lifetime, ownership, escape analysis и то, какие ссылки видит сборщик мусора.",[18,206,208],{"id":207},"аллокатор-памяти","Аллокатор памяти",[23,210,211,222,230,238,246],{},[26,212,213,218,219,54],{},[29,214,217],{"href":215,"rel":216},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Ftimeweb\u002Farticles\u002F1000232\u002F",[33],"Выделение памяти в Go | Хабр \u002F Timeweb"," — большой разбор allocator\u002Fruntime: арены, страницы, маленькие объекты и ",[37,220,221],{},"mallocgc",[26,223,224,229],{},[29,225,228],{"href":226,"rel":227},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F496846\u002F",[33],"Языковая механика стеков и указателей | Хабр"," — база про стек, указатели и семантику значений.",[26,231,232,237],{},[29,233,236],{"href":234,"rel":235},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F497994\u002F",[33],"Языковая механика escape analysis | Хабр"," — почему значения уходят в кучу и как это увидеть в выводе компилятора.",[26,239,240,245],{},[29,241,244],{"href":242,"rel":243},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F511176\u002F",[33],"Языковая механика профилирования памяти | Хабр"," — поиск неожиданных аллокаций через compiler reports и profiling.",[26,247,248,253,254,257],{},[29,249,252],{"href":250,"rel":251},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F778938\u002F",[33],"Визуализация результатов escape-анализа в VS Code | Хабр"," — практический материал про ",[37,255,256],{},"go build -gcflags"," и удобное чтение результатов.",[18,259,261],{"id":260},"сборщик-мусора-gc","Сборщик мусора (GC)",[23,263,264,272,280,288,296],{},[26,265,266,271],{},[29,267,270],{"href":268,"rel":269},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_w96fJxDeQQ",[33],"Сборщик мусора в Go за 15 минут | vanyaio, YouTube"," — быстрый русскоязычный вход в устройство GC.",[26,273,274,279],{},[29,275,278],{"href":276,"rel":277},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Favito\u002Farticles\u002F753244\u002F",[33],"Go's Garbage Collection: как работает и почему это важно знать | Хабр \u002F Avito"," — хороший прикладной разбор mark-and-sweep, latency и оптимизаций.",[26,281,282,287],{},[29,283,286],{"href":284,"rel":285},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F742402\u002F",[33],"Оптимизация памяти и управление сборщиком мусора в Go: GOGC и GOMEMLIMIT | Хабр"," — практичный материал про настройки GC в контейнерах и OOM.",[26,289,290,295],{},[29,291,294],{"href":292,"rel":293},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F948864\u002F",[33],"Сборщик мусора в Go: GC Traces | Хабр"," — как смотреть GC trace и связывать аллокации с производительностью.",[26,297,298,303],{},[29,299,302],{"href":300,"rel":301},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F953426\u002F",[33],"Сборщик мусора в Go: управление скоростью GC | Хабр"," — про pacing, частоту циклов GC и баланс CPU\u002Fпамяти.",[18,305,307],{"id":306},"ооп-в-go","ООП в Go",[23,309,310,322,330,342,350],{},[26,311,312,317,318,321],{},[29,313,316],{"href":314,"rel":315},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F348852\u002F",[33],"Принцип SOLID в языке Go | Хабр"," — русский перевод ",[37,319,320],{},"SOLID Go Design"," Дейва Чейни; хорошо ложится в тему архитектурного Go.",[26,323,324,329],{},[29,325,328],{"href":326,"rel":327},"https:\u002F\u002Fhabr.com\u002Fru\u002Fcompanies\u002Fotus\u002Farticles\u002F786314\u002F",[33],"SOLID и DRY в Go | Хабр \u002F OTUS"," — более современный русскоязычный разбор принципов без переноса классовой модели.",[26,331,332,337,338,341],{},[29,333,336],{"href":334,"rel":335},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F856272\u002F",[33],"Погружение в интерфейсы Go | Хабр"," — подробный материал про интерфейсы, nil-интерфейсы, устройство ",[37,339,340],{},"iface"," и размещение интерфейсов.",[26,343,344,349],{},[29,345,348],{"href":346,"rel":347},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F450386\u002F",[33],"Интерфейсы как абстрактные типы данных в Go | Хабр"," — полезно для разговора о границах пакетов, абстракциях и ошибках проектирования.",[26,351,352,357],{},[29,353,356],{"href":354,"rel":355},"https:\u002F\u002Fhabr.com\u002Fru\u002Farticles\u002F225907\u002F",[33],"Является ли Go языком ООП? | Хабр"," — мостик для студентов с Java\u002FC#\u002FC++: почему в Go нет классов, но есть методы, композиция и полиморфизм.",{"title":359,"searchDepth":360,"depth":360,"links":361},"",2,[362,363,364,365,366],{"id":20,"depth":360,"text":21},{"id":105,"depth":360,"text":106},{"id":207,"depth":360,"text":208},{"id":260,"depth":360,"text":261},{"id":306,"depth":360,"text":307},1781022064113]