[{"data":1,"prerenderedAt":1353},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-errs-overview":442,"-hu-errs-overview-surround":1348},[4,45,60,81,112,129,146,173,197,213,242,280,357,373,385,404,430],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Kezdő lépések","i-lucide-rocket","\u002Fhu\u002Fgetting-started","hu\u002F1.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Bevezetés","\u002Fhu\u002Fgetting-started\u002Fintroduction","hu\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Laravelből érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-laravel","hu\u002F1.getting-started\u002F2.coming-from-laravel","i-lucide-arrow-right-left",{"title":21,"path":22,"stem":23,"icon":19},"Symfonyból érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-symfony","hu\u002F1.getting-started\u002F3.coming-from-symfony",{"title":25,"path":26,"stem":27,"icon":28},"Telepítés","\u002Fhu\u002Fgetting-started\u002Finstallation","hu\u002F1.getting-started\u002F4.installation","i-lucide-download",{"title":30,"path":31,"stem":32,"icon":33},"Az első modulod","\u002Fhu\u002Fgetting-started\u002Ffirst-module","hu\u002F1.getting-started\u002F5.first-module","i-lucide-package-plus",{"title":35,"path":36,"stem":37,"icon":38},"Projektstruktúra","\u002Fhu\u002Fgetting-started\u002Fproject-structure","hu\u002F1.getting-started\u002F6.project-structure","i-lucide-folder-tree",{"title":40,"path":41,"stem":42,"icon":43},"A shop mintaalkalmazás","\u002Fhu\u002Fgetting-started\u002Fsample-app","hu\u002F1.getting-started\u002F7.sample-app","i-lucide-shopping-cart",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"queue","i-lucide-layers","\u002Fhu\u002Fqueue","hu\u002F10.queue",[51,56],{"title":52,"path":53,"stem":54,"icon":55},"Áttekintés","\u002Fhu\u002Fqueue\u002Foverview","hu\u002F10.queue\u002F1.overview","i-lucide-list-ordered",{"title":57,"path":58,"stem":59,"icon":47},"Taskok","\u002Fhu\u002Fqueue\u002Ftasks","hu\u002F10.queue\u002F2.tasks",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":44},"events","i-lucide-workflow","\u002Fhu\u002Fevents","hu\u002F11.events",[66,71,76],{"title":67,"path":68,"stem":69,"icon":70},"Események","\u002Fhu\u002Fevents\u002Foverview","hu\u002F11.events\u002F1.overview","i-lucide-radio",{"title":72,"path":73,"stem":74,"icon":75},"Outbox","\u002Fhu\u002Fevents\u002Foutbox","hu\u002F11.events\u002F2.outbox","i-lucide-inbox",{"title":77,"path":78,"stem":79,"icon":80},"Ütemezés","\u002Fhu\u002Fevents\u002Fscheduler","hu\u002F11.events\u002F3.scheduler","i-lucide-calendar-clock",{"title":82,"icon":83,"path":84,"stem":85,"children":86,"page":44},"auth","i-lucide-shield-check","\u002Fhu\u002Fauth","hu\u002F12.auth",[87,92,97,102,107],{"title":88,"path":89,"stem":90,"icon":91},"Autentikáció","\u002Fhu\u002Fauth\u002Foverview","hu\u002F12.auth\u002F1.overview","i-lucide-key-round",{"title":93,"path":94,"stem":95,"icon":96},"RBAC","\u002Fhu\u002Fauth\u002Frbac","hu\u002F12.auth\u002F2.rbac","i-lucide-users",{"title":98,"path":99,"stem":100,"icon":101},"Policy-k","\u002Fhu\u002Fauth\u002Fpolicy","hu\u002F12.auth\u002F3.policy","i-lucide-gavel",{"title":103,"path":104,"stem":105,"icon":106},"Az auth önálló használata","\u002Fhu\u002Fauth\u002Fstandalone","hu\u002F12.auth\u002F4.standalone","i-lucide-plug",{"title":108,"path":109,"stem":110,"icon":111},"Social login goth-tal, önállóan","\u002Fhu\u002Fauth\u002Fsocial-standalone","hu\u002F12.auth\u002F5.social-standalone","i-lucide-log-in",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":44},"mail","i-lucide-mail","\u002Fhu\u002Fmail","hu\u002F13.mail",[118,121,125],{"title":52,"path":119,"stem":120,"icon":114},"\u002Fhu\u002Fmail\u002Foverview","hu\u002F13.mail\u002F1.overview",{"title":122,"path":123,"stem":124,"icon":114},"SMTP","\u002Fhu\u002Fmail\u002Fsmtp","hu\u002F13.mail\u002F2.smtp",{"title":126,"path":127,"stem":128,"icon":114},"MJML","\u002Fhu\u002Fmail\u002Fmjml","hu\u002F13.mail\u002F3.mjml",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":44},"notify","i-lucide-bell","\u002Fhu\u002Fnotify","hu\u002F14.notify",[135,138,142],{"title":52,"path":136,"stem":137,"icon":131},"\u002Fhu\u002Fnotify\u002Foverview","hu\u002F14.notify\u002F1.overview",{"title":139,"path":140,"stem":141,"icon":131},"Database csatorna","\u002Fhu\u002Fnotify\u002Fdatabase","hu\u002F14.notify\u002F2.database",{"title":143,"path":144,"stem":145,"icon":131},"Broadcast csatorna","\u002Fhu\u002Fnotify\u002Fbroadcast","hu\u002F14.notify\u002F3.broadcast",{"title":147,"icon":148,"path":149,"stem":150,"children":151,"page":44},"storage","i-lucide-hard-drive","\u002Fhu\u002Fstorage","hu\u002F15.storage",[152,155,159,163,168],{"title":52,"path":153,"stem":154,"icon":148},"\u002Fhu\u002Fstorage\u002Foverview","hu\u002F15.storage\u002F1.overview",{"title":156,"path":157,"stem":158},"Disk API","\u002Fhu\u002Fstorage\u002Fdisk-api","hu\u002F15.storage\u002F2.disk-api",{"title":160,"path":161,"stem":162,"icon":148},"Memória és helyi lemez","\u002Fhu\u002Fstorage\u002Flocal","hu\u002F15.storage\u002F3.local",{"title":164,"path":165,"stem":166,"icon":167},"S3","\u002Fhu\u002Fstorage\u002Fs3","hu\u002F15.storage\u002F4.s3","i-lucide-cloud",{"title":169,"path":170,"stem":171,"icon":172},"Tesztelés","\u002Fhu\u002Fstorage\u002Ftesting","hu\u002F15.storage\u002F5.testing","i-lucide-flask-conical",{"title":174,"icon":175,"path":176,"stem":177,"children":178,"page":44},"telemetry","i-lucide-activity","\u002Fhu\u002Ftelemetry","hu\u002F16.telemetry",[179,182,187,192],{"title":52,"path":180,"stem":181,"icon":175},"\u002Fhu\u002Ftelemetry\u002Foverview","hu\u002F16.telemetry\u002F1.overview",{"title":183,"path":184,"stem":185,"icon":186},"Logolás","\u002Fhu\u002Ftelemetry\u002Flogging","hu\u002F16.telemetry\u002F2.logging","i-lucide-scroll-text",{"title":188,"path":189,"stem":190,"icon":191},"OpenTelemetry","\u002Fhu\u002Ftelemetry\u002Fopentelemetry","hu\u002F16.telemetry\u002F3.opentelemetry","i-lucide-radar",{"title":193,"path":194,"stem":195,"icon":196},"Sentry","\u002Fhu\u002Ftelemetry\u002Fsentry","hu\u002F16.telemetry\u002F4.sentry","i-lucide-bug",{"title":198,"icon":199,"path":200,"stem":201,"children":202,"page":44},"Referencia","i-lucide-book-open","\u002Fhu\u002Freference","hu\u002F17.reference",[203,208],{"title":204,"path":205,"stem":206,"icon":207},"Konfiguráció","\u002Fhu\u002Freference\u002Fconfiguration","hu\u002F17.reference\u002F1.configuration","i-lucide-settings",{"title":209,"path":210,"stem":211,"icon":212},"Külső függőségek","\u002Fhu\u002Freference\u002Fdependencies","hu\u002F17.reference\u002F2.dependencies","i-lucide-package",{"title":214,"icon":215,"path":216,"stem":217,"children":218,"page":44},"Koncepciók","i-lucide-lightbulb","\u002Fhu\u002Fconcepts","hu\u002F2.concepts",[219,223,228,232,237],{"title":220,"path":221,"stem":222,"icon":47},"Architektúra","\u002Fhu\u002Fconcepts\u002Farchitecture","hu\u002F2.concepts\u002F1.architecture",{"title":224,"path":225,"stem":226,"icon":227},"Hibamodell","\u002Fhu\u002Fconcepts\u002Ferror-model","hu\u002F2.concepts\u002F2.error-model","i-lucide-shield-alert",{"title":204,"path":229,"stem":230,"icon":231},"\u002Fhu\u002Fconcepts\u002Fconfiguration","hu\u002F2.concepts\u002F3.configuration","i-lucide-settings-2",{"title":233,"path":234,"stem":235,"icon":236},"Codegen pipeline","\u002Fhu\u002Fconcepts\u002Fcodegen-pipeline","hu\u002F2.concepts\u002F4.codegen-pipeline","i-lucide-file-json",{"title":238,"path":239,"stem":240,"icon":241},"Design patternek","\u002Fhu\u002Fconcepts\u002Fdesign-patterns","hu\u002F2.concepts\u002F5.design-patterns","i-lucide-puzzle",{"title":243,"icon":244,"path":245,"stem":246,"children":247,"page":44},"A kit","i-lucide-box","\u002Fhu\u002Fkit","hu\u002F3.kit",[248,252,257,262,267,271,276],{"title":249,"path":250,"stem":251,"icon":244},"A kit áttekintése","\u002Fhu\u002Fkit\u002Foverview","hu\u002F3.kit\u002F1.overview",{"title":253,"path":254,"stem":255,"icon":256},"Alkalmazás-életciklus","\u002Fhu\u002Fkit\u002Fapp","hu\u002F3.kit\u002F2.app","i-lucide-power",{"title":258,"path":259,"stem":260,"icon":261},"Szerver","\u002Fhu\u002Fkit\u002Fserver","hu\u002F3.kit\u002F3.server","i-lucide-server",{"title":263,"path":264,"stem":265,"icon":266},"Worker","\u002Fhu\u002Fkit\u002Fworker","hu\u002F3.kit\u002F4.worker","i-lucide-cog",{"title":268,"path":269,"stem":270,"icon":70},"Realtime","\u002Fhu\u002Fkit\u002Frealtime","hu\u002F3.kit\u002F5.realtime",{"title":272,"path":273,"stem":274,"icon":275},"Migrációk","\u002Fhu\u002Fkit\u002Fmigrations","hu\u002F3.kit\u002F6.migrations","i-lucide-file-stack",{"title":277,"path":278,"stem":279,"icon":111},"Social login","\u002Fhu\u002Fkit\u002Fsocial-login","hu\u002F3.kit\u002F7.social-login",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":44},"CLI referencia","i-lucide-terminal","\u002Fhu\u002Fcli","hu\u002F4.cli",[286,289,294,299,304,309,314,319,324,329,334,338,343,348,352],{"title":52,"path":287,"stem":288,"icon":282},"\u002Fhu\u002Fcli\u002Foverview","hu\u002F4.cli\u002F1.overview",{"title":290,"path":291,"stem":292,"icon":293},"add db","\u002Fhu\u002Fcli\u002Fadd-db","hu\u002F4.cli\u002F10.add-db","i-lucide-database-zap",{"title":295,"path":296,"stem":297,"icon":298},"add compose \u002F add docker","\u002Fhu\u002Fcli\u002Fadd-compose","hu\u002F4.cli\u002F11.add-compose","i-lucide-container",{"title":300,"path":301,"stem":302,"icon":303},"add mail","\u002Fhu\u002Fcli\u002Fadd-mail","hu\u002F4.cli\u002F12.add-mail","i-lucide-mail-plus",{"title":305,"path":306,"stem":307,"icon":308},"add notification","\u002Fhu\u002Fcli\u002Fadd-notification","hu\u002F4.cli\u002F13.add-notification","i-lucide-bell-plus",{"title":310,"path":311,"stem":312,"icon":313},"add realtime","\u002Fhu\u002Fcli\u002Fadd-realtime","hu\u002F4.cli\u002F14.add-realtime","i-lucide-radio-tower",{"title":315,"path":316,"stem":317,"icon":318},"add seeder","\u002Fhu\u002Fcli\u002Fadd-seeder","hu\u002F4.cli\u002F15.add-seeder","i-lucide-sprout",{"title":320,"path":321,"stem":322,"icon":323},"new project","\u002Fhu\u002Fcli\u002Fnew-project","hu\u002F4.cli\u002F2.new-project","i-lucide-folder-plus",{"title":325,"path":326,"stem":327,"icon":328},"new module","\u002Fhu\u002Fcli\u002Fnew-module","hu\u002F4.cli\u002F3.new-module","i-lucide-blocks",{"title":330,"path":331,"stem":332,"icon":333},"add surface","\u002Fhu\u002Fcli\u002Fadd-surface","hu\u002F4.cli\u002F4.add-surface","i-lucide-layers-2",{"title":335,"path":336,"stem":337,"icon":244},"add core","\u002Fhu\u002Fcli\u002Fadd-core","hu\u002F4.cli\u002F5.add-core",{"title":339,"path":340,"stem":341,"icon":342},"add handler","\u002Fhu\u002Fcli\u002Fadd-handler","hu\u002F4.cli\u002F6.add-handler","i-lucide-webhook",{"title":344,"path":345,"stem":346,"icon":347},"new migration","\u002Fhu\u002Fcli\u002Fnew-migration","hu\u002F4.cli\u002F7.new-migration","i-lucide-file-plus",{"title":349,"path":350,"stem":351,"icon":266},"worker generátorok","\u002Fhu\u002Fcli\u002Fworker-generators","hu\u002F4.cli\u002F8.worker-generators",{"title":353,"path":354,"stem":355,"icon":356},"upgrade templates","\u002Fhu\u002Fcli\u002Fupgrade-templates","hu\u002F4.cli\u002F9.upgrade-templates","i-lucide-refresh-cw",{"title":358,"icon":227,"path":359,"stem":360,"children":361,"page":44},"errs","\u002Fhu\u002Ferrs","hu\u002F5.errs",[362,365,369],{"title":52,"path":363,"stem":364,"icon":227},"\u002Fhu\u002Ferrs\u002Foverview","hu\u002F5.errs\u002F1.overview",{"title":366,"path":367,"stem":368},"API","\u002Fhu\u002Ferrs\u002Fapi","hu\u002F5.errs\u002F2.api",{"title":370,"path":371,"stem":372,"icon":227},"Integráció","\u002Fhu\u002Ferrs\u002Fintegration","hu\u002F5.errs\u002F3.integration",{"title":374,"icon":231,"path":375,"stem":376,"children":377,"page":44},"envconf","\u002Fhu\u002Fenvconf","hu\u002F6.envconf",[378,381],{"title":52,"path":379,"stem":380,"icon":231},"\u002Fhu\u002Fenvconf\u002Foverview","hu\u002F6.envconf\u002F1.overview",{"title":382,"path":383,"stem":384},"Receptek","\u002Fhu\u002Fenvconf\u002Frecipes","hu\u002F6.envconf\u002F2.recipes",{"title":386,"icon":387,"path":388,"stem":389,"children":390,"page":44},"httperr","i-lucide-globe","\u002Fhu\u002Fhttperr","hu\u002F7.httperr",[391,394,399],{"title":52,"path":392,"stem":393,"icon":387},"\u002Fhu\u002Fhttperr\u002Foverview","hu\u002F7.httperr\u002F1.overview",{"title":395,"path":396,"stem":397,"icon":398},"Hibaválaszok","\u002Fhu\u002Fhttperr\u002Ferror-responses","hu\u002F7.httperr\u002F2.error-responses","i-lucide-octagon-alert",{"title":400,"path":401,"stem":402,"icon":403},"Validáció","\u002Fhu\u002Fhttperr\u002Fvalidation","hu\u002F7.httperr\u002F3.validation","i-lucide-badge-check",{"title":405,"icon":406,"path":407,"stem":408,"children":409,"page":44},"dbx","i-lucide-database","\u002Fhu\u002Fdbx","hu\u002F8.dbx",[410,413,417,421,426],{"title":52,"path":411,"stem":412,"icon":406},"\u002Fhu\u002Fdbx\u002Foverview","hu\u002F8.dbx\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":106},"pgx","\u002Fhu\u002Fdbx\u002Fpg","hu\u002F8.dbx\u002F2.pg",{"title":418,"path":419,"stem":420,"icon":47},"bun","\u002Fhu\u002Fdbx\u002Fbunx","hu\u002F8.dbx\u002F3.bunx",{"title":422,"path":423,"stem":424,"icon":425},"Tranzakciók","\u002Fhu\u002Fdbx\u002Ftransactions","hu\u002F8.dbx\u002F4.transactions","i-lucide-git-merge",{"title":427,"path":428,"stem":429,"icon":318},"Seederek","\u002Fhu\u002Fdbx\u002Fseed","hu\u002F8.dbx\u002F5.seed",{"title":431,"icon":55,"path":432,"stem":433,"children":434,"page":44},"paginate","\u002Fhu\u002Fpaginate","hu\u002F9.paginate",[435,438],{"title":52,"path":436,"stem":437,"icon":55},"\u002Fhu\u002Fpaginate\u002Foverview","hu\u002F9.paginate\u002F1.overview",{"title":439,"path":440,"stem":441,"icon":19},"Cursor-lapozás","\u002Fhu\u002Fpaginate\u002Fcursor","hu\u002F9.paginate\u002F2.cursor",{"id":443,"title":52,"body":444,"description":1341,"extension":1342,"links":1343,"meta":1344,"navigation":1345,"path":363,"seo":1346,"stem":364,"__hash__":1347},"docs_hu\u002Fhu\u002F5.errs\u002F1.overview.md",{"type":445,"value":446,"toc":1334},"minimark",[447,477,481,520,540,544,550,575,604,608,624,676,688,692,695,1289,1293,1330],[448,449,450,451,454,455,458,459,463,464,467,468,473,474,476],"p",{},"Az ",[452,453,358],"code",{}," önálló, csak a standard libraryre épülő Go modul (",[452,456,457],{},"github.com\u002Fgp-system\u002Ferrs","): olyan hibák, amelyek stack trace-t, gépi olvasású kódot és kliensbiztos publikus üzenetet hordoznak, a szokásos becsomagolt belső üzenet mellett. ",[460,461,462],"strong",{},"Nulla harmadik féltől származó függősége"," van, bármilyen Go programban működik (CLI-ben, Lambdában, sima ",[452,465,466],{},"net\u002Fhttp"," service-ben), és semmilyen más gp-system modulra nincs szüksége ahhoz, hogy hasznos legyen. A gpsystem kit pontosan egy okból használja: ez a hibatípus, amit minden service, repository és handler épít és wrappel egy generált projektben, és ezt a típust rendereli HTTP-re a ",[469,470,471],"a",{"href":392},[452,472,386],{},". Lásd a ",[469,475,224],{"href":225}," oldalt, hogy a kettő hogyan illeszkedik egy teljes kérésen keresztül.",[478,479,25],"h2",{"id":480},"telepítés",[482,483,488],"pre",{"className":484,"code":485,"language":486,"meta":487,"style":487},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com\u002Fgp-system\u002Ferrs@v0.1.0 # a kit is ezt a taget használja\ngo get github.com\u002Fgp-system\u002Ferrs@latest\n","sh","",[452,489,490,510],{"__ignoreMap":487},[491,492,495,499,503,506],"span",{"class":493,"line":494},"line",1,[491,496,498],{"class":497},"sBMFI","go",[491,500,502],{"class":501},"sfazB"," get",[491,504,505],{"class":501}," github.com\u002Fgp-system\u002Ferrs@v0.1.0",[491,507,509],{"class":508},"sHwdD"," # a kit is ezt a taget használja\n",[491,511,513,515,517],{"class":493,"line":512},2,[491,514,498],{"class":497},[491,516,502],{"class":501},[491,518,519],{"class":501}," github.com\u002Fgp-system\u002Ferrs@latest\n",[448,521,522,523,525,526,529,530,529,533,529,536,539],{},"Go 1.25+, és semmi más: az ",[452,524,358],{}," kizárólag a standard libraryt importálja (",[452,527,528],{},"errors",", ",[452,531,532],{},"fmt",[452,534,535],{},"runtime",[452,537,538],{},"log\u002Fslog","). A projektbe húzása így egyetlen tranzitív függőséget sem hoz be.",[478,541,543],{"id":542},"miért-két-üzenet","Miért két üzenet",[448,545,546,547,549],{},"Minden hiba, amit az ",[452,548,358],{}," épít, két szöveget hordoz, szándékosan szétválasztva:",[551,552,553,565],"ul",{},[554,555,556,557,560,561,564],"li",{},"a ",[460,558,559],{},"belső üzenet"," (",[452,562,563],{},"Error()","): a teljes részlet, neked szól. Tartalmazza a wrap-láncot, így egy hibázó query, egy termékazonosító, egy downstream timeout mind itt jelenik meg.",[554,566,556,567,570,571,574],{},[460,568,569],{},"publikus üzenet"," (a ",[452,572,573],{},"Public"," attribútummal állítható be): az egyetlen szöveg, amit a kliens valaha láthat. Ha nincs beállítva, egyszerűen nincs mit kiszivárogtatni; semmi nem esik vissza a belső üzenetre.",[448,576,577,578,581,582,586,587,589,590,593,594,596,597,600,601,603],{},"A kettő szétválasztása azt jelenti, hogy egy elszabadult, válaszba írt ",[452,579,580],{},"err.Error()"," sosem szivárogtathat ki belső részletet: bármi is rendereli a hibát (az alábbi ",[469,583,585],{"href":584},"\u002Fhu\u002Ferrs\u002Fintegration#minim%C3%A1lis-net-http-mapper","minimális mapper",", vagy a ",[452,588,386],{},") az ",[452,591,592],{},"errs.PublicOf","-ot olvassa, soha nem az ",[452,595,563],{},"-t. A státuszkód ugyanígy utazik: a hiba definiálásának pontján van beállítva, nem egy handlerbeli ",[452,598,599],{},"if","-ágban döntik el utólag. Egy ",[452,602,358],{}," hiba ebben az értelemben önmagában is egy kis API-kontraktus: kód, publikus üzenet és státusz együtt írja le egy hibamódot, függetlenül attól, hogy végül mi rendereli.",[478,605,607],{"id":606},"mi-kell-még-a-rendereléshez","Mi kell még a rendereléshez",[448,609,450,610,612,613,616,617,616,620,623],{},[452,611,358],{}," felépíti és hordozza a hibát. Nem tudja, hogy néz ki egy HTTP-válasz, egy JSON body vagy egy logsor: a renderelés külön felelősség, a fölötte lévő rétegé, ami az ",[452,614,615],{},"errs.CodeOf","\u002F",[452,618,619],{},"PublicOf",[452,621,622],{},"StatusOf","-ot byte-okká alakítja a dróton.",[625,626,627,640],"table",{},[628,629,630],"thead",{},[631,632,633,637],"tr",{},[634,635,636],"th",{},"Réteg",[634,638,639],{},"Felelősség",[641,642,643,653,668],"tbody",{},[631,644,645,650],{},[646,647,648],"td",{},[452,649,358],{},[646,651,652],{},"felépíti és wrappeli a hibát: stack, kód, publikus üzenet, státusz",[631,654,655,661],{},[646,656,657],{},[469,658,659],{"href":392},[452,660,386],{},[646,662,663,664,667],{},"RFC 9457 ",[452,665,666],{},"problem+json"," HTTP-válasszá rendereli",[631,669,670,673],{},[646,671,672],{},"a saját kódod",[646,674,675],{},"bármi más: egy gRPC status, egy CLI exit code, egy queue-üzenet boríték",[448,677,678,679,681,682,684,685,687],{},"Ha nem HTTP-n vagy, vagy nem akarod az extra függőséget, az ",[469,680,370],{"href":584}," oldal mutat egy elég kicsi mappert ahhoz, hogy magad megírd, csak ",[452,683,358],{},"-szel, ",[452,686,386],{}," nélkül.",[478,689,691],{"id":690},"önálló-példa","Önálló példa",[448,693,694],{},"Sima Go program, HTTP és kit nélkül:",[482,696,700],{"className":697,"code":698,"filename":699,"language":498,"meta":487,"style":487},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","package main\n\nimport (\n    \"errors\"\n    \"fmt\"\n    \"net\u002Fhttp\"\n\n    \"github.com\u002Fgp-system\u002Ferrs\"\n)\n\nvar ErrOutOfStock = errs.Define(\"out_of_stock\",\n    errs.Public(\"A termék elfogyott.\"),\n    errs.Status(http.StatusConflict))\n\nfunc decrementStock(productID string, qty int) error {\n    if qty > 3 {\n        return ErrOutOfStock.New(\"decrement stock\",\n            errs.With(\"product_id\", productID))\n    }\n    return nil\n}\n\nfunc placeOrder(productID string) error {\n    if err := decrementStock(productID, 5); err != nil {\n        if errors.Is(err, ErrOutOfStock) {\n            return err \u002F\u002F várt hiba: megy tovább változatlanul\n        }\n        return errs.Wrap(err, \"place order\")\n    }\n    return nil\n}\n\nfunc main() {\n    err := placeOrder(\"prod_42\")\n    fmt.Println(err)                \u002F\u002F belső üzenet, neked\n    fmt.Println(errs.PublicOf(err)) \u002F\u002F \"A termék elfogyott.\", kliensnek biztonságos\n    fmt.Println(errs.StatusOf(err)) \u002F\u002F 409\n    fmt.Println(errs.CodeOf(err))   \u002F\u002F \"out_of_stock\"\n}\n","main.go",[452,701,702,711,717,727,738,747,756,761,770,776,781,818,840,863,868,905,923,948,975,981,990,996,1001,1021,1056,1083,1094,1100,1128,1133,1140,1145,1150,1163,1184,1204,1231,1257,1284],{"__ignoreMap":487},[491,703,704,708],{"class":493,"line":494},[491,705,707],{"class":706},"sMK4o","package",[491,709,710],{"class":497}," main\n",[491,712,713],{"class":493,"line":512},[491,714,716],{"emptyLinePlaceholder":715},true,"\n",[491,718,720,724],{"class":493,"line":719},3,[491,721,723],{"class":722},"s7zQu","import",[491,725,726],{"class":706}," (\n",[491,728,730,733,735],{"class":493,"line":729},4,[491,731,732],{"class":706},"    \"",[491,734,528],{"class":497},[491,736,737],{"class":706},"\"\n",[491,739,741,743,745],{"class":493,"line":740},5,[491,742,732],{"class":706},[491,744,532],{"class":497},[491,746,737],{"class":706},[491,748,750,752,754],{"class":493,"line":749},6,[491,751,732],{"class":706},[491,753,466],{"class":497},[491,755,737],{"class":706},[491,757,759],{"class":493,"line":758},7,[491,760,716],{"emptyLinePlaceholder":715},[491,762,764,766,768],{"class":493,"line":763},8,[491,765,732],{"class":706},[491,767,457],{"class":497},[491,769,737],{"class":706},[491,771,773],{"class":493,"line":772},9,[491,774,775],{"class":706},")\n",[491,777,779],{"class":493,"line":778},10,[491,780,716],{"emptyLinePlaceholder":715},[491,782,784,787,791,794,797,800,804,807,810,813,815],{"class":493,"line":783},11,[491,785,786],{"class":706},"var",[491,788,790],{"class":789},"sTEyZ"," ErrOutOfStock ",[491,792,793],{"class":706},"=",[491,795,796],{"class":789}," errs",[491,798,799],{"class":706},".",[491,801,803],{"class":802},"s2Zo4","Define",[491,805,806],{"class":706},"(",[491,808,809],{"class":706},"\"",[491,811,812],{"class":501},"out_of_stock",[491,814,809],{"class":706},[491,816,817],{"class":706},",\n",[491,819,821,824,826,828,830,832,835,837],{"class":493,"line":820},12,[491,822,823],{"class":789},"    errs",[491,825,799],{"class":706},[491,827,573],{"class":802},[491,829,806],{"class":706},[491,831,809],{"class":706},[491,833,834],{"class":501},"A termék elfogyott.",[491,836,809],{"class":706},[491,838,839],{"class":706},"),\n",[491,841,843,845,847,850,852,855,857,860],{"class":493,"line":842},13,[491,844,823],{"class":789},[491,846,799],{"class":706},[491,848,849],{"class":802},"Status",[491,851,806],{"class":706},[491,853,854],{"class":789},"http",[491,856,799],{"class":706},[491,858,859],{"class":789},"StatusConflict",[491,861,862],{"class":706},"))\n",[491,864,866],{"class":493,"line":865},14,[491,867,716],{"emptyLinePlaceholder":715},[491,869,871,874,877,879,883,887,890,893,896,899,902],{"class":493,"line":870},15,[491,872,873],{"class":706},"func",[491,875,876],{"class":802}," decrementStock",[491,878,806],{"class":706},[491,880,882],{"class":881},"sHdIc","productID",[491,884,886],{"class":885},"spNyl"," string",[491,888,889],{"class":706},",",[491,891,892],{"class":881}," qty",[491,894,895],{"class":885}," int",[491,897,898],{"class":706},")",[491,900,901],{"class":885}," error",[491,903,904],{"class":706}," {\n",[491,906,908,911,914,917,921],{"class":493,"line":907},16,[491,909,910],{"class":722},"    if",[491,912,913],{"class":789}," qty ",[491,915,916],{"class":706},">",[491,918,920],{"class":919},"sbssI"," 3",[491,922,904],{"class":706},[491,924,926,929,932,934,937,939,941,944,946],{"class":493,"line":925},17,[491,927,928],{"class":722},"        return",[491,930,931],{"class":789}," ErrOutOfStock",[491,933,799],{"class":706},[491,935,936],{"class":802},"New",[491,938,806],{"class":706},[491,940,809],{"class":706},[491,942,943],{"class":501},"decrement stock",[491,945,809],{"class":706},[491,947,817],{"class":706},[491,949,951,954,956,959,961,963,966,968,970,973],{"class":493,"line":950},18,[491,952,953],{"class":789},"            errs",[491,955,799],{"class":706},[491,957,958],{"class":802},"With",[491,960,806],{"class":706},[491,962,809],{"class":706},[491,964,965],{"class":501},"product_id",[491,967,809],{"class":706},[491,969,889],{"class":706},[491,971,972],{"class":789}," productID",[491,974,862],{"class":706},[491,976,978],{"class":493,"line":977},19,[491,979,980],{"class":706},"    }\n",[491,982,984,987],{"class":493,"line":983},20,[491,985,986],{"class":722},"    return",[491,988,989],{"class":706}," nil\n",[491,991,993],{"class":493,"line":992},21,[491,994,995],{"class":706},"}\n",[491,997,999],{"class":493,"line":998},22,[491,1000,716],{"emptyLinePlaceholder":715},[491,1002,1004,1006,1009,1011,1013,1015,1017,1019],{"class":493,"line":1003},23,[491,1005,873],{"class":706},[491,1007,1008],{"class":802}," placeOrder",[491,1010,806],{"class":706},[491,1012,882],{"class":881},[491,1014,886],{"class":885},[491,1016,898],{"class":706},[491,1018,901],{"class":885},[491,1020,904],{"class":706},[491,1022,1024,1026,1029,1032,1034,1036,1038,1040,1043,1046,1048,1051,1054],{"class":493,"line":1023},24,[491,1025,910],{"class":722},[491,1027,1028],{"class":789}," err ",[491,1030,1031],{"class":706},":=",[491,1033,876],{"class":802},[491,1035,806],{"class":706},[491,1037,882],{"class":789},[491,1039,889],{"class":706},[491,1041,1042],{"class":919}," 5",[491,1044,1045],{"class":706},");",[491,1047,1028],{"class":789},[491,1049,1050],{"class":706},"!=",[491,1052,1053],{"class":706}," nil",[491,1055,904],{"class":706},[491,1057,1059,1062,1065,1067,1070,1072,1075,1077,1079,1081],{"class":493,"line":1058},25,[491,1060,1061],{"class":722},"        if",[491,1063,1064],{"class":789}," errors",[491,1066,799],{"class":706},[491,1068,1069],{"class":802},"Is",[491,1071,806],{"class":706},[491,1073,1074],{"class":789},"err",[491,1076,889],{"class":706},[491,1078,931],{"class":789},[491,1080,898],{"class":706},[491,1082,904],{"class":706},[491,1084,1086,1089,1091],{"class":493,"line":1085},26,[491,1087,1088],{"class":722},"            return",[491,1090,1028],{"class":789},[491,1092,1093],{"class":508},"\u002F\u002F várt hiba: megy tovább változatlanul\n",[491,1095,1097],{"class":493,"line":1096},27,[491,1098,1099],{"class":706},"        }\n",[491,1101,1103,1105,1107,1109,1112,1114,1116,1118,1121,1124,1126],{"class":493,"line":1102},28,[491,1104,928],{"class":722},[491,1106,796],{"class":789},[491,1108,799],{"class":706},[491,1110,1111],{"class":802},"Wrap",[491,1113,806],{"class":706},[491,1115,1074],{"class":789},[491,1117,889],{"class":706},[491,1119,1120],{"class":706}," \"",[491,1122,1123],{"class":501},"place order",[491,1125,809],{"class":706},[491,1127,775],{"class":706},[491,1129,1131],{"class":493,"line":1130},29,[491,1132,980],{"class":706},[491,1134,1136,1138],{"class":493,"line":1135},30,[491,1137,986],{"class":722},[491,1139,989],{"class":706},[491,1141,1143],{"class":493,"line":1142},31,[491,1144,995],{"class":706},[491,1146,1148],{"class":493,"line":1147},32,[491,1149,716],{"emptyLinePlaceholder":715},[491,1151,1153,1155,1158,1161],{"class":493,"line":1152},33,[491,1154,873],{"class":706},[491,1156,1157],{"class":802}," main",[491,1159,1160],{"class":706},"()",[491,1162,904],{"class":706},[491,1164,1166,1169,1171,1173,1175,1177,1180,1182],{"class":493,"line":1165},34,[491,1167,1168],{"class":789},"    err ",[491,1170,1031],{"class":706},[491,1172,1008],{"class":802},[491,1174,806],{"class":706},[491,1176,809],{"class":706},[491,1178,1179],{"class":501},"prod_42",[491,1181,809],{"class":706},[491,1183,775],{"class":706},[491,1185,1187,1190,1192,1195,1197,1199,1201],{"class":493,"line":1186},35,[491,1188,1189],{"class":789},"    fmt",[491,1191,799],{"class":706},[491,1193,1194],{"class":802},"Println",[491,1196,806],{"class":706},[491,1198,1074],{"class":789},[491,1200,898],{"class":706},[491,1202,1203],{"class":508},"                \u002F\u002F belső üzenet, neked\n",[491,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1228],{"class":493,"line":1206},36,[491,1208,1189],{"class":789},[491,1210,799],{"class":706},[491,1212,1194],{"class":802},[491,1214,806],{"class":706},[491,1216,358],{"class":789},[491,1218,799],{"class":706},[491,1220,619],{"class":802},[491,1222,806],{"class":706},[491,1224,1074],{"class":789},[491,1226,1227],{"class":706},"))",[491,1229,1230],{"class":508}," \u002F\u002F \"A termék elfogyott.\", kliensnek biztonságos\n",[491,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254],{"class":493,"line":1233},37,[491,1235,1189],{"class":789},[491,1237,799],{"class":706},[491,1239,1194],{"class":802},[491,1241,806],{"class":706},[491,1243,358],{"class":789},[491,1245,799],{"class":706},[491,1247,622],{"class":802},[491,1249,806],{"class":706},[491,1251,1074],{"class":789},[491,1253,1227],{"class":706},[491,1255,1256],{"class":508}," \u002F\u002F 409\n",[491,1258,1260,1262,1264,1266,1268,1270,1272,1275,1277,1279,1281],{"class":493,"line":1259},38,[491,1261,1189],{"class":789},[491,1263,799],{"class":706},[491,1265,1194],{"class":802},[491,1267,806],{"class":706},[491,1269,358],{"class":789},[491,1271,799],{"class":706},[491,1273,1274],{"class":802},"CodeOf",[491,1276,806],{"class":706},[491,1278,1074],{"class":789},[491,1280,1227],{"class":706},[491,1282,1283],{"class":508},"   \u002F\u002F \"out_of_stock\"\n",[491,1285,1287],{"class":493,"line":1286},39,[491,1288,995],{"class":706},[478,1290,1292],{"id":1291},"kapcsolódó-oldalak","Kapcsolódó oldalak",[551,1294,1295,1308,1316,1325],{},[554,1296,1297,1300,1301,616,1303,616,1305,1307],{},[469,1298,1299],{"href":367},"errs: API",": a teljes ",[452,1302,936],{},[452,1304,1111],{},[452,1306,803],{},"\u002Fattribútumok\u002Faccessorok végigvezetés.",[554,1309,1310,1313,1314,687],{},[469,1311,1312],{"href":371},"errs: Integráció",": logolás, Sentry, és egy minimális HTTP mapper ",[452,1315,386],{},[554,1317,1318,1321,1322,1324],{},[469,1319,1320],{"href":392},"httperr: Áttekintés",": a modul, ami az ",[452,1323,358],{}," hibákat HTTP-re rendereli.",[554,1326,1327,1329],{},[469,1328,224],{"href":225},": a teljes pipeline, végigvezetve, egy kidolgozott példával.",[1331,1332,1333],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":487,"searchDepth":512,"depth":512,"links":1335},[1336,1337,1338,1339,1340],{"id":480,"depth":512,"text":25},{"id":542,"depth":512,"text":543},{"id":606,"depth":512,"text":607},{"id":690,"depth":512,"text":691},{"id":1291,"depth":512,"text":1292},"Strukturált Go hibák stackkel, kóddal és kliensbiztos üzenettel.","md",null,{},{"icon":227},{"title":52,"description":1341},"mhsYhvtfrSZqSBO46oNSYM8FN2cZ5UtM3etGNDmns5g",[1349,1351],{"title":353,"path":354,"stem":355,"description":1350,"icon":356,"children":-1},"A projekt codegen template-jeinek újraszinkronizálása a CLI beágyazott készletéből.",{"title":366,"path":367,"stem":368,"description":1352,"children":-1},"[object Object]",1785445882825]