[{"data":1,"prerenderedAt":1398},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-envconf-overview":442,"-hu-envconf-overview-surround":1393},[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":1386,"extension":1387,"links":1388,"meta":1389,"navigation":1390,"path":379,"seo":1391,"stem":380,"__hash__":1392},"docs_hu\u002Fhu\u002F6.envconf\u002F1.overview.md",{"type":445,"value":446,"toc":1378},"minimark",[447,491,495,534,544,548,645,670,781,794,872,876,888,966,995,999,1026,1061,1067,1071,1297,1323,1344,1348,1374],[448,449,450,451,454,455,458,459,462,463,472,473,480,481,483,484,487,488,490],"p",{},"Az ",[452,453,374],"code",{}," önálló Go modul (",[452,456,457],{},"github.com\u002Fgp-system\u002Fenvconf","): típusos konfiguráció, környezeti változókból egy Go structba betöltve, egyszer, a folyamat indulásakor, opcionális ",[452,460,461],{},".env"," fájllal a helyi fejlesztéshez. Két függősége van, a ",[464,465,469],"a",{"href":466,"rel":467},"https:\u002F\u002Fgithub.com\u002Fcaarlos0\u002Fenv",[468],"nofollow",[452,470,471],{},"caarlos0\u002Fenv"," (a struct-tag parser) és a ",[464,474,477],{"href":475,"rel":476},"https:\u002F\u002Fgithub.com\u002Fjoho\u002Fgodotenv",[468],[452,478,479],{},"joho\u002Fgodotenv"," (",[452,482,461],{}," fájl betöltés), és semmilyen gp-system-specifikus tudása nincs: bármilyen Go programban ugyanúgy működik. A gpsystem kit az egyetlen betöltési lépésként használja, amit minden generált projekt lefuttat a ",[452,485,486],{},"main()","-ben; lásd a ",[464,489,204],{"href":229}," oldalt, hogy egy projekt hogyan komponál vele tucatnyi modul beállítását egyetlen structba.",[492,493,25],"h2",{"id":494},"telepítés",[496,497,502],"pre",{"className":498,"code":499,"language":500,"meta":501,"style":501},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com\u002Fgp-system\u002Fenvconf@v0.1.0 # a kit is ezt a taget használja\ngo get github.com\u002Fgp-system\u002Fenvconf@latest\n","sh","",[452,503,504,524],{"__ignoreMap":501},[505,506,509,513,517,520],"span",{"class":507,"line":508},"line",1,[505,510,512],{"class":511},"sBMFI","go",[505,514,516],{"class":515},"sfazB"," get",[505,518,519],{"class":515}," github.com\u002Fgp-system\u002Fenvconf@v0.1.0",[505,521,523],{"class":522},"sHwdD"," # a kit is ezt a taget használja\n",[505,525,527,529,531],{"class":507,"line":526},2,[505,528,512],{"class":511},[505,530,516],{"class":515},[505,532,533],{"class":515}," github.com\u002Fgp-system\u002Fenvconf@latest\n",[448,535,536,537,540,541,543],{},"Go 1.25+. Függőség-lábnyom: ",[452,538,539],{},"caarlos0\u002Fenv\u002Fv11"," és ",[452,542,479],{},", semmi más.",[492,545,547],{"id":546},"load-mustload-loadprefixed","Load, MustLoad, LoadPrefixed",[496,549,552],{"className":550,"code":551,"language":512,"meta":501,"style":501},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","func Load[T any]() (T, error)\nfunc MustLoad[T any]() T\nfunc LoadPrefixed[T any](prefix string) (T, error)\n",[452,553,554,591,609],{"__ignoreMap":501},[505,555,556,560,564,567,571,574,577,579,581,584,588],{"class":507,"line":508},[505,557,559],{"class":558},"sMK4o","func",[505,561,563],{"class":562},"s2Zo4"," Load",[505,565,566],{"class":558},"[",[505,568,570],{"class":569},"sHdIc","T",[505,572,573],{"class":511}," any",[505,575,576],{"class":558},"]()",[505,578,480],{"class":558},[505,580,570],{"class":511},[505,582,583],{"class":558},",",[505,585,587],{"class":586},"spNyl"," error",[505,589,590],{"class":558},")\n",[505,592,593,595,598,600,602,604,606],{"class":507,"line":526},[505,594,559],{"class":558},[505,596,597],{"class":562}," MustLoad",[505,599,566],{"class":558},[505,601,570],{"class":569},[505,603,573],{"class":511},[505,605,576],{"class":558},[505,607,608],{"class":511}," T\n",[505,610,612,614,617,619,621,623,626,629,632,635,637,639,641,643],{"class":507,"line":611},3,[505,613,559],{"class":558},[505,615,616],{"class":562}," LoadPrefixed",[505,618,566],{"class":558},[505,620,570],{"class":569},[505,622,573],{"class":511},[505,624,625],{"class":558},"](",[505,627,628],{"class":569},"prefix",[505,630,631],{"class":586}," string",[505,633,634],{"class":558},")",[505,636,480],{"class":558},[505,638,570],{"class":511},[505,640,583],{"class":558},[505,642,587],{"class":586},[505,644,590],{"class":558},[448,646,647,648,651,652,654,655,658,659,662,663,666,667,669],{},"A ",[452,649,650],{},"Load"," a környezeti változókat egy új ",[452,653,570],{},"-be parseolja, az ",[452,656,657],{},"env:\"...\""," struct-tageket követve, és visszaadja a feltöltött értéket vagy egy hibát (hiányzó ",[452,660,661],{},"required"," változó, vagy egy érték, ami nem parseolható a mező típusára). A ",[452,664,665],{},"MustLoad"," ugyanaz, de hiba visszaadása helyett panicol: ez az a forma, amit valójában a ",[452,668,486],{}," elején akarsz, ahol egy konfigurációs hibával nincs mit értelmesen kezdeni, csak gyorsan és hangosan elbukni.",[496,671,673],{"className":550,"code":672,"language":512,"meta":501,"style":501},"type Config struct {\n    ListenAddr string        `env:\"LISTEN_ADDR\" envDefault:\":3000\"`\n    DBHost     string        `env:\"DB_HOST,required\"`\n    Timeout    time.Duration `env:\"TIMEOUT\" envDefault:\"5s\"`\n}\n\ncfg := envconf.MustLoad[Config]()\n",[452,674,675,689,707,721,744,750,757],{"__ignoreMap":501},[505,676,677,680,683,686],{"class":507,"line":508},[505,678,679],{"class":558},"type",[505,681,682],{"class":511}," Config",[505,684,685],{"class":558}," struct",[505,687,688],{"class":558}," {\n",[505,690,691,695,698,701,704],{"class":507,"line":526},[505,692,694],{"class":693},"sTEyZ","    ListenAddr ",[505,696,697],{"class":586},"string",[505,699,700],{"class":558},"        `",[505,702,703],{"class":515},"env:\"LISTEN_ADDR\" envDefault:\":3000\"",[505,705,706],{"class":558},"`\n",[505,708,709,712,714,716,719],{"class":507,"line":611},[505,710,711],{"class":693},"    DBHost     ",[505,713,697],{"class":586},[505,715,700],{"class":558},[505,717,718],{"class":515},"env:\"DB_HOST,required\"",[505,720,706],{"class":558},[505,722,724,727,730,733,736,739,742],{"class":507,"line":723},4,[505,725,726],{"class":693},"    Timeout    ",[505,728,729],{"class":511},"time",[505,731,732],{"class":558},".",[505,734,735],{"class":511},"Duration",[505,737,738],{"class":558}," `",[505,740,741],{"class":515},"env:\"TIMEOUT\" envDefault:\"5s\"",[505,743,706],{"class":558},[505,745,747],{"class":507,"line":746},5,[505,748,749],{"class":558},"}\n",[505,751,753],{"class":507,"line":752},6,[505,754,756],{"emptyLinePlaceholder":755},true,"\n",[505,758,760,763,766,769,771,773,775,778],{"class":507,"line":759},7,[505,761,762],{"class":693},"cfg ",[505,764,765],{"class":558},":=",[505,767,768],{"class":693}," envconf",[505,770,732],{"class":558},[505,772,665],{"class":562},[505,774,566],{"class":558},[505,776,777],{"class":511},"Config",[505,779,780],{"class":558},"]()\n",[448,782,647,783,786,787,789,790,793],{},[452,784,785],{},"LoadPrefixed"," a ",[452,788,650],{},", de minden mező környezeti változója extra prefixet kap; akkor hasznos, amikor ugyanazt a konfig-formát több, mint egyszer be kell tölteni, más néven (lásd a ",[464,791,382],{"href":792},"\u002Fhu\u002Fenvconf\u002Frecipes#prefixelt-multi-instance-bet%C3%B6lt%C3%A9sek"," oldalon egy két-Valkey-kapcsolat példát):",[496,795,797],{"className":550,"code":796,"language":512,"meta":501,"style":501},"primary, err := envconf.LoadPrefixed[ValkeyConfig](\"PRIMARY_\")   \u002F\u002F PRIMARY_ADDR, PRIMARY_PASSWORD, ...\nreplica, err := envconf.LoadPrefixed[ValkeyConfig](\"REPLICA_\")   \u002F\u002F REPLICA_ADDR, REPLICA_PASSWORD, ...\n",[452,798,799,837],{"__ignoreMap":501},[505,800,801,804,806,809,811,813,815,817,819,822,824,827,830,832,834],{"class":507,"line":508},[505,802,803],{"class":693},"primary",[505,805,583],{"class":558},[505,807,808],{"class":693}," err ",[505,810,765],{"class":558},[505,812,768],{"class":693},[505,814,732],{"class":558},[505,816,785],{"class":562},[505,818,566],{"class":558},[505,820,821],{"class":511},"ValkeyConfig",[505,823,625],{"class":558},[505,825,826],{"class":558},"\"",[505,828,829],{"class":515},"PRIMARY_",[505,831,826],{"class":558},[505,833,634],{"class":558},[505,835,836],{"class":522},"   \u002F\u002F PRIMARY_ADDR, PRIMARY_PASSWORD, ...\n",[505,838,839,842,844,846,848,850,852,854,856,858,860,862,865,867,869],{"class":507,"line":526},[505,840,841],{"class":693},"replica",[505,843,583],{"class":558},[505,845,808],{"class":693},[505,847,765],{"class":558},[505,849,768],{"class":693},[505,851,732],{"class":558},[505,853,785],{"class":562},[505,855,566],{"class":558},[505,857,821],{"class":511},[505,859,625],{"class":558},[505,861,826],{"class":558},[505,863,864],{"class":515},"REPLICA_",[505,866,826],{"class":558},[505,868,634],{"class":558},[505,870,871],{"class":522},"   \u002F\u002F REPLICA_ADDR, REPLICA_PASSWORD, ...\n",[492,873,875],{"id":874},"tagek-és-defaultok","Tagek és defaultok",[448,877,878,879,882,883,786,885,887],{},"Maga a parseolás a ",[464,880,471],{"href":466,"rel":881},[468],"-é: az ",[452,884,374],{},[452,886,461],{},"-betöltési lépést teszi elé, semmi mást. A tagek, amik napi szinten számítanak:",[889,890,891,904],"table",{},[892,893,894],"thead",{},[895,896,897,901],"tr",{},[898,899,900],"th",{},"Tag",[898,902,903],{},"Jelentés",[905,906,907,918,934,946,956],"tbody",{},[895,908,909,915],{},[910,911,912],"td",{},[452,913,914],{},"env:\"NAME\"",[910,916,917],{},"az olvasandó környezeti változó",[895,919,920,925],{},[910,921,922],{},[452,923,924],{},"env:\"NAME,required\"",[910,926,927,928,930,931,933],{},"elbuktatja a ",[452,929,650],{},"\u002F",[452,932,665],{},"-ot, ha a változó nincs beállítva",[895,935,936,941],{},[910,937,938],{},[452,939,940],{},"envDefault:\"value\"",[910,942,943,944,634],{},"akkor használja, ha a változó nincs beállítva (és nem ",[452,945,661],{},[895,947,948,953],{},[910,949,950],{},[452,951,952],{},"envPrefix:\"DB_\"",[910,954,955],{},"egy beágyazott struct mezőn minden saját tagjét prefixeli",[895,957,958,963],{},[910,959,960],{},[452,961,962],{},"envSeparator:\",\"",[910,964,965],{},"slice mezőknél az értékek közti elválasztó",[448,967,968,969,971,972,971,975,971,978,971,981,984,985,988,989,991,992,994],{},"A mezőtípusok a Go szokásos parseolását követik: ",[452,970,697],{},", ",[452,973,974],{},"int",[452,976,977],{},"bool",[452,979,980],{},"time.Duration",[452,982,983],{},"[]string",", és bármi, ami implementálja az ",[452,986,987],{},"encoding.TextUnmarshaler","-t. Egy ",[452,990,661],{}," mező, default nélkül és beállított érték nélkül, pontosan az a hiba, amit a ",[452,993,650],{},"-nak el kell kapnia, mielőtt a folyamat elindul, nem az első kérésen, ami hozzáér.",[492,996,998],{"id":997},"env-betöltés",".env betöltés",[448,1000,1001,1002,930,1004,930,1006,1008,1009,1011,1012,1016,1017,1019,1020,1022,1023,1025],{},"Parseolás előtt a ",[452,1003,650],{},[452,1005,665],{},[452,1007,785],{}," betölt egy ",[452,1010,461],{}," fájlt a munkakönyvtárból godotenv-en keresztül, ",[1013,1014,1015],"strong",{},"best-effort"," alapon: egy hiányzó ",[452,1018,461],{}," fájl nem hiba. Ami lényeges: a godotenv sosem ír felül egy már beállított környezeti változót, tehát a ",[452,1021,461],{}," csak a hiányokat tölti ki, sosem árnyékolja be azt az értéket, amit a valódi környezet már megadott. Ez az egyetlen szabály teszi lehetővé, hogy ugyanaz a ",[452,1024,777],{}," struct mindenhol helyesen viselkedjen:",[1027,1028,1029,1039,1052],"ul",{},[1030,1031,1032,1035,1036,1038],"li",{},[1013,1033,1034],{},"Helyi fejlesztés",", semmi exportálva a shellben: minden érték a ",[452,1037,461],{},"-ből jön.",[1030,1040,1041,1044,1045,1047,1048,1051],{},[1013,1042,1043],{},"Docker-compose dev stack",": ugyanaz a ",[452,1046,461],{}," fájl, a szolgáltatás-hostnevek a compose hálózatára oldódnak fel, nem a ",[452,1049,1050],{},"localhost","-ra.",[1030,1053,1054,1057,1058,1060],{},[1013,1055,1056],{},"Staging\u002Fproduction",": a valódi környezet (systemd, egy Kubernetes ConfigMap\u002FSecret) közvetlenül állítja be a változókat; a ",[452,1059,461],{}," jellemzően hiányzik, és ha egy elfeledett mégis ott lenne, a már beállított változók akkor is nyernek.",[448,1062,1063,1064,1066],{},"Ez a ",[452,1065,461],{},"-et tisztán fejlesztői kényelemmé teszi: semmi nem változik abban, hogyan töltődik be a konfig a környezetek közt, csak abban, hogy mi adja az értékeket.",[492,1068,1070],{"id":1069},"önálló-példa","Önálló példa",[496,1072,1075],{"className":550,"code":1073,"filename":1074,"language":512,"meta":501,"style":501},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n\n    \"github.com\u002Fgp-system\u002Fenvconf\"\n)\n\ntype Config struct {\n    ListenAddr string        `env:\"LISTEN_ADDR\" envDefault:\":3000\"`\n    APIKey     string        `env:\"API_KEY,required\"`\n    Timeout    time.Duration `env:\"TIMEOUT\" envDefault:\"5s\"`\n}\n\nfunc main() {\n    cfg := envconf.MustLoad[Config]()\n    fmt.Printf(\"listening on %s, timeout %s\\n\", cfg.ListenAddr, cfg.Timeout)\n}\n","main.go",[452,1076,1077,1085,1089,1098,1109,1117,1121,1129,1134,1139,1150,1163,1178,1195,1200,1205,1218,1238,1292],{"__ignoreMap":501},[505,1078,1079,1082],{"class":507,"line":508},[505,1080,1081],{"class":558},"package",[505,1083,1084],{"class":511}," main\n",[505,1086,1087],{"class":507,"line":526},[505,1088,756],{"emptyLinePlaceholder":755},[505,1090,1091,1095],{"class":507,"line":611},[505,1092,1094],{"class":1093},"s7zQu","import",[505,1096,1097],{"class":558}," (\n",[505,1099,1100,1103,1106],{"class":507,"line":723},[505,1101,1102],{"class":558},"    \"",[505,1104,1105],{"class":511},"fmt",[505,1107,1108],{"class":558},"\"\n",[505,1110,1111,1113,1115],{"class":507,"line":746},[505,1112,1102],{"class":558},[505,1114,729],{"class":511},[505,1116,1108],{"class":558},[505,1118,1119],{"class":507,"line":752},[505,1120,756],{"emptyLinePlaceholder":755},[505,1122,1123,1125,1127],{"class":507,"line":759},[505,1124,1102],{"class":558},[505,1126,457],{"class":511},[505,1128,1108],{"class":558},[505,1130,1132],{"class":507,"line":1131},8,[505,1133,590],{"class":558},[505,1135,1137],{"class":507,"line":1136},9,[505,1138,756],{"emptyLinePlaceholder":755},[505,1140,1142,1144,1146,1148],{"class":507,"line":1141},10,[505,1143,679],{"class":558},[505,1145,682],{"class":511},[505,1147,685],{"class":558},[505,1149,688],{"class":558},[505,1151,1153,1155,1157,1159,1161],{"class":507,"line":1152},11,[505,1154,694],{"class":693},[505,1156,697],{"class":586},[505,1158,700],{"class":558},[505,1160,703],{"class":515},[505,1162,706],{"class":558},[505,1164,1166,1169,1171,1173,1176],{"class":507,"line":1165},12,[505,1167,1168],{"class":693},"    APIKey     ",[505,1170,697],{"class":586},[505,1172,700],{"class":558},[505,1174,1175],{"class":515},"env:\"API_KEY,required\"",[505,1177,706],{"class":558},[505,1179,1181,1183,1185,1187,1189,1191,1193],{"class":507,"line":1180},13,[505,1182,726],{"class":693},[505,1184,729],{"class":511},[505,1186,732],{"class":558},[505,1188,735],{"class":511},[505,1190,738],{"class":558},[505,1192,741],{"class":515},[505,1194,706],{"class":558},[505,1196,1198],{"class":507,"line":1197},14,[505,1199,749],{"class":558},[505,1201,1203],{"class":507,"line":1202},15,[505,1204,756],{"emptyLinePlaceholder":755},[505,1206,1208,1210,1213,1216],{"class":507,"line":1207},16,[505,1209,559],{"class":558},[505,1211,1212],{"class":562}," main",[505,1214,1215],{"class":558},"()",[505,1217,688],{"class":558},[505,1219,1221,1224,1226,1228,1230,1232,1234,1236],{"class":507,"line":1220},17,[505,1222,1223],{"class":693},"    cfg ",[505,1225,765],{"class":558},[505,1227,768],{"class":693},[505,1229,732],{"class":558},[505,1231,665],{"class":562},[505,1233,566],{"class":558},[505,1235,777],{"class":511},[505,1237,780],{"class":558},[505,1239,1241,1244,1246,1249,1252,1254,1257,1261,1264,1266,1269,1271,1273,1276,1278,1281,1283,1285,1287,1290],{"class":507,"line":1240},18,[505,1242,1243],{"class":693},"    fmt",[505,1245,732],{"class":558},[505,1247,1248],{"class":562},"Printf",[505,1250,1251],{"class":558},"(",[505,1253,826],{"class":558},[505,1255,1256],{"class":515},"listening on ",[505,1258,1260],{"class":1259},"swJcz","%s",[505,1262,1263],{"class":515},", timeout ",[505,1265,1260],{"class":1259},[505,1267,1268],{"class":693},"\\n",[505,1270,826],{"class":558},[505,1272,583],{"class":558},[505,1274,1275],{"class":693}," cfg",[505,1277,732],{"class":558},[505,1279,1280],{"class":693},"ListenAddr",[505,1282,583],{"class":558},[505,1284,1275],{"class":693},[505,1286,732],{"class":558},[505,1288,1289],{"class":693},"Timeout",[505,1291,590],{"class":558},[505,1293,1295],{"class":507,"line":1294},19,[505,1296,749],{"class":558},[496,1298,1300],{"className":498,"code":1299,"filename":461,"language":500,"meta":501,"style":501},"API_KEY=dev-secret\nTIMEOUT=10s\n",[452,1301,1302,1313],{"__ignoreMap":501},[505,1303,1304,1307,1310],{"class":507,"line":508},[505,1305,1306],{"class":693},"API_KEY",[505,1308,1309],{"class":558},"=",[505,1311,1312],{"class":515},"dev-secret\n",[505,1314,1315,1318,1320],{"class":507,"line":526},[505,1316,1317],{"class":693},"TIMEOUT",[505,1319,1309],{"class":558},[505,1321,1322],{"class":515},"10s\n",[448,1324,1325,1326,1328,1329,786,1331,1333,1334,1337,1338,1340,1341,1343],{},"Futtasd shell-exportok nélkül (az ",[452,1327,1306],{}," és a ",[452,1330,1317],{},[452,1332,461],{},"-ből jön, a ",[452,1335,1336],{},"LISTEN_ADDR"," a defaultjára esik vissza), vagy állítsd be az ",[452,1339,1306],{},"-t a valódi környezetben és töröld a ",[452,1342,461],{},"-et teljesen: a program azonosan viselkedik mindkét esetben.",[492,1345,1347],{"id":1346},"kapcsolódó-oldalak","Kapcsolódó oldalak",[1027,1349,1350,1360,1368],{},[1030,1351,1352,1355,1356,1359],{},[464,1353,1354],{"href":383},"envconf: Receptek",": root config összeállítása modul-configokból, prefixelt multi-instance betöltések, tesztelés ",[452,1357,1358],{},"t.Setenv","-vel.",[1030,1361,1362,1364,1365,1367],{},[464,1363,204],{"href":229},": mit komponál egy generált gpsystem projekt az ",[452,1366,374],{},"-fal, és a modulok közti prefix-konvenciók.",[1030,1369,1370,1373],{},[464,1371,1372],{"href":205},"Konfigurációs referencia",": minden modul minden env-változója, defaultokkal.",[1375,1376,1377],"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 .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":501,"searchDepth":526,"depth":526,"links":1379},[1380,1381,1382,1383,1384,1385],{"id":494,"depth":526,"text":25},{"id":546,"depth":526,"text":547},{"id":874,"depth":526,"text":875},{"id":997,"depth":526,"text":998},{"id":1069,"depth":526,"text":1070},{"id":1346,"depth":526,"text":1347},"Típusos környezetikonfiguráció-betöltés struct tagekkel.","md",null,{},{"icon":231},{"title":52,"description":1386},"KJFvDfw-4iGkGlgP50arlK9HMNhygZ9vf2XMzbpVQd0",[1394,1396],{"title":370,"path":371,"stem":372,"description":1395,"icon":227,"children":-1},"Az errs bedrótozása logolásba, Sentrybe és sima net\u002Fhttp handlerekbe.",{"title":382,"path":383,"stem":384,"description":1397,"children":-1},"[object Object]",1785445882842]