1import{_ as s,c as a,a as e,o as l}from"./app-B7HVJ7q3.js";const i={};function p(t,n){return l(),a("div",null,[...n[0]||(n[0]=[e(`<h1 id="è´¡ç®æå" tabindex="-1"><a class="header-anchor" href="#è´¡ç®æå"><span>è´¡ç®æå</span></a></h1><p>æè°¢æ¨å¯¹ GoWind 项ç®çå ´è¶£ï¼æ¬æåå°å¸®å©æ¨äºè§£å¦ä½ä¸ºé¡¹ç®ååºè´¡ç®ã</p><h2 id="ç®å½" tabindex="-1"><a class="header-anchor" href="#ç®å½"><span>ç®å½</span></a></h2><ul><li><a href="#%E8%B4%A1%E7%8C%AE%E6%96%B9%E5%BC%8F">è´¡ç®æ¹å¼</a></li><li><a href="#%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E8%AE%BE%E7%BD%AE">å¼åç¯å¢è®¾ç½®</a></li><li><a href="#%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83">代ç è§è</a></li><li><a href="#%E6%8F%90%E4%BA%A4%E6%B5%81%E7%A8%8B">æäº¤æµç¨</a></li><li><a href="#pull-request-%E6%8C%87%E5%8D%97">Pull Request æå</a></li><li><a href="#%E6%8A%A5%E5%91%8A-bug">æ¥å Bug</a></li><li><a href="#%E5%8A%9F%E8%83%BD%E5%BB%BA%E8%AE%AE">åè½å»ºè®®</a></li><li><a href="#%E8%AE%B8%E5%8F%AF%E8%AF%81">许å¯è¯</a></li></ul><hr><h2 id="è´¡ç®æ¹å¼" tabindex="-1"><a class="header-anchor" href="#è´¡ç®æ¹å¼"><span>è´¡ç®æ¹å¼</span></a></h2><p>æä»¬æ¬¢è¿ä»¥ä¸å½¢å¼çè´¡ç®ï¼</p><h3 id="_1-代ç è´¡ç®" tabindex="-1"><a class="header-anchor" href="#_1-代ç è´¡ç®"><span>1. 代ç è´¡ç®</span></a></h3><ul><li>å®ç°æ°åè½</li><li>ä¿®å¤å·²ç¥ Bug</li><li>ä¼åæ§è½</li><li>æ¹è¿ä»£ç è´¨é</li></ul><h3 id="_2-ææ¡£è´¡ç®" tabindex="-1"><a class="header-anchor" href="#_2-ææ¡£è´¡ç®"><span>2. ææ¡£è´¡ç®</span></a></h3><ul><li>ç¼åææ¹è¿ææ¡£</li><li>å®å API 注é</li><li>ç¿»è¯ææ¡£</li><li>è¡¥å 使ç¨ç¤ºä¾</li></ul><h3 id="_3-æµè¯è´¡ç®" tabindex="-1"><a class="header-anchor" href="#_3-æµè¯è´¡ç®"><span>3. æµè¯è´¡ç®</span></a></h3><ul><li>ç¼ååå æµè¯</li><li>ç¼åéææµè¯</li><li>åç°å¹¶æ¥å Bug</li><li>æä¾æµè¯ç¨ä¾</li></ul><h3 id="_4-社åºè´¡ç®" tabindex="-1"><a class="header-anchor" href="#_4-社åºè´¡ç®"><span>4. 社åºè´¡ç®</span></a></h3><ul><li>å¨ GitHub Issues ä¸åçé®é¢</li><li>åä¸ Discussions 讨论</li><li>å享使ç¨ç»éªåæä½³å®è·µ</li><li>æ¨èç»æ´å¤ç¨æ·</li></ul><hr><h2 id="å¼åç¯å¢è®¾ç½®" tabindex="-1"><a class="header-anchor" href="#å¼åç¯å¢è®¾ç½®"><span>å¼åç¯å¢è®¾ç½®</span></a></h2><h3 id="ç¬¬ä¸æ¥-fork-项ç®" tabindex="-1"><a class="header-anchor" href="#ç¬¬ä¸æ¥-fork-项ç®"><span>ç¬¬ä¸æ¥ï¼Fork 项ç®</span></a></h3><p>è®¿é® <a href="https://github.com/tx7do/go-wind-admin" target="_blank" rel="noopener noreferrer">GoWind Admin ä»åº</a>ï¼ç¹å»å³ä¸è§ç <strong>Fork</strong> æé®ã</p><h3 id="ç¬¬äºæ¥-å 鿍ç-fork" tabindex="-1"><a class="header-anchor" href="#ç¬¬äºæ¥-å 鿍ç-fork"><span>ç¬¬äºæ¥ï¼å 鿍ç Fork</span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token function">git</span> clone https://github.com/YOUR_USERNAME/go-wind-admin.git</span> 2<span class="line"><span class="token builtin class-name">cd</span> go-wind-admin</span> 3<span class="line"></span> 4<span class="line"><span class="token comment"># æ·»å 䏿¸¸ä»åº</span></span> 5<span class="line"><span class="token function">git</span> remote <span class="token function">add</span> upstream https://github.com/tx7do/go-wind-admin.git</span> 6<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="ç¬¬ä¸æ¥-å建åè½åæ¯" tabindex="-1"><a class="header-anchor" href="#ç¬¬ä¸æ¥-å建åè½åæ¯"><span>ç¬¬ä¸æ¥ï¼å建åè½åæ¯</span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment"># æåææ°ä»£ç </span></span> 7<span class="line"><span class="token function">git</span> fetch upstream</span> 8<span class="line"><span class="token function">git</span> checkout <span class="token parameter variable">-b</span> feature/your-feature-name upstream/main</span> 9<span class="line"></span> 10<span class="line"><span class="token comment"># æè ä¿®å¤ Bug</span></span> 11<span class="line"><span class="token function">git</span> checkout <span class="token parameter variable">-b</span> fix/your-bug-fix upstream/main</span> 12<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="ç¬¬åæ¥-å®è£ ä¾èµ" tabindex="-1"><a class="header-anchor" href="#ç¬¬åæ¥-å®è£ ä¾èµ"><span>ç¬¬åæ¥ï¼å®è£ ä¾èµ</span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment"># å端ä¾èµ</span></span> 13<span class="line"><span class="token builtin class-name">cd</span> backend</span> 14<span class="line">go mod download</span> 15<span class="line"><span class="token function">make</span> init</span> 16<span class="line"><span class="token function">make</span> cli</span> 17<span class="line"></span> 18<span class="line"><span class="token comment"># å端ä¾èµ</span></span> 19<span class="line"><span class="token builtin class-name">cd</span> <span class="token punctuation">..</span>/frontend</span> 20<span class="line"><span class="token function">pnpm</span> <span class="token function">install</span></span> 21<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="ç¬¬äºæ¥-å¯å¨å¼åç¯å¢" tabindex="-1"><a class="header-anchor" href="#ç¬¬äºæ¥-å¯å¨å¼åç¯å¢"><span>ç¬¬äºæ¥ï¼å¯å¨å¼åç¯å¢</span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment"># ç»ç«¯ 1: å¯å¨å端æå¡</span></span> 22<span class="line"><span class="token builtin class-name">cd</span> backend</span> 23<span class="line">gow run admin</span> 24<span class="line"></span> 25<span class="line"><span class="token comment"># ç»ç«¯ 2: å¯å¨å端å¼åæå¡</span></span> 26<span class="line"><span class="token builtin class-name">cd</span> frontend</span> 27<span class="line"><span class="token function">pnpm</span> dev:antd</span> 28<span class="line"></span> 29<span class="line"><span class="token comment"># ç»ç«¯ 3: è¿è¡æµè¯ï¼å¯éï¼</span></span> 30<span class="line"><span class="token builtin class-name">cd</span> backend</span> 31<span class="line"><span class="token function">make</span> <span class="token builtin class-name">test</span></span> 32<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="代ç è§è" tabindex="-1">
32<a class="header-anchor" href="#代ç è§è"><span>代ç è§è</span></a></h2><h3 id="å端代ç è§è-go" tabindex="-1"><a class="header-anchor" href="#å端代ç è§è-go"><span>å端代ç è§èï¼Goï¼</span></a></h3><h4 id="å½åè§è" tabindex="-1"><a class="header-anchor" href="#å½åè§è"><span>å½åè§è</span></a></h4><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token comment">// å åï¼å°åï¼ä¸ä½¿ç¨ä¸å线</span></span> 33<span class="line"><span class="token keyword">package</span> mypackage</span> 34<span class="line"></span> 35<span class="line"><span class="token comment">// 常éï¼PascalCase</span></span> 36<span class="line"><span class="token keyword">const</span> <span class="token punctuation">(</span></span> 37<span class="line"> MaxConnections <span class="token operator">=</span> <span class="token number">100</span></span> 38<span class="line"> DefaultTimeout <span class="token operator">=</span> <span class="token number">30</span></span> 39<span class="line"><span class="token punctuation">)</span></span> 40<span class="line"></span> 41<span class="line"><span class="token comment">// 彿°åï¼PascalCaseï¼å¯¼åºï¼æ camelCaseï¼ç§æï¼</span></span> 42<span class="line"><span class="token keyword">func</span> <span class="token function">GetUserByID</span><span class="token punctuation">(</span>id <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">(</span><span class="token operator">*</span>User<span class="token punctuation">,</span> <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span> 43<span class="line"> <span class="token comment">// ...</span></span> 44<span class="line"><span class="token punctuation">}</span></span> 45<span class="line"></span> 46<span class="line"><span class="token keyword">func</span> <span class="token function">fetchUserData</span><span class="token punctuation">(</span>id <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">(</span><span class="token operator">*</span>userData<span class="token punctuation">,</span> <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span> 47<span class="line"> <span class="token comment">// ...</span></span> 48<span class="line"><span class="token punctuation">}</span></span> 49<span class="line"></span> 50<span class="line"><span class="token comment">// åéåï¼camelCase</span></span> 51<span class="line"><span class="token keyword">var</span> <span class="token punctuation">(</span></span> 52<span class="line"> userName <span class="token builtin">string</span></span> 53<span class="line"> userAge <span class="token builtin">int</span></span> 54<span class="line"><span class="token punctuation">)</span></span> 55<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="ä»£ç æ ¼å¼å" tabindex="-1"><a class="header-anchor" href="#ä»£ç æ ¼å¼å"><span>ä»£ç æ ¼å¼å</span></a></h4><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment">
55# ä½¿ç¨ gofmt æ ¼å¼å代ç </span></span> 56<span class="line">gofmt <span class="token parameter variable">-w</span> <span class="token builtin class-name">.</span></span> 57<span class="line"></span> 58<span class="line"><span class="token comment"># æè ä½¿ç¨ go fmt å½ä»¤</span></span> 59<span class="line">go <span class="token function">fmt</span> ./<span class="token punctuation">..</span>.</span> 60<span class="line"></span> 61<span class="line"><span class="token comment"># æ£æ¥ä»£ç 飿 ¼é®é¢</span></span> 62<span class="line">golangci-lint run</span> 63<span class="line"></span> 64<span class="line"><span class="token comment"># èªå¨ä¿®å¤æäºé®é¢</span></span> 65<span class="line">golint ./<span class="token punctuation">..</span>. <span class="token operator">|</span> <span class="token function">head</span> <span class="token parameter variable">-20</span></span> 66<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="ä»£ç æ³¨é" tabindex="-1"><a class="header-anchor" href="#ä»£ç æ³¨é"><span>ä»£ç æ³¨é</span></a></h4><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token comment">// GetUserByID æ ¹æ®ç¨æ· ID è·åç¨æ·ä¿¡æ¯</span></span> 67<span class="line"><span class="token comment">// è¿åç¨æ·å¯¹è±¡åå¯è½çé误</span></span> 68<span class="line"><span class="token keyword">func</span> <span class="token function">GetUserByID</span><span class="token punctuation">(</span>id <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">(</span><span class="token operator">*</span>User<span class="token punctuation">,</span> <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span> 69<span class="line"> <span class="token comment">// é¦å æ¥è¯¢ç¼å</span></span> 70<span class="line"> <span class="token keyword">if</span> cached <span class="token operator">:=</span> cache<span class="token punctuation">.</span><span class="token function">Get</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> cached <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span></span> 71<span class="line"> <span class="token keyword">return</span> cached<span class="token punctuation">.</span><span class="token punctuation">(</span><span class="token operator">*</span>User<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token boolean">nil</span></span> 72<span class="line"> <span class="token punctuation">}</span></span> 73<span class="line"> </span> 74<span class="line"> <span class="token comment">// 仿°æ®åºæ¥è¯¢</span></span> 75<span class="line"> user<span class="token punctuation">,</span> err <span class="token operator">:=</span> db<span class="token punctuation">.</span><span class="token function">Query</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span></span> 76<span class="line"> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span></span> 77<span class="line"> <span class="token keyword">return</span> <span class="token boolean">nil</span><span class="token punctuation">,</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"failed to query user: %w"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span></span> 78<span class="line"> <span class="token punctuation">}</span></span> 79<span class="line"> </span> 80<span class="line"> <span class="token comment">// ç¼åç»æ</span></span> 81<span class="line"> cache<span class="token punctuation">.</span><span class="token function">Set</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> user<span class="token punctuation">)</span></span> 82<span class="line"> <span class="token keyword">return</span> user<span class="token punctuation">,</span> <span class="token boolean">nil</span></span> 83<span class="line"><span class="token punctuation">}</span></span> 84<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="é误å¤ç" tabindex="-1"><a class="header-anchor" href="#é误å¤ç"><span>é误å¤ç</span></a></h4><div class="language-go line-numbers-mode" data-highlighter="prismjs" data-ext="go"><pre><code><span class="line"><span class="token comment">// â 䏿¨èï¼å¿½ç¥é误</span></span> 85<span class="line"><span class="token boolean">_</span> <span class="token operator">=</span> json<span class="token punctuation">.</span><span class="token function">Unmarshal</span><span class="token punctuation">(</span>data<span class="token punctuation">,</span> <span class="token operator">&</span>obj<span class="token punctuation">)</span></span> 86<span class="line"></span> 87<span class="line"><span class="token comment">// â æ¨èï¼å¤çé误</span></span> 88<span class="line"><span class="token keyword">if</span> err <span class="token operator">:=</span> json<span class="token punctuation">.</span><span class="token function">Unmarshal</span><span class="token punctuation">(</span>data<span class="token punctuation">,</span> <span class="token operator">&</span>obj<span class="token punctuation">)</span><span class="token punctuation">;</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span></span> 89<span class="line"> <span class="token keyword">return</span> fmt<span class="token punctuation">.</span><span class="token function">
89Errorf</span><span class="token punctuation">(</span><span class="token string">"failed to unmarshal data: %w"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span></span> 90<span class="line"><span class="token punctuation">}</span></span> 91<span class="line"></span> 92<span class="line"><span class="token comment">// â 使ç¨é误å è£ </span></span> 93<span class="line">err <span class="token operator">:=</span> <span class="token function">doSomething</span><span class="token punctuation">(</span><span class="token punctuation">)</span></span> 94<span class="line"><span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span></span> 95<span class="line"> <span class="token keyword">return</span> fmt<span class="token punctuation">.</span><span class="token function">Errorf</span><span class="token punctuation">(</span><span class="token string">"operation failed: %w"</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span></span> 96<span class="line"><span class="token punctuation">}</span></span> 97<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="å端代ç è§è-typescript-vue" tabindex="-1"><a class="header-anchor" href="#å端代ç è§è-typescript-vue"><span>å端代ç è§èï¼TypeScript/Vueï¼</span></a></h3><h4 id="æä»¶ç»æ" tabindex="-1"><a class="header-anchor" href="#æä»¶ç»æ"><span>æä»¶ç»æ</span></a></h4><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code><span class="line">src/</span> 98<span class="line">âââ components/ # å ¬å ±ç»ä»¶</span> 99<span class="line">â âââ Button.vue</span> 100<span class="line">â âââ Modal.vue</span> 101<span class="line">âââ views/ # 页é¢ç»ä»¶</span> 102<span class="line">â âââ Dashboard.vue</span> 103<span class="line">â âââ UserList.vue</span> 104<span class="line">âââ stores/ # Pinia ç¶æç®¡ç</span> 105<span class="line">â âââ userStore.ts</span> 106<span class="line">âââ services/ # API æå¡</span> 107<span class="line">â âââ userService.ts</span> 108<span class="line">âââ types/ # TypeScript ç±»åå®ä¹</span> 109<span class="line">â âââ user.ts</span> 110<span class="line">âââ utils/ # å·¥å ·å½æ°</span> 111<span class="line"> âââ format.ts</span> 112<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="å½åè§è-1" tabindex="-1"><a class="header-anchor" href="#å½åè§è-1"><span>å½åè§è</span></a></h4><div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code><span class="line"><span class="token comment">// ç»ä»¶æä»¶ï¼PascalCase</span></span> 113<span class="line"><span class="token comment">// components/UserCard.vue</span></span> 114<span class="line"></span> 115<span class="line"><span class="token comment">// 页颿件ï¼PascalCase</span></span> 116<span class="line"><span class="token comment">// views/UserDetail.vue</span></span> 117<span class="line"></span> 118<span class="line"><span class="token comment">
118// å·¥å ·æä»¶ï¼camelCase</span></span> 119<span class="line"><span class="token comment">// utils/formatDate.ts</span></span> 120<span class="line"></span> 121<span class="line"><span class="token comment">// ç±»åå®ä¹ï¼PascalCase</span></span> 122<span class="line"><span class="token keyword">interface</span> <span class="token class-name">User</span> <span class="token punctuation">{</span></span> 123<span class="line"> id<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span></span> 124<span class="line"> name<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span></span> 125<span class="line"><span class="token punctuation">}</span></span> 126<span class="line"></span> 127<span class="line"><span class="token keyword">type</span> <span class="token class-name">UserRole</span> <span class="token operator">=</span> <span class="token string">'admin'</span> <span class="token operator">|</span> <span class="token string">'user'</span> <span class="token operator">|</span> <span class="token string">'guest'</span><span class="token punctuation">;</span></span> 128<span class="line"></span> 129<span class="line"><span class="token comment">// 常éï¼UPPER_SNAKE_CASE</span></span> 130<span class="line"><span class="token keyword">const</span> <span class="token constant">MAX_RETRIES</span> <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span></span> 131<span class="line"><span class="token keyword">const</span> <span class="token constant">API_BASE_URL</span> <span class="token operator">=</span> <span class="token string">'https://api.example.com'</span><span class="token punctuation">;</span></span> 132<span class="line"></span> 133<span class="line"><span class="token comment">// 彿°ååéï¼camelCase</span></span> 134<span class="line"><span class="token keyword">function</span> <span class="token function">getUserData</span><span class="token punctuation">(</span>userId<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span> 135<span class="line"> <span class="token comment">// ...</span></span> 136<span class="line"><span class="token punctuation">}</span></span> 137<span class="line"></span> 138<span class="line"><span class="token keyword">const</span> userData <span class="token operator">=</span> <span class="token generic-function"><span class="token function">ref</span><span class="token generic class-name"><span class="token operator"><</span>User <span class="token operator">|</span> <span class="token keyword">null</span><span class="token operator">></span></span></span><span class="token punctuation">(</span><span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span> 139<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="ä»£ç æ ¼å¼å-1" tabindex="-1"><a class="header-anchor" href="#ä»£ç æ ¼å¼å-1"><span>ä»£ç æ ¼å¼å</span></a></h4><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment">
139# ä½¿ç¨ ESLint æ£æ¥ä»£ç </span></span> 140<span class="line"><span class="token function">pnpm</span> lint</span> 141<span class="line"></span> 142<span class="line"><span class="token comment"># ä½¿ç¨ Prettier æ ¼å¼å代ç </span></span> 143<span class="line"><span class="token function">pnpm</span> <span class="token function">format</span></span> 144<span class="line"></span> 145<span class="line"><span class="token comment"># ä¿®å¤ ESLint é®é¢</span></span> 146<span class="line"><span class="token function">pnpm</span> lint:fix</span> 147<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="vue3-è§è" tabindex="-1"><a class="header-anchor" href="#vue3-è§è"><span>Vue3 è§è</span></a></h4><div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code><span class="line"><span class="token comment">// â æ¨èï¼ä½¿ç¨ <script setup> è¯æ³</span></span> 148<span class="line"><span class="token operator"><</span>script setup</span> 149<span class="line">lang <span class="token operator">=</span> <span class="token string">"ts"</span> <span class="token operator">></span></span> 150<span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span>ref<span class="token punctuation">,</span> computed<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'vue'</span></span> 151<span class="line"><span class="token keyword">import</span> <span class="token keyword">type</span> <span class="token punctuation">{</span>User<span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'@/types/user'</span></span> 152<span class="line"></span> 153<span class="line"><span class="token keyword">const</span> userName <span class="token operator">=</span> <span class="token generic-function"><span class="token function">ref</span><span class="token generic class-name"><span class="token operator"><</span><span class="token builtin">string</span><span class="token operator">></span></span></span><span class="token punctuation">(</span><span class="token string">''</span><span class="token punctuation">)</span></span> 154<span class="line"><span class="token keyword">const</span> userList <span class="token operator">=</span> <span class="token generic-function"><span class="token function">ref</span><span class="token generic class-name"><span class="token operator"><</span>User<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token operator">></span></span></span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span></span> 155<span class="line"></span> 156<span class="line"><span class="token keyword">const</span> filteredList <span class="token operator">=</span> <span class="token function">computed</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span></span> 157<span class="line"> <span class="token keyword">return</span> userList<span class="token punctuation">.</span>value<span class="token punctuation">.</span><span class="token function">filter</span><span class="token punctuation">(</span>user <span class="token operator">=></span></span> 158<span class="line"> user<span class="token punctuation">.</span>name<span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span>userName<span class="token punctuation">.</span>value<span class="token punctuation">)</span></span> 159<span class="line"> <span class="token punctuation">)</span></span> 160<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span></span> 161<span class="line"></span> 162<span class="line"><span class="token keyword">const</span> <span class="token function-variable function">handleSubmit</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span></span> 163<span class="line"> <span class="token comment">// å¤çæäº¤</span></span> 164<span class="line"><span class="token punctuation">}</span></span> 165<span class="line"><span class="token operator"><</span><span class="token operator">/</span>script<span class="token operator">></span></span> 166<span class="line"></span> 167<span class="line"><span class="token operator"><</span> template <span class="token operator">></span></span> 168<span class="line"><span class="token operator"><</span>div <span class="token keyword">class</span> <span class="token operator">=</span> <span class="token string">"user-container"</span> <span class="token operator">></span></span> 169<span class="line"><span class="token operator"><</span>input v <span class="token operator">-</span> model <span class="token operator">=</span> <span class="token string">"userName"</span></span> 170<span class="line">placeholder <span class="token operator">=</span> <span class="token string">"æç´¢ç¨æ·"</span> <span class="token operator">/</span> <span class="token operator">></span></span> 171<span class="line"> <span class="token operator"><</span>ul<span class="token operator">></span></span> 172<span class="line">
172 <span class="token operator"><</span>li v <span class="token operator">-</span></span> 173<span class="line"><span class="token keyword">for</span><span class="token operator">=</span> <span class="token string">"user in filteredList"</span> <span class="token operator">:</span></span> 174<span class="line">key <span class="token operator">=</span> <span class="token string">"user.id"</span> <span class="token operator">></span></span> 175<span class="line"> <span class="token punctuation">{</span></span> 176<span class="line"><span class="token punctuation">{</span></span> 177<span class="line"> user<span class="token punctuation">.</span>name</span> 178<span class="line"><span class="token punctuation">}</span></span> 179<span class="line"><span class="token punctuation">}</span></span> 180<span class="line"><span class="token operator"><</span><span class="token operator">/</span>li<span class="token operator">></span></span> 181<span class="line"><span class="token operator"><</span> <span class="token operator">/</span>ul<span class="token operator">></span></span> 182<span class="line"><span class="token operator"><</span> <span class="token operator">/</span>div<span class="token operator">></span></span> 183<span class="line"><span class="token operator"><</span> <span class="token operator">/</span>template<span class="token operator">></span></span> 184<span class="line"></span> 185<span class="line"><span class="token operator"><</span> style</span> 186<span class="line">scoped <span class="token operator">></span></span> 187<span class="line"><span class="token punctuation">.</span></span> 188<span class="line">user <span class="token operator">-</span> container</span> 189<span class="line"><span class="token punctuation">{</span></span> 190<span class="line"> padding<span class="token operator">:</span> <span class="token number">20</span></span> 191<span class="line"> px<span class="token punctuation">;</span></span> 192<span class="line"><span class="token punctuation">}</span></span> 193<span class="line"><span class="token operator"><</span><span class="token operator">/</span>style<span class="token operator">></span></span> 194<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="typescript-è§è" tabindex="-1"><a class="header-anchor" href="#typescript-è§è"><span>TypeScript è§è</span></a></h4><div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code><span class="line"><span class="token comment">// æ»æ¯æç¡®æå®ç±»å</span></span> 195<span class="line"><span class="token keyword">interface</span> <span class="token class-name">UserResponse</span> <span class="token punctuation">{</span></span> 196<span class="line"> code<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span></span> 197<span class="line"> message<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span></span> 198<span class="line"> data<span class="token operator">:</span> User <span class="token operator">|</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span> 199<span class="line"><span class="token punctuation">}</span></span> 200<span class="line"></span> 201<span class="line"><span class="token comment">// â æ¨è</span></span> 202<span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">getUserData</span><span class="token punctuation">(</span>id<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token builtin">Promise</span><span class="token operator"><</span>User <span class="token operator">|</span> <span class="token keyword">null</span><span class="token operator">></span> <span class="token punctuation">{</span></span> 203<span class="line"> <span class="token keyword">try</span> <span class="token punctuation">{</span></span> 204<span class="line">
204 <span class="token keyword">const</span> response <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">/api/users/</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>id<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></span> 205<span class="line"> <span class="token keyword">const</span> data<span class="token operator">:</span> UserResponse <span class="token operator">=</span> <span class="token keyword">await</span> response<span class="token punctuation">.</span><span class="token function">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span> 206<span class="line"> <span class="token keyword">return</span> data<span class="token punctuation">.</span>data<span class="token punctuation">;</span></span> 207<span class="line"> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span></span> 208<span class="line"> <span class="token builtin">console</span><span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'Failed to fetch user:'</span><span class="token punctuation">,</span> error<span class="token punctuation">)</span><span class="token punctuation">;</span></span> 209<span class="line"> <span class="token keyword">return</span> <span class="token keyword">null</span><span class="token punctuation">;</span></span> 210<span class="line"> <span class="token punctuation">}</span></span> 211<span class="line"><span class="token punctuation">}</span></span> 212<span class="line"></span> 213<span class="line"><span class="token comment">// â 䏿¨è</span></span> 214<span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">getUserData</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span> <span class="token punctuation">{</span></span> 215<span class="line"> <span class="token keyword">const</span> response <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">/api/users/</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>id<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></span> 216<span class="line"> <span class="token keyword">return</span> response<span class="token punctuation">.</span><span class="token function">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span> 217<span class="line"><span class="token punctuation">}</span></span> 218<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="protobuf-è§è" tabindex="-1"><a class="header-anchor" href="#protobuf-è§è"><span>
218Protobuf è§è</span></a></h3><div class="language-protobuf line-numbers-mode" data-highlighter="prismjs" data-ext="protobuf"><pre><code><span class="line"><span class="token comment">// å åï¼å°å</span></span> 219<span class="line"><span class="token keyword">package</span> api<span class="token punctuation">.</span>v1<span class="token punctuation">;</span></span> 220<span class="line"></span> 221<span class="line"><span class="token comment">// æ¶æ¯åï¼PascalCase</span></span> 222<span class="line"><span class="token keyword">message</span> <span class="token class-name">CreateUserRequest</span> <span class="token punctuation">{</span></span> 223<span class="line"> <span class="token comment">// åæ®µåï¼snake_case</span></span> 224<span class="line"> <span class="token builtin">string</span> user_name <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span></span> 225<span class="line"> <span class="token builtin">string</span> user_email <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span></span> 226<span class="line"> <span class="token builtin">int32</span> user_age <span class="token operator">=</span> <span class="token number">3</span><span class="token punctuation">;</span></span> 227<span class="line"><span class="token punctuation">}</span></span> 228<span class="line"></span> 229<span class="line"><span class="token comment">// æå¡åï¼PascalCase</span></span> 230<span class="line"><span class="token keyword">service</span> <span class="token class-name">UserService</span> <span class="token punctuation">{</span></span> 231<span class="line"> <span class="token keyword">rpc</span> <span class="token function">GetUser</span><span class="token punctuation">(</span><span class="token class-name">GetUserRequest</span><span class="token punctuation">)</span> <span class="token keyword">returns</span> <span class="token punctuation">(</span><span class="token class-name">GetUserResponse</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span> 232<span class="line"> <span class="token keyword">rpc</span> <span class="token function">CreateUser</span><span class="token punctuation">(</span><span class="token class-name">CreateUserRequest</span><span class="token punctuation">)</span> <span class="token keyword">returns</span> <span class="token punctuation">(</span><span class="token class-name">CreateUserResponse</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span> 233<span class="line"><span class="token punctuation">}</span></span> 234<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="æäº¤æµç¨" tabindex="-1"><a class="header-anchor" href="#æäº¤æµç¨"><span>æäº¤æµç¨</span></a></h2><h3 id="ç¬¬ä¸æ¥-å¼å代ç " tabindex="-1"><a class="header-anchor" href="#ç¬¬ä¸æ¥-å¼å代ç "><span>ç¬¬ä¸æ¥ï¼å¼å代ç </span></a></h3><p>卿¬å°å¼å忝ä¸å®ç°æ¨çåè½æä¿®å¤ã</p><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment"># æ¥çä¿®æ¹çæä»¶</span></span> 235<span class="line"><span class="token function">git</span> status</span> 236<span class="line"></span> 237<span class="line"><span class="token comment"># æ¥çå ·ä½ä¿®æ¹</span></span> 238<span class="line"><span class="token function">git</span> <span class="token function">diff</span></span> 239<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="ç¬¬äºæ¥-è¿è¡æµè¯åæ£æ¥" tabindex="-1"><a class="header-anchor" href="#ç¬¬äºæ¥-è¿è¡æµè¯åæ£æ¥"><span>ç¬¬äºæ¥ï¼è¿è¡æµè¯åæ£æ¥</span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment"># å端</span></span> 240<span class="line"><span class="token builtin class-name">cd</span> backend</span> 241<span class="line"><span class="token function">make</span> <span class="token builtin class-name">test</span>
241 <span class="token comment"># è¿è¡åå æµè¯</span></span> 242<span class="line"><span class="token function">make</span> lint <span class="token comment"># ä»£ç æ£æ¥</span></span> 243<span class="line"><span class="token function">make</span> cover <span class="token comment"># æµè¯è¦çç</span></span> 244<span class="line"></span> 245<span class="line"><span class="token comment"># å端</span></span> 246<span class="line"><span class="token builtin class-name">cd</span> <span class="token punctuation">..</span>/frontend</span> 247<span class="line"><span class="token function">pnpm</span> <span class="token builtin class-name">test</span> <span class="token comment"># è¿è¡æµè¯</span></span> 248<span class="line"><span class="token function">pnpm</span> lint <span class="token comment"># ä»£ç æ£æ¥</span></span> 249<span class="line"><span class="token function">pnpm</span> build <span class="token comment"># æå»ºæ£æ¥</span></span> 250<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="ç¬¬ä¸æ¥-æäº¤ä»£ç " tabindex="-1"><a class="header-anchor" href="#ç¬¬ä¸æ¥-æäº¤ä»£ç "><span>ç¬¬ä¸æ¥ï¼æäº¤ä»£ç </span></a></h3><p>使ç¨è§èç Commit æ¶æ¯æ ¼å¼ï¼éµå¾ª Conventional Commitsï¼ï¼</p><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token function">git</span> <span class="token function">add</span> <span class="token builtin class-name">.</span></span> 251<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"type(scope): description"</span></span> 252<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="commit-æ¶æ¯æ ¼å¼" tabindex="-1"><a class="header-anchor" href="#commit-æ¶æ¯æ ¼å¼"><span>Commit æ¶æ¯æ ¼å¼</span></a></h4><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code><span class="line"><type>(<scope>): <subject></span> 253<span class="line"></span> 254<span class="line"><body></span> 255<span class="line"></span> 256<span class="line"><footer></span> 257<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="ç±»å-type" tabindex="-1"><a class="header-anchor" href="#ç±»å-type"><span>ç±»åï¼typeï¼</span></a></h4><ul><li><code>feat</code>: æ°åè½</li><li><code>fix</code>: Bug ä¿®å¤</li><li><code>docs</code>: ææ¡£æ¹å¨</li><li><code>style</code>: 代ç 飿 ¼æ¹å¨ï¼æ ¼å¼åãåå·çï¼</li><li><code>refactor</code>: 代ç éæï¼ä¸æ¶ååè½æ¹å¨ï¼</li><li><code>perf</code>: æ§è½æ¹è¿</li><li><code>test</code>: æµè¯ç¸å ³</li><li><code>chore</code>: æå»ºãä¾èµãå·¥å ·çæ¹å¨</li><li><code>ci</code>: CI/CD é ç½®æ¹å¨</li></ul><h4 id="ä¾å" tabindex="-1"><a class="header-anchor" href="#ä¾å"><span>ä¾å</span></a></h4><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment"># æ°å¢ç¨æ·æ¨¡åçè·ååè½</span></span> 258<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"feat(user): add get user by id endpoint"</span></span> 259<span class="line"></span> 260<span class="line"><span class="token comment"># ä¿®å¤æéæ£æ¥ç Bug</span></span> 261<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"fix(auth): correct permission validation logic"</span></span> 262<span class="line"></span> 263<span class="line"><span class="token comment"># æ´æ°å¿«éå¼å§ææ¡£</span></span> 264<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"docs(readme): update quick start guide"</span></span> 265<span class="line"></span> 266<span class="line"><span class="token comment"># ä¼åæ°æ®åºæ¥è¯¢æ§è½</span></span> 267<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"perf(db): optimize user query with indexes"</span></span> 268<span class="line"></span> 269<span class="line"><span class="token comment"># 详ç»çæäº¤æ¶æ¯</span></span> 270<span class="line"><span class="token function">git</span> commit <span class="token parameter variable">-m</span> <span class="token string">"feat(user): add user pagination support</span> 271<span class="line"></span> 272<span class="line">- Add page and limit query parameters</span> 273<span class="line">- Add total count in response</span> 274<span class="line">- Add pagination metadata</span> 275<span class="line"></span> 276<span class="line">Closes #123"</span></span> 277<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="ç¬¬åæ¥-æ¨é代ç " tabindex="-1"><a class="header-anchor" href="#ç¬¬åæ¥-æ¨é代ç "><span>ç¬¬åæ¥ï¼æ¨é代ç </span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment"># æ¨éå°ä½ ç Fork</span></span> 278<span class="line"><span class="token function">git</span>
278 push origin feature/your-feature-name</span> 279<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="ç¬¬äºæ¥-å建-pull-request" tabindex="-1"><a class="header-anchor" href="#ç¬¬äºæ¥-å建-pull-request"><span>ç¬¬äºæ¥ï¼å建 Pull Request</span></a></h3><p>å¨ GitHub ä¸å建 Pull Requestã</p><hr><h2 id="pull-request-æå" tabindex="-1"><a class="header-anchor" href="#pull-request-æå"><span>Pull Request æå</span></a></h2><h3 id="pr-æ é¢è§è" tabindex="-1"><a class="header-anchor" href="#pr-æ é¢è§è"><span>PR æ é¢è§è</span></a></h3><p>使ç¨ç¸åçæ ¼å¼ä½ä¸º Commit æ¶æ¯ï¼</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code><span class="line">feat(admin): add user management page</span> 280<span class="line"></span> 281<span class="line">fix(auth): resolve login failure issue</span> 282<span class="line"></span> 283<span class="line">docs: update installation guide</span> 284<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="pr-æè¿°æ¨¡æ¿" tabindex="-1"><a class="header-anchor" href="#pr-æè¿°æ¨¡æ¿"><span>PR æè¿°æ¨¡æ¿</span></a></h3><div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code><span class="line"><span class="token title important"><span class="token punctuation">##</span> æè¿°</span></span> 285<span class="line"></span> 286<span class="line">请ç®è¦æè¿°æ¨çæ´æ¹å 容ã</span> 287<span class="line"></span> 288<span class="line"><span class="token title important"><span class="token punctuation">##</span> ç¸å ³ Issue</span></span> 289<span class="line"></span> 290<span class="line">Closes #123</span> 291<span class="line"></span> 292<span class="line"><span class="token title important"><span class="token punctuation">##</span> åæ´ç±»å</span></span> 293<span class="line"></span> 294<span class="line"><span class="token list punctuation">-</span> [ ] Bug ä¿®å¤</span> 295<span class="line"><span class="token list punctuation">-</span> [ ] æ°åè½</span> 296<span class="line"><span class="token list punctuation">-</span> [ ] Breaking æ¹å¨</span> 297<span class="line"><span class="token list punctuation">-</span> [ ] ææ¡£æ¹å¨</span> 298<span class="line"></span> 299<span class="line"><span class="token title important"><span class="token punctuation">##</span> å¦ä½æµè¯</span></span> 300<span class="line"></span> 301<span class="line">请æè¿°æµè¯æ¥éª¤ï¼</span> 302<span class="line"></span> 303<span class="line"><span class="token list punctuation">1.</span> æå¼é¡µé¢ ...</span> 304<span class="line"><span class="token list punctuation">2.</span> ç¹å»æé® ...</span> 305<span class="line"><span class="token list punctuation">3.</span> éªè¯ ...</span> 306<span class="line"></span> 307<span class="line"><span class="token title important"><span class="token punctuation">##</span> æªå¾ï¼å¦éç¨ï¼</span></span> 308<span class="line"></span> 309<span class="line">å¦ææ¯ UI æ¹å¨ï¼è¯·é䏿ªå¾ã</span> 310<span class="line"></span> 311<span class="line"><span class="token title important"><span class="token punctuation">##</span> æ£æ¥æ¸ å</span></span> 312<span class="line"></span> 313<span class="line"><span class="token list punctuation">-</span> [ ] æå·²éµå¾ªé¡¹ç®ç代ç è§è</span> 314<span class="line"><span class="token list punctuation">-</span> [ ] æå·²æ´æ°ç¸å ³ææ¡£</span> 315<span class="line"><span class="token list punctuation">-</span> [ ] æå·²æ·»å å¿ è¦çæµè¯</span> 316<span class="line"><span class="token list punctuation">-</span> [ ] æææµè¯é½éè¿äº</span> 317<span class="line"><span class="token list punctuation">-</span> [ ] 没æå¼å ¥æ°çè¦åæé误</span> 318<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="pr-å®¡æ ¸æ å" tabindex="-1"><a class="header-anchor" href="#pr-å®¡æ ¸æ å"><span>PR å®¡æ ¸æ å</span></a></h3><p>æä»¬ä¼ä»ä»¥ä¸å 个æ¹é¢å®¡æ ¸ PRï¼</p><ol><li><strong>åè½æ£ç¡®æ§</strong> - ä»£ç æ¯å¦å®ç°äºé¢æåè½</li><li><strong>代ç è´¨é</strong> - ä»£ç æ¯å¦éµå¾ªè§èï¼æäºç»´æ¤</li><li><strong>æ§è½å½±å</strong> - æ¯å¦ä¼å½±åç³»ç»æ§è½</li><li><strong>ååå ¼å®¹æ§</strong> - æ¯å¦ä¼ç ´åç°æåè½</li><li><strong>æµè¯è¦ç</strong> - æ¯å¦æå åçæµè¯</li><li><strong>ææ¡£å®æ´æ§</strong> - æ¯å¦æ´æ°äºç¸å ³ææ¡£</li></ol><h3 id="pr-åå¹¶è¦æ±" tabindex="-1"><a class="header-anchor" href="#pr-åå¹¶è¦æ±"><span>PR åå¹¶è¦æ±</span></a></h3><p>PR éè¦æ»¡è¶³ä»¥ä¸æ¡ä»¶æè½åå¹¶ï¼</p><ul><li>â è³å° 2 个维æ¤è çæ¹å</li><li>â ææ CI æ£æ¥éè¿</li><li>â æ å²çª</li><li>â 代ç å®¡æ ¸æè§å·²è§£å³</li></ul><hr><h2 id="æ¥å-bug" tabindex="-1"><a class="header-anchor" href="#æ¥å-bug"><span>æ¥å Bug</span></a></h2><h3 id="æäº¤-bug-æ¥å" tabindex="-1"><a class="header-anchor" href="#æäº¤-bug-æ¥å"><span>æäº¤ Bug æ¥å</span></a></h3><p>å¨ <a href="https://github.com/tx7do/go-wind-admin/issues" target="_blank" rel="noopener noreferrer">GitHub Issues</a> ä¸åå»ºæ° issueã</p><h3 id="bug-æ¥å模æ¿" tabindex="-1"><a class="header-anchor" href="#bug-æ¥å模æ¿"><span>Bug æ¥å模æ¿</span></a></h3><div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code><span class="line"><span class="token title important"><span class="token punctuation">##</span> Bug æè¿°</span></span> 319<span class="line"></span> 320<span class="line">æ¸ æ°ç®æ´å°æè¿° Bug æ¯ä»ä¹ã</span> 321<span class="line"></span> 322<span class="line"><span class="token title important"><span class="token punctuation">##</span> éç°æ¥éª¤</span></span> 323<span class="line"></span> 324<span class="line">éç° Bug çæ¥éª¤ï¼</span> 325<span class="line"></span> 326<span class="line"><span class="token list punctuation">1.</span> æå¼...</span> 327<span class="line"><span class="token list punctuation">2.</span> ç¹å»...</span> 328<span class="line"><span class="token list punctuation">3.</span> çå°é误...</span> 329<span class="line"></span> 330<span class="line"><span class="token title important"><span class="token punctuation">##</span> 颿è¡ä¸º</span></span> 331<span class="line"></span> 332<span class="line">åºè¯¥åçä»ä¹ã</span> 333<span class="line"></span> 334<span class="line"><span class="token title important"><span class="token punctuation">##</span> å®é è¡ä¸º</span></span> 335<span class="line"></span> 336<span class="line">å®é åçäºä»ä¹ã</span> 337<span class="line"></span> 338<span class="line"><span class="token title important"><span class="token punctuation">##</span> ç¯å¢ä¿¡æ¯</span></span> 339<span class="line"></span> 340<span class="line"><span class="token list punctuation">-</span> OS: [e.g. macOS 12.0]</span> 341<span class="line"><span class="token list punctuation">-</span> Go çæ¬: [e.g. 1.20]</span> 342<span class="line"><span class="token list punctuation">-</span> Node çæ¬: [e.g. 18.0]</span> 343<span class="line"><span class="token list punctuation">-</span> æµè§å¨: [e.g. Chrome 100]</span> 344<span class="line"></span> 345<span class="line"><span class="token title important"><span class="token punctuation">##</span> é误æ¥å¿</span></span> 346<span class="line"></span> 347<span class="line">妿æé误æ¥å¿ï¼è¯·ç²è´´å°è¿éã</span> 348<span class="line"></span> 349<span class="line"><span class="token title important"><span class="token punctuation">##</span> éå ä¿¡æ¯</span></span> 350<span class="line"></span> 351<span class="line">ä»»ä½å ¶ä»ç¸å ³ä¿¡æ¯ã</span> 352<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="bug-æ¥å建议" tabindex="-1"><a class="header-anchor" href="#bug-æ¥å建议"><span>Bug æ¥å建议</span></a></h3><ul><li>æç´¢å·²åå¨ç issuesï¼é¿å é夿¥å</li><li>æä¾è½å¤éç° Bug çæå°ç¤ºä¾</li><li>å å«å®æ´çé误æ è·è¸ª</li><li>æä¾æ¨çç¯å¢ä¿¡æ¯</li><li>妿å¯è½ï¼æä¾ä¿®å¤å»ºè®®</li></ul><hr><h2 id="åè½å»ºè®®" tabindex="-1"><a class="header-anchor" href="#åè½å»ºè®®"><span>åè½å»ºè®®</span></a></h2><h3 id="æäº¤åè½å»ºè®®" tabindex="-1"><a class="header-anchor" href="#æäº¤åè½å»ºè®®"><span>æäº¤åè½å»ºè®®</span></a></h3><p>å¨ <a href="https://github.com/tx7do/go-wind-admin/discussions" target="_blank" rel="noopener noreferrer">GitHub Discussions</a> ä¸åèµ·è®¨è®ºï¼æå建æ 记为 <code>enhancement</code> ç Issueã</p><h3 id="åè½å»ºè®®æ¨¡æ¿" tabindex="-1"><a class="header-anchor" href="#åè½å»ºè®®æ¨¡æ¿"><span>åè½å»ºè®®æ¨¡æ¿</span></a></h3><div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code><span class="line"><span class="token title important"><span class="token punctuation">##</span> åè½æè¿°</span></span> 353<span class="line"></span> 354<span class="line">æ¨å¸ææ·»å ä»ä¹åè½ï¼</span> 355<span class="line"></span> 356<span class="line"><span class="token title important"><span class="token punctuation">##</span> 使ç¨åºæ¯</span></span> 357<span class="line"></span> 358<span class="line">è¿ä¸ªåè½è§£å³ä»ä¹é®é¢æå¸¦æ¥ä»ä¹å¥½å¤ï¼</span> 359<span class="line"></span> 360<span class="line"><span class="token title important"><span class="token punctuation">##</span> 建议çå®ç°</span></span> 361<span class="line"></span> 362<span class="line">æ¨æä»ä¹å®ç°æè·¯åï¼</span> 363<span class="line"></span> 364<span class="line"><span class="token title important"><span class="token punctuation">##</span> ç¸å ³åè½</span></span> 365<span class="line"></span> 366<span class="line">è¿ä¸ç°æçåªäºåè½ç¸å ³ï¼</span> 367<span class="line"></span> 368<span class="line"><span class="token title important"><span class="token punctuation">##</span> éå ä¿¡æ¯</span></span> 369<span class="line"></span> 370<span class="line">ä»»ä½å ¶ä»ä¿¡æ¯æåèèµæã</span> 371<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="åè½å»ºè®®æå" tabindex="-1"><a class="header-anchor" href="#åè½å»ºè®®æå"><span>åè½å»ºè®®æå</span></a></h3><ul><li>æè¿°ä½¿ç¨åºæ¯åä¸å¡ä»·å¼</li><li>æä¾å°½å¯è½è¯¦ç»çéæ±è¯´æ</li><li>妿å¯è½ï¼æä¾æ ·ä¾æåå</li><li>èèä¸ç°æåè½çä¸è´æ§</li><li>èè对æ§è½åå ¼å®¹æ§çå½±å</li></ul><hr><h2 id="å¼åå·¥å ·åèµæº" tabindex="-1"><a class="header-anchor" href="#å¼åå·¥å ·åèµæº"><span>å¼åå·¥å ·åèµæº</span></a></h2><h3 id="æ¨èçå¼åå·¥å ·" tabindex="-1"><a class="header-anchor" href="#æ¨èçå¼åå·¥å ·"><span>æ¨èçå¼åå·¥å ·</span></a></h3><h4 id="å端" tabindex="-1"><a class="header-anchor" href="#å端"><span>å端</span></a></h4><ul><li><strong>IDE</strong>: VS Code (+ Go æ©å±) / GoLand</li><li><strong>è°è¯</strong>: Delve è°è¯å¨</li><li><strong>æ§è½åæ</strong>: pprof</li><li><strong>ä»£ç æ£æ¥</strong>: golangci-lint</li><li><strong>ææ¡£</strong>: godoc</li></ul><h4 id="å端" tabindex="-1"><a class="header-anchor" href="#å端"><span>å端</span></a></h4><ul><li><strong>IDE</strong>: VS Code (+ Volar æ©å±) / WebStorm</li><li><strong>è°è¯</strong>: Vue DevTools</li><li><strong>æ§è½åæ</strong>: Chrome DevTools</li><li><strong>ä»£ç æ£æ¥</strong>: ESLint / Prettier</li><li><strong>ææ¡£</strong>: VuePress</li></ul><h3 id="æç¨çå½ä»¤" tabindex="-1"><a class="header-anchor" href="#æç¨çå½ä»¤"><span>æç¨çå½ä»¤</span></a></h3><div class="language-bash line-numbers-mode" data-highlighter="prismjs" data-ext="sh"><pre><code><span class="line"><span class="token comment"># å端</span></span> 372<span class="line"><span class="token function">make</span>
372 build <span class="token comment"># æå»ºäºè¿å¶æä»¶</span></span> 373<span class="line"><span class="token function">make</span> <span class="token builtin class-name">test</span> <span class="token comment"># è¿è¡æµè¯</span></span> 374<span class="line"><span class="token function">make</span> lint <span class="token comment"># ä»£ç æ£æ¥</span></span> 375<span class="line"><span class="token function">make</span> proto <span class="token comment"># çæ API 代ç </span></span> 376<span class="line"><span class="token function">make</span> <span class="token function">watch</span> <span class="token comment"># çå è½½å¼å</span></span> 377<span class="line"></span> 378<span class="line"><span class="token comment"># å端</span></span> 379<span class="line"><span class="token function">pnpm</span> dev:antd <span class="token comment"># å¼åç¯å¢</span></span> 380<span class="line"><span class="token function">pnpm</span> build:antd <span class="token comment"># ç产æå»º</span></span> 381<span class="line"><span class="token function">pnpm</span> <span class="token builtin class-name">test</span> <span class="token comment"># è¿è¡æµè¯</span></span> 382<span class="line"><span class="token function">pnpm</span> lint <span class="token comment"># ä»£ç æ£æ¥</span></span> 383<span class="line"><span class="token function">pnpm</span> <span class="token function">format</span> <span class="token comment"># æ ¼å¼å代ç </span></span> 384<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="å¦ä¹ èµæº" tabindex="-1"><a class="header-anchor" href="#å¦ä¹ èµæº"><span>å¦ä¹ èµæº</span></a></h3><ul><li><a href="https://golang.org/doc/" target="_blank" rel="noopener noreferrer">Go 宿¹ææ¡£</a></li><li><a href="https://vuejs.org/" target="_blank" rel="noopener noreferrer">Vue3 宿¹ææ¡£</a></li><li><a href="https://go-kratos.dev/" target="_blank" rel="noopener noreferrer">Kratos æ¡æ¶ææ¡£</a></li><li><a href="https://entgo.io/" target="_blank" rel="noopener noreferrer">Ent ORM ææ¡£</a></li><li><a href="https://developers.google.com/protocol-buffers" target="_blank" rel="noopener noreferrer">Protocol Buffers ææ¡£</a></li></ul><hr><h2 id="社åºè¡ä¸ºåå" tabindex="-1"><a class="header-anchor" href="#社åºè¡ä¸ºåå"><span>社åºè¡ä¸ºåå</span></a></h2><h3 id="æä»¬çæ¿è¯º" tabindex="-1"><a class="header-anchor" href="#æä»¬çæ¿è¯º"><span>æä»¬çæ¿è¯º</span></a></h3><p>å¨å䏿¬é¡¹ç®åç¤¾åºæ¶ï¼æä»¬æ¿è¯ºè¥é ä¸ä¸ªå¼æ¾ãå好ãå°éåå 容çç¯å¢ã</p><h3 id="æä»¬çæ å" tabindex="-1"><a class="header-anchor" href="#æä»¬çæ å"><span>æä»¬çæ å</span></a></h3><p>以ä¸è¡ä¸ºæ¯è¢«é¼å±çï¼</p><ul><li>ä½¿ç¨æ¬¢è¿åå 容çè¯è¨</li><li>å°éä¸åçæè§åç»éª</li><li>æ¥åå»ºè®¾æ§æ¹è¯</li><li>å ³æ³¨å¯¹ç¤¾åºææå©çäºæ </li><li>å¯¹å ¶ä»ç¤¾åºæåè¡¨ç¤ºåæ </li></ul><p>以ä¸è¡ä¸ºæ¯ä¸å¯æ¥åçï¼</p><ul><li>éªæ°ãä¾®è¾±ææ§è§æ§è¯è®º</li><li>é对个人ç人身æ»å»</li><li>åå¸ä»äººç§äººä¿¡æ¯ï¼å¦å°åæçµåé®ä»¶</li><li>ä¸éå½çæ§è¯è¨æå¾å</li><li>å ¶ä»å¯è½è¢«åç认为ä¸éå½çè¡ä¸º</li></ul><h3 id="æ§è¡" tabindex="-1"><a class="header-anchor" href="#æ§è¡"><span>æ§è¡</span></a></h3><p>项ç®ç»´æ¤è æè´£ä»»éæå¯æ¥åè¡ä¸ºçæ åï¼å¹¶å¯¹ä¸å¯æ¥åçè¡ä¸ºéåéå½åå ¬å¹³ççº æ£æªæ½ã</p><p>对äºè¿åæ¬è¡ä¸ºååçè¡ä¸ºï¼å¯ä»¥éè¿è系项ç®å¢éï¼<a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer">[email protected]</a>ï¼æ¥åã</p><hr><h2 id="faq" tabindex="-1"><a class="header-anchor" href="#faq"><span>FAQ</span></a></h2><h3 id="q-æåºè¯¥ä»åªä¸ªåæ¯å建-pr" tabindex="-1"><a class="header-anchor" href="#q-æåºè¯¥ä»åªä¸ªåæ¯å建-pr"><span>Q: æåºè¯¥ä»åªä¸ªåæ¯å建 PRï¼</span></a></h3><p>A: å§ç»ä» <code>main</code> 忝å建 PRãç¡®ä¿æ¨çåæ¯å·²åæ¥ææ°ç䏿¸¸ä»£ç ã</p><h3 id="q-æç-pr-被æç»äº-æåºè¯¥æä¹å" tabindex="-1"><a class="header-anchor" href="#q-æç-pr-被æç»äº-æåºè¯¥æä¹å"><span>Q: æç PR 被æç»äºï¼æåºè¯¥æä¹åï¼</span></a></h3><p>A: æ¥çå®¡æ ¸æè§ï¼è¿è¡å¿ è¦çæ´æ¹ï¼ç¶åæ¨éæ°çæäº¤ãPR ä¼èªå¨æ´æ°ã</p><h3 id="q-å¤é¿æ¶é´è½å¾å°å®¡æ ¸åé¦" tabindex="-1"><a class="header-anchor" href="#q-å¤é¿æ¶é´è½å¾å°å®¡æ ¸åé¦"><span>Q: å¤é¿æ¶é´è½å¾å°å®¡æ ¸åé¦ï¼</span></a></h3><p>A: éå¸¸å¨ 1-3 天å ï¼ä½å¯è½å 项ç®ä¼å 级èå¼ã</p><h3 id="q-å¦ä½è¿½è¸ªæç-pr-è¿åº¦" tabindex="-1"><a class="header-anchor" href="#q-å¦ä½è¿½è¸ªæç-pr-è¿åº¦"><span>Q: å¦ä½è¿½è¸ªæç PR è¿åº¦ï¼</span></a></h3><p>A: å ³æ³¨ PR è¯è®ºåç¶æãæ¨ä¹å¯ä»¥å¨ GitHub 项ç®é¢æ¿ä¸æ¥çè¿åº¦ã</p><h3 id="q-æå¯ä»¥å¨-pr-åå¹¶åååºå¤ä¸ªæäº¤å" tabindex="-1"><a class="header-anchor" href="#q-æå¯ä»¥å¨-pr-åå¹¶åååºå¤ä¸ªæäº¤å"><span>
384Q: æå¯ä»¥å¨ PR åå¹¶åååºå¤ä¸ªæäº¤åï¼</span></a></h3><p>A: å¯ä»¥ï¼ä½å»ºè®®å®ææ¨éã妿æäº¤åå²è¿äºåé¿ï¼æä»¬å¯è½ä¼è¦æ±æ¨å¨åå¹¶åè¿è¡ squashã</p><hr><h2 id="è·å¾å¸®å©" tabindex="-1"><a class="header-anchor" href="#è·å¾å¸®å©"><span>è·å¾å¸®å©</span></a></h2><p>å¦ææ¨æä»»ä½ç鮿éè¦å¸®å©ï¼</p><ul><li>ð§ é®ä»¶ï¼<a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer">[email protected]</a></li><li>ð¬ 讨论ï¼<a href="https://github.com/tx7do/go-wind-admin/discussions" target="_blank" rel="noopener noreferrer">GitHub Discussions</a></li><li>ð ææ¡£ï¼<a href="https://gowind.cloud" target="_blank" rel="noopener noreferrer">宿¹ææ¡£</a></li><li>ð åé¦ï¼<a href="https://github.com/tx7do/go-wind-admin/issues" target="_blank" rel="noopener noreferrer">GitHub Issues</a></li></ul><hr><h2 id="许å¯è¯" tabindex="-1"><a class="header-anchor" href="#许å¯è¯"><span>许å¯è¯</span></a></h2><p>éè¿å¯¹æ¬é¡¹ç®çè´¡ç®ï¼æ¨åææ¨çè´¡ç®å°æ ¹æ® MIT 许å¯è¯è·å¾è®¸å¯ã</p><hr><p>æè°¢æ¨çè´¡ç®ï¼ð</p>`,144)])])}const o=s(i,[["render",p]]),r=JSON.parse('{"path":"/guide/contribution.html","title":"è´¡ç®æå","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"ç®å½","slug":"ç®å½","link":"#ç®å½","children":[]},{"level":2,"title":"è´¡ç®æ¹å¼","slug":"è´¡ç®æ¹å¼","link":"#è´¡ç®æ¹å¼","children":[{"level":3,"title":"1. 代ç è´¡ç®","slug":"_1-代ç è´¡ç®","link":"#_1-代ç è´¡ç®","children":[]},{"level":3,"title":"2. ææ¡£è´¡ç®","slug":"_2-ææ¡£è´¡ç®","link":"#_2-ææ¡£è´¡ç®","children":[]},{"level":3,"title":"3. æµè¯è´¡ç®","slug":"_3-æµè¯è´¡ç®","link":"#_3-æµè¯è´¡ç®","children":[]},{"level":3,"title":"4. 社åºè´¡ç®","slug":"_4-社åºè´¡ç®","link":"#_4-社åºè´¡ç®","children":[]}]},{"level":2,"title":"å¼åç¯å¢è®¾ç½®","slug":"å¼åç¯å¢è®¾ç½®","link":"#å¼åç¯å¢è®¾ç½®","children":[{"level":3,"title":"ç¬¬ä¸æ¥ï¼Fork 项ç®","slug":"ç¬¬ä¸æ¥-fork-项ç®","link":"#ç¬¬ä¸æ¥-fork-项ç®","children":[]},{"level":3,"title":"ç¬¬äºæ¥ï¼å
鿍ç Fork","slug":"ç¬¬äºæ¥-å
鿍ç-fork","link":"#ç¬¬äºæ¥-å
鿍ç-fork","children":[]},{"level":3,"title":"ç¬¬ä¸æ¥ï¼å建åè½åæ¯","slug":"ç¬¬ä¸æ¥-å建åè½åæ¯","link":"#ç¬¬ä¸æ¥-å建åè½åæ¯","children":[]},{"level":3,"title":"ç¬¬åæ¥ï¼å®è£
ä¾èµ","slug":"ç¬¬åæ¥-å®è£
ä¾èµ","link":"#ç¬¬åæ¥-å®è£
ä¾èµ","children":[]},{"level":3,"title":"ç¬¬äºæ¥ï¼å¯å¨å¼åç¯å¢","slug":"ç¬¬äºæ¥-å¯å¨å¼åç¯å¢","link":"#ç¬¬äºæ¥-å¯å¨å¼åç¯å¢","children":[]}]},{"level":2,"title":"代ç è§è","slug":"代ç è§è","link":"#代ç è§è","children":[{"level":3,"title":"å端代ç è§èï¼Goï¼","slug":"å端代ç è§è-go","link":"#å端代ç è§è-go","children":[]},{"level":3,"title":"å端代ç è§èï¼TypeScript/Vueï¼","slug":"å端代ç è§è-typescript-vue","link":"#å端代ç è§è-typescript-vue","children":[]},{"level":3,"title":"Protobuf è§è","slug":"protobuf-è§è","link":"#protobuf-è§è","children":[]}]},{"level":2,"title":"æäº¤æµç¨","slug":"æäº¤æµç¨","link":"#æäº¤æµç¨","children":[{"level":3,"title":"ç¬¬ä¸æ¥ï¼å¼å代ç ","slug":"ç¬¬ä¸æ¥-å¼å代ç ","link":"#ç¬¬ä¸æ¥-å¼å代ç ","children":[]},{"level":3,"title":"ç¬¬äºæ¥ï¼è¿è¡æµè¯åæ£æ¥","slug":"ç¬¬äºæ¥-è¿è¡æµè¯åæ£æ¥","link":"#ç¬¬äºæ¥-è¿è¡æµè¯åæ£æ¥","children":[]},{"level":3,"title":"ç¬¬ä¸æ¥ï¼æäº¤ä»£ç ","slug":"ç¬¬ä¸æ¥-æäº¤ä»£ç ","link":"#ç¬¬ä¸æ¥-æäº¤ä»£ç ","children":[]},{"level":3,"title":"ç¬¬åæ¥ï¼æ¨é代ç ","slug":"ç¬¬åæ¥-æ¨é代ç ","link":"#ç¬¬åæ¥-æ¨é代ç ","children":[]},{"level":3,"title":"ç¬¬äºæ¥ï¼å建 Pull Request","slug":"ç¬¬äºæ¥-å建-pull-request","link":"#ç¬¬äºæ¥-å建-pull-request","children":[]}]},{"level":2,"title":"Pull Request æå","slug":"pull-request-æå","link":"#pull-request-æå","children":[{"level":3,"title":"PR æ é¢è§è","slug":"pr-æ é¢è§è","link":"#pr-æ é¢è§è","children":[]},{"level":3,"title":"PR æè¿°æ¨¡æ¿","slug":"pr-æè¿°æ¨¡æ¿","link":"#pr-æè¿°æ¨¡æ¿","children":[]},{"level":3,"title":"PR å®¡æ ¸æ å","slug":"pr-å®¡æ ¸æ å","link":"#pr-å®¡æ ¸æ å","children":[]},{"level":3,"title":"PR åå¹¶è¦æ±","slug":"pr-åå¹¶è¦æ±","link":"#pr-åå¹¶è¦æ±","children":[]}]},{"level":2,"title":"æ¥å Bug","slug":"æ¥å-bug","link":"#æ¥å-bug","children":[{"level":3,"title":"æäº¤ Bug æ¥å","slug":"æäº¤-bug-æ¥å","link":"#æäº¤-bug-æ¥å","children":[]},{"level":3,"title":"Bug æ¥å模æ¿","slug":"bug-æ¥å模æ¿","link":"#bug-æ¥å模æ¿","children":[]},{"level":3,"title":"Bug æ¥å建议","slug":"bug-æ¥å建议","link":"#bug-æ¥å建议","children":[]}]},{"level":2,"title":"åè½å»ºè®®","slug":"åè½å»ºè®®","link":"#åè½å»ºè®®","children":[{"level":3,"title":"æäº¤åè½å»ºè®®","slug":"æäº¤åè½å»ºè®®","link":"#æäº¤åè½å»ºè®®","children":[]},{"level":3,"title":"åè½å»ºè®®æ¨¡æ¿","slug":"åè½å»ºè®®æ¨¡æ¿","link":"#åè½å»ºè®®æ¨¡æ¿","children":[]},{"level":3,"title":"åè½å»ºè®®æå","slug":"åè½å»ºè®®æå","link":"#åè½å»ºè®®æå","children":[]}]},{"level":2,"title":"å¼åå·¥å
·åèµæº","slug":"å¼åå·¥å
·åèµæº","link":"#å¼åå·¥å
·åèµæº","children":[{"level":3,"title":"æ¨èçå¼åå·¥å
·","slug":"æ¨èçå¼åå·¥å
·","link":"#æ¨èçå¼åå·¥å
·","children":[]},{"level":3,"title":"æç¨çå½ä»¤","slug":"æç¨çå½ä»¤","link":"#æç¨çå½ä»¤","children":[]},{"level":3,"title":"å¦ä¹ èµæº","slug":"å¦ä¹ èµæº","link":"#å¦ä¹ èµæº","children":[]}]},{"level":2,"title":"社åºè¡ä¸ºåå","slug":"社åºè¡ä¸ºåå","link":"#社åºè¡ä¸ºåå","children":[{"level":3,"title":"æä»¬çæ¿è¯º","slug":"æä»¬çæ¿è¯º","link":"#æä»¬çæ¿è¯º","children":[]},{"level":3,"title":"æä»¬çæ å","slug":"æä»¬çæ å","link":"#æä»¬çæ å","children":[]},{"level":3,"title":"æ§è¡","slug":"æ§è¡","link":"#æ§è¡","children":[]}]},{"level":2,"title":"FAQ","slug":"faq","link":"#faq","children":[{"level":3,"title":"Q: æåºè¯¥ä»åªä¸ªåæ¯å建 PRï¼","slug":"q-æåºè¯¥ä»åªä¸ªåæ¯å建-pr","link":"#q-æåºè¯¥ä»åªä¸ªåæ¯å建-pr","children":[]},{"level":3,"title":"Q: æç PR 被æç»äºï¼æåºè¯¥æä¹åï¼","slug":"q-æç-pr-被æç»äº-æåºè¯¥æä¹å","link":"#q-æç-pr-被æç»äº-æåºè¯¥æä¹å","children":[]},{"level":3,"title":"Q: å¤é¿æ¶é´è½å¾å°å®¡æ ¸åé¦ï¼","slug":"q-å¤é¿æ¶é´è½å¾å°å®¡æ ¸åé¦","link":"#q-å¤é¿æ¶é´è½å¾å°å®¡æ ¸åé¦","children":[]},{"level":3,"title":"Q: å¦ä½è¿½è¸ªæç PR è¿åº¦ï¼","slug":"q-å¦ä½è¿½è¸ªæç-pr-è¿åº¦","link":"#q-å¦ä½è¿½è¸ªæç-pr-è¿åº¦","children":[]},{"level":3,"title":"Q: æå¯ä»¥å¨ PR åå¹¶åååºå¤ä¸ªæäº¤åï¼
384","slug":"q-æå¯ä»¥å¨-pr-åå¹¶åååºå¤ä¸ªæäº¤å","link":"#q-æå¯ä»¥å¨-pr-åå¹¶åååºå¤ä¸ªæäº¤å","children":[]}]},{"level":2,"title":"è·å¾å¸®å©","slug":"è·å¾å¸®å©","link":"#è·å¾å¸®å©","children":[]},{"level":2,"title":"许å¯è¯","slug":"许å¯è¯","link":"#许å¯è¯","children":[]}],"git":{"updatedTime":1772289817000,"contributors":[{"name":"Bobo","username":"Bobo","email":"[email protected]","commits":2,"url":"https://github.com/Bobo"}],"changelog":[{"hash":"d3a6075ed8caa8954aed0ff7e540c5d9ed785126","time":1772289817000,"email":"[email protected]","author":"Bobo","message":"chore: update contact information and improve documentation links"},{"hash":"48ae7a86b35e61a13ffe0124c52b548b1ea79ff4","time":1772190364000,"email":"[email protected]","author":"Bobo","message":"docs: add contribution and FAQ guides"}]},"filePathRelative":"guide/contribution.md"}');export{o as comp,r as data};
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.