[{"data":1,"prerenderedAt":1794},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-storage-overview":442,"-hu-storage-overview-surround":1789},[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":1782,"extension":1783,"links":1784,"meta":1785,"navigation":1786,"path":153,"seo":1787,"stem":154,"__hash__":1788},"docs_hu\u002Fhu\u002F15.storage\u002F1.overview.md",{"type":445,"value":446,"toc":1771},"minimark",[447,488,492,531,553,557,560,626,631,1070,1099,1148,1163,1191,1195,1220,1245,1249,1298,1319,1323,1556,1585,1589,1598,1680,1723,1734,1738,1767],[448,449,450,451,454,455,458,459,463,464,467,468,472,473,476,477,476,480,483,484,487],"p",{},"A ",[452,453,147],"code",{}," egy önálló Go modul (",[452,456,457],{},"github.com\u002Fgp-system\u002Fstorage","): object storage feltöltésekhez, avatarokhoz, generált riportokhoz, exportokhoz, mindenhez, ami nem egy adatbázis-sor. A ",[460,461,462],"a",{"href":41},"shop mintaalkalmazásban"," az ",[452,465,466],{},"admin"," surface ezen keresztül tölt fel termékképeket. A gyökér modulnak ",[469,470,471],"strong",{},"nulla gp-system függősége"," van, és mindössze három 3rd-party függősége (",[452,474,475],{},"go.opentelemetry.io\u002Fotel",", ",[452,478,479],{},"...\u002Fmetric",[452,481,482],{},"...\u002Ftrace","), így ha egy projekt egyébként nem is használja a kitet, ennek behúzása semmibe nem kerül az OTel saját API-csomagján túl. Bármilyen Go programban működik: CLI-eszközben, Lambdában, sima ",[452,485,486],{},"net\u002Fhttp"," service-ben, a gpsystem kittel vagy anélkül.",[489,490,25],"h2",{"id":491},"telepítés",[493,494,499],"pre",{"className":495,"code":496,"language":497,"meta":498,"style":498},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com\u002Fgp-system\u002Fstorage@v0.1.0 # a kit is ezt a taget használja\ngo get github.com\u002Fgp-system\u002Fstorage@latest\n","sh","",[452,500,501,521],{"__ignoreMap":498},[502,503,506,510,514,517],"span",{"class":504,"line":505},"line",1,[502,507,509],{"class":508},"sBMFI","go",[502,511,513],{"class":512},"sfazB"," get",[502,515,516],{"class":512}," github.com\u002Fgp-system\u002Fstorage@v0.1.0",[502,518,520],{"class":519},"sHwdD"," # a kit is ezt a taget használja\n",[502,522,524,526,528],{"class":504,"line":523},2,[502,525,509],{"class":508},[502,527,513],{"class":512},[502,529,530],{"class":512}," github.com\u002Fgp-system\u002Fstorage@latest\n",[448,532,533,534,537,538,541,542,545,546,549,550,552],{},"Go 1.23+ (a ",[452,535,536],{},"Disk"," ",[452,539,540],{},"Files"," iterátora range-over-func-ot használ). A beépített driverek külön importok: a ",[452,543,544],{},"storage\u002Fmemory"," és a ",[452,547,548],{},"storage\u002Flocal"," ugyanabban a modulban szállít, plusz függőségi költség nélkül. Az S3-kompatibilis driver más eset, lásd az ",[460,551,164],{"href":165}," oldalt, hogy miért saját modul.",[489,554,556],{"id":555},"a-modell-driver-disk-manager","A modell: Driver, Disk, Manager",[448,558,559],{},"A csomag szándékosan három rétegre bomlik, mindegyiknek egy feladata van:",[561,562,563,579],"table",{},[564,565,566],"thead",{},[567,568,569,573,576],"tr",{},[570,571,572],"th",{},"Réteg",[570,574,575],{},"Mi ez",[570,577,578],{},"Mire használod",[580,581,582,596,611],"tbody",{},[567,583,584,590,593],{},[585,586,587],"td",{},[452,588,589],{},"Driver",[585,591,592],{},"a bővíthető backend-szerződés",[585,594,595],{},"egyszer implementálod backendenként; a legtöbb kód sosem hívja közvetlenül",[567,597,598,602,608],{},[585,599,600],{},[452,601,536],{},[585,603,604,605,607],{},"egy ",[452,606,589],{}," köré épített instrumentált, ergonomikus wrapper",[585,609,610],{},"a service-rétegedben nap mint nap hívott API",[567,612,613,618,623],{},[585,614,615],{},[452,616,617],{},"Manager",[585,619,620,622],{},[452,621,536],{},"-ek névvel ellátott gyűjteménye",[585,624,625],{},"akkor kell, ha egy projektben egynél több disk van",[627,628,630],"h3",{"id":629},"driver-a-backend-szerződés","Driver: a backend-szerződés",[493,632,635],{"className":633,"code":634,"language":509,"meta":498,"style":498},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","type Driver interface {\n    Name() string\n    Put(ctx context.Context, path string, r io.Reader, opts PutOptions) error\n    Reader(ctx context.Context, path string) (io.ReadCloser, error)\n    RangeReader(ctx context.Context, path string, offset, length int64) (io.ReadCloser, error)\n    Stat(ctx context.Context, path string) (FileInfo, error)\n    List(ctx context.Context, opts ListOptions) (ListPage, error)\n    Copy(ctx context.Context, src, dst string) error\n    Delete(ctx context.Context, path string) error\n    URL(ctx context.Context, path string) (string, error)\n    TemporaryURL(ctx context.Context, path string, opts TemporaryURLOptions) (string, error)\n    TemporaryUploadURL(ctx context.Context, path string, opts TemporaryUploadURLOptions) (UploadURL, error)\n}\n",[452,636,637,652,665,723,766,817,852,888,920,946,981,1022,1064],{"__ignoreMap":498},[502,638,639,643,646,649],{"class":504,"line":505},[502,640,642],{"class":641},"sMK4o","type",[502,644,645],{"class":508}," Driver",[502,647,648],{"class":641}," interface",[502,650,651],{"class":641}," {\n",[502,653,654,658,661],{"class":504,"line":523},[502,655,657],{"class":656},"s2Zo4","    Name",[502,659,660],{"class":641},"()",[502,662,664],{"class":663},"spNyl"," string\n",[502,666,668,671,674,678,681,684,687,690,693,696,698,701,704,706,709,711,714,717,720],{"class":504,"line":667},3,[502,669,670],{"class":656},"    Put",[502,672,673],{"class":641},"(",[502,675,677],{"class":676},"sHdIc","ctx",[502,679,680],{"class":508}," context",[502,682,683],{"class":641},".",[502,685,686],{"class":508},"Context",[502,688,689],{"class":641},",",[502,691,692],{"class":676}," path",[502,694,695],{"class":663}," string",[502,697,689],{"class":641},[502,699,700],{"class":676}," r",[502,702,703],{"class":508}," io",[502,705,683],{"class":641},[502,707,708],{"class":508},"Reader",[502,710,689],{"class":641},[502,712,713],{"class":676}," opts",[502,715,716],{"class":508}," PutOptions",[502,718,719],{"class":641},")",[502,721,722],{"class":663}," error\n",[502,724,726,729,731,733,735,737,739,741,743,745,747,750,753,755,758,760,763],{"class":504,"line":725},4,[502,727,728],{"class":656},"    Reader",[502,730,673],{"class":641},[502,732,677],{"class":676},[502,734,680],{"class":508},[502,736,683],{"class":641},[502,738,686],{"class":508},[502,740,689],{"class":641},[502,742,692],{"class":676},[502,744,695],{"class":663},[502,746,719],{"class":641},[502,748,749],{"class":641}," (",[502,751,752],{"class":508},"io",[502,754,683],{"class":641},[502,756,757],{"class":508},"ReadCloser",[502,759,689],{"class":641},[502,761,762],{"class":663}," error",[502,764,765],{"class":641},")\n",[502,767,769,772,774,776,778,780,782,784,786,788,790,793,795,798,801,803,805,807,809,811,813,815],{"class":504,"line":768},5,[502,770,771],{"class":656},"    RangeReader",[502,773,673],{"class":641},[502,775,677],{"class":676},[502,777,680],{"class":508},[502,779,683],{"class":641},[502,781,686],{"class":508},[502,783,689],{"class":641},[502,785,692],{"class":676},[502,787,695],{"class":663},[502,789,689],{"class":641},[502,791,792],{"class":676}," offset",[502,794,689],{"class":641},[502,796,797],{"class":676}," length",[502,799,800],{"class":663}," int64",[502,802,719],{"class":641},[502,804,749],{"class":641},[502,806,752],{"class":508},[502,808,683],{"class":641},[502,810,757],{"class":508},[502,812,689],{"class":641},[502,814,762],{"class":663},[502,816,765],{"class":641},[502,818,820,823,825,827,829,831,833,835,837,839,841,843,846,848,850],{"class":504,"line":819},6,[502,821,822],{"class":656},"    Stat",[502,824,673],{"class":641},[502,826,677],{"class":676},[502,828,680],{"class":508},[502,830,683],{"class":641},[502,832,686],{"class":508},[502,834,689],{"class":641},[502,836,692],{"class":676},[502,838,695],{"class":663},[502,840,719],{"class":641},[502,842,749],{"class":641},[502,844,845],{"class":508},"FileInfo",[502,847,689],{"class":641},[502,849,762],{"class":663},[502,851,765],{"class":641},[502,853,855,858,860,862,864,866,868,870,872,875,877,879,882,884,886],{"class":504,"line":854},7,[502,856,857],{"class":656},"    List",[502,859,673],{"class":641},[502,861,677],{"class":676},[502,863,680],{"class":508},[502,865,683],{"class":641},[502,867,686],{"class":508},[502,869,689],{"class":641},[502,871,713],{"class":676},[502,873,874],{"class":508}," ListOptions",[502,876,719],{"class":641},[502,878,749],{"class":641},[502,880,881],{"class":508},"ListPage",[502,883,689],{"class":641},[502,885,762],{"class":663},[502,887,765],{"class":641},[502,889,891,894,896,898,900,902,904,906,909,911,914,916,918],{"class":504,"line":890},8,[502,892,893],{"class":656},"    Copy",[502,895,673],{"class":641},[502,897,677],{"class":676},[502,899,680],{"class":508},[502,901,683],{"class":641},[502,903,686],{"class":508},[502,905,689],{"class":641},[502,907,908],{"class":676}," src",[502,910,689],{"class":641},[502,912,913],{"class":676}," dst",[502,915,695],{"class":663},[502,917,719],{"class":641},[502,919,722],{"class":663},[502,921,923,926,928,930,932,934,936,938,940,942,944],{"class":504,"line":922},9,[502,924,925],{"class":656},"    Delete",[502,927,673],{"class":641},[502,929,677],{"class":676},[502,931,680],{"class":508},[502,933,683],{"class":641},[502,935,686],{"class":508},[502,937,689],{"class":641},[502,939,692],{"class":676},[502,941,695],{"class":663},[502,943,719],{"class":641},[502,945,722],{"class":663},[502,947,949,952,954,956,958,960,962,964,966,968,970,972,975,977,979],{"class":504,"line":948},10,[502,950,951],{"class":656},"    URL",[502,953,673],{"class":641},[502,955,677],{"class":676},[502,957,680],{"class":508},[502,959,683],{"class":641},[502,961,686],{"class":508},[502,963,689],{"class":641},[502,965,692],{"class":676},[502,967,695],{"class":663},[502,969,719],{"class":641},[502,971,749],{"class":641},[502,973,974],{"class":663},"string",[502,976,689],{"class":641},[502,978,762],{"class":663},[502,980,765],{"class":641},[502,982,984,987,989,991,993,995,997,999,1001,1003,1005,1007,1010,1012,1014,1016,1018,1020],{"class":504,"line":983},11,[502,985,986],{"class":656},"    TemporaryURL",[502,988,673],{"class":641},[502,990,677],{"class":676},[502,992,680],{"class":508},[502,994,683],{"class":641},[502,996,686],{"class":508},[502,998,689],{"class":641},[502,1000,692],{"class":676},[502,1002,695],{"class":663},[502,1004,689],{"class":641},[502,1006,713],{"class":676},[502,1008,1009],{"class":508}," TemporaryURLOptions",[502,1011,719],{"class":641},[502,1013,749],{"class":641},[502,1015,974],{"class":663},[502,1017,689],{"class":641},[502,1019,762],{"class":663},[502,1021,765],{"class":641},[502,1023,1025,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046,1048,1051,1053,1055,1058,1060,1062],{"class":504,"line":1024},12,[502,1026,1027],{"class":656},"    TemporaryUploadURL",[502,1029,673],{"class":641},[502,1031,677],{"class":676},[502,1033,680],{"class":508},[502,1035,683],{"class":641},[502,1037,686],{"class":508},[502,1039,689],{"class":641},[502,1041,692],{"class":676},[502,1043,695],{"class":663},[502,1045,689],{"class":641},[502,1047,713],{"class":676},[502,1049,1050],{"class":508}," TemporaryUploadURLOptions",[502,1052,719],{"class":641},[502,1054,749],{"class":641},[502,1056,1057],{"class":508},"UploadURL",[502,1059,689],{"class":641},[502,1061,762],{"class":663},[502,1063,765],{"class":641},[502,1065,1067],{"class":504,"line":1066},13,[502,1068,1069],{"class":641},"}\n",[448,1071,1072,1073,1075,1076,1079,1080,1083,1084,1087,1088,1094,1095,1098],{},"Egy ",[452,1074,589],{},"-nek nem kell mindent támogatnia: egy driver, ami nem tud aláírt URL-t adni, ",[452,1077,1078],{},"ErrUnsupported","-ot ad vissza a ",[452,1081,1082],{},"TemporaryURL","\u002F",[452,1085,1086],{},"TemporaryUploadURL","-ből ahelyett, hogy hamisítana egyet, és aki ezzel törődik, ellenőrizni tudja (lásd ",[460,1089,1091],{"href":1090},"\u002Fhu\u002Fstorage\u002Fdisk-api#urlek",[452,1092,1093],{},"Disk.ProvidesTemporaryURLs","). Egy driver opcionálisan implementálhatja a ",[452,1096,1097],{},"Mover"," interfészt is:",[493,1100,1102],{"className":633,"code":1101,"language":509,"meta":498,"style":498},"type Mover interface {\n    Move(ctx context.Context, src, dst string) error\n}\n",[452,1103,1104,1115,1144],{"__ignoreMap":498},[502,1105,1106,1108,1111,1113],{"class":504,"line":505},[502,1107,642],{"class":641},[502,1109,1110],{"class":508}," Mover",[502,1112,648],{"class":641},[502,1114,651],{"class":641},[502,1116,1117,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142],{"class":504,"line":523},[502,1118,1119],{"class":656},"    Move",[502,1121,673],{"class":641},[502,1123,677],{"class":676},[502,1125,680],{"class":508},[502,1127,683],{"class":641},[502,1129,686],{"class":508},[502,1131,689],{"class":641},[502,1133,908],{"class":676},[502,1135,689],{"class":641},[502,1137,913],{"class":676},[502,1139,695],{"class":663},[502,1141,719],{"class":641},[502,1143,722],{"class":663},[502,1145,1146],{"class":504,"line":667},[502,1147,1069],{"class":641},[448,1149,1150,1151,1154,1155,1158,1159,1162],{},"ha natívan tud objektumot mozgatni (átnevezés, nem bájtról bájtra másolás); a ",[452,1152,1153],{},"Disk.Move"," ezt használja, ha elérhető, egyébként ",[452,1156,1157],{},"Copy"," + ",[452,1160,1161],{},"Delete","-re esik vissza.",[448,1164,1165,1166,1170,1171,1175,1176,1181,1182,1184,1185,1190],{},"Három beépített driver érkezik az ökoszisztémával: ",[460,1167,1168],{"href":161},[452,1169,544],{}," (in-process, teszthez), ",[460,1172,1173],{"href":161},[452,1174,548],{}," (fájlrendszer, egy-node-os telepítéshez) és ",[460,1177,1178],{"href":165},[452,1179,1180],{},"storage\u002Fdriver\u002Fs3"," (S3-kompatibilis, productionhöz). Mindhárom ugyanazt a ",[452,1183,589],{}," szerződést teljesíti, és a ",[460,1186,1187],{"href":170},[452,1188,1189],{},"storage\u002Fstoragetest"," ugyanazt a konformancia-suite-ot futtatja le mindháromra, plusz bármelyik saját írású driveredre.",[627,1192,1194],{"id":1193},"validpath","ValidPath",[493,1196,1198],{"className":633,"code":1197,"language":509,"meta":498,"style":498},"func ValidPath(path string) bool\n",[452,1199,1200],{"__ignoreMap":498},[502,1201,1202,1205,1208,1210,1213,1215,1217],{"class":504,"line":505},[502,1203,1204],{"class":641},"func",[502,1206,1207],{"class":656}," ValidPath",[502,1209,673],{"class":641},[502,1211,1212],{"class":676},"path",[502,1214,695],{"class":663},[502,1216,719],{"class":641},[502,1218,1219],{"class":663}," bool\n",[448,1221,1222,1223,1225,1226,1083,1228,1231,1232,476,1235,1237,1238,1241,1242,683],{},"Egy kis guard, amit minden ",[452,1224,589],{},"-implementációtól elvárunk, hogy meghívjon, mielőtt hozzáér a backendhez: elutasítja az üres path-ot, az abszolút path-okat, a ",[452,1227,683],{},[452,1229,1230],{},".."," szegmenseket, és mindent, ami kiszökhetne a storage gyökeréből. Egy saját driver írásakor ezt kell meghívni a ",[452,1233,1234],{},"Put",[452,1236,1157],{}," és társai elején, és ",[452,1239,1240],{},"ErrInvalidPath","-t visszaadni, ha az eredmény ",[452,1243,1244],{},"false",[627,1246,1248],{"id":1247},"disk-az-api-amit-ténylegesen-hívsz","Disk: az API, amit ténylegesen hívsz",[493,1250,1252],{"className":633,"code":1251,"language":509,"meta":498,"style":498},"disk := storage.NewDisk(driver, storage.WithName(\"uploads\"))\n",[452,1253,1254],{"__ignoreMap":498},[502,1255,1256,1260,1263,1266,1268,1271,1273,1276,1278,1280,1282,1285,1287,1290,1293,1295],{"class":504,"line":505},[502,1257,1259],{"class":1258},"sTEyZ","disk ",[502,1261,1262],{"class":641},":=",[502,1264,1265],{"class":1258}," storage",[502,1267,683],{"class":641},[502,1269,1270],{"class":656},"NewDisk",[502,1272,673],{"class":641},[502,1274,1275],{"class":1258},"driver",[502,1277,689],{"class":641},[502,1279,1265],{"class":1258},[502,1281,683],{"class":641},[502,1283,1284],{"class":656},"WithName",[502,1286,673],{"class":641},[502,1288,1289],{"class":641},"\"",[502,1291,1292],{"class":512},"uploads",[502,1294,1289],{"class":641},[502,1296,1297],{"class":641},"))\n",[448,1299,450,1300,1302,1303,1305,1306,1308,1309,476,1312,476,1315,1318],{},[452,1301,1270],{}," egy ",[452,1304,589],{},"-t csomagol be névvel és OTel-instrumentációval (span műveletenként, a disk nevével és a path-tal mint attribútummal), és ez az, amitől a service-kód nap mint nap függ; a teljes metódus-készletet lásd a ",[460,1307,156],{"href":157}," oldalon. Opciók: ",[452,1310,1311],{},"WithName(string)",[452,1313,1314],{},"WithTracerProvider",[452,1316,1317],{},"WithMeterProvider","; ha az utóbbi kettőt nem állítod be, az instrumentáció no-op, mint mindenhol máshol a kitben.",[627,1320,1322],{"id":1321},"manager-több-névvel-ellátott-disk","Manager: több névvel ellátott disk",[493,1324,1326],{"className":633,"code":1325,"language":509,"meta":498,"style":498},"mgr := storage.New(\"public\", map[string]*storage.Disk{\n    \"public\":  storage.NewDisk(local.New(cfg), storage.WithName(\"public\")),\n    \"backups\": storage.NewDisk(s3.New(s3cfg), storage.WithName(\"backups\")),\n})\n\nmgr.Default().Put(ctx, \"avatars\u002F42.png\", r, storage.PutOptions{})\nbackups, _ := mgr.Disk(\"backups\")\n",[452,1327,1328,1370,1423,1472,1477,1483,1528],{"__ignoreMap":498},[502,1329,1330,1333,1335,1337,1339,1342,1344,1346,1349,1351,1353,1356,1358,1361,1363,1365,1367],{"class":504,"line":505},[502,1331,1332],{"class":1258},"mgr ",[502,1334,1262],{"class":641},[502,1336,1265],{"class":1258},[502,1338,683],{"class":641},[502,1340,1341],{"class":656},"New",[502,1343,673],{"class":641},[502,1345,1289],{"class":641},[502,1347,1348],{"class":512},"public",[502,1350,1289],{"class":641},[502,1352,689],{"class":641},[502,1354,1355],{"class":641}," map[",[502,1357,974],{"class":663},[502,1359,1360],{"class":641},"]*",[502,1362,147],{"class":508},[502,1364,683],{"class":641},[502,1366,536],{"class":508},[502,1368,1369],{"class":641},"{\n",[502,1371,1372,1375,1377,1379,1382,1385,1387,1389,1391,1394,1396,1398,1400,1403,1406,1408,1410,1412,1414,1416,1418,1420],{"class":504,"line":523},[502,1373,1374],{"class":641},"    \"",[502,1376,1348],{"class":512},[502,1378,1289],{"class":641},[502,1380,1381],{"class":641},":",[502,1383,1384],{"class":1258},"  storage",[502,1386,683],{"class":641},[502,1388,1270],{"class":656},[502,1390,673],{"class":641},[502,1392,1393],{"class":1258},"local",[502,1395,683],{"class":641},[502,1397,1341],{"class":656},[502,1399,673],{"class":641},[502,1401,1402],{"class":1258},"cfg",[502,1404,1405],{"class":641},"),",[502,1407,1265],{"class":1258},[502,1409,683],{"class":641},[502,1411,1284],{"class":656},[502,1413,673],{"class":641},[502,1415,1289],{"class":641},[502,1417,1348],{"class":512},[502,1419,1289],{"class":641},[502,1421,1422],{"class":641},")),\n",[502,1424,1425,1427,1430,1432,1434,1436,1438,1440,1442,1445,1447,1449,1451,1454,1456,1458,1460,1462,1464,1466,1468,1470],{"class":504,"line":667},[502,1426,1374],{"class":641},[502,1428,1429],{"class":512},"backups",[502,1431,1289],{"class":641},[502,1433,1381],{"class":641},[502,1435,1265],{"class":1258},[502,1437,683],{"class":641},[502,1439,1270],{"class":656},[502,1441,673],{"class":641},[502,1443,1444],{"class":1258},"s3",[502,1446,683],{"class":641},[502,1448,1341],{"class":656},[502,1450,673],{"class":641},[502,1452,1453],{"class":1258},"s3cfg",[502,1455,1405],{"class":641},[502,1457,1265],{"class":1258},[502,1459,683],{"class":641},[502,1461,1284],{"class":656},[502,1463,673],{"class":641},[502,1465,1289],{"class":641},[502,1467,1429],{"class":512},[502,1469,1289],{"class":641},[502,1471,1422],{"class":641},[502,1473,1474],{"class":504,"line":725},[502,1475,1476],{"class":641},"})\n",[502,1478,1479],{"class":504,"line":768},[502,1480,1482],{"emptyLinePlaceholder":1481},true,"\n",[502,1484,1485,1488,1490,1493,1496,1498,1500,1502,1504,1507,1510,1512,1514,1516,1518,1520,1522,1525],{"class":504,"line":819},[502,1486,1487],{"class":1258},"mgr",[502,1489,683],{"class":641},[502,1491,1492],{"class":656},"Default",[502,1494,1495],{"class":641},"().",[502,1497,1234],{"class":656},[502,1499,673],{"class":641},[502,1501,677],{"class":1258},[502,1503,689],{"class":641},[502,1505,1506],{"class":641}," \"",[502,1508,1509],{"class":512},"avatars\u002F42.png",[502,1511,1289],{"class":641},[502,1513,689],{"class":641},[502,1515,700],{"class":1258},[502,1517,689],{"class":641},[502,1519,1265],{"class":508},[502,1521,683],{"class":641},[502,1523,1524],{"class":508},"PutOptions",[502,1526,1527],{"class":641},"{})\n",[502,1529,1530,1532,1534,1537,1539,1542,1544,1546,1548,1550,1552,1554],{"class":504,"line":854},[502,1531,1429],{"class":1258},[502,1533,689],{"class":641},[502,1535,1536],{"class":1258}," _ ",[502,1538,1262],{"class":641},[502,1540,1541],{"class":1258}," mgr",[502,1543,683],{"class":641},[502,1545,536],{"class":656},[502,1547,673],{"class":641},[502,1549,1289],{"class":641},[502,1551,1429],{"class":512},[502,1553,1289],{"class":641},[502,1555,765],{"class":641},[448,1557,1558,1559,1561,1562,1564,1565,1568,1569,1572,1573,1576,1577,1580,1581,1584],{},"A legtöbb projektnek egyetlen ",[452,1560,536],{}," elég. A ",[452,1563,617],{}," arra az esetre való, amikor egy app tényleg többet is használ: publikus assetek helyi lemezen, éjszakai adatbázis-dumpok S3-on, mondjuk. A ",[452,1566,1567],{},"New(defaultDiskName, disks)"," építi fel; a ",[452,1570,1571],{},"Default()"," a névvel megadott alapértelmezettet adja vissza, a ",[452,1574,1575],{},"Disk(name)"," név szerint keres (egy map-lookuppal azonos alakú ",[452,1578,1579],{},"ok bool","-lal), a ",[452,1582,1583],{},"Names()"," pedig felsorolja az összes regisztráltat.",[489,1586,1588],{"id":1587},"dekorátorok-viselkedés-komponálása-egy-driverre","Dekorátorok: viselkedés komponálása egy Driverre",[448,1590,1591,1592,1594,1595,1597],{},"Mindkettő bármilyen ",[452,1593,589],{},"-t becsomagol, és egy másik ",[452,1596,589],{},"-t ad vissza, így komponálhatók:",[493,1599,1601],{"className":633,"code":1600,"language":509,"meta":498,"style":498},"d := storage.ReadOnly(s3.New(cfg))                      \u002F\u002F elutasítja az írásokat\nscoped, err := storage.Scoped(s3.New(cfg), \"tenant-42\") \u002F\u002F egy prefixre korlátoz\n",[452,1602,1603,1635],{"__ignoreMap":498},[502,1604,1605,1608,1610,1612,1614,1617,1619,1621,1623,1625,1627,1629,1632],{"class":504,"line":505},[502,1606,1607],{"class":1258},"d ",[502,1609,1262],{"class":641},[502,1611,1265],{"class":1258},[502,1613,683],{"class":641},[502,1615,1616],{"class":656},"ReadOnly",[502,1618,673],{"class":641},[502,1620,1444],{"class":1258},[502,1622,683],{"class":641},[502,1624,1341],{"class":656},[502,1626,673],{"class":641},[502,1628,1402],{"class":1258},[502,1630,1631],{"class":641},"))",[502,1633,1634],{"class":519},"                      \u002F\u002F elutasítja az írásokat\n",[502,1636,1637,1640,1642,1645,1647,1649,1651,1654,1656,1658,1660,1662,1664,1666,1668,1670,1673,1675,1677],{"class":504,"line":523},[502,1638,1639],{"class":1258},"scoped",[502,1641,689],{"class":641},[502,1643,1644],{"class":1258}," err ",[502,1646,1262],{"class":641},[502,1648,1265],{"class":1258},[502,1650,683],{"class":641},[502,1652,1653],{"class":656},"Scoped",[502,1655,673],{"class":641},[502,1657,1444],{"class":1258},[502,1659,683],{"class":641},[502,1661,1341],{"class":656},[502,1663,673],{"class":641},[502,1665,1402],{"class":1258},[502,1667,1405],{"class":641},[502,1669,1506],{"class":641},[502,1671,1672],{"class":512},"tenant-42",[502,1674,1289],{"class":641},[502,1676,719],{"class":641},[502,1678,1679],{"class":519}," \u002F\u002F egy prefixre korlátoz\n",[1681,1682,1683,1704],"ul",{},[1684,1685,1686,1691,1692,476,1694,1696,1697,1699,1700,1703],"li",{},[469,1687,1688],{},[452,1689,1690],{},"ReadOnly(Driver) Driver",": minden ",[452,1693,1234],{},[452,1695,1161],{}," és ",[452,1698,1157],{}," hívás azonnal ",[452,1701,1702],{},"ErrReadOnly","-t ad vissza, anélkül hogy elérné a backendet. Hasznos egy olyan diskhoz, ami archivált vagy külsőleg kezelt tartalmat szolgál ki, ahol egy írni próbáló bug hangosan és lokálisan hibázzon, ne csendben sikerüljön a production storage ellen.",[1684,1705,1706,1711,1712,1715,1716,1718,1719,1722],{},[469,1707,1708],{},[452,1709,1710],{},"Scoped(Driver, prefix string) (Driver, error)",": minden műveletet a ",[452,1713,1714],{},"prefix"," alatti path-okra korlátoz, transzparensen. Gyakori használat a tenant-izoláció egy megosztott bucketen: minden tenant kapjon egy ",[452,1717,536],{},"-et, ami ",[452,1720,1721],{},"Scoped(sharedDriver, \"tenants\u002F\"+tenantID)","-ból épül, és egy bug, ami rossz path-ot állít össze az egyik tenanthoz, nem érhet el egy másik tenant fájljait, mert a scoped driver eleve nem lát a prefixén kívüli path-okat.",[448,1724,1725,1726,1728,1729,1731,1732,683],{},"Mindkettő szabadon komponálható egymással és a beépített driverekkel, mivel egy ",[452,1727,589],{},"-t becsomagoló ",[452,1730,589],{}," maga is csak egy ",[452,1733,589],{},[489,1735,1737],{"id":1736},"kapcsolódó-oldalak","Kapcsolódó oldalak",[1681,1739,1740,1745,1750,1755,1760],{},[1684,1741,1742,1744],{},[460,1743,156],{"href":157},": a teljes metódus-készlet: írások, olvasások, listázás, URL-ek.",[1684,1746,1747,1749],{},[460,1748,160],{"href":161},": a két driver, ami a gyökér modulban szállít.",[1684,1751,1752,1754],{},[460,1753,164],{"href":165},": az S3-kompatibilis driver, saját Go modulban.",[1684,1756,1757,1759],{},[460,1758,169],{"href":170},": a konformancia-suite, és saját driver írása.",[1684,1761,1762,1766],{},[460,1763,1765],{"href":1764},"\u002Fhu\u002Fconcepts\u002Farchitecture#a-harom-kimondott-kivetel","Architektúra: a három kimondott kivétel",": miért a storage az egyik hely, ahol a kit interfész mögé rejt egy függőséget.",[1768,1769,1770],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":498,"searchDepth":523,"depth":523,"links":1772},[1773,1774,1780,1781],{"id":491,"depth":523,"text":25},{"id":555,"depth":523,"text":556,"children":1775},[1776,1777,1778,1779],{"id":629,"depth":667,"text":630},{"id":1193,"depth":667,"text":1194},{"id":1247,"depth":667,"text":1248},{"id":1321,"depth":667,"text":1322},{"id":1587,"depth":523,"text":1588},{"id":1736,"depth":523,"text":1737},"Object storage egy Driver\u002FDisk\u002FManager modell mögött, memória-, helyi lemez- és S3-kompatibilis driverekkel.","md",null,{},{"icon":148},{"title":52,"description":1782},"Q4Uvu9s562ds4XWNzTW3s6AX38D4W-8C-_rvj-fhcmo",[1790,1792],{"title":143,"path":144,"stem":145,"description":1791,"icon":131,"children":-1},"A realtime broadcast notification csatorna.",{"title":156,"path":157,"stem":158,"description":1793,"children":-1},"[object Object]",1785445882089]