1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <meta name="generator" content="Rspress v1.45.1"> 8 <title data-rh="true">æ¡æ¶æ¦è¿° - mcube</title><meta data-rh="true" name="description" content="åºäºIOC为å¼åè æä¾é ç½®å³ç¨çç»ä»¶åå¼åä½éªçå·¥å ·ç®±"/> 9
9<script>{;const saved = localStorage.getItem('rspress-theme-appearance');const preferDark = window.matchMedia('(prefers-color-scheme: dark)').matches;const isDark = !saved || saved === 'auto' ? preferDark : saved === 'dark';document.documentElement.classList.toggle('dark', isDark);document.documentElement.style.colorScheme = isDark ? 'dark' : 'light';}</script>
9<link rel="icon" href="/mcube-light-logo.png">
9<script defer src="/static/js/styles.a20dd61f.js"></script>
9<script defer src="/static/js/lib-react.9dcbe93f.js"></script>
9<script defer src="/static/js/lib-router.3c71ab21.js"></script>
9<script defer src="/static/js/3036.7f077557.js"></script>
9<script defer src="/static/js/index.6aef61bf.js"></script>
9<link href="/static/css/styles.e45a8283.css" rel="stylesheet"></head> 10 11 <body > 12 <div id="root"><div class="navContainer_d18b1 rspress-nav px-6 sticky_ddfa7"><div class="container_e4235 flex justify-between items-center h-full"><div class="navBarTitle_c5f07"><a href="/index.html" class="link_a7cea flex items-center w-full h-full text-base font-semibold transition-opacity duration-300 hover:opacity-60"><div class="mr-1 min-w-8"><img src="/mcube-dark-logo.png" alt="logo" id="logo" class="rspress-logo dark:hidden"/><img src="/mcube-light-logo.png" alt="logo" id="logo" class="rspress-logo hidden dark:block"/></div><span>mcube</span></a></div><div class="flex flex-1 justify-end items-center"><div class="rightNav_a2fea"><div class="flex sm:flex-1 items-center sm:pl-4 sm:pr-2"><div class="rspress-nav-search-button navSearchButton_df1fb"><button><svg width="18" height="18" viewBox="0 0 32 32"><path fill="var(--rp-c-gray)" d="m29 27.586-7.552-7.552a11.018 11.018 0 1 0-1.414 1.414L27.586 29ZM4 13a9 9 0 1 1 9 9 9.01 9.01 0 0 1-9-9"></path></svg><p class="searchWord_af2c1">Search Docs</p><div style="opacity:0"><span></span><span>K</span></div></button></div><div class="mobileNavSearchButton_d85a9"><svg width="24" height="24" viewBox="0 0 32 32"><path fill="var(--rp-c-gray)" d="m29 27.586-7.552-7.552a11.018 11.018 0 1 0-1.414 1.414L27.586 29ZM4 13a9 9 0 1 1 9 9 9.01 9.01 0 0 1-9-9"></path></svg></div></div><div class="rspress-nav-menu menu h-14"><a href="/guide/quickstart.html" class="link_a7cea "><div class="rspress-nav-menu-item singleItem_c1154 activeItem_a28b5 text-sm font-medium mx-1.5 px-3 py-2 flex items-center">æ¡æ¶æå</div></a><a href="/hello/index.html" class="link_a7cea "><div class="rspress-nav-menu-item singleItem_c1154 text-sm font-medium mx-1.5 px-3 py-2 flex items-center">åºç¨æ¨¡å</div></a></div><div class="flex-center flex-row"><div class="mx-2"><div class="md:mr-2 rspress-nav-appearance"><div class="p-1 border border-solid border-gray-300 text-gray-400 cursor-pointer rounded-md hover:border-gray-600 hover:text-gray-600 dark:hover:border-gray-200 dark:hover:text-gray-200 transition-all duration-300 w-7 h-7"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 24 24" class="dark:hidden" width="18" height="18" fill="currentColor"><path d="M12 18c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6m0-10c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4M12 4c-.6 0-1-.4-1-1V1c0-.6.4-1 1-1s1 .4 1 1v2c0 .6-.4 1-1 1M12 24c-.6 0-1-.4-1-1v-2c0-.6.4-1 1-1s1 .4 1 1v2c0 .6-.4 1-1 1M5.6 6.6c-.3 0-.5-.1-.7-.3L3.5 4.9c-.4-.4-.4-1 0-1.4s1-.4 1.4 0l1.4 1.4c.4.4.4 1 0 1.4-.1.2-.4.3-.7.3M19.8 20.8c-.3 0-.5-.1-.7-.3l-1.4-1.4c-.4-.4-.4-1 0-1.4s1-.4 1.4 0l1.4 1.4c.4.4.4 1 0 1.4-.2.2-.5.3-.7.3M3 13H1c-.6 0-1-.4-1-1s.4-1 1-1h2c.6 0 1 .4 1 1s-.4 1-1 1M23 13h-2c-.6 0-1-.4-1-1s.4-1 1-1h2c.6 0 1 .4 1 1s-.4 1-1 1M4.2 20.8c-.3 0-.5-.1-.7-.3-.4-.4-.4-1 0-1.4l1.4-1.4c.4-.4 1-.4 1.4 0s.4 1 0 1.4l-1.4 1.4c-.2.2-.4.3-.7.3M18.4 6.6c-.3 0-.5-.1-.7-.3-.4-.4-.4-1 0-1.4l1.4-1.4c.4-.4 1-.4 1.4 0s.4 1 0 1.4l-1.4 1.4c-.2.2-.5.3-.7.3"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 24 24" class="hidden dark:block" width="18" height="18" fill="currentColor"><path d="M12.1 22h-.9c-5.5-.5-9.5-5.4-9-10.9.4-4.8 4.2-8.6 9-9 .4 0 .8.2 1 .5s.2.8-.1 1.1c-2 2.7-1.4 6.4 1.3 8.4 2.1 1.6 5 1.6 7.1 0 .3-.2.7-.3 1.1-.1.3.2.5.6.5 1-.2 2.7-1.5 5.1-3.6 6.8-1.9 1.4-4.1 2.2-6.4 2.2M9.3 4.4c-2.9 1-5 3.6-5.2 6.8-.4 4.4 2.8 8.3 7.2 8.7 2.1.2 4.2-.4 5.8-1.8 1.1-.9 1.9-2.1 2.4-3.4-2.5.9-5.3.5-7.5-1.1-2.8-2.2-3.9-5.9-2.7-9.2"></path></svg></div></div></div><div class="social-links menu-item_e90a6 flex-center relative"><div class="flex-center h-full gap-x-4 transition-colors duration-300 md:mr-2"><a href="https://github.com/infraboard/mcube" target="_blank" rel="noopener noreferrer" class="social-links"><div class="social-links-icon_a4ad0"><div><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24"><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></div></div></a></div></div></div></div><div class="mobileNavMenu_e7045"><div class="navScreen_ec30c rspress-nav-screen" id="navScreen">
12<div class="container_c935d"><div class="navMenu_b887b"><div class="navMenuItem_e7978 w-full"><a href="/guide/quickstart.html" class="link_a7cea "><div class="rspress-nav-menu-item singleItem_c1154 activeItem_a28b5 text-sm font-medium mx-1.5 px-3 py-2 flex items-center">æ¡æ¶æå</div></a></div><div class="navMenuItem_e7978 w-full"><a href="/hello/index.html" class="link_a7cea "><div class="rspress-nav-menu-item singleItem_c1154 text-sm font-medium mx-1.5 px-3 py-2 flex items-center">åºç¨æ¨¡å</div></a></div></div><div class="flex-center flex-col gap-2"><div class="mt-2 navAppearance_bf893 flex justify-center"></div><div class="social-links menu-item_e90a6 flex-center relative"><div class="flex-center h-full gap-x-4 transition-colors duration-300 md:mr-2"><a href="https://github.com/infraboard/mcube" target="_blank" rel="noopener noreferrer" class="social-links"><div class="social-links-icon_a4ad0"><div><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24"><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></div></div></a></div></div></div></div></div><button aria-label="mobile hamburger" class=" rspress-mobile-hamburger navHamburger_ac64c text-gray-500"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32" fill="currentColor"><circle cx="8" cy="16" r="2" fill="currentColor"></circle><circle cx="16" cy="16" r="2" fill="currentColor"></circle><circle cx="24" cy="16" r="2" fill="currentColor"></circle></svg></button></div></div></div></div><section><div class="docLayout_af141 pt-0"><aside class="sidebar_dd719 rspress-sidebar "><div class="navTitleMask_fb17c"><div class="navBarTitle_c5f07"><a href="/index.html" class="link_a7cea flex items-center w-full h-full text-base font-semibold transition-opacity duration-300 hover:opacity-60"><div class="mr-1 min-w-8"><img src="/mcube-dark-logo.png" alt="logo" id="logo" class="rspress-logo dark:hidden"/><img src="/mcube-light-logo.png" alt="logo" id="logo" class="rspress-logo hidden dark:block"/></div><span>mcube</span></a></div></div><div class="rspress-scrollbar sidebarContent_da296"><nav class="pb-2"><a href="/guide/arch.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:14px;margin-left:0;border-radius:0 var(--rp-radius) var(--rp-radius) 0;padding-left:24px;font-weight:bold"><span>æ¶æç念</span></div></a><section class="rspress-sidebar-section mt-0.5 block" style="margin-left:0"><div class="rspress-sidebar-collapse flex justify-between items-center menuItem_ac22e" style="border-radius:0 var(--rp-radius) var(--rp-radius) 0;cursor:pointer"><h2 class="py-2 px-3 text-sm font-medium flex" style="font-size:14px;padding-left:24px;font-weight:bold"><span class="flex-center" style="font-size:14px">æ¡æ¶ä»ç»</span></h2><div class="collapseContainer_d6e4e p-2 rounded-xl"><div style="cursor:pointer;transition:transform 0.2s ease-out;transform:rotate(90deg)"><svg width="1em" height="1em" viewBox="0 0 32 32"><path fill="currentColor" d="M22 16 12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z"></path></svg></div></div></div><div class="transition-all duration-300 ease-in-out" style="overflow:hidden"><div class="rspress-sidebar-group transition-opacity duration-500 ease-in-out" style="opacity:1;margin-left:12px"><div class="rspress-sidebar-item"><a href="/guide/framework/framework.html" class="link_a7cea menuLink_bb039"><div class="menuItemActive_de63c mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>æ¡æ¶æ¦è¿°</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/framework/ioc.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>æ¡æ¶åç</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/framework/quickstart.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>å¿«éå¼å§</span></div></a></div></div></div></section><section class="rspress-sidebar-section mt-0.5 block" style="margin-left:0"><div class="rspress-sidebar-collapse flex justify-between items-center menuItem_ac22e" style="border-radius:0 var(--rp-radius) var(--rp-radius) 0;cursor:pointer"><h2 class="py-2 px-3 text-sm font-medium flex" style="font-size:14px;padding-left:24px;font-weight:bold"><span class="flex-center" style="font-size:14px">åºç¨é
ç½®</span></h2><div class="collapseContainer_d6e4e p-2 rounded-xl"><div style="cursor:pointer;transition:transform 0.2s ease-out;transform:rotate(90deg)"><svg width="1em" height="1em" viewBox="0 0 32 32">
12<path fill="currentColor" d="M22 16 12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z"></path></svg></div></div></div><div class="transition-all duration-300 ease-in-out" style="overflow:hidden"><div class="rspress-sidebar-group transition-opacity duration-500 ease-in-out" style="opacity:1;margin-left:12px"><div class="rspress-sidebar-item"><a href="/guide/config/server.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>Server</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/config/api_doc.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>API Doc</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/config/health_check.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>Health Check</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/config/log.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>Log</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/config/metric.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>Metric</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/config/trace.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>Trace</span></div></a></div></div></div></section><section class="rspress-sidebar-section mt-0.5 block" style="margin-left:0"><div class="rspress-sidebar-collapse flex justify-between items-center menuItem_ac22e" style="border-radius:0 var(--rp-radius) var(--rp-radius) 0;cursor:pointer"><h2 class="py-2 px-3 text-sm font-medium flex" style="font-size:14px;padding-left:24px;font-weight:bold"><span class="flex-center" style="font-size:14px">åºç¨æ¥å£</span></h2><div class="collapseContainer_d6e4e p-2 rounded-xl"><div style="cursor:pointer;transition:transform 0.2s ease-out;transform:rotate(90deg)"><svg width="1em" height="1em" viewBox="0 0 32 32"><path fill="currentColor" d="M22 16 12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z"></path></svg></div></div></div><div class="transition-all duration-300 ease-in-out" style="overflow:hidden"><div class="rspress-sidebar-group transition-opacity duration-500 ease-in-out" style="opacity:1;margin-left:12px"><div class="rspress-sidebar-item"><a href="/guide/api/summary.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>æ¦è¿°</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/api/http.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>HTTP</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/api/grpc.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>GRPC</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/api/json_rpc.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>JsonRPC</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/api/exception.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>ä¸å¡å¼å¸¸</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/api/response.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>æ¥å£ååº</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/api/musk.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>æ¥å£è±æ</span></div></a></div></div></div></section><section class="rspress-sidebar-section mt-0.5 block" style="margin-left:0"><div class="rspress-sidebar-collapse flex justify-between items-center menuItem_ac22e" style="border-radius:0 var(--rp-radius) var(--rp-radius) 0;cursor:pointer"><h2 class="py-2 px-3 text-sm font-medium flex" style="font-size:14px;padding-left:24px;font-weight:bold"><span class="flex-center" style="font-size:14px">åºç¨ç»ä»¶</span></h2><div class="collapseContainer_d6e4e p-2 rounded-xl"><div style="cursor:pointer;transition:transform 0.2s ease-out;transform:rotate(90deg)"><svg width="1em" height="1em" viewBox="0 0 32 32">
12<path fill="currentColor" d="M22 16 12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z"></path></svg></div></div></div><div class="transition-all duration-300 ease-in-out" style="overflow:hidden"><div class="rspress-sidebar-group transition-opacity duration-500 ease-in-out" style="opacity:1;margin-left:12px"><div class="rspress-sidebar-item"><a href="/guide/component/mysql.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>å
³ç³»åæ°æ®åºæä½</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/mongo.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>MongoDB æ°æ®åºæä½</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/redis.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>Redis 使ç¨</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/vault.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>Vault 使ç¨</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/kafka.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>Kafka 使ç¨</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/nats.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>NATS 使ç¨</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/rabbitmq.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>RabbitMQ 使ç¨</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/bus.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>æ¶æ¯æ»çº¿</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/cache.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>æ°æ®ç¼å</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/lock.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>åå¸å¼é</span></div></a></div><div class="rspress-sidebar-item"><a href="/guide/component/ip2region.html" class="link_a7cea menuLink_bb039"><div class="menuItem_ac22e mt-0.5 py-2 px-3 font-medium flex" style="font-size:13px;margin-left:18px;border-radius:0 var(--rp-radius) var(--rp-radius) 0"><span>IPä½ç½®è§£æ</span></div></a></div></div></div></section></nav></div></aside><div class="flex-1 relative min-w-0"><div class="rspress-sidebar-menu-container "><div class="rspress-sidebar-menu"><button type="button" class="flex-center mr-auto"><div class="text-md mr-2"><svg width="1em" height="1em" viewBox="0 0 32 32"><path fill="currentColor" d="M4 6h24v2H4zm0 18h24v2H4zm0-12h24v2H4zm0 6h24v2H4z"></path></svg></div><span class="text-sm">Menu</span></button><button type="button" class="flex-center ml-auto"><span class="text-sm">ç®å½</span><div class="text-md mr-2" style="transform:rotate(0deg);transition:transform 0.2s ease-out;margin-top:2px"><svg width="1em" height="1em" viewBox="0 0 32 32">
12<path fill="currentColor" d="M22 16 12 26l-1.4-1.4 8.6-8.6-8.6-8.6L12 6z"></path></svg></div></button><div class="rspress-local-toc-container "><ul><li><a href="#æ ¸å¿æ¦å¿µ" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:0"><span class="rspress-toc-link-text block">æ ¸å¿æ¦å¿µ</span></a></li><li><a href="#åºç¨å¼å" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:0"><span class="rspress-toc-link-text block">åºç¨å¼å</span></a></li><li><a href="#éæ©å¼åæ¡æ¶" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">éæ©å¼åæ¡æ¶</span></a></li><li><a href="#objectæ¥å£" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">Objectæ¥å£</span></a></li><li><a href="#å®ç°objectæ¥å£-注å对象" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">å®ç°Objectæ¥å£, 注å对象</span></a></li><li><a href="#对象åå§å" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">对象åå§å</span></a></li><li><a href="#å¯å¨æå¡å¨" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">å¯å¨æå¡å¨</span></a></li><li><a href="#宿´ä»£ç " class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">宿´ä»£ç </span></a></li><li><a href="#å·¥ç¨å" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:0"><span class="rspress-toc-link-text block">å·¥ç¨å</span></a></li><li><a href="#æ ååå·¥ç¨é ç½®" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">æ ååå·¥ç¨é ç½®</span></a></li><li><a href="#峿å³ç¨çç»ä»¶" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">峿å³ç¨çç»ä»¶</span></a></li><li><a href="#åè½å¼ºå¤§ç模å" class="link_a7cea rspress-toc-link sm:text-normal text-sm" style="margin-left:12px"><span class="rspress-toc-link-text block">åè½å¼ºå¤§ç模å</span></a></li></ul></div></div></div><div class="content_ff766 rspress-doc-container flex"><div class="flex-1 overflow-x-auto"><div class="rspress-doc"><!--$--><h1 id="æ¡æ¶æ¦è¿°" class="rspress-doc-title text-3xl mb-10 leading-10 tracking-tight title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#æ¡æ¶æ¦è¿°">#</a>æ¡æ¶æ¦è¿°</h1> 13<p class="my-4 leading-7">mcubeæ¯ä¸æ¬¾ç¨äºæå»ºæ¸è¿å¼å¾®æå¡(åä½-->å¾®æå¡)çæ¡æ¶, 让åºç¨ä»å使 ç¼è¿æ¸¡å°å¾®æå¡, åæ¶æä¾ä¸°å¯çé ç½®å³ç¨çåè½é ç½®, 14åªéç®åé ç½®å°±å¯æ¥æ:</p> 15<ul class="list-disc pl-5 my-4 leading-7"> 16<li class="[&:not(:first-child)]:mt-2">Log: æ¯ææä»¶æ»å¨åTraceçæ¥å¿æå°</li> 17<li class="[&:not(:first-child)]:mt-2">Metric: æ¯æåºç¨èªå®ä¹ææ çæ§</li> 18<li class="[&:not(:first-child)]:mt-2">Trace: éææ¯æå®æ´çå ¨é¾è·¯è¿½è¸ª(HTTP Server/GRPC Server/æ°æ®åº...)以åèªå®ä¹åç¹</li> 19<li class="[&:not(:first-child)]:mt-2">CORS: èµæºè·¨åå ±äº«</li> 20<li class="[&:not(:first-child)]:mt-2">Health Check: HTTP å GRPC å¥åº·æ£æ¥</li> 21<li class="[&:not(:first-child)]:mt-2">API DOC: åºäºSwaggerç API ææ¡£</li> 22</ul> 23<p class="my-4 leading-7">é¤äºä¸é¢è¿äºåè½é ç½®ï¼è¿ä¼ç¨å°å¾å¤ä¸æ¹å·¥å ·, 乿¯é ç½®å³ç¨:</p> 24<ul class="list-disc pl-5 my-4 leading-7"> 25<li class="[&:not(:first-child)]:mt-2">MySQL: Groméæ</li> 26<li class="[&:not(:first-child)]:mt-2">MongoDB 宿¹é©±å¨éæ</li> 27<li class="[&:not(:first-child)]:mt-2">Redis: go-rediséæ</li> 28<li class="[&:not(:first-child)]:mt-2">Kafka: kafka-goéæ</li> 29<li class="[&:not(:first-child)]:mt-2">åå¸å¼ç¼å: å½ååªéé äºRedis</li> 30<li class="[&:not(:first-child)]:mt-2">åå¸å¼é: å½ååªéé äºRedis</li> 31</ul> 32<div class="rspress-directive info"><div class="rspress-directive-title">æç¤º</div><div class="rspress-directive-content"><p class="my-4 leading-7"> 33mcubeçæ ¸å¿çå¿µæ¯æä¾ä¸å¥ä¼è¯çè½¯ä»¶æ¶æ, åºå¯¹è½¯ä»¶ä»ç®åå°å¤æçè¿ç¨ãæä»¥å ³æ³¨ç¹å¨æ¶æè®¾è®¡, è䏿¯åæå·¥å ·, å æ¤å°½ééæ©éæç¤¾åºä¼ç§çå·¥å ·ã<br/> 34</p></div></div> 35<h2 id="æ ¸å¿æ¦å¿µ" class="mt-12 mb-6 pt-8 text-2xl tracking-tight border-t-[1px] border-divider-light title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#æ ¸å¿æ¦å¿µ">#</a>æ ¸å¿æ¦å¿µ</h2> 36<p class="my-4 leading-7">æ¡æ¶éç¨é¢å对象çè®¾è®¡ææ³, å°æ´ä¸ªç¨åºç对象å为4ç±»:</p> 37<ul class="list-disc pl-5 my-4 leading-7"> 38<li class="[&:not(:first-child)]:mt-2">API: æ¥å£å¯¹è±¡, è´è´£å¯¹å¤æä¾æ¥å£, ç°æ¯ææ¡æ¶: Gin/GoRestful</li> 39<li class="[&:not(:first-child)]:mt-2">Controller: è´è´£ç¼åå ·ä½çä¸å¡é»è¾, 妿ä¸å¡é常ç®å, 䏿²¡æå¤ç¨åºæ¯ å¯ä»¥èèç´æ¥åå¨API对象å é¨</li> 40<li class="[&:not(:first-child)]:mt-2">Config: é 置对象, ä¸å¡é»è¾ä¸å ±ç¨çå·¥å ·, æ¯å¦ æ°æ®åº, kafka, redisä¹ç±»</li> 41<li class="[&:not(:first-child)]:mt-2">Default: éç¨å¯¹è±¡, é¤äºä¸é¢3ä¸å¯¹è±¡ä¹å¤çå ¶ä»å¯¹è±¡, é¢çåºåï¼ææ¶æªä½¿ç¨</li> 42</ul> 43<p class="my-4 leading-7">è¿4类对象åå«åå¨å¨4个åºå(Namespace), è¿4个åºåå ±åç»æçè¿ä¸ªå®¹å¨å°±å«Iocååºå®¹å¨:</p> 44<p class="my-4 leading-7"><img src="/img/mcube/ioc_namespace.png" alt=""/></p> 45<p class="my-4 leading-7">å ¶ä¸ APIåControlleråºåç对象 éè¦åºç¨å¼åè å¼å, èConfigåºåç对象 ç±æ¡æ¶å社åºå¼å</p> 46<h2 id="åºç¨å¼å" class="mt-12 mb-6 pt-8 text-2xl tracking-tight border-t-[1px] border-divider-light title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#åºç¨å¼å">#</a>åºç¨å¼å</h2> 47<p class="my-4 leading-7">ä¸é¢æ¼ç¤ºä¸ä¸ªç®ååºç¨çå¼å, å¼åä¸ä¸ªAPI æ¥å£è·åDB Stats, è¦è·åDB Stats, åªéè¦è·åå°DBçè¿æ¥æ± 对象, è°ç¨Statsæ¹æ³å³å¯:</p> 48<div class="language-go">
48<div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span>db</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Stats</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 49<p class="my-4 leading-7">è¿åç»æ:</p> 50<div class="language-json"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-json" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 51</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"data"</span><span class="token operator">:</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 52</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"MaxOpenConnections"</span><span class="token operator">:</span><span> </span><span class="token number">0</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 53</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"OpenConnections"</span><span class="token operator">:</span><span> </span><span class="token number">1</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 54</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"InUse"</span><span class="token operator">:</span><span> </span><span class="token number">0</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 55</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"Idle"</span><span class="token operator">:</span><span> </span><span class="token number">1</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 56</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"WaitCount"</span><span class="token operator">:</span><span> </span><span class="token number">0</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 57</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"WaitDuration"</span><span class="token operator">:</span><span> </span><span class="token number">0</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 58</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"MaxIdleClosed"</span><span class="token operator">:</span><span> </span><span class="token number">0</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 59</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"MaxIdleTimeClosed"</span><span class="token operator">:</span><span> </span><span class="token number">0</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 60</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">"MaxLifetimeClosed"</span><span class="token operator">:</span><span> </span><span class="token number">0</span><span> 61</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 62</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d">
62<path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 63<h3 id="éæ©å¼åæ¡æ¶" class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#éæ©å¼åæ¡æ¶">#</a>éæ©å¼åæ¡æ¶</h3> 64<p class="my-4 leading-7">Apiå¯¹è±¡æ¯æ2ç§æ¡æ¶:</p> 65<ul class="list-disc pl-5 my-4 leading-7"> 66<li class="[&:not(:first-child)]:mt-2">Gin</li> 67<li class="[&:not(:first-child)]:mt-2">GoRestful(v3)</li> 68</ul> 69<h3 id="objectæ¥å£" class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#objectæ¥å£">#</a>Objectæ¥å£</h3> 70<p class="my-4 leading-7">æ 论使ç¨é£ä¸ªæ¡æ¶ï¼é½éè¦å®ç°Objectæ¥å£, åªæå®ç°äºè¯¥æ¥å£ï¼è¯¥å¯¹è±¡æè½è¢«ioc空é´ç®¡ç:</p> 71<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-comment)">// Objectæ¥å£, éè¦æ³¨åå°iocç©ºé´æç®¡ç对象éè¦å®ç°çæ¹æ³</span><span> 72</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">type</span><span> Object </span><span class="token" style="color:var(--code-token-keyword)">interface</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 73</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// 对象åå§å, åå§å对象ç屿§</span><span> 74</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">Init</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">error</span><span> 75</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// 对象çåç§°, æ ¹æ®åç§°å¯ä»¥ä»ç©ºé´ä¸ååºå¯¹è±¡</span><span> 76</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">Name</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">string</span><span> 77</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¯¹è±¡çæ¬, é»è®¤v1</span><span> 78</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">Version</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">string</span><span> 79</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// 对象ä¼å 级, æ ¹æ®ä¼å 级 æ§å¶å¯¹è±¡åå§åç顺åº</span><span> 80</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">Priority</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">int</span><span> 81</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// 对象ç鿝, æå¡å ³éæ¶è°ç¨</span><span> 82</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">Close</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>ctx context</span><span class="token" style="color:var(--code-token-punctuation)">
82.</span><span>Context</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">error</span><span> 83</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// æ¯å¦å 许ååå¯¹è±¡è¢«æ¿æ¢, é»è®¤ä¸å è®¸è¢«æ¿æ¢</span><span> 84</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">AllowOverwrite</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">bool</span><span> 85</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// 对象ä¸äºå æ°æ®, å¯¹è±¡çæ´å¤æè¿°ä¿¡æ¯, æ©å±ä½¿ç¨</span><span> 86</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">Meta</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> ObjectMeta 87</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 88<p class="my-4 leading-7">å¯ç¨éè¿ç»§æ¿ObjectImpl对象 è·åObjectæ¥å£çé»è®¤å®ç°, ç¶åæéè¿è¡è¦å, ä¸é¢æ¯æä»¬è®¾è®¡çApiHandler对象:</p> 89<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">import</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span> 90</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc"</span><span> 91</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 92</span></span><span style="display:block;padding:0 1.25rem"> 93</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">type</span><span> ApiHandler </span><span class="token" style="color:var(--code-token-keyword)">struct</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 94</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// ç»§æ¿èªIoc对象</span><span> 95</span></span><span style="display:block;padding:0 1.25rem"><span> ioc</span><span class="token" style="color:var(--code-token-punctuation)">
95.</span><span>ObjectImpl 96</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 97<h3 id="å®ç°objectæ¥å£-注å对象" class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#å®ç°objectæ¥å£-注å对象">#</a>å®ç°Objectæ¥å£, 注å对象</h3> 98<p class="my-4 leading-7">éè¿ç»§æ¿å·²ç»å®ç°äºObjectæ¥å£</p> 99<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">type</span><span> ApiHandler </span><span class="token" style="color:var(--code-token-keyword)">struct</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 100</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// ç»§æ¿èªIoc对象</span><span> 101</span></span><span style="display:block;padding:0 1.25rem"><span> ioc</span><span class="token" style="color:var(--code-token-punctuation)">
101.</span><span>ObjectImpl 102</span></span><span style="display:block;padding:0 1.25rem"> 103</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// db屿§, gorm DB对象</span><span> 104</span></span><span style="display:block;padding:0 1.25rem"><span> db </span><span class="token operator">*</span><span>gorm</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>DB 105</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 106<p class="my-4 leading-7">è¦å对象çåç§°, é»è®¤ä¸ºå¯¹è±¡åå°åç§°,æ¯å¦: *main.ApiHandler</p> 107<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-comment)">// è¦å对象çåç§°, 该åç§°åç§°ä¼ä½ç°å¨APIçè·¯å¾åç¼éé¢</span><span> 108</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// æ¯å¦: /simple/api/v1/module_a/db_stats</span><span> 109</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// å ¶ä¸/simple/api/v1/module_a å°±æ¯å¯¹è±¡APIåç¼, å½åè§åå¦ä¸:</span><span> 110</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// <service_name>/<path_prefix>/<object_version>/<object_name></span><span> 111</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>h </span><span class="token operator">*</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-function)">Name</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">string</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 112</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-keyword)">return</span><span> </span><span class="token" style="color:var(--code-token-string)">"module_a"</span><span> 113</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d">
113<path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 114<p class="my-4 leading-7">è¿æ ·ApiHandlerå°±å®ç°äºGinApiObjectæ¥å£, æ¤æ¶å°±å¯ä»¥æå®æ³¨åå°apiåºåäº:</p> 115<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">import</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span> 116</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc"</span><span> 117</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 118</span></span><span style="display:block;padding:0 1.25rem"> 119</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-function)">main</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 120</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// 注åHTTPæ¥å£ç±»</span><span> 121</span></span><span style="display:block;padding:0 1.25rem"><span> ioc</span><span class="token" style="color:var(--code-token-punctuation)">
121.</span><span class="token" style="color:var(--code-token-function)">Api</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Registry</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token operator">&</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">{</span><span class="token" style="color:var(--code-token-punctuation)">}</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 122</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token operator">...</span><span> 123</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 124<h3 id="对象åå§å" class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#对象åå§å">#</a>对象åå§å</h3> 125<p class="my-4 leading-7">ç°å¨ApiHandlerçdb屿§è¿æ²¡åå§å, å¯ä»¥ç´æ¥éè¿å¼å ¥Datasourceç»ä»¶, è·åGormçdb对象</p> 126<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">type</span><span> ApiHandler </span><span class="token" style="color:var(--code-token-keyword)">struct</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 127</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// ç»§æ¿èªIoc对象</span><span> 128</span></span><span style="display:block;padding:0 1.25rem"><span> ioc</span><span class="token" style="color:var(--code-token-punctuation)">
128.</span><span>ObjectImpl 129</span></span><span style="display:block;padding:0 1.25rem"> 130</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// db屿§, gorm DB对象</span><span> 131</span></span><span style="display:block;padding:0 1.25rem"><span> db </span><span class="token operator">*</span><span>gorm</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>DB 132</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 133<p class="my-4 leading-7">è¦å®æå¯¹è±¡å±æ§çåå§åéè¦è¦åInit()æ¹æ³, mcubeæ¡æ¶å¨å¯å¨æ¶ï¼ä¼èªå¨è°ç¨è¯¥æ¹æ³æ¥åå§å对象</p> 134<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-comment)">// åå§ådb屿§, ä»iocçé ç½®åºåè·åå ±ç¨å·¥å · gorm db对象</span><span> 135</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>h </span><span class="token operator">*</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-function)">Init</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">error</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 136</span></span><span style="display:block;padding:0 1.25rem"><span> h</span><span class="token" style="color:var(--code-token-punctuation)">
136.</span><span>db </span><span class="token operator">=</span><span> datasource</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">DB</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 137</span></span><span style="display:block;padding:0 1.25rem"> 138</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// è¿è¡ä¸å¡æ´é², router éè¿ioc</span><span> 139</span></span><span style="display:block;padding:0 1.25rem"><span> router </span><span class="token operator">:=</span><span> ioc_gin</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">RootRouter</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 140</span></span><span style="display:block;padding:0 1.25rem"><span> router</span><span class="token" style="color:var(--code-token-punctuation)">
140.</span><span class="token" style="color:var(--code-token-function)">GET</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-string)">"/db_stats"</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> h</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>GetDbStats</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 141</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-keyword)">return</span><span> </span><span class="token boolean">nil</span><span> 142</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 143</span></span><span style="display:block;padding:0 1.25rem"> 144</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// ä¸å¡åè½</span><span> 145</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>h </span><span class="token operator">*</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-function)">GetDbStats</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>ctx </span><span class="token operator">*</span><span>gin</span><span class="token" style="color:var(--code-token-punctuation)">
145.</span><span>Context</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 146</span></span><span style="display:block;padding:0 1.25rem"><span> db</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> </span><span class="token boolean">_</span><span> </span><span class="token operator">:=</span><span> h</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>db</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">DB</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 147</span></span><span style="display:block;padding:0 1.25rem"><span> ctx</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">JSON</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>http</span><span class="token" style="color:var(--code-token-punctuation)">
147.</span><span>StatusOK</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> gin</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>H</span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 148</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"data"</span><span class="token" style="color:var(--code-token-punctuation)">:</span><span> db</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Stats</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 149</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-punctuation)">}</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 150</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 151<p class="my-4 leading-7">ç¶åéè¿é ç½®æä»¶è¿è¡ç»ä»¶é ç½®: etc/application.toml (åé¢å¯å¨æ¶ä¼å¶å®é ç½®æä»¶è¯»åè·¯å¾)</p> 152<div class="language-toml"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-toml" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-punctuation)">[</span><span class="token class-name" style="display:content">datasource</span><span class="token" style="color:var(--code-token-punctuation)">]</span><span> 153</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">host</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"127.0.0.1"</span><span> 154</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">port</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token number">3306</span><span> 155</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">username</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"root"</span><span> 156</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">password</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"123456"</span><span> 157</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">database</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"test"</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d">
157<path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 158<h3 id="å¯å¨æå¡å¨" class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#å¯å¨æå¡å¨">#</a>å¯å¨æå¡å¨</h3> 159<p class="my-4 leading-7">éè¿server.Run()å¯å¨æå¡:</p> 160<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">import</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span> 161</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc/server"</span><span> 162</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 163</span></span><span style="display:block;padding:0 1.25rem"> 164</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-function)">main</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 165</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// 注åHTTPæ¥å£ç±»</span><span> 166</span></span><span style="display:block;padding:0 1.25rem"><span> ioc</span><span class="token" style="color:var(--code-token-punctuation)">
166.</span><span class="token" style="color:var(--code-token-function)">Api</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Registry</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token operator">&</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">{</span><span class="token" style="color:var(--code-token-punctuation)">}</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 167</span></span><span style="display:block;padding:0 1.25rem"> 168</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¼å¯é ç½®æä»¶è¯»åé ç½®</span><span> 169</span></span><span style="display:block;padding:0 1.25rem"><span> server</span><span class="token" style="color:var(--code-token-punctuation)">
169.</span><span>DefaultConfig</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>ConfigFile</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>Enabled </span><span class="token operator">=</span><span> </span><span class="token boolean">true</span><span> 170</span></span><span style="display:block;padding:0 1.25rem"><span> server</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>DefaultConfig</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>ConfigFile</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>Path </span><span class="token operator">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"etc/application.toml"</span><span> 171</span></span><span style="display:block;padding:0 1.25rem"> 172</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¯å¨åºç¨</span><span> 173</span></span><span style="display:block;padding:0 1.25rem"><span> err </span><span class="token operator">:=</span><span> server</span><span class="token" style="color:var(--code-token-punctuation)">
173.</span><span class="token" style="color:var(--code-token-function)">Run</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>context</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Background</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 174</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-keyword)">if</span><span> err </span><span class="token operator">!=</span><span> </span><span class="token boolean">nil</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 175</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">panic</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>err</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 176</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 177</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 178<p class="my-4 leading-7">æåå¯å¨æå¡ å¯ä»¥çå°apiå·²ç»å¯ä»¥è®¿é®:</p> 179<div class="language-sh"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-sh" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span>$ mcube/examples/simple â¹master*⺠» go run main.go 180</span></span><span style="display:block;padding:0 1.25rem">2024-01-04T21:48:48+08:00 INFO ioc/server/server.go:74 > loaded configs: [app.v1 trace.v1 log.v1 datasource.v1 grpc.v1 http.v1] component:SERVER 181</span><span style="display:block;padding:0 1.25rem">2024-01-04T21:48:48+08:00 INFO ioc/server/server.go:75 > loaded controllers: [] component:SERVER 182</span><span style="display:block;padding:0 1.25rem">2024-01-04T21:48:48+08:00 INFO ioc/server/server.go:76 > loaded apis: [module_a.v1] component:SERVER 183</span><span style="display:block;padding:0 1.25rem">[GIN-debug] GET /simple/api/v1/module_a/db_stats --> main.(*ApiHandler).Registry.func1 (3 handlers) 184</span><span style="display:block;padding:0 1.25rem">2024-01-04T21:48:48+08:00 INFO config/http/http.go:211 > HTTPæå¡å¯å¨æå, çå¬å°å: 127.0.0.1:8020 component:HTTP</span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d">
184<path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 185<h3 id="宿´ä»£ç " class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#宿´ä»£ç ">#</a>宿´ä»£ç </h3> 186<p class="my-4 leading-7">宿´<a href="https://github.com/infraboard/mcube/blob/master/examples/simple/main.go" rel="noopener noreferrer" target="_blank" class="link_a7cea link_a9ef4 inline-link_f855c">æ ·ä¾ä»£ç </a></p> 187<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">package</span><span> main 188</span></span><span style="display:block;padding:0 1.25rem"> 189</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">import</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span> 190</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"context"</span><span> 191</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"net/http"</span><span> 192</span></span><span style="display:block;padding:0 1.25rem"> 193</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/gin-gonic/gin"</span><span> 194</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc"</span><span> 195</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc/config/datasource"</span><span> 196</span></span><span style="display:block;padding:0 1.25rem"><span> ioc_gin </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc/config/gin"</span><span> 197</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc/server"</span><span> 198</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"gorm.io/gorm"</span><span> 199</span></span><span style="display:block;padding:0 1.25rem"> 200</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¼å¯Healthå¥åº·æ£æ¥</span><span> 201</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token boolean">_</span><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc/apps/health/gin"</span><span> 202</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¼å¯Metric</span><span> 203</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token boolean">_</span><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc/apps/metric/gin"</span><span> 204</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 205</span></span><span style="display:block;padding:0 1.25rem"> 206</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-function)">main</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 207</span></span><span style="display:block;padding:0 1.25rem"><span>
207 </span><span class="token" style="color:var(--code-token-comment)">// 注åHTTPæ¥å£ç±»</span><span> 208</span></span><span style="display:block;padding:0 1.25rem"><span> ioc</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Api</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Registry</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token operator">&</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">{</span><span class="token" style="color:var(--code-token-punctuation)">}</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 209</span></span><span style="display:block;padding:0 1.25rem"> 210</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¼å¯é ç½®æä»¶è¯»åé ç½®</span><span> 211</span></span><span style="display:block;padding:0 1.25rem"><span> server</span><span class="token" style="color:var(--code-token-punctuation)">
211.</span><span>DefaultConfig</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>ConfigFile</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>Enabled </span><span class="token operator">=</span><span> </span><span class="token boolean">true</span><span> 212</span></span><span style="display:block;padding:0 1.25rem"><span> server</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>DefaultConfig</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>ConfigFile</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>Path </span><span class="token operator">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"etc/application.toml"</span><span> 213</span></span><span style="display:block;padding:0 1.25rem"> 214</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¯å¨åºç¨</span><span> 215</span></span><span style="display:block;padding:0 1.25rem"><span> err </span><span class="token operator">:=</span><span> server</span><span class="token" style="color:var(--code-token-punctuation)">
215.</span><span class="token" style="color:var(--code-token-function)">Run</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>context</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Background</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 216</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-keyword)">if</span><span> err </span><span class="token operator">!=</span><span> </span><span class="token boolean">nil</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 217</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">panic</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>err</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 218</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 219</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 220</span></span><span style="display:block;padding:0 1.25rem"> 221</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">type</span><span> ApiHandler </span><span class="token" style="color:var(--code-token-keyword)">struct</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 222</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// ç»§æ¿èªIoc对象</span><span> 223</span></span><span style="display:block;padding:0 1.25rem"><span> ioc</span><span class="token" style="color:var(--code-token-punctuation)">
223.</span><span>ObjectImpl 224</span></span><span style="display:block;padding:0 1.25rem"> 225</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// mysql dbä¾èµ</span><span> 226</span></span><span style="display:block;padding:0 1.25rem"><span> db </span><span class="token operator">*</span><span>gorm</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>DB 227</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 228</span></span><span style="display:block;padding:0 1.25rem"> 229</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// è¦å对象çåç§°, 该åç§°åç§°ä¼ä½ç°å¨APIçè·¯å¾åç¼éé¢</span><span> 230</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// æ¯å¦: /simple/api/v1/module_a/db_stats</span><span> 231</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// å ¶ä¸/simple/api/v1/module_a å°±æ¯å¯¹è±¡APIåç¼, å½åè§åå¦ä¸:</span><span> 232</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// <service_name>/<path_prefix>/<object_version>/<object_name></span><span> 233</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>h </span><span class="token operator">*</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-function)">Name</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">string</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 234</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-keyword)">return</span><span> </span><span class="token" style="color:var(--code-token-string)">"module_a"</span><span> 235</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 236</span></span><span style="display:block;padding:0 1.25rem"> 237</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// åå§ådb屿§, ä»iocçé ç½®åºåè·åå ±ç¨å·¥å · gorm db对象</span><span> 238</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>h </span><span class="token operator">*</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-function)">Init</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-symbol)">error</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 239</span></span><span style="display:block;padding:0 1.25rem"><span> h</span><span class="token" style="color:var(--code-token-punctuation)">
239.</span><span>db </span><span class="token operator">=</span><span> datasource</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">DB</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 240</span></span><span style="display:block;padding:0 1.25rem"> 241</span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// è¿è¡ä¸å¡æ´é², router éè¿ioc</span><span> 242</span></span><span style="display:block;padding:0 1.25rem"><span> router </span><span class="token operator">:=</span><span> ioc_gin</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">RootRouter</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 243</span></span><span style="display:block;padding:0 1.25rem"><span> router</span><span class="token" style="color:var(--code-token-punctuation)">
243.</span><span class="token" style="color:var(--code-token-function)">GET</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-string)">"/db_stats"</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> h</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>GetDbStats</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 244</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-keyword)">return</span><span> </span><span class="token boolean">nil</span><span> 245</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 246</span></span><span style="display:block;padding:0 1.25rem"> 247</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-comment)">// ä¸å¡åè½</span><span> 248</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>h </span><span class="token operator">*</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-function)">GetDbStats</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>ctx </span><span class="token operator">*</span><span>gin</span><span class="token" style="color:var(--code-token-punctuation)">
248.</span><span>Context</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 249</span></span><span style="display:block;padding:0 1.25rem"><span> db</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> </span><span class="token boolean">_</span><span> </span><span class="token operator">:=</span><span> h</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>db</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">DB</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 250</span></span><span style="display:block;padding:0 1.25rem"><span> ctx</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">JSON</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>http</span><span class="token" style="color:var(--code-token-punctuation)">
250.</span><span>StatusOK</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> gin</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>H</span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 251</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"data"</span><span class="token" style="color:var(--code-token-punctuation)">:</span><span> db</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Stats</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 252</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-punctuation)">}</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 253</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 254<h2 id="å·¥ç¨å" class="mt-12 mb-6 pt-8 text-2xl tracking-tight border-t-[1px] border-divider-light title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#å·¥ç¨å">#</a>å·¥ç¨å</h2> 255<p class="my-4 leading-7">æåå¦çå°è¿éå¯è½ä¼ååä¸è§£, ä¸é¢è¿æ ·ç®åçåè½, æå è¡ä»£ç å°±è½æå®, 为å¥è¦æé£ä¹å¤æ:</p> 256<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-function)">main</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 257</span></span><span style="display:block;padding:0 1.25rem"><span> r </span><span class="token operator">:=</span><span> gin</span><span class="token" style="color:var(--code-token-punctuation)">
257.</span><span class="token" style="color:var(--code-token-function)">Default</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 258</span></span><span style="display:block;padding:0 1.25rem"><span> dsn </span><span class="token operator">:=</span><span> </span><span class="token" style="color:var(--code-token-string)">"user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"</span><span> 259</span></span><span style="display:block;padding:0 1.25rem"><span> db</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> err </span><span class="token operator">:=</span><span> gorm</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Open</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>mysql</span><span class="token" style="color:var(--code-token-punctuation)">
259.</span><span class="token" style="color:var(--code-token-function)">Open</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>dsn</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> </span><span class="token operator">&</span><span>gorm</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>Config</span><span class="token" style="color:var(--code-token-punctuation)">{</span><span class="token" style="color:var(--code-token-punctuation)">}</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 260</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-keyword)">if</span><span> err </span><span class="token operator">!=</span><span> </span><span class="token boolean">nil</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 261</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-function)">panic</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>err</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 262</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-punctuation)">}</span><span> 263</span></span><span style="display:block;padding:0 1.25rem"><span> r</span><span class="token" style="color:var(--code-token-punctuation)">
263.</span><span class="token" style="color:var(--code-token-function)">GET</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-string)">"/simple/api/v1/module_a/db_stats"</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> </span><span class="token" style="color:var(--code-token-keyword)">func</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>ctx </span><span class="token operator">*</span><span>gin</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>Context</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 264</span></span><span style="display:block;padding:0 1.25rem"><span> db</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> </span><span class="token boolean">_</span><span> </span><span class="token operator">:=</span><span> db</span><span class="token" style="color:var(--code-token-punctuation)">
264.</span><span class="token" style="color:var(--code-token-function)">DB</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 265</span></span><span style="display:block;padding:0 1.25rem"><span> ctx</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">JSON</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>http</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>StatusOK</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> gin</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>H</span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 266</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-string)">"data"</span><span class="token" style="color:var(--code-token-punctuation)">:</span><span> db</span><span class="token" style="color:var(--code-token-punctuation)">
266.</span><span class="token" style="color:var(--code-token-function)">Stats</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> 267</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-punctuation)">}</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 268</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-punctuation)">}</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 269</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 270<p class="my-4 leading-7">é对ç®åçåè½, ä¸é¢è¿æ ·ååºç¶æ²¡é®é¢, çè³æ´æè¯», 使¯éçä¸å¡åå±, åè½è¶æ¥è¶å¤, ä¸å¡è¶æ¥è¶å¤æ, å¦æè¿æ ·å, å°äºåæåºæ¬æ æ³ç»´æ¤ã</p> 271<p class="my-4 leading-7">æ³è¦ä¸å¡ä»ç®åå°å¤æ, 代ç ç»´æ¤çå¤æåº¦ä¸å¢å , æä»¬å°±éè¦å¯¹å·¥ç¨è¿è¡ç»ä¸ç设计, æä¾ç»ä¸çæ å, æä»¬éè¿ä¸é¢3个纬度ä½éªmcube å·¥ç¨å带æ¥ç好å¤:</p> 272<ul class="list-disc pl-5 my-4 leading-7"> 273<li class="[&:not(:first-child)]:mt-2">æ ååå·¥ç¨é ç½®</li> 274<li class="[&:not(:first-child)]:mt-2">峿å³ç¨çç»ä»¶</li> 275<li class="[&:not(:first-child)]:mt-2">çµæ´»ç模åç»å</li> 276</ul> 277<h3 id="æ ååå·¥ç¨é ç½®" class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#æ ååå·¥ç¨é ç½®">#</a>æ ååå·¥ç¨é ç½®</h3> 278<p class="my-4 leading-7">ç»ä¸äºé¡¹ç®çé ç½®å è½½æ¹å¼:</p> 279<ul class="list-disc pl-5 my-4 leading-7"> 280<li class="[&:not(:first-child)]:mt-2">ç¯å¢åé</li> 281<li class="[&:not(:first-child)]:mt-2">é ç½®æä»¶<!-- --> 282<ul class="list-disc pl-5 my-4 leading-7"> 283<li class="[&:not(:first-child)]:mt-2">TOML</li> 284<li class="[&:not(:first-child)]:mt-2">YAML</li> 285<li class="[&:not(:first-child)]:mt-2">JSON</li> 286</ul> 287</li> 288</ul> 289<p class="my-4 leading-7">ä¸é¢æ¯é¡¹ç®é ç½®æä»¶(etc/application.toml)å 容:</p> 290<div class="language-toml"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-toml" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-punctuation)">[</span><span class="token class-name" style="display:content">app</span><span class="token" style="color:var(--code-token-punctuation)">]</span><span> 291</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">name</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"simple"</span><span> 292</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">key</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"this is your app key"</span><span> 293</span></span><span style="display:block;padding:0 1.25rem"> 294</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">[</span><span class="token class-name" style="display:content">http</span><span class="token" style="color:var(--code-token-punctuation)">]</span><span> 295</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">host</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"127.0.0.1"</span><span> 296</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">port</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token number">8020</span><span> 297</span></span><span style="display:block;padding:0 1.25rem"> 298</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">[</span><span class="token class-name" style="display:content">datasource</span><span class="token" style="color:var(--code-token-punctuation)">]</span><span> 299</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">host</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"127.0.0.1"</span><span> 300</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">port</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token number">3306</span><span> 301</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">username</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"root"</span><span> 302</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">password</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"123456"</span><span> 303</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">database</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"test"</span><span> 304</span></span><span style="display:block;padding:0 1.25rem"> 305</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">[</span><span class="token class-name" style="display:content">log</span><span class="token" style="color:var(--code-token-punctuation)">]</span><span> 306</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">level</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"debug"</span><span> 307</span></span><span style="display:block;padding:0 1.25rem"> 308</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">[</span><span class="token class-name" style="display:content">log.file</span><span class="token" style="color:var(--code-token-punctuation)">]</span><span> 309</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">enable</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token boolean">true</span><span> 310</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-parameter)">file_path</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"logs/app.log"</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d">
310<path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 311<p class="my-4 leading-7">æ´å¤é ç½®è§å·¦ä¾§åºç¨é ç½®æ¿å</p> 312<h3 id="峿å³ç¨çç»ä»¶" class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#峿å³ç¨çç»ä»¶">#</a>峿å³ç¨çç»ä»¶</h3> 313<p class="my-4 leading-7">éè¿ç®åçé 置就è½ä¸ºé¡¹ç®æ·»å :</p> 314<ul class="list-disc pl-5 my-4 leading-7"> 315<li class="[&:not(:first-child)]:mt-2">æ£æ¥æ£æ¥(Health Chcek)</li> 316<li class="[&:not(:first-child)]:mt-2">åºç¨ææ çæ§(Metric)</li> 317</ul> 318<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">import</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span> 319</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¼å¯Healthå¥åº·æ£æ¥</span><span> 320</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token boolean">_</span><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc/apps/health/gin"</span><span> 321</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¼å¯Metric</span><span> 322</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token boolean">_</span><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/mcube/v2/ioc/apps/metric/gin"</span><span> 323</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">)</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 324<p class="my-4 leading-7">å¯å¨è¿å, 卿¥å¿éå°±è½çå°è¿2个åè½å¼å¯äº:</p> 325<div class="language-sh"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-sh" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span>2024-01-05T11:30:00+08:00 INFO health/gin/check.go:52 > Get the Health using http://127.0.0.1:8020/healthz component:HEALTH_CHECK 326</span></span><span style="display:block;padding:0 1.25rem">2024-01-05T11:30:00+08:00 INFO metric/gin/metric.go:51 > Get the Metric using http://127.0.0.1:8020/metrics component:METRIC</span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d">
326<path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 327<p class="my-4 leading-7">å½ç¶ä½ ä¹å¯ä»¥éè¿é ç½®æ¥ä¿®æ¹åè½çURLè·¯å¾:</p> 328<div class="language-toml"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-toml" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-punctuation)">[</span><span class="token class-name" style="display:content">health</span><span class="token" style="color:var(--code-token-punctuation)">]</span><span> 329</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">path</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"/healthz"</span><span> 330</span></span><span style="display:block;padding:0 1.25rem"> 331</span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">[</span><span class="token class-name" style="display:content">metric</span><span class="token" style="color:var(--code-token-punctuation)">]</span><span> 332</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">enable</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token boolean">true</span><span> 333</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">provider</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"prometheus"</span><span> 334</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-parameter)">endpoint</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">=</span><span> </span><span class="token" style="color:var(--code-token-string)">"/metrics"</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 335<h3 id="åè½å¼ºå¤§ç模å" class="mt-10 mb-2 leading-7 text-xl title_fb7eb"><a class="link_a7cea header-anchor link_a9ef4 inline-link_f855c" aria-hidden="true" href="#åè½å¼ºå¤§ç模å">#</a>åè½å¼ºå¤§ç模å</h3> 336<p class="my-4 leading-7">卿å¡å¼åçè¿ç¨ä¸ï¼æä»¬å°ä¸äºéç¨åè½æå æä¸ä¸ªæ¨¡å, å¨é
336¡¹ç®ä¸å¼å ¥, è¿æ ·å¯ä»¥åå°éå¤ä»£ç , æé«å¼åæçã</p> 337<p class="my-4 leading-7">ä¸é¢æ¯ä¸ä¸ªIAM(èº«ä»½ä¸æé管ç)模å:</p> 338<ul class="list-disc pl-5 my-4 leading-7"> 339<li class="[&:not(:first-child)]:mt-2">管çç®¡çæ¥å£</li> 340<li class="[&:not(:first-child)]:mt-2">令çç®¡çæ¥å£</li> 341<li class="[&:not(:first-child)]:mt-2">æéä¸é´ä»¶</li> 342<li class="[&:not(:first-child)]:mt-2">åå§åçCLI</li> 343</ul> 344<p class="my-4 leading-7"><img src="/img/mcube/iam.png" alt="iam"/></p> 345<p class="my-4 leading-7">å¨ç¨åºå¯å¨æ¶å¼å ¥æ¨¡å:</p> 346<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-keyword)">import</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span> 347</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¼å ¥IAM模åç»ä»¶</span><span> 348</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token boolean">_</span><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/modules/iam"</span><span> 349</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token" style="color:var(--code-token-comment)">// å¼å ¥IAM模åCLIå·¥å ·</span><span> 350</span></span><span style="display:block;padding:0 1.25rem"><span> </span><span class="token boolean">_</span><span> </span><span class="token" style="color:var(--code-token-string)">"github.com/infraboard/modules/iam/cmd"</span><span> 351</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">)</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 352<p class="my-4 leading-7">ç¶ååå§å:</p> 353<div class="language-sh"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-sh" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span># åå§å管çåç¨æ· 354</span></span><span style="display:block;padding:0 1.25rem">$ modules/iam/example â¹main*⺠» go run main.go init 1 âµ 355</span><span style="display:block;padding:0 1.25rem">? 请è¾å ¥ç®¡çåç¨æ·åç§°: admin 356</span><span style="display:block;padding:0 1.25rem">? 请è¾å ¥ç®¡çåå¯ç : ****** 357</span><span style="display:block;padding:0 1.25rem">? 忬¡è¾å ¥ç®¡çåå¯ç : ******</span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d">
357<path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 358<p class="my-4 leading-7">å¨ä¸å¡æ¥å£å¼åä¸ï¼ä½¿ç¨ä¸é´ä»¶ å°±å¼å ¥ç身份认è¯åRBACé´æ</p> 359<div class="language-go"><div class="rspress-code-content rspress-scrollbar"><div><pre class="code" style="background-color:inherit"><code class="language-go" style="white-space:pre"><span style="display:block;padding:0 1.25rem"><span class="token" style="color:var(--code-token-comment)">// APIè·¯ç±</span><span> 360</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-keyword)">func</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>h </span><span class="token operator">*</span><span>ApiHandler</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-function)">Registry</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>r gin</span><span class="token" style="color:var(--code-token-punctuation)">
360.</span><span>IRouter</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> </span><span class="token" style="color:var(--code-token-punctuation)">{</span><span> 361</span></span><span style="display:block;padding:0 1.25rem"><span> r</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Use</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>middleware</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">Auth</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 362</span></span><span style="display:block;padding:0 1.25rem"><span> r</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span class="token" style="color:var(--code-token-function)">GET</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span class="token" style="color:var(--code-token-string)">"/db_stats"</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> middleware</span><span class="token" style="color:var(--code-token-punctuation)">
362.</span><span class="token" style="color:var(--code-token-function)">Perm</span><span class="token" style="color:var(--code-token-punctuation)">(</span><span>user</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>ROLE_ADMIN</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span class="token" style="color:var(--code-token-punctuation)">,</span><span> h</span><span class="token" style="color:var(--code-token-punctuation)">.</span><span>DBStats</span><span class="token" style="color:var(--code-token-punctuation)">)</span><span> 363</span></span><span style="display:block;padding:0 1.25rem"><span></span><span class="token" style="color:var(--code-token-punctuation)">}</span></span></code></pre></div><div class="code-button-group_fb445"><button title="Toggle code wrap"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrapped_fb89b"><path fill="#22a041" d="M21 5H3v2h18zM3 19h7v-2H3zm0-6h15c1 0 2 .43 2 2s-1 2-2 2h-2v-2l-4 3 4 3v-2h2c2.95 0 4-1.27 4-4 0-2.72-1-4-4-4H3z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" class="icon-wrap_ccd3d"><path fill="currentColor" d="M16 7H3V5h13zM3 19h13v-2H3zm19-7-4-3v2H3v2h15v2z"></path></svg></button><button class="code-copy-button_c5089" title="Copy code"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 30 30" class="icon-copy_ef942"><path fill="currentColor" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"></path><path fill="currentColor" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"></path></svg><svg width="32" height="32" viewBox="0 0 30 30" class="icon-success_d5ec0"><path fill="#49cd37" d="m13 24-9-9 1.414-1.414L13 21.171 26.586 7.586 28 9z"></path></svg></button></div></div></div> 364<p class="my-4 leading-7">模åçå ·ä½ä½¿ç¨ææ¡£å¯ä»¥åè: <a href="https://github.com/infraboard/modules/tree/main/iam" rel="noopener noreferrer" target="_blank" class="link_a7cea link_a9ef4 inline-link_f855c">IAM模å</a></p><!--/$--></div><div class="rspress-doc-footer"><footer class="mt-8"><div class="xs:flex pb-5 px-2 justify-end items-center"></div><div class="flex flex-col"></div><div class="flex flex-col sm:flex-row sm:justify-around gap-4 pt-6"><div class="prev_c92d1 flex flex-col"><a href="/guide/arch.html" class="link_a7cea pager-link_e0d2d"><span class="desc_dcc01">ä¸ä¸é¡µ</span><span class="title_a3acb">æ¶æç念</span></a></div><div class="next_c11be flex flex-col"><a href="/guide/framework/ioc.html" class="link_a7cea pager-link_e0d2d next_ad355"><span class="desc_dcc01">ä¸ä¸é¡µ</span><span class="title_a3acb">æ¡æ¶åç</span></a></div></div></footer></div></div><div class="aside-container_bc5fa"><div class="flex flex-col"><div id="aside-container" class="relative text-sm font-medium"><div class="leading-7 block text-sm font-semibold pl-3">ç®å½</div><nav class="mt-1"><ul class="relative"><li><a href="#æ ¸å¿æ¦å¿µ" title="æ ¸å¿æ¦å¿µ" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:0;font-weight:semibold"><span class="aside-link-text block">æ ¸å¿æ¦å¿µ</span></a></li><li><a href="#åºç¨å¼å" title="åºç¨å¼å" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:0;font-weight:semibold"><span class="aside-link-text block">åºç¨å¼å</span></a></li><li><a href="#éæ©å¼åæ¡æ¶" title="éæ©å¼åæ¡æ¶" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">éæ©å¼åæ¡æ¶</span></a></li><li><a href="#objectæ¥å£" title="Objectæ¥å£" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">Objectæ¥å£</span></a></li><li><a href="#å®ç°objectæ¥å£-注å对象" title="å®ç°Objectæ¥å£, 注å对象" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">å®ç°Objectæ¥å£, 注å对象</span></a></li><li><a href="#对象åå§å" title="对象åå§å" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">对象åå§å</span></a></li><li><a href="#å¯å¨æå¡å¨" title="å¯å¨æå¡å¨" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">å¯å¨æå¡å¨</span></a></li><li><a href="#宿´ä»£ç " title="宿´ä»£ç " class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">宿´ä»£ç </span></a></li><li><a href="#å·¥ç¨å" title="å·¥ç¨å" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:0;font-weight:semibold"><span class="aside-link-text block">å·¥ç¨å</span></a></li><li><a href="#æ ååå·¥ç¨é ç½®" title="æ ååå·¥ç¨é ç½®" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">æ ååå·¥ç¨é ç½®</span></a></li><li><a href="#峿å³ç¨çç»ä»¶" title="峿å³ç¨çç»ä»¶" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">峿å³ç¨çç»ä»¶</span></a></li><li><a href="#åè½å¼ºå¤§ç模å" title="åè½å¼ºå¤§ç模å" class="aside-link transition-all duration-300 hover:text-text-1 text-text-2 block" style="margin-left:12px;font-weight:semibold"><span class="aside-link-text block">åè½å¼ºå¤§ç模å</span></a></li></ul></nav></div></div></div></div></div></div></section></div> 365 <div id="search-container"></div> 366
366<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"6c6d6f62f1cf42fb9c1d9486cacf87f1","r":1,"spa":2}' crossorigin="anonymous"></script>
366 367</body> 368</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.