[{"data":1,"prerenderedAt":19137},["ShallowReactive",2],{"search":3,"tag-excel":19134},[4,1761,1844,2442,2690,3128,4346,4762,4947,7692,8492,8679,9369,9693,9745,10144,11710,11800,12687,15532,16292,16845,17058,17377,17758,18182,18302,18673],{"id":5,"title":6,"body":7,"category":1748,"description":85,"extension":1749,"image":1750,"meta":1751,"navigation":120,"path":1752,"pubDate":1753,"seo":1754,"status":120,"stem":1755,"summary":1756,"tags":1757,"__hash__":1760},"content\u002Farticles\u002F2026-08-23-php-xlswriter.md","PHP 高效處理 XLSX 檔案：xlswriter 安裝與實戰教學",{"type":8,"value":9,"toc":1731},"minimark",[10,14,23,39,42,46,62,68,71,76,79,186,190,205,212,223,226,248,251,269,281,285,288,553,559,563,570,854,861,874,878,881,989,992,1136,1139,1182,1186,1189,1199,1372,1375,1401,1404,1407,1557,1560,1567,1694,1697,1714,1727],[11,12,13],"h2",{"id":13},"簡介",[15,16,17,18,22],"p",{},"系統匯出報表時，資料量一大，常常會遇到記憶體不足或等待時間太久的問題。",[19,20,21],"code",{},"PhpSpreadsheet"," 功能完整，但它以純 PHP 建立整份活頁簿物件；若要處理數十萬筆以上資料，記憶體成本會很高。",[15,24,25,34,35,38],{},[26,27,31],"a",{"href":28,"rel":29},"https:\u002F\u002Fgithub.com\u002Fviest\u002Fphp-ext-xlswriter",[30],"nofollow",[19,32,33],{},"xlswriter"," 是以 C 實作的 PHP 擴充套件，底層使用 ",[19,36,37],{},"libxlsxwriter","，專門處理 Excel 2007 以上的 XLSX 格式。除了文字與數字，也支援公式、圖片、圖表、合併儲存格、自動篩選與樣式等功能。",[15,40,41],{},"官方的百萬列基準測試顯示，xlswriter 在速度與記憶體使用上都很適合大量資料匯出。不過實際結果仍會依照硬體、資料欄位數、字串長度與樣式複雜度而改變，建議以自己的正式環境測試為準。",[11,43,45],{"id":44},"xlswriter-適合哪些情境","xlswriter 適合哪些情境？",[47,48,49,53,56,59],"ul",{},[50,51,52],"li",{},"後台需要匯出大量訂單、會員或交易明細。",[50,54,55],{},"需要逐列讀取大型 XLSX，避免一次載入所有資料。",[50,57,58],{},"要產生具備公式、格式、篩選或多工作表的 Excel 報表。",[50,60,61],{},"伺服器的 PHP 記憶體限制較嚴格。",[15,63,64,65,67],{},"若只要處理少量資料，或部署環境無法安裝 PHP 擴充套件，使用 Composer 安裝的 ",[19,66,21],{}," 仍會較方便；但大量資料匯出時，xlswriter 的固定記憶體模式更合適。",[11,69,70],{"id":70},"安裝",[72,73,75],"h3",{"id":74},"安裝-zlib-相依套件","安裝 zlib 相依套件",[15,77,78],{},"xlswriter 編譯時需要 zlib 的開發檔案。先依作業系統安裝：",[80,81,86],"pre",{"className":82,"code":83,"language":84,"meta":85,"style":85},"language-bash shiki shiki-themes github-light github-dark github-dark","# Debian \u002F Ubuntu\napt-get install -y zlib1g-dev\n\n# Alpine\napk add zlib-dev\n\n# RHEL \u002F CentOS \u002F Fedora\nyum install -y zlib-devel\n\n# macOS\nbrew install zlib\n","bash","",[19,87,88,97,115,122,128,140,145,151,164,169,175],{"__ignoreMap":85},[89,90,93],"span",{"class":91,"line":92},"line",1,[89,94,96],{"class":95},"sCsY4","# Debian \u002F Ubuntu\n",[89,98,100,104,108,112],{"class":91,"line":99},2,[89,101,103],{"class":102},"shcOC","apt-get",[89,105,107],{"class":106},"sfrk1"," install",[89,109,111],{"class":110},"suiK_"," -y",[89,113,114],{"class":106}," zlib1g-dev\n",[89,116,118],{"class":91,"line":117},3,[89,119,121],{"emptyLinePlaceholder":120},true,"\n",[89,123,125],{"class":91,"line":124},4,[89,126,127],{"class":95},"# Alpine\n",[89,129,131,134,137],{"class":91,"line":130},5,[89,132,133],{"class":102},"apk",[89,135,136],{"class":106}," add",[89,138,139],{"class":106}," zlib-dev\n",[89,141,143],{"class":91,"line":142},6,[89,144,121],{"emptyLinePlaceholder":120},[89,146,148],{"class":91,"line":147},7,[89,149,150],{"class":95},"# RHEL \u002F CentOS \u002F Fedora\n",[89,152,154,157,159,161],{"class":91,"line":153},8,[89,155,156],{"class":102},"yum",[89,158,107],{"class":106},[89,160,111],{"class":110},[89,162,163],{"class":106}," zlib-devel\n",[89,165,167],{"class":91,"line":166},9,[89,168,121],{"emptyLinePlaceholder":120},[89,170,172],{"class":91,"line":171},10,[89,173,174],{"class":95},"# macOS\n",[89,176,178,181,183],{"class":91,"line":177},11,[89,179,180],{"class":102},"brew",[89,182,107],{"class":106},[89,184,185],{"class":106}," zlib\n",[72,187,189],{"id":188},"使用-pecl-安裝","使用 PECL 安裝",[80,191,193],{"className":82,"code":192,"language":84,"meta":85,"style":85},"pecl install xlswriter\n",[19,194,195],{"__ignoreMap":85},[89,196,197,200,202],{"class":91,"line":92},[89,198,199],{"class":102},"pecl",[89,201,107],{"class":106},[89,203,204],{"class":106}," xlswriter\n",[15,206,207,208,211],{},"安裝過程中若需要讀取 XLSX，請在提示時啟用 reader。完成後在 ",[19,209,210],{},"php.ini"," 加入：",[80,213,217],{"className":214,"code":215,"language":216,"meta":85,"style":85},"language-ini shiki shiki-themes github-light github-dark github-dark","extension=xlswriter.so\n","ini",[19,218,219],{"__ignoreMap":85},[89,220,221],{"class":91,"line":92},[89,222,215],{},[15,224,225],{},"最後確認擴充套件已被載入：",[80,227,229],{"className":82,"code":228,"language":84,"meta":85,"style":85},"php -m | grep xlswriter\n",[19,230,231],{"__ignoreMap":85},[89,232,233,236,239,243,246],{"class":91,"line":92},[89,234,235],{"class":102},"php",[89,237,238],{"class":110}," -m",[89,240,242],{"class":241},"so5gQ"," |",[89,244,245],{"class":102}," grep",[89,247,204],{"class":106},[15,249,250],{},"也可以使用 PIE 安裝：",[80,252,254],{"className":82,"code":253,"language":84,"meta":85,"style":85},"pie install --auto-install-build-tools viest\u002Fxlswriter\n",[19,255,256],{"__ignoreMap":85},[89,257,258,261,263,266],{"class":91,"line":92},[89,259,260],{"class":102},"pie",[89,262,107],{"class":106},[89,264,265],{"class":110}," --auto-install-build-tools",[89,267,268],{"class":106}," viest\u002Fxlswriter\n",[15,270,271,272,277,278,280],{},"Windows 使用者可從 ",[26,273,276],{"href":274,"rel":275},"https:\u002F\u002Fgithub.com\u002Fviest\u002Fphp-ext-xlswriter\u002Freleases",[30],"GitHub Releases"," 下載符合 PHP 版本、執行緒安全設定與架構的 DLL，再於 ",[19,279,210],{}," 啟用。",[11,282,284],{"id":283},"建立第一份-xlsx-報表","建立第一份 XLSX 報表",[15,286,287],{},"以下範例建立一張「銷售報表」工作表，先寫入欄位標題，再加入資料。",[80,289,292],{"className":290,"code":291,"language":235,"meta":85,"style":85},"language-php shiki shiki-themes github-light github-dark github-dark","\u003C?php declare(strict_types=1);\n\n$excel = new \\Vtiful\\Kernel\\Excel([\n    'path' => '.\u002Ftmp',\n]);\n\n$filePath = $excel->fileName('sales-report.xlsx', '銷售報表')\n    ->header(['品項', '金額', '數量'])\n    ->data([\n        ['租金', 10000, 1],\n        ['水電', 2500, 1],\n        ['辦公用品', 3000, 5],\n        ['交通費', 1200, 10],\n    ])\n    ->output();\n\necho \"檔案已儲存至：{$filePath}\\n\";\n",[19,293,294,320,324,340,354,359,363,393,420,429,449,467,487,507,513,524,529],{"__ignoreMap":85},[89,295,296,299,301,304,308,311,314,317],{"class":91,"line":92},[89,297,298],{"class":241},"\u003C?",[89,300,235],{"class":110},[89,302,303],{"class":241}," declare",[89,305,307],{"class":306},"slsVL","(",[89,309,310],{"class":110},"strict_types",[89,312,313],{"class":241},"=",[89,315,316],{"class":110},"1",[89,318,319],{"class":306},");\n",[89,321,322],{"class":91,"line":99},[89,323,121],{"emptyLinePlaceholder":120},[89,325,326,329,331,334,337],{"class":91,"line":117},[89,327,328],{"class":306},"$excel ",[89,330,313],{"class":241},[89,332,333],{"class":241}," new",[89,335,336],{"class":110}," \\Vtiful\\Kernel\\Excel",[89,338,339],{"class":306},"([\n",[89,341,342,345,348,351],{"class":91,"line":124},[89,343,344],{"class":106},"    'path'",[89,346,347],{"class":241}," =>",[89,349,350],{"class":106}," '.\u002Ftmp'",[89,352,353],{"class":306},",\n",[89,355,356],{"class":91,"line":130},[89,357,358],{"class":306},"]);\n",[89,360,361],{"class":91,"line":142},[89,362,121],{"emptyLinePlaceholder":120},[89,364,365,368,370,373,376,379,381,384,387,390],{"class":91,"line":147},[89,366,367],{"class":306},"$filePath ",[89,369,313],{"class":241},[89,371,372],{"class":306}," $excel",[89,374,375],{"class":241},"->",[89,377,378],{"class":102},"fileName",[89,380,307],{"class":306},[89,382,383],{"class":106},"'sales-report.xlsx'",[89,385,386],{"class":306},", ",[89,388,389],{"class":106},"'銷售報表'",[89,391,392],{"class":306},")\n",[89,394,395,398,401,404,407,409,412,414,417],{"class":91,"line":153},[89,396,397],{"class":241},"    ->",[89,399,400],{"class":102},"header",[89,402,403],{"class":306},"([",[89,405,406],{"class":106},"'品項'",[89,408,386],{"class":306},[89,410,411],{"class":106},"'金額'",[89,413,386],{"class":306},[89,415,416],{"class":106},"'數量'",[89,418,419],{"class":306},"])\n",[89,421,422,424,427],{"class":91,"line":166},[89,423,397],{"class":241},[89,425,426],{"class":102},"data",[89,428,339],{"class":306},[89,430,431,434,437,439,442,444,446],{"class":91,"line":171},[89,432,433],{"class":306},"        [",[89,435,436],{"class":106},"'租金'",[89,438,386],{"class":306},[89,440,441],{"class":110},"10000",[89,443,386],{"class":306},[89,445,316],{"class":110},[89,447,448],{"class":306},"],\n",[89,450,451,453,456,458,461,463,465],{"class":91,"line":177},[89,452,433],{"class":306},[89,454,455],{"class":106},"'水電'",[89,457,386],{"class":306},[89,459,460],{"class":110},"2500",[89,462,386],{"class":306},[89,464,316],{"class":110},[89,466,448],{"class":306},[89,468,470,472,475,477,480,482,485],{"class":91,"line":469},12,[89,471,433],{"class":306},[89,473,474],{"class":106},"'辦公用品'",[89,476,386],{"class":306},[89,478,479],{"class":110},"3000",[89,481,386],{"class":306},[89,483,484],{"class":110},"5",[89,486,448],{"class":306},[89,488,490,492,495,497,500,502,505],{"class":91,"line":489},13,[89,491,433],{"class":306},[89,493,494],{"class":106},"'交通費'",[89,496,386],{"class":306},[89,498,499],{"class":110},"1200",[89,501,386],{"class":306},[89,503,504],{"class":110},"10",[89,506,448],{"class":306},[89,508,510],{"class":91,"line":509},14,[89,511,512],{"class":306},"    ])\n",[89,514,516,518,521],{"class":91,"line":515},15,[89,517,397],{"class":241},[89,519,520],{"class":102},"output",[89,522,523],{"class":306},"();\n",[89,525,527],{"class":91,"line":526},16,[89,528,121],{"emptyLinePlaceholder":120},[89,530,532,535,538,541,544,547,550],{"class":91,"line":531},17,[89,533,534],{"class":110},"echo",[89,536,537],{"class":106}," \"檔案已儲存至：{",[89,539,540],{"class":306},"$filePath",[89,542,543],{"class":106},"}",[89,545,546],{"class":110},"\\n",[89,548,549],{"class":106},"\"",[89,551,552],{"class":306},";\n",[15,554,555,558],{},[19,556,557],{},"path"," 是輸出目錄；Web 專案通常可先輸出至暫存目錄，再透過框架的下載回應將檔案交給使用者。請勿直接把使用者輸入當成檔名或路徑，以免產生路徑穿越風險。",[11,560,562],{"id":561},"大量資料匯出固定記憶體模式","大量資料匯出：固定記憶體模式",[15,564,565,566,569],{},"大量報表最值得使用的是 ",[19,567,568],{},"constMemory()","。這個模式會逐列處理資料，記憶體不會隨著工作表資料量持續增加。",[80,571,573],{"className":290,"code":572,"language":235,"meta":85,"style":85},"\u003C?php declare(strict_types=1);\n\n$excel = new \\Vtiful\\Kernel\\Excel([\n    'path' => '.\u002Ftmp',\n]);\n\n\u002F\u002F 開啟固定記憶體模式 (參數：檔名, 工作表名稱)\n$file = $excel->constMemory('large_data.xlsx', 'Sheet1');\n\n\u002F\u002F 寫入表頭\n$file->header(['ID', '姓名', '數值']);\n\n\u002F\u002F 迴圈逐行寫入大批量數據\nfor ($i = 1; $i \u003C= 1000000; $i++) {\n    $file->insertText($i - 1, 0, $i);\n    $file->insertText($i - 1, 1, \"使用者 {$i}\");\n    $file->insertText($i - 1, 2, rand(1, 100));\n}\n\n\u002F\u002F 輸出儲存檔案\n$file->output();\n",[19,574,575,593,597,609,619,623,627,632,658,662,667,693,697,702,733,759,790,826,832,837,843],{"__ignoreMap":85},[89,576,577,579,581,583,585,587,589,591],{"class":91,"line":92},[89,578,298],{"class":241},[89,580,235],{"class":110},[89,582,303],{"class":241},[89,584,307],{"class":306},[89,586,310],{"class":110},[89,588,313],{"class":241},[89,590,316],{"class":110},[89,592,319],{"class":306},[89,594,595],{"class":91,"line":99},[89,596,121],{"emptyLinePlaceholder":120},[89,598,599,601,603,605,607],{"class":91,"line":117},[89,600,328],{"class":306},[89,602,313],{"class":241},[89,604,333],{"class":241},[89,606,336],{"class":110},[89,608,339],{"class":306},[89,610,611,613,615,617],{"class":91,"line":124},[89,612,344],{"class":106},[89,614,347],{"class":241},[89,616,350],{"class":106},[89,618,353],{"class":306},[89,620,621],{"class":91,"line":130},[89,622,358],{"class":306},[89,624,625],{"class":91,"line":142},[89,626,121],{"emptyLinePlaceholder":120},[89,628,629],{"class":91,"line":147},[89,630,631],{"class":95},"\u002F\u002F 開啟固定記憶體模式 (參數：檔名, 工作表名稱)\n",[89,633,634,637,639,641,643,646,648,651,653,656],{"class":91,"line":153},[89,635,636],{"class":306},"$file ",[89,638,313],{"class":241},[89,640,372],{"class":306},[89,642,375],{"class":241},[89,644,645],{"class":102},"constMemory",[89,647,307],{"class":306},[89,649,650],{"class":106},"'large_data.xlsx'",[89,652,386],{"class":306},[89,654,655],{"class":106},"'Sheet1'",[89,657,319],{"class":306},[89,659,660],{"class":91,"line":166},[89,661,121],{"emptyLinePlaceholder":120},[89,663,664],{"class":91,"line":171},[89,665,666],{"class":95},"\u002F\u002F 寫入表頭\n",[89,668,669,672,674,676,678,681,683,686,688,691],{"class":91,"line":177},[89,670,671],{"class":306},"$file",[89,673,375],{"class":241},[89,675,400],{"class":102},[89,677,403],{"class":306},[89,679,680],{"class":106},"'ID'",[89,682,386],{"class":306},[89,684,685],{"class":106},"'姓名'",[89,687,386],{"class":306},[89,689,690],{"class":106},"'數值'",[89,692,358],{"class":306},[89,694,695],{"class":91,"line":469},[89,696,121],{"emptyLinePlaceholder":120},[89,698,699],{"class":91,"line":489},[89,700,701],{"class":95},"\u002F\u002F 迴圈逐行寫入大批量數據\n",[89,703,704,707,710,712,715,718,721,724,727,730],{"class":91,"line":509},[89,705,706],{"class":241},"for",[89,708,709],{"class":306}," ($i ",[89,711,313],{"class":241},[89,713,714],{"class":110}," 1",[89,716,717],{"class":306},"; $i ",[89,719,720],{"class":241},"\u003C=",[89,722,723],{"class":110}," 1000000",[89,725,726],{"class":306},"; $i",[89,728,729],{"class":241},"++",[89,731,732],{"class":306},") {\n",[89,734,735,738,740,743,746,749,751,753,756],{"class":91,"line":515},[89,736,737],{"class":306},"    $file",[89,739,375],{"class":241},[89,741,742],{"class":102},"insertText",[89,744,745],{"class":306},"($i ",[89,747,748],{"class":241},"-",[89,750,714],{"class":110},[89,752,386],{"class":306},[89,754,755],{"class":110},"0",[89,757,758],{"class":306},", $i);\n",[89,760,761,763,765,767,769,771,773,775,777,779,782,785,788],{"class":91,"line":526},[89,762,737],{"class":306},[89,764,375],{"class":241},[89,766,742],{"class":102},[89,768,745],{"class":306},[89,770,748],{"class":241},[89,772,714],{"class":110},[89,774,386],{"class":306},[89,776,316],{"class":110},[89,778,386],{"class":306},[89,780,781],{"class":106},"\"使用者 {",[89,783,784],{"class":306},"$i",[89,786,787],{"class":106},"}\"",[89,789,319],{"class":306},[89,791,792,794,796,798,800,802,804,806,809,811,814,816,818,820,823],{"class":91,"line":531},[89,793,737],{"class":306},[89,795,375],{"class":241},[89,797,742],{"class":102},[89,799,745],{"class":306},[89,801,748],{"class":241},[89,803,714],{"class":110},[89,805,386],{"class":306},[89,807,808],{"class":110},"2",[89,810,386],{"class":306},[89,812,813],{"class":110},"rand",[89,815,307],{"class":306},[89,817,316],{"class":110},[89,819,386],{"class":306},[89,821,822],{"class":110},"100",[89,824,825],{"class":306},"));\n",[89,827,829],{"class":91,"line":828},18,[89,830,831],{"class":306},"}\n",[89,833,835],{"class":91,"line":834},19,[89,836,121],{"emptyLinePlaceholder":120},[89,838,840],{"class":91,"line":839},20,[89,841,842],{"class":95},"\u002F\u002F 輸出儲存檔案\n",[89,844,846,848,850,852],{"class":91,"line":845},21,[89,847,671],{"class":306},[89,849,375],{"class":241},[89,851,520],{"class":102},[89,853,523],{"class":306},[15,855,856,857,860],{},"固定記憶體模式的取捨是：資料寫入後不能回頭修改已寫入的儲存格。因此欄位順序、樣式與計算方式要先規劃好；若報表需要任意回寫或重複調整，則使用一般 ",[19,858,859],{},"fileName()"," 模式。",[862,863,864],"blockquote",{},[15,865,866,869,870,873],{},[19,867,868],{},"fetchReportRows()"," 代表可逐筆或分批取得資料的 Generator。例如資料庫查詢應避免一次 ",[19,871,872],{},"fetchAll()","，才能真正降低整體記憶體用量。",[11,875,877],{"id":876},"讀取-xlsx-檔案","讀取 XLSX 檔案",[15,879,880],{},"小型檔案可直接取得工作表全部資料：",[80,882,884],{"className":290,"code":883,"language":235,"meta":85,"style":85},"\u003C?php declare(strict_types=1);\n\n$excel = new \\Vtiful\\Kernel\\Excel([\n    'path' => '.\u002Ftmp',\n]);\n\n$data = $excel->openFile('sales-report.xlsx')\n    ->openSheet()\n    ->getSheetData();\n\nprint_r($data);\n",[19,885,886,904,908,920,930,934,938,958,968,977,981],{"__ignoreMap":85},[89,887,888,890,892,894,896,898,900,902],{"class":91,"line":92},[89,889,298],{"class":241},[89,891,235],{"class":110},[89,893,303],{"class":241},[89,895,307],{"class":306},[89,897,310],{"class":110},[89,899,313],{"class":241},[89,901,316],{"class":110},[89,903,319],{"class":306},[89,905,906],{"class":91,"line":99},[89,907,121],{"emptyLinePlaceholder":120},[89,909,910,912,914,916,918],{"class":91,"line":117},[89,911,328],{"class":306},[89,913,313],{"class":241},[89,915,333],{"class":241},[89,917,336],{"class":110},[89,919,339],{"class":306},[89,921,922,924,926,928],{"class":91,"line":124},[89,923,344],{"class":106},[89,925,347],{"class":241},[89,927,350],{"class":106},[89,929,353],{"class":306},[89,931,932],{"class":91,"line":130},[89,933,358],{"class":306},[89,935,936],{"class":91,"line":142},[89,937,121],{"emptyLinePlaceholder":120},[89,939,940,943,945,947,949,952,954,956],{"class":91,"line":147},[89,941,942],{"class":306},"$data ",[89,944,313],{"class":241},[89,946,372],{"class":306},[89,948,375],{"class":241},[89,950,951],{"class":102},"openFile",[89,953,307],{"class":306},[89,955,383],{"class":106},[89,957,392],{"class":306},[89,959,960,962,965],{"class":91,"line":153},[89,961,397],{"class":241},[89,963,964],{"class":102},"openSheet",[89,966,967],{"class":306},"()\n",[89,969,970,972,975],{"class":91,"line":166},[89,971,397],{"class":241},[89,973,974],{"class":102},"getSheetData",[89,976,523],{"class":306},[89,978,979],{"class":91,"line":171},[89,980,121],{"emptyLinePlaceholder":120},[89,982,983,986],{"class":91,"line":177},[89,984,985],{"class":110},"print_r",[89,987,988],{"class":306},"($data);\n",[15,990,991],{},"如果上傳檔案可能很大，改用游標逐列讀取。這樣可以一筆一筆驗證與寫入資料庫，不必將整個檔案放進記憶體。",[80,993,995],{"className":290,"code":994,"language":235,"meta":85,"style":85},"\u003C?php declare(strict_types=1);\n\n$excel = new \\Vtiful\\Kernel\\Excel([\n    'path' => '.\u002Ftmp',\n]);\n\n$excel->openFile('large_data.xlsx')\n    ->openSheet()\n    ->setSkipRows(1); \u002F\u002F 略過標題列\n\nwhile ($row = $excel->nextRow()) {\n    [$id, $name, $amount] = $row;\n\n    \u002F\u002F 在此驗證資料並分批寫入資料庫\n}\n",[19,996,997,1015,1019,1031,1041,1045,1049,1064,1072,1089,1093,1113,1123,1127,1132],{"__ignoreMap":85},[89,998,999,1001,1003,1005,1007,1009,1011,1013],{"class":91,"line":92},[89,1000,298],{"class":241},[89,1002,235],{"class":110},[89,1004,303],{"class":241},[89,1006,307],{"class":306},[89,1008,310],{"class":110},[89,1010,313],{"class":241},[89,1012,316],{"class":110},[89,1014,319],{"class":306},[89,1016,1017],{"class":91,"line":99},[89,1018,121],{"emptyLinePlaceholder":120},[89,1020,1021,1023,1025,1027,1029],{"class":91,"line":117},[89,1022,328],{"class":306},[89,1024,313],{"class":241},[89,1026,333],{"class":241},[89,1028,336],{"class":110},[89,1030,339],{"class":306},[89,1032,1033,1035,1037,1039],{"class":91,"line":124},[89,1034,344],{"class":106},[89,1036,347],{"class":241},[89,1038,350],{"class":106},[89,1040,353],{"class":306},[89,1042,1043],{"class":91,"line":130},[89,1044,358],{"class":306},[89,1046,1047],{"class":91,"line":142},[89,1048,121],{"emptyLinePlaceholder":120},[89,1050,1051,1054,1056,1058,1060,1062],{"class":91,"line":147},[89,1052,1053],{"class":306},"$excel",[89,1055,375],{"class":241},[89,1057,951],{"class":102},[89,1059,307],{"class":306},[89,1061,650],{"class":106},[89,1063,392],{"class":306},[89,1065,1066,1068,1070],{"class":91,"line":153},[89,1067,397],{"class":241},[89,1069,964],{"class":102},[89,1071,967],{"class":306},[89,1073,1074,1076,1079,1081,1083,1086],{"class":91,"line":166},[89,1075,397],{"class":241},[89,1077,1078],{"class":102},"setSkipRows",[89,1080,307],{"class":306},[89,1082,316],{"class":110},[89,1084,1085],{"class":306},"); ",[89,1087,1088],{"class":95},"\u002F\u002F 略過標題列\n",[89,1090,1091],{"class":91,"line":171},[89,1092,121],{"emptyLinePlaceholder":120},[89,1094,1095,1098,1101,1103,1105,1107,1110],{"class":91,"line":177},[89,1096,1097],{"class":241},"while",[89,1099,1100],{"class":306}," ($row ",[89,1102,313],{"class":241},[89,1104,372],{"class":306},[89,1106,375],{"class":241},[89,1108,1109],{"class":102},"nextRow",[89,1111,1112],{"class":306},"()) {\n",[89,1114,1115,1118,1120],{"class":91,"line":469},[89,1116,1117],{"class":306},"    [$id, $name, $amount] ",[89,1119,313],{"class":241},[89,1121,1122],{"class":306}," $row;\n",[89,1124,1125],{"class":91,"line":489},[89,1126,121],{"emptyLinePlaceholder":120},[89,1128,1129],{"class":91,"line":509},[89,1130,1131],{"class":95},"    \u002F\u002F 在此驗證資料並分批寫入資料庫\n",[89,1133,1134],{"class":91,"line":515},[89,1135,831],{"class":306},[15,1137,1138],{},"若檔案有多張工作表，可先取得清單：",[80,1140,1142],{"className":290,"code":1141,"language":235,"meta":85,"style":85},"$sheetList = $excel->openFile('sales-report.xlsx')->sheetList();\n\nprint_r($sheetList);\n",[19,1143,1144,1171,1175],{"__ignoreMap":85},[89,1145,1146,1149,1151,1153,1155,1157,1159,1161,1164,1166,1169],{"class":91,"line":92},[89,1147,1148],{"class":306},"$sheetList ",[89,1150,313],{"class":241},[89,1152,372],{"class":306},[89,1154,375],{"class":241},[89,1156,951],{"class":102},[89,1158,307],{"class":306},[89,1160,383],{"class":106},[89,1162,1163],{"class":306},")",[89,1165,375],{"class":241},[89,1167,1168],{"class":102},"sheetList",[89,1170,523],{"class":306},[89,1172,1173],{"class":91,"line":99},[89,1174,121],{"emptyLinePlaceholder":120},[89,1176,1177,1179],{"class":91,"line":117},[89,1178,985],{"class":110},[89,1180,1181],{"class":306},"($sheetList);\n",[11,1183,1185],{"id":1184},"常用-excel-功能","常用 Excel 功能",[72,1187,1188],{"id":1188},"加入公式與數字格式",[15,1190,1191,1194,1195,1198],{},[19,1192,1193],{},"insertFormula()"," 可寫入 Excel 公式；數字格式可交給 ",[19,1196,1197],{},"insertText()"," 的最後一個參數處理。",[80,1200,1202],{"className":290,"code":1201,"language":235,"meta":85,"style":85},"$file = $excel->fileName('expense-report.xlsx')\n    ->header(['品項', '金額']);\n\n$file->data([\n    ['租金', 10000],\n    ['水電', 2500],\n    ['辦公用品', 3000],\n])\n    ->insertText(4, 0, '總計')\n    ->insertFormula(4, 1, '=SUM(B2:B4)')\n    ->insertText(5, 1, 1234567.89, '#,##0.00')\n    ->output();\n",[19,1203,1204,1223,1239,1243,1253,1266,1278,1290,1294,1316,1338,1364],{"__ignoreMap":85},[89,1205,1206,1208,1210,1212,1214,1216,1218,1221],{"class":91,"line":92},[89,1207,636],{"class":306},[89,1209,313],{"class":241},[89,1211,372],{"class":306},[89,1213,375],{"class":241},[89,1215,378],{"class":102},[89,1217,307],{"class":306},[89,1219,1220],{"class":106},"'expense-report.xlsx'",[89,1222,392],{"class":306},[89,1224,1225,1227,1229,1231,1233,1235,1237],{"class":91,"line":99},[89,1226,397],{"class":241},[89,1228,400],{"class":102},[89,1230,403],{"class":306},[89,1232,406],{"class":106},[89,1234,386],{"class":306},[89,1236,411],{"class":106},[89,1238,358],{"class":306},[89,1240,1241],{"class":91,"line":117},[89,1242,121],{"emptyLinePlaceholder":120},[89,1244,1245,1247,1249,1251],{"class":91,"line":124},[89,1246,671],{"class":306},[89,1248,375],{"class":241},[89,1250,426],{"class":102},[89,1252,339],{"class":306},[89,1254,1255,1258,1260,1262,1264],{"class":91,"line":130},[89,1256,1257],{"class":306},"    [",[89,1259,436],{"class":106},[89,1261,386],{"class":306},[89,1263,441],{"class":110},[89,1265,448],{"class":306},[89,1267,1268,1270,1272,1274,1276],{"class":91,"line":142},[89,1269,1257],{"class":306},[89,1271,455],{"class":106},[89,1273,386],{"class":306},[89,1275,460],{"class":110},[89,1277,448],{"class":306},[89,1279,1280,1282,1284,1286,1288],{"class":91,"line":147},[89,1281,1257],{"class":306},[89,1283,474],{"class":106},[89,1285,386],{"class":306},[89,1287,479],{"class":110},[89,1289,448],{"class":306},[89,1291,1292],{"class":91,"line":153},[89,1293,419],{"class":306},[89,1295,1296,1298,1300,1302,1305,1307,1309,1311,1314],{"class":91,"line":166},[89,1297,397],{"class":241},[89,1299,742],{"class":102},[89,1301,307],{"class":306},[89,1303,1304],{"class":110},"4",[89,1306,386],{"class":306},[89,1308,755],{"class":110},[89,1310,386],{"class":306},[89,1312,1313],{"class":106},"'總計'",[89,1315,392],{"class":306},[89,1317,1318,1320,1323,1325,1327,1329,1331,1333,1336],{"class":91,"line":171},[89,1319,397],{"class":241},[89,1321,1322],{"class":102},"insertFormula",[89,1324,307],{"class":306},[89,1326,1304],{"class":110},[89,1328,386],{"class":306},[89,1330,316],{"class":110},[89,1332,386],{"class":306},[89,1334,1335],{"class":106},"'=SUM(B2:B4)'",[89,1337,392],{"class":306},[89,1339,1340,1342,1344,1346,1348,1350,1352,1354,1357,1359,1362],{"class":91,"line":177},[89,1341,397],{"class":241},[89,1343,742],{"class":102},[89,1345,307],{"class":306},[89,1347,484],{"class":110},[89,1349,386],{"class":306},[89,1351,316],{"class":110},[89,1353,386],{"class":306},[89,1355,1356],{"class":110},"1234567.89",[89,1358,386],{"class":306},[89,1360,1361],{"class":106},"'#,##0.00'",[89,1363,392],{"class":306},[89,1365,1366,1368,1370],{"class":91,"line":469},[89,1367,397],{"class":241},[89,1369,520],{"class":102},[89,1371,523],{"class":306},[15,1373,1374],{},"常用格式包括：",[47,1376,1377,1383,1389,1395],{},[50,1378,1379,1382],{},[19,1380,1381],{},"#,##0","：千分位整數",[50,1384,1385,1388],{},[19,1386,1387],{},"#,##0.00","：千分位與兩位小數",[50,1390,1391,1394],{},[19,1392,1393],{},"0.00%","：百分比",[50,1396,1397,1400],{},[19,1398,1399],{},"yyyy-mm-dd","：日期",[72,1402,1403],{"id":1403},"凍結標題列與自動篩選",[15,1405,1406],{},"這兩個功能很適合明細型報表，使用者捲動資料時仍可看見欄位名稱，也能直接在 Excel 篩選。",[80,1408,1410],{"className":290,"code":1409,"language":235,"meta":85,"style":85},"$excel->fileName('employee-report.xlsx')\n    ->header(['姓名', '部門', '薪資'])\n    ->data([\n        ['王小明', '工程部', 60000],\n        ['李小華', '行銷部', 55000],\n        ['陳美玲', '人資部', 58000],\n    ])\n    ->freezePanes(1, 0)\n    ->autoFilter('A1:C4')\n    ->output();\n",[19,1411,1412,1427,1449,1457,1476,1495,1514,1518,1535,1549],{"__ignoreMap":85},[89,1413,1414,1416,1418,1420,1422,1425],{"class":91,"line":92},[89,1415,1053],{"class":306},[89,1417,375],{"class":241},[89,1419,378],{"class":102},[89,1421,307],{"class":306},[89,1423,1424],{"class":106},"'employee-report.xlsx'",[89,1426,392],{"class":306},[89,1428,1429,1431,1433,1435,1437,1439,1442,1444,1447],{"class":91,"line":99},[89,1430,397],{"class":241},[89,1432,400],{"class":102},[89,1434,403],{"class":306},[89,1436,685],{"class":106},[89,1438,386],{"class":306},[89,1440,1441],{"class":106},"'部門'",[89,1443,386],{"class":306},[89,1445,1446],{"class":106},"'薪資'",[89,1448,419],{"class":306},[89,1450,1451,1453,1455],{"class":91,"line":117},[89,1452,397],{"class":241},[89,1454,426],{"class":102},[89,1456,339],{"class":306},[89,1458,1459,1461,1464,1466,1469,1471,1474],{"class":91,"line":124},[89,1460,433],{"class":306},[89,1462,1463],{"class":106},"'王小明'",[89,1465,386],{"class":306},[89,1467,1468],{"class":106},"'工程部'",[89,1470,386],{"class":306},[89,1472,1473],{"class":110},"60000",[89,1475,448],{"class":306},[89,1477,1478,1480,1483,1485,1488,1490,1493],{"class":91,"line":130},[89,1479,433],{"class":306},[89,1481,1482],{"class":106},"'李小華'",[89,1484,386],{"class":306},[89,1486,1487],{"class":106},"'行銷部'",[89,1489,386],{"class":306},[89,1491,1492],{"class":110},"55000",[89,1494,448],{"class":306},[89,1496,1497,1499,1502,1504,1507,1509,1512],{"class":91,"line":142},[89,1498,433],{"class":306},[89,1500,1501],{"class":106},"'陳美玲'",[89,1503,386],{"class":306},[89,1505,1506],{"class":106},"'人資部'",[89,1508,386],{"class":306},[89,1510,1511],{"class":110},"58000",[89,1513,448],{"class":306},[89,1515,1516],{"class":91,"line":147},[89,1517,512],{"class":306},[89,1519,1520,1522,1525,1527,1529,1531,1533],{"class":91,"line":153},[89,1521,397],{"class":241},[89,1523,1524],{"class":102},"freezePanes",[89,1526,307],{"class":306},[89,1528,316],{"class":110},[89,1530,386],{"class":306},[89,1532,755],{"class":110},[89,1534,392],{"class":306},[89,1536,1537,1539,1542,1544,1547],{"class":91,"line":166},[89,1538,397],{"class":241},[89,1540,1541],{"class":102},"autoFilter",[89,1543,307],{"class":306},[89,1545,1546],{"class":106},"'A1:C4'",[89,1548,392],{"class":306},[89,1550,1551,1553,1555],{"class":91,"line":171},[89,1552,397],{"class":241},[89,1554,520],{"class":102},[89,1556,523],{"class":306},[72,1558,1559],{"id":1559},"多個工作表",[15,1561,1562,1563,1566],{},"一份檔案需要不同分類資料時，可使用 ",[19,1564,1565],{},"addSheet()"," 新增工作表。",[80,1568,1570],{"className":290,"code":1569,"language":235,"meta":85,"style":85},"$file = $excel->fileName('monthly-report.xlsx', '一月')\n    ->header(['品項', '金額'])\n    ->data([['服務收入', 50000]]);\n\n$file->addSheet('二月')\n    ->header(['品項', '金額'])\n    ->data([['服務收入', 62000]])\n    ->output();\n",[19,1571,1572,1596,1612,1632,1636,1652,1668,1686],{"__ignoreMap":85},[89,1573,1574,1576,1578,1580,1582,1584,1586,1589,1591,1594],{"class":91,"line":92},[89,1575,636],{"class":306},[89,1577,313],{"class":241},[89,1579,372],{"class":306},[89,1581,375],{"class":241},[89,1583,378],{"class":102},[89,1585,307],{"class":306},[89,1587,1588],{"class":106},"'monthly-report.xlsx'",[89,1590,386],{"class":306},[89,1592,1593],{"class":106},"'一月'",[89,1595,392],{"class":306},[89,1597,1598,1600,1602,1604,1606,1608,1610],{"class":91,"line":99},[89,1599,397],{"class":241},[89,1601,400],{"class":102},[89,1603,403],{"class":306},[89,1605,406],{"class":106},[89,1607,386],{"class":306},[89,1609,411],{"class":106},[89,1611,419],{"class":306},[89,1613,1614,1616,1618,1621,1624,1626,1629],{"class":91,"line":117},[89,1615,397],{"class":241},[89,1617,426],{"class":102},[89,1619,1620],{"class":306},"([[",[89,1622,1623],{"class":106},"'服務收入'",[89,1625,386],{"class":306},[89,1627,1628],{"class":110},"50000",[89,1630,1631],{"class":306},"]]);\n",[89,1633,1634],{"class":91,"line":124},[89,1635,121],{"emptyLinePlaceholder":120},[89,1637,1638,1640,1642,1645,1647,1650],{"class":91,"line":130},[89,1639,671],{"class":306},[89,1641,375],{"class":241},[89,1643,1644],{"class":102},"addSheet",[89,1646,307],{"class":306},[89,1648,1649],{"class":106},"'二月'",[89,1651,392],{"class":306},[89,1653,1654,1656,1658,1660,1662,1664,1666],{"class":91,"line":142},[89,1655,397],{"class":241},[89,1657,400],{"class":102},[89,1659,403],{"class":306},[89,1661,406],{"class":106},[89,1663,386],{"class":306},[89,1665,411],{"class":106},[89,1667,419],{"class":306},[89,1669,1670,1672,1674,1676,1678,1680,1683],{"class":91,"line":147},[89,1671,397],{"class":241},[89,1673,426],{"class":102},[89,1675,1620],{"class":306},[89,1677,1623],{"class":106},[89,1679,386],{"class":306},[89,1681,1682],{"class":110},"62000",[89,1684,1685],{"class":306},"]])\n",[89,1687,1688,1690,1692],{"class":91,"line":153},[89,1689,397],{"class":241},[89,1691,520],{"class":102},[89,1693,523],{"class":306},[11,1695,1696],{"id":1696},"結論",[15,1698,1699,1700,1702,1703,1706,1707,1710,1711,1713],{},"xlswriter 很適合 PHP 專案中「大量資料匯出、低記憶體讀取」的需求。一般報表可從 ",[19,1701,859],{},"、",[19,1704,1705],{},"header()"," 與 ",[19,1708,1709],{},"data()"," 開始；資料量上來後，再改用 ",[19,1712,568],{}," 配合逐筆或分批資料來源。",[15,1715,1716,1717,1706,1722,1726],{},"更多樣式、圖片、圖表、條件格式與資料驗證的使用方式，可參考 ",[26,1718,1721],{"href":1719,"rel":1720},"https:\u002F\u002Fxlswriter-docs.viest.me\u002F",[30],"xlswriter 官方文件",[26,1723,1725],{"href":28,"rel":1724},[30],"GitHub 專案說明","。",[1728,1729,1730],"style",{},"html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}",{"title":85,"searchDepth":99,"depth":99,"links":1732},[1733,1734,1735,1739,1740,1741,1742,1747],{"id":13,"depth":99,"text":13},{"id":44,"depth":99,"text":45},{"id":70,"depth":99,"text":70,"children":1736},[1737,1738],{"id":74,"depth":117,"text":75},{"id":188,"depth":117,"text":189},{"id":283,"depth":99,"text":284},{"id":561,"depth":99,"text":562},{"id":876,"depth":99,"text":877},{"id":1184,"depth":99,"text":1185,"children":1743},[1744,1745,1746],{"id":1188,"depth":117,"text":1188},{"id":1403,"depth":117,"text":1403},{"id":1559,"depth":117,"text":1559},{"id":1696,"depth":99,"text":1696},"program","md","\u002Fimages\u002Farticles\u002F2026-08-23-php-xlswriter\u002Fcover.png",{},"\u002Farticles\u002F2026-08-23-php-xlswriter","2026-08-23 16:34:00",{"title":6,"description":85},"articles\u002F2026-08-23-php-xlswriter","當 PHP 需要匯出或讀取大量 Excel 資料時，xlswriter 能以 C 擴充套件提供低記憶體、高效率的 XLSX 處理方式。本文整理安裝流程、基本讀寫與大檔案實務。",[235,1758,1759],"xlsx","excel","PjuYpKGMlBP6OKKk89MouFpPRrxi7MEm_mATwpAnBr0",{"id":1762,"title":1763,"body":1764,"category":1833,"description":1834,"extension":1749,"image":1835,"meta":1836,"navigation":120,"path":1837,"pubDate":1838,"seo":1839,"status":120,"stem":1840,"summary":1841,"tags":1842,"__hash__":1843},"content\u002Farticles\u002F2026-08-16-2026-new-theme.md","2026 新版型",{"type":8,"value":1765,"toc":1831},[1766,1770,1790,1808,1811,1822],[1767,1768,1769],"h1",{"id":1769},"更新內容",[15,1771,1772,1773,1776,1777,1779,1780,1783,1784,1786,1787,1789],{},"這幾年 AI 能力飛越式進步，而 ",[19,1774,1775],{},"vibe coding"," 更是成熱門話題，自己的工作，也開始導入 ",[19,1778,1775],{}," ，最近心血來潮，想著自己的部落格的技術堆疊，也許久沒有更新了，還停留在 2022 年的 ",[19,1781,1782],{},"nuxt.js"," 2 建構，而如今 ",[19,1785,1782],{}," 已然更新至第 4 版了，所以不如用 ",[19,1788,1775],{}," 來重建自己的部落格。",[15,1791,1792,1793,1796,1797,1799,1800,1803,1804,1807],{},"這次主要使用 ",[19,1794,1795],{},"opencode"," 來進行開發，使用了 ",[19,1798,1782],{}," 4、",[19,1801,1802],{},"nuxt\u002Fcontent"," v3 和 ",[19,1805,1806],{},"nuxt\u002Fui"," 等套件來建立這個部落格。",[1767,1809,1810],{"id":1810},"感想",[15,1812,1792,1813,1815,1816,1818,1819,1821],{},[19,1814,1775],{}," 旳方式進行開發，整個開發體驗想當不錯，或許開發部落格網站，對於 AI 模型的要求並不高，只用了 ",[19,1817,1795],{}," 官方提供的免費模型，就完成了大部份的功能，也且開發時間，記得舊部格程式前後，也差不多也花了一個多月的空閒時間手刻，不過這次用 ",[19,1820,1775],{}," 整體花的時間，約十多天的天數，就完成大部份的功能。",[15,1823,1824,1825,1827,1828,1830],{},"看來 ",[19,1826,1775],{}," 也成為未來開發系統的主流，後續我也會分享自己 ",[19,1829,1775],{}," 的經驗。",{"title":85,"searchDepth":99,"depth":99,"links":1832},[],"站務","這幾年 AI 能力飛越式進步，而 vibe coding 更是成熱門話題，自己的工作，也開始導入 vibe coding ，最近心血來潮，想著自己的部落格的技術堆疊，也許久沒有更新了，還停留在 2022 年的 nuxt.js 2 建構，而如今 nuxt.js 已然更新至第 4 版了，所以不如用 vibe coding 來重建自己的部落格。","\u002Fimages\u002Farticles\u002F2026-08-16-2026-new-theme\u002Fcover.jpg",{},"\u002Farticles\u002F2026-08-16-2026-new-theme","2026-08-16 15:54:00",{"title":1763,"description":1834},"articles\u002F2026-08-16-2026-new-theme","部落格從 2022 年的 Nuxt 2 升級至 Nuxt 4 與 Nuxt Content v3，全程以 vibe coding 進行，使用 opencode 與免費模型完成大部分功能，開發時間從一個多月縮短至十多天，記錄這次難得的重建體驗。",[1833],"kfi3xMmARhktM-Gn0dE78ZILmke6mSELMjRhOJ857nE",{"id":1845,"title":1846,"body":1847,"category":2429,"description":85,"extension":1749,"image":2430,"meta":2431,"navigation":120,"path":2432,"pubDate":2433,"seo":2434,"status":120,"stem":2435,"summary":2436,"tags":2437,"__hash__":2441},"content\u002Farticles\u002F2026-06-29-opencode-state.md","使用 OpenCode stats 指令掌握 AI 開發成本：完整參數與實戰範例",{"type":8,"value":1848,"toc":2407},[1849,1857,1860,1874,1880,1883,1889,1892,1904,1907,1909,1912,1917,1932,1935,1957,1960,1962,1968,1974,1991,1994,2011,2013,2019,2025,2067,2070,2078,2080,2086,2092,2133,2136,2144,2146,2152,2158,2180,2183,2204,2211,2213,2216,2219,2223,2226,2251,2254,2265,2268,2270,2274,2277,2296,2299,2307,2310,2312,2316,2319,2339,2342,2350,2353,2361,2363,2367,2373,2387,2398,2404],[11,1850,1852,1853,1856],{"id":1851},"為什麼要看-opencode-stats","為什麼要看 ",[19,1854,1855],{},"opencode stats","？",[15,1858,1859],{},"當我們開始大量使用 AI 做開發（Code Review、產生程式碼、寫文件、跑資料分析…），往往會有幾個共同的疑問：",[47,1861,1862,1865,1868,1871],{},[50,1863,1864],{},"最近到底用了多少 Token？",[50,1866,1867],{},"哪些模型最燒錢？",[50,1869,1870],{},"哪些工具（像 bash、webfetch 這類）被呼叫得最頻繁？",[50,1872,1873],{},"某個專案是不是特別花錢？",[15,1875,1876,1877,1879],{},"如果手上沒有清楚的統計數據，很難優化「模型選擇」與「使用習慣」。這時候，OpenCode 的 ",[19,1878,1855],{}," 就派上用場了。",[1881,1882],"hr",{},[11,1884,1886,1888],{"id":1885},"opencode-stats-基本用法",[19,1887,1855],{}," 基本用法",[15,1890,1891],{},"最基本的指令非常單純：",[80,1893,1895],{"className":82,"code":1894,"language":84,"meta":85,"style":85},"opencode stats  \n",[19,1896,1897],{"__ignoreMap":85},[89,1898,1899,1901],{"class":91,"line":92},[89,1900,1795],{"class":102},[89,1902,1903],{"class":106}," stats\n",[15,1905,1906],{},"不帶任何參數時，它會顯示「所有時間、所有專案」的整體 Token 用量與費用統計，適合當作一個總體健康檢查（Health Check）：最近 AI 用得多不多、成本有沒有暴衝。",[1881,1908],{},[11,1910,1911],{"id":1911},"常用參數與行為說明",[15,1913,1914,1916],{},[19,1915,1855],{}," 支援一組 flags，可以自由組合：",[80,1918,1920],{"className":82,"code":1919,"language":84,"meta":85,"style":85},"opencode stats [flags]  \n",[19,1921,1922],{"__ignoreMap":85},[89,1923,1924,1926,1929],{"class":91,"line":92},[89,1925,1795],{"class":102},[89,1927,1928],{"class":106}," stats",[89,1930,1931],{"class":306}," [flags]\n",[15,1933,1934],{},"常用的有這幾個：",[47,1936,1937,1942,1947,1952],{},[50,1938,1939],{},[19,1940,1941],{},"--days N",[50,1943,1944],{},[19,1945,1946],{},"--tools [N]",[50,1948,1949],{},[19,1950,1951],{},"--models [N]",[50,1953,1954],{},[19,1955,1956],{},"--project P",[15,1958,1959],{},"下面逐一說明它們的用途與使用情境。",[1881,1961],{},[72,1963,1965,1967],{"id":1964},"days-n限制查詢時間範圍",[19,1966,1941],{},"：限制查詢時間範圍",[15,1969,1970,1973],{},[19,1971,1972],{},"--days"," 用來控制「要看最近幾天」的用量。例如，只想看最近一週：",[80,1975,1977],{"className":82,"code":1976,"language":84,"meta":85,"style":85},"opencode stats --days 7  \n",[19,1978,1979],{"__ignoreMap":85},[89,1980,1981,1983,1985,1988],{"class":91,"line":92},[89,1982,1795],{"class":102},[89,1984,1928],{"class":106},[89,1986,1987],{"class":110}," --days",[89,1989,1990],{"class":110}," 7\n",[15,1992,1993],{},"這在兩種情境特別好用：",[1995,1996,1997,2004],"ol",{},[50,1998,1999,2000,2003],{},"每月或每週例行檢查：例如每到月底看一次 ",[19,2001,2002],{},"--days 30","，檢查這個月 AI 成本。",[50,2005,2006,2007,2010],{},"某次實驗或專案密集期：例如你在最近兩週大量嘗試新模型，就可以用 ",[19,2008,2009],{},"--days 14"," 來看這段期間的影響。",[1881,2012],{},[72,2014,2016,2018],{"id":2015},"tools-n觀察工具使用熱度",[19,2017,1946],{},"：觀察工具使用熱度",[15,2020,2021,2024],{},[19,2022,2023],{},"--tools"," 會列出各個工具（例如 bash、webfetch…）的使用統計。若不帶數字，會顯示全部工具；帶數字則只顯示前 N 名。你可以：",[80,2026,2028],{"className":82,"code":2027,"language":84,"meta":85,"style":85},"# 顯示所有工具用量  \nopencode stats --tools  \n\n# 只顯示使用量前 5 名的工具  \nopencode stats --tools 5  \n",[19,2029,2030,2035,2047,2051,2056],{"__ignoreMap":85},[89,2031,2032],{"class":91,"line":92},[89,2033,2034],{"class":95},"# 顯示所有工具用量  \n",[89,2036,2037,2039,2041,2044],{"class":91,"line":99},[89,2038,1795],{"class":102},[89,2040,1928],{"class":106},[89,2042,2043],{"class":110}," --tools",[89,2045,2046],{"class":306},"  \n",[89,2048,2049],{"class":91,"line":117},[89,2050,121],{"emptyLinePlaceholder":120},[89,2052,2053],{"class":91,"line":124},[89,2054,2055],{"class":95},"# 只顯示使用量前 5 名的工具  \n",[89,2057,2058,2060,2062,2064],{"class":91,"line":130},[89,2059,1795],{"class":102},[89,2061,1928],{"class":106},[89,2063,2043],{"class":110},[89,2065,2066],{"class":110}," 5\n",[15,2068,2069],{},"這有幾個實際用途：",[47,2071,2072,2075],{},[50,2073,2074],{},"了解「AI 在幫你做什麼」：是更多在跑 shell 指令、還是瘋狂打 API？",[50,2076,2077],{},"找出可能的最佳化點：某個工具用量特別高，可能代表流程可以再調整，或有機會改成一次性的腳本／排程。",[1881,2079],{},[72,2081,2083,2085],{"id":2082},"models-n檢視模型用量與費用明細",[19,2084,1951],{},"：檢視模型用量與費用明細",[15,2087,2088,2091],{},[19,2089,2090],{},"--models"," 則是針對各個模型（provider\u002Fmodel，例如某家雲廠商的特定模型）的 Token 與費用明細。若不帶數字，會列出所有模型明細；帶數字則只顯示前 N 名。你可以：",[80,2093,2095],{"className":82,"code":2094,"language":84,"meta":85,"style":85},"# 顯示所有模型詳細用量  \nopencode stats --models  \n\n# 只顯示用量前 3 名的模型  \nopencode stats --models 3  \n",[19,2096,2097,2102,2113,2117,2122],{"__ignoreMap":85},[89,2098,2099],{"class":91,"line":92},[89,2100,2101],{"class":95},"# 顯示所有模型詳細用量  \n",[89,2103,2104,2106,2108,2111],{"class":91,"line":99},[89,2105,1795],{"class":102},[89,2107,1928],{"class":106},[89,2109,2110],{"class":110}," --models",[89,2112,2046],{"class":306},[89,2114,2115],{"class":91,"line":117},[89,2116,121],{"emptyLinePlaceholder":120},[89,2118,2119],{"class":91,"line":124},[89,2120,2121],{"class":95},"# 只顯示用量前 3 名的模型  \n",[89,2123,2124,2126,2128,2130],{"class":91,"line":130},[89,2125,1795],{"class":102},[89,2127,1928],{"class":106},[89,2129,2110],{"class":110},[89,2131,2132],{"class":110}," 3\n",[15,2134,2135],{},"這對於成本控管特別關鍵：",[47,2137,2138,2141],{},[50,2139,2140],{},"找出哪幾個模型是主力：你日常最常依賴哪些模型。",[50,2142,2143],{},"監控高單價模型：如果某些高價模型意外成為 Top 3，就需要檢查是否有誤用或參數設計不佳的地方。",[1881,2145],{},[72,2147,2149,2151],{"id":2148},"project-p聚焦在特定專案",[19,2150,1956],{},"：聚焦在特定專案",[15,2153,2154,2157],{},[19,2155,2156],{},"--project"," 用來對某個專案做切片統計：",[80,2159,2161],{"className":82,"code":2160,"language":84,"meta":85,"style":85},"# 只看名為 \"project-name\" 的專案  \nopencode stats --project project-name  \n",[19,2162,2163,2168],{"__ignoreMap":85},[89,2164,2165],{"class":91,"line":92},[89,2166,2167],{"class":95},"# 只看名為 \"project-name\" 的專案  \n",[89,2169,2170,2172,2174,2177],{"class":91,"line":99},[89,2171,1795],{"class":102},[89,2173,1928],{"class":106},[89,2175,2176],{"class":110}," --project",[89,2178,2179],{"class":106}," project-name\n",[15,2181,2182],{},"如果你已經在專案資料夾裡，還可以傳入空字串表示「當前專案」：",[80,2184,2186],{"className":82,"code":2185,"language":84,"meta":85,"style":85},"# 只看目前所在資料夾這個專案的統計  \nopencode stats --project \"\"  \n",[19,2187,2188,2193],{"__ignoreMap":85},[89,2189,2190],{"class":91,"line":92},[89,2191,2192],{"class":95},"# 只看目前所在資料夾這個專案的統計  \n",[89,2194,2195,2197,2199,2201],{"class":91,"line":99},[89,2196,1795],{"class":102},[89,2198,1928],{"class":106},[89,2200,2176],{"class":110},[89,2202,2203],{"class":106}," \"\"\n",[15,2205,2206,2207,2210],{},"這在你只想分析單一 repo 時特別好用。請注意，若你並不在專案資料夾裡，",[19,2208,2209],{},"--project \"\""," 可能不會取得預期結果。",[1881,2212],{},[11,2214,2215],{"id":2215},"實戰組合範例",[15,2217,2218],{},"前面介紹完各個參數，我習慣在實作時搭配成幾個常用的查詢模板。",[72,2220,2222],{"id":2221},"_1-最近-30-天目前專案的模型-top-5","1. 最近 30 天、目前專案的模型 Top 5",[15,2224,2225],{},"當你在某個專案上大量使用 AI 之後，很適合來一個月度回顧：",[80,2227,2229],{"className":82,"code":2228,"language":84,"meta":85,"style":85},"opencode stats --days 30 --project \"\" --models 5  \n",[19,2230,2231],{"__ignoreMap":85},[89,2232,2233,2235,2237,2239,2242,2244,2247,2249],{"class":91,"line":92},[89,2234,1795],{"class":102},[89,2236,1928],{"class":106},[89,2238,1987],{"class":110},[89,2240,2241],{"class":110}," 30",[89,2243,2176],{"class":110},[89,2245,2246],{"class":106}," \"\"",[89,2248,2110],{"class":110},[89,2250,2066],{"class":110},[15,2252,2253],{},"這條指令會告訴你：",[47,2255,2256,2259,2262],{},[50,2257,2258],{},"最近 30 天，這個專案用了哪些模型？",[50,2260,2261],{},"哪些模型是前五名？用量大概占比多少？",[50,2263,2264],{},"有沒有哪個模型使用量超出你原先的預期？",[15,2266,2267],{},"如果你發現某個昂貴的模型排進 Top 5，而且還不是關鍵需求，就可以考慮換成 CP 值更高的選擇。",[1881,2269],{},[72,2271,2273],{"id":2272},"_2-最近-14-天全工作區工具使用總覽","2. 最近 14 天、全工作區工具使用總覽",[15,2275,2276],{},"如果你想從「工作型態」的角度切入，而不是模型角度，可以這樣看工具用量：",[80,2278,2280],{"className":82,"code":2279,"language":84,"meta":85,"style":85},"opencode stats --days 14 --tools  \n",[19,2281,2282],{"__ignoreMap":85},[89,2283,2284,2286,2288,2290,2293],{"class":91,"line":92},[89,2285,1795],{"class":102},[89,2287,1928],{"class":106},[89,2289,1987],{"class":110},[89,2291,2292],{"class":110}," 14",[89,2294,2295],{"class":110}," --tools\n",[15,2297,2298],{},"透過這個視角，你可以觀察：",[47,2300,2301,2304],{},[50,2302,2303],{},"AI 比較常幫你做 I\u002FO（例如 webfetch），還是純文字推理？",[50,2305,2306],{},"是否大量使用某些 Shell 工具（例如 bash），代表你已經開始把 DevOps 類型的任務交給 AI？",[15,2308,2309],{},"這有助於你調整自己的工作習慣，例如將重複性的 CLI 操作逐步交給 AI 自動化。",[1881,2311],{},[72,2313,2315],{"id":2314},"_3-單一專案的完整成本分析模型-工具","3. 單一專案的完整成本分析（模型 + 工具）",[15,2317,2318],{},"當你想為某個專案做一次「完整的 AI 成本盤點」時，可以把模型與工具一起開：",[80,2320,2322],{"className":82,"code":2321,"language":84,"meta":85,"style":85},"opencode stats --project project-name --models --tools  \n",[19,2323,2324],{"__ignoreMap":85},[89,2325,2326,2328,2330,2332,2335,2337],{"class":91,"line":92},[89,2327,1795],{"class":102},[89,2329,1928],{"class":106},[89,2331,2176],{"class":110},[89,2333,2334],{"class":106}," project-name",[89,2336,2110],{"class":110},[89,2338,2295],{"class":110},[15,2340,2341],{},"用這種方式，你可以同時看到：",[47,2343,2344,2347],{},[50,2345,2346],{},"這個專案用了哪些模型、各自的 Token 與費用。",[50,2348,2349],{},"AI 在這個專案裡最常被拿來搭配哪些工具。",[15,2351,2352],{},"從這些數據出發，你可以進一步調整：",[47,2354,2355,2358],{},[50,2356,2357],{},"Default 模型（讓 Plan \u002F Build 走更便宜或更強大的路線）。",[50,2359,2360],{},"工作流程設計（例如是否將某些重度工具操作改成批次執行，而不是在對話中頻繁觸發）。",[1881,2362],{},[11,2364,2366],{"id":2365},"結語用數據讓-ai-助手更划算","結語：用數據讓 AI 助手更「划算」",[15,2368,2369,2370,2372],{},"引入 AI 助手到日常開發流程，不只是為了「變快」或「變輕鬆」，更重要的是能長期、可持續地使用。",[19,2371,1855],{}," 提供的，就是一個將「感覺」轉成「數字」的入口。",[15,2374,2375,2376,2378,2379,2381,2382,1706,2384,2386],{},"透過 ",[19,2377,1972],{}," 控制時間範圍、",[19,2380,2156],{}," 聚焦特定專案，再搭配 ",[19,2383,2090],{},[19,2385,2023],{}," 做細部分析，你可以：",[47,2388,2389,2392,2395],{},[50,2390,2391],{},"找出真正的主力模型與工具。",[50,2393,2394],{},"及早發現成本異常的使用模式。",[50,2396,2397],{},"有依據地調整預設模型與工作流程設計。",[15,2399,2400,2401,2403],{},"如果你已經習慣用 OpenCode 協助開發，建議把幾條常用的 ",[19,2402,1855],{}," 查詢，加到自己的工作流程（甚至包成 script 或 alias），讓「看 AI 成本」和「看 CI\u002FCD 狀態」、「看監控儀表板」一樣自然，成為開發日常的一部分。",[1728,2405,2406],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":85,"searchDepth":99,"depth":99,"links":2408},[2409,2411,2413,2423,2428],{"id":1851,"depth":99,"text":2410},"為什麼要看 opencode stats？",{"id":1885,"depth":99,"text":2412},"opencode stats 基本用法",{"id":1911,"depth":99,"text":1911,"children":2414},[2415,2417,2419,2421],{"id":1964,"depth":117,"text":2416},"--days N：限制查詢時間範圍",{"id":2015,"depth":117,"text":2418},"--tools [N]：觀察工具使用熱度",{"id":2082,"depth":117,"text":2420},"--models [N]：檢視模型用量與費用明細",{"id":2148,"depth":117,"text":2422},"--project P：聚焦在特定專案",{"id":2215,"depth":99,"text":2215,"children":2424},[2425,2426,2427],{"id":2221,"depth":117,"text":2222},{"id":2272,"depth":117,"text":2273},{"id":2314,"depth":117,"text":2315},{"id":2365,"depth":99,"text":2366},"ai","\u002Fimages\u002Farticles\u002F2026-06-29-opencode-state\u002Fcover.png",{},"\u002Farticles\u002F2026-06-29-opencode-state","2026-06-29 15:02:00",{"title":1846,"description":85},"articles\u002F2026-06-29-opencode-state","當 AI 助手真正進入開發流程後，**量化模型與工具的使用情況、掌握實際成本**就變得非常重要 OpenCode 提供的 `opencode stats` 指令，可以幫你快速統計各模型、各工具、各專案的 Token 用量與花費。從「感覺好像很常用」進化到「有數字、有依據」的資源管理。本文整理 `opencode stats` 的常見參數與組合用法，並分享幾個實務上常用的查詢範例。",[2438,1795,2439,2440],"AI","開源","開發工具","yQw3h2bKYW2VAUAF2zAXSLe_JOHylI9yq7K7oL9oWVM",{"id":2443,"title":2444,"body":2445,"category":2429,"description":85,"extension":1749,"image":2681,"meta":2682,"navigation":120,"path":2683,"pubDate":2684,"seo":2685,"status":120,"stem":2686,"summary":2687,"tags":2688,"__hash__":2689},"content\u002Farticles\u002F2026-05-15-opencode-context7-mcp.md","告別 AI 幻覺！用 Context7 MCP 讓 Opencode 即時讀取最新官方文件",{"type":8,"value":2446,"toc":2674},[2447,2451,2460,2463,2467,2470,2502,2506,2514,2517,2531,2550,2556,2559,2643,2646,2659,2666,2668,2671],[11,2448,2450],{"id":2449},"何為-mcp","何為  MCP",[15,2452,2453,2454,2459],{},"全名為 Model Context Protocol（模型上下文協定），它是一種讓 AI 可以「連接外部工具、資料、服務」的標準協定。由 ",[26,2455,2458],{"href":2456,"rel":2457},"https:\u002F\u002Fwww.anthropic.com?utm_source=chatgpt.com",[30],"Anthropic"," 在 2024 年提出。",[15,2461,2462],{},"簡單的說讓AI模型與外部工具互通的協定， 摡念就像是不同設備間，可以用 USB 這個通訊協定來互傳資料",[11,2464,2466],{"id":2465},"mcp-可以做什麼","MCP 可以做什麼？",[15,2468,2469],{},"它能讓AI模型做以下事情，甚致更多，只要應用服務商提供 MCP 接口，就可以讓 AI 模型操作各種服務",[47,2471,2472,2475,2478,2481,2484,2487,2490,2493,2496,2499],{},[50,2473,2474],{},"讀檔案",[50,2476,2477],{},"查資料庫",[50,2479,2480],{},"操作 GitHub",[50,2482,2483],{},"控制 Docker",[50,2485,2486],{},"查官方文件",[50,2488,2489],{},"執行 Shell",[50,2491,2492],{},"發 Slack",[50,2494,2495],{},"查 Notion",[50,2497,2498],{},"存取 PostgreSQL",[50,2500,2501],{},"操作 Browser",[11,2503,2505],{"id":2504},"何謂-context7","何謂 Context7",[15,2507,2508,2509,2513],{},"Context7 是 MCP 中很出名的應用服務，它可以讓 AI 模型在 coding 時，可以即時讀取",[2510,2511,2512],"strong",{},"最新版本的官方文件","，讓 AI 模型在進行回答或 Vibe Coding 時，可以即時查詢官方文件，來回答問題，而非僅靠訓練記憶，更可大幅減少 AI 幻覺。",[15,2515,2516],{},"如可在opencode 中設定 Context7 MCP",[1995,2518,2519,2528],{},[50,2520,2521,2522,2527],{},"在 ",[26,2523,2526],{"href":2524,"rel":2525},"https:\u002F\u002Fcontext7.com\u002F",[30],"Context 7 官網"," 註冊帳號",[50,2529,2530],{},"在命令列執行以下指令：",[80,2532,2534],{"className":82,"code":2533,"language":84,"meta":85,"style":85},"npx ctx7 setup --opencode\n",[19,2535,2536],{"__ignoreMap":85},[89,2537,2538,2541,2544,2547],{"class":91,"line":92},[89,2539,2540],{"class":102},"npx",[89,2542,2543],{"class":106}," ctx7",[89,2545,2546],{"class":106}," setup",[89,2548,2549],{"class":110}," --opencode\n",[15,2551,2552,2553],{},"此指令將會幫你取得 Context7 API key，建議先入 ",[26,2554,2526],{"href":2524,"rel":2555},[30],[15,2557,2558],{},"安裝成功會出現以下訊息：",[80,2560,2562],{"className":82,"code":2561,"language":84,"meta":85,"style":85},"✔ Context7 setup complete\n\n  OpenCode\n    + MCP server configured with API Key\n      \u002FUsers\u002Fuser\u002F.config\u002Fopencode\u002Fopencode.json\n    + Rule installed\n      \u002FUsers\u002Fuser\u002F.config\u002Fopencode\u002FAGENTS.md\n    + Skill installed\n      \u002FUsers\u002Fuser\u002F.agents\u002Fskills\u002Fcontext7-mcp\u002FSKILL.md\n",[19,2563,2564,2577,2581,2586,2609,2614,2624,2629,2638],{"__ignoreMap":85},[89,2565,2566,2569,2572,2574],{"class":91,"line":92},[89,2567,2568],{"class":102},"✔",[89,2570,2571],{"class":106}," Context7",[89,2573,2546],{"class":106},[89,2575,2576],{"class":106}," complete\n",[89,2578,2579],{"class":91,"line":99},[89,2580,121],{"emptyLinePlaceholder":120},[89,2582,2583],{"class":91,"line":117},[89,2584,2585],{"class":102},"  OpenCode\n",[89,2587,2588,2591,2594,2597,2600,2603,2606],{"class":91,"line":124},[89,2589,2590],{"class":102},"    +",[89,2592,2593],{"class":106}," MCP",[89,2595,2596],{"class":106}," server",[89,2598,2599],{"class":106}," configured",[89,2601,2602],{"class":106}," with",[89,2604,2605],{"class":106}," API",[89,2607,2608],{"class":106}," Key\n",[89,2610,2611],{"class":91,"line":130},[89,2612,2613],{"class":102},"      \u002FUsers\u002Fuser\u002F.config\u002Fopencode\u002Fopencode.json\n",[89,2615,2616,2618,2621],{"class":91,"line":142},[89,2617,2590],{"class":102},[89,2619,2620],{"class":106}," Rule",[89,2622,2623],{"class":106}," installed\n",[89,2625,2626],{"class":91,"line":147},[89,2627,2628],{"class":102},"      \u002FUsers\u002Fuser\u002F.config\u002Fopencode\u002FAGENTS.md\n",[89,2630,2631,2633,2636],{"class":91,"line":153},[89,2632,2590],{"class":102},[89,2634,2635],{"class":106}," Skill",[89,2637,2623],{"class":106},[89,2639,2640],{"class":91,"line":166},[89,2641,2642],{"class":102},"      \u002FUsers\u002Fuser\u002F.agents\u002Fskills\u002Fcontext7-mcp\u002FSKILL.md\n",[11,2644,2645],{"id":2645},"驗證安裝",[15,2647,2521,2648,2650,2651,2654,2655,2658],{},[19,2649,1795],{}," 命令列中，輪入 ",[19,2652,2653],{},"\u002Fmcps"," 在列表中看見 ",[19,2656,2657],{},"context7 connected"," 資訊表示安裝成功",[15,2660,2661],{},[2662,2663],"img",{"alt":2664,"src":2665},"Opencode MCP List","\u002Fimages\u002Farticles\u002F2026-05-15-opencode-context7-mcp\u002Fopencode-mcp.png",[11,2667,1696],{"id":1696},[15,2669,2670],{},"MCP 協定的出現讓 AI 從單純的「知識庫」轉變為能操作工具的「代理人」。而 Context7 則解決了 AI 最令人頭痛的「過時資訊」問題。將其設定在 Opencode 中後，AI 能夠在即時對接官方文件的基礎上進行編碼，讓開發體驗更加流暢且可靠。",[1728,2672,2673],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":85,"searchDepth":99,"depth":99,"links":2675},[2676,2677,2678,2679,2680],{"id":2449,"depth":99,"text":2450},{"id":2465,"depth":99,"text":2466},{"id":2504,"depth":99,"text":2505},{"id":2645,"depth":99,"text":2645},{"id":1696,"depth":99,"text":1696},"\u002Fimages\u002Farticles\u002F2026-05-15-opencode-context7-mcp\u002Fcover.png",{},"\u002Farticles\u002F2026-05-15-opencode-context7-mcp","2026-05-15 14:44:00",{"title":2444,"description":85},"articles\u002F2026-05-15-opencode-context7-mcp","Context7 這款 MCP 應用，它能讓 Opencode 在編碼時即時讀取最新版本的官方文件，而非僅依賴過時的訓練記憶，從而大幅減少 AI 幻覺並提升回答的準確性。",[2438,1795,2439,2440],"MD4aLm9bpk4W1cPswPYYPpPu2SWjkYB6cY0MKJo50aY",{"id":2691,"title":2692,"body":2693,"category":3116,"description":85,"extension":1749,"image":3117,"meta":3118,"navigation":120,"path":3119,"pubDate":3120,"seo":3121,"status":120,"stem":3122,"summary":3123,"tags":3124,"__hash__":3127},"content\u002Farticles\u002F2026-02-27-mole-tutorial.md","Mole 使用教學：macOS 深度清理與優化神器",{"type":8,"value":2694,"toc":3093},[2695,2699,2723,2726,2736,2738,2742,2745,2749,2763,2766,2769,2790,2797,2799,2802,2809,2812,2830,2866,2873,2879,2891,2894,2901,2907,2915,2927,2934,2937,2954,2966,2973,2976,2994,3006,3013,3029,3041,3043,3046,3080,3082,3085,3088,3090],[11,2696,2698],{"id":2697},"什麼是-mole","什麼是 Mole？",[15,2700,2701,2706,2707,2710,2711,2714,2715,2718,2719,2722],{},[26,2702,2705],{"href":2703,"rel":2704},"https:\u002F\u002Fgithub.com\u002Ftw93\u002FMole",[30],"Mole"," 是一個為 macOS 設計的開源全能工具箱。它的目標是取代多個付費或分散的工具，將 ",[2510,2708,2709],{},"CleanMyMac","（清理）、",[2510,2712,2713],{},"AppCleaner","（解除安裝）、",[2510,2716,2717],{},"DaisyDisk","（磁碟分析）以及 ",[2510,2720,2721],{},"iStat Menus","（實時監控）的核心功能整合進一個單一的二進位檔案中。",[15,2724,2725],{},"Mole 採用終端機介面（TUI），操作流暢且反應迅速，非常適合喜愛簡潔、高效工作的開發者與進階使用者。",[15,2727,2728,2731,2732],{},[2510,2729,2730],{},"專案網址","：",[26,2733,2735],{"href":2703,"rel":2734},[30],"tw93\u002FMole",[1881,2737],{},[11,2739,2741],{"id":2740},"安裝-mole","安裝 Mole",[15,2743,2744],{},"安裝 Mole 極其簡單，你可以選擇透過 Homebrew（推薦）或是官方腳本。",[72,2746,2748],{"id":2747},"使用-homebrew","使用 Homebrew",[80,2750,2752],{"className":82,"code":2751,"language":84,"meta":85,"style":85},"brew install mole\n",[19,2753,2754],{"__ignoreMap":85},[89,2755,2756,2758,2760],{"class":91,"line":92},[89,2757,180],{"class":102},[89,2759,107],{"class":106},[89,2761,2762],{"class":106}," mole\n",[72,2764,2765],{"id":2765},"使用官方腳本",[15,2767,2768],{},"如果你沒有安裝 Homebrew，也可以直接執行安裝腳本：",[80,2770,2772],{"className":82,"code":2771,"language":84,"meta":85,"style":85},"curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Ftw93\u002Fmole\u002Fmain\u002Finstall.sh | bash\n",[19,2773,2774],{"__ignoreMap":85},[89,2775,2776,2779,2782,2785,2787],{"class":91,"line":92},[89,2777,2778],{"class":102},"curl",[89,2780,2781],{"class":110}," -fsSL",[89,2783,2784],{"class":106}," https:\u002F\u002Fraw.githubusercontent.com\u002Ftw93\u002Fmole\u002Fmain\u002Finstall.sh",[89,2786,242],{"class":241},[89,2788,2789],{"class":102}," bash\n",[15,2791,2792,2793,2796],{},"安裝完成後，在終端機輸入 ",[19,2794,2795],{},"mo"," 即可啟動互動式選單，或直接加上子命令執行特定功能。",[1881,2798],{},[11,2800,2801],{"id":2801},"核心功能詳解",[72,2803,2805,2806,1163],{"id":2804},"_1-深度系統清理-mo-clean","1. 深度系統清理 (",[19,2807,2808],{},"mo clean",[15,2810,2811],{},"這是 Mole 最常用的功能。它會掃描系統中的各種快取、日誌與垃圾檔案，並提供視覺化的清理建議。",[47,2813,2814,2820],{},[50,2815,2816,2819],{},[2510,2817,2818],{},"掃描範疇","：應用程式快取、瀏覽器快取（Chrome, Safari, Firefox）、開發者工具（Xcode, Node.js）、系統日誌、垃圾桶等。",[50,2821,2822,2825,2826,2829],{},[2510,2823,2824],{},"預覽模式","：建議先執行 ",[19,2827,2828],{},"mo clean --dry-run"," 來查看預計清理的內容與風險等級。",[80,2831,2833],{"className":82,"code":2832,"language":84,"meta":85,"style":85},"# 執行深度清理\nmo clean\n\n# 僅查看預覽，不實際刪除\nmo clean --dry-run\n",[19,2834,2835,2840,2847,2851,2856],{"__ignoreMap":85},[89,2836,2837],{"class":91,"line":92},[89,2838,2839],{"class":95},"# 執行深度清理\n",[89,2841,2842,2844],{"class":91,"line":99},[89,2843,2795],{"class":102},[89,2845,2846],{"class":106}," clean\n",[89,2848,2849],{"class":91,"line":117},[89,2850,121],{"emptyLinePlaceholder":120},[89,2852,2853],{"class":91,"line":124},[89,2854,2855],{"class":95},"# 僅查看預覽，不實際刪除\n",[89,2857,2858,2860,2863],{"class":91,"line":130},[89,2859,2795],{"class":102},[89,2861,2862],{"class":106}," clean",[89,2864,2865],{"class":110}," --dry-run\n",[72,2867,2869,2870,1163],{"id":2868},"_2-智慧解除安裝-mo-uninstall","2. 智慧解除安裝 (",[19,2871,2872],{},"mo uninstall",[15,2874,2875,2876,2878],{},"普通的刪除應用程式往往會留下許多「殘骸」。",[19,2877,2872],{}," 會搜尋並清理所有相關的偏好設定、支援檔案、Launch Agents 以及隱藏的殘留物。",[80,2880,2882],{"className":82,"code":2881,"language":84,"meta":85,"style":85},"mo uninstall\n",[19,2883,2884],{"__ignoreMap":85},[89,2885,2886,2888],{"class":91,"line":92},[89,2887,2795],{"class":102},[89,2889,2890],{"class":106}," uninstall\n",[15,2892,2893],{},"執行後會彈出清單，讓你選擇想要徹底移除的應用程式。",[72,2895,2897,2898,1163],{"id":2896},"_3-系統優化-mo-optimize","3. 系統優化 (",[19,2899,2900],{},"mo optimize",[15,2902,2903,2904,2906],{},"當你感覺電腦變慢或網路異常時，",[19,2905,2900],{}," 可以幫助你快速重整系統狀態。",[47,2908,2909],{},[50,2910,2911,2914],{},[2510,2912,2913],{},"功能包括","：重建系統資料庫、重置網路服務、重啟 Finder 與 Dock、清理診斷紀錄、重建 Spotlight 索引等。",[80,2916,2918],{"className":82,"code":2917,"language":84,"meta":85,"style":85},"mo optimize\n",[19,2919,2920],{"__ignoreMap":85},[89,2921,2922,2924],{"class":91,"line":92},[89,2923,2795],{"class":102},[89,2925,2926],{"class":106}," optimize\n",[72,2928,2930,2931,1163],{"id":2929},"_4-磁碟空間分析-mo-analyze","4. 磁碟空間分析 (",[19,2932,2933],{},"mo analyze",[15,2935,2936],{},"類似於 DaisyDisk，這個功能會以視覺化條狀圖顯示各個目錄的空間佔用情況，並讓你輕鬆找出隱藏的大檔案。",[47,2938,2939,2945],{},[50,2940,2941,2944],{},[2510,2942,2943],{},"導覽方式","：支援方向鍵與 Vim 鍵位（h\u002Fj\u002Fk\u002Fl）。",[50,2946,2947,2950,2951,1726],{},[2510,2948,2949],{},"外部磁碟","：預設跳過外部磁碟以加快速度，若要分析外接硬碟可指定路徑：",[19,2952,2953],{},"mo analyze \u002FVolumes",[80,2955,2957],{"className":82,"code":2956,"language":84,"meta":85,"style":85},"mo analyze\n",[19,2958,2959],{"__ignoreMap":85},[89,2960,2961,2963],{"class":91,"line":92},[89,2962,2795],{"class":102},[89,2964,2965],{"class":106}," analyze\n",[72,2967,2969,2970,1163],{"id":2968},"_5-實時系統狀態-mo-status","5. 實時系統狀態 (",[19,2971,2972],{},"mo status",[15,2974,2975],{},"這是一個精美的實時儀表板，提供 CPU、GPU、記憶體、磁碟 I\u002FO、網路流量以及硬體健康度（如電池循環、溫度、風扇轉速）的完整資訊。",[47,2977,2978,2984],{},[50,2979,2980,2983],{},[2510,2981,2982],{},"Health Score","：根據系統壓力自動計算的健康分數。",[50,2985,2986,2989,2990,2993],{},[2510,2987,2988],{},"小彩蛋","：在狀態頁面按下 ",[19,2991,2992],{},"k"," 可以召喚「太空貓」陪你工作。",[80,2995,2997],{"className":82,"code":2996,"language":84,"meta":85,"style":85},"mo status\n",[19,2998,2999],{"__ignoreMap":85},[89,3000,3001,3003],{"class":91,"line":92},[89,3002,2795],{"class":102},[89,3004,3005],{"class":106}," status\n",[72,3007,3009,3010,1163],{"id":3008},"_6-專案快取清理-mo-purge","6. 專案快取清理 (",[19,3011,3012],{},"mo purge",[15,3014,3015,3016,1702,3019,1702,3022,3025,3026,3028],{},"對於開發者來說，硬碟空間常被無數專案的 ",[19,3017,3018],{},"node_modules",[19,3020,3021],{},"target",[19,3023,3024],{},"build"," 等資料夾吞噬。",[19,3027,3012],{}," 能自動找出並清理這些舊專案的構建產物。",[80,3030,3032],{"className":82,"code":3031,"language":84,"meta":85,"style":85},"mo purge\n",[19,3033,3034],{"__ignoreMap":85},[89,3035,3036,3038],{"class":91,"line":92},[89,3037,2795],{"class":102},[89,3039,3040],{"class":106}," purge\n",[1881,3042],{},[11,3044,3045],{"id":3045},"使用技巧與安全性",[47,3047,3048,3060,3070],{},[50,3049,3050,3053,3054,3056,3057,3059],{},[2510,3051,3052],{},"安全第一","：Mole 刪除的檔案通常是永久性的。請務必仔細檢查清理清單，特別是在執行 ",[19,3055,2808],{}," 或 ",[19,3058,3012],{}," 時。",[50,3061,3062,3065,3066,3069],{},[2510,3063,3064],{},"白名單功能","：如果你希望保護特定的快取不被清理，可以使用 ",[19,3067,3068],{},"mo clean --whitelist"," 進行設定。",[50,3071,3072,3075,3076,3079],{},[2510,3073,3074],{},"日誌追蹤","：所有的檔案操作都會記錄在 ",[19,3077,3078],{},"~\u002F.config\u002Fmole\u002Foperations.log","，方便事後追蹤。",[1881,3081],{},[11,3083,3084],{"id":3084},"總結",[15,3086,3087],{},"Mole 不僅是一個清理工具，更是一個讓 Mac 保持最佳狀態的隨身護理師。它開源、輕量且極致快速的原生體驗，使其成為 macOS 平台上非常具有競爭力的開源方案。如果你還在為磁碟空間不足或系統卡頓煩惱，不妨現在就安裝 Mole 體驗一下！",[1881,3089],{},[1728,3091,3092],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":85,"searchDepth":99,"depth":99,"links":3094},[3095,3096,3100,3114,3115],{"id":2697,"depth":99,"text":2698},{"id":2740,"depth":99,"text":2741,"children":3097},[3098,3099],{"id":2747,"depth":117,"text":2748},{"id":2765,"depth":117,"text":2765},{"id":2801,"depth":99,"text":2801,"children":3101},[3102,3104,3106,3108,3110,3112],{"id":2804,"depth":117,"text":3103},"1. 深度系統清理 (mo clean)",{"id":2868,"depth":117,"text":3105},"2. 智慧解除安裝 (mo uninstall)",{"id":2896,"depth":117,"text":3107},"3. 系統優化 (mo optimize)",{"id":2929,"depth":117,"text":3109},"4. 磁碟空間分析 (mo analyze)",{"id":2968,"depth":117,"text":3111},"5. 實時系統狀態 (mo status)",{"id":3008,"depth":117,"text":3113},"6. 專案快取清理 (mo purge)",{"id":3045,"depth":99,"text":3045},{"id":3084,"depth":99,"text":3084},"software","\u002Fimages\u002Farticles\u002F2026-02-27-mole-tutorial\u002Fcover.png",{},"\u002Farticles\u002F2026-02-27-mole-tutorial","2026-02-27 14:15:00",{"title":2692,"description":85},"articles\u002F2026-02-27-mole-tutorial","Mole 是一個開源的全能 macOS 優化工具，結合了 CleanMyMac、AppCleaner、DaisyDisk 和 iStat Menus 的核心功能。本文將帶你一步步掌握 Mole 的各項強大功能，讓你的 Mac 恢復往日的流暢與潔淨。",[3125,3126,2439],"MacOS","系統優化","mziUNXsCHKI6FoJ52Gvu-RdbPJ5he5GSmjS74gVH9ME",{"id":3129,"title":3130,"body":3131,"category":2429,"description":85,"extension":1749,"image":4337,"meta":4338,"navigation":120,"path":4339,"pubDate":4340,"seo":4341,"status":120,"stem":4342,"summary":4343,"tags":4344,"__hash__":4345},"content\u002Farticles\u002F2026-02-24-opencode.md","OpenCode 完全指南：開源 AI 程式碼助手讓開發效率飆升",{"type":8,"value":3132,"toc":4299},[3133,3137,3140,3144,3176,3178,3182,3185,3189,3192,3210,3213,3227,3231,3234,3294,3297,3378,3380,3384,3387,3391,3394,3418,3422,3425,3427,3430,3433,3451,3454,3463,3470,3472,3476,3479,3486,3494,3497,3500,3503,3521,3524,3527,3533,3536,3543,3549,3552,3554,3558,3561,3565,3572,3765,3769,3772,4066,4070,4079,4137,4141,4148,4162,4218,4221,4223,4226,4229,4232,4235,4238,4241,4244,4247,4250,4254,4257,4261,4264,4266,4269,4272,4274,4277,4283,4285,4287,4290,4296],[11,3134,3136],{"id":3135},"什麼是-opencode","什麼是 OpenCode？",[15,3138,3139],{},"OpenCode 是一個開源的 AI 程式碼助手，致力於讓開發者能夠在終端機、IDE 或桌面環境中更高效地撰寫程式碼。由 Anomaly 團隊開發，目前在 GitHub 上已累積超過 10 萬顆星標，擁有超過 700 位貢獻者，每月服務超過 250 萬名開發者。",[72,3141,3143],{"id":3142},"opencode-的核心特點","OpenCode 的核心特點",[47,3145,3146,3152,3158,3164,3170],{},[50,3147,3148,3151],{},[2510,3149,3150],{},"LSP 自動啟用","：自動載入正確的 LSP（Language Server Protocol）服務",[50,3153,3154,3157],{},[2510,3155,3156],{},"多工作階段","：可同時在同一專案上啟動多個代理程式",[50,3159,3160,3163],{},[2510,3161,3162],{},"分享連結","：可分享工作階段連結供他人參考或除錯",[50,3165,3166,3169],{},[2510,3167,3168],{},"廣泛模型支援","：支援 75 種以上的 LLM 提供者，包括 Claude、GPT、Gemini 等",[50,3171,3172,3175],{},[2510,3173,3174],{},"隱私優先","：不儲存任何程式碼或上下文資料，確保隱私安全",[1881,3177],{},[11,3179,3181],{"id":3180},"安裝-opencode","安裝 OpenCode",[15,3183,3184],{},"OpenCode 支援多種安裝方式，以下是各平台的安裝方法：",[72,3186,3188],{"id":3187},"linux-和-macos","Linux 和 macOS",[15,3190,3191],{},"使用官方安裝腳本是最簡單的方式：",[80,3193,3195],{"className":82,"code":3194,"language":84,"meta":85,"style":85},"curl -fsSL https:\u002F\u002Fopencode.ai\u002Finstall | bash\n",[19,3196,3197],{"__ignoreMap":85},[89,3198,3199,3201,3203,3206,3208],{"class":91,"line":92},[89,3200,2778],{"class":102},[89,3202,2781],{"class":110},[89,3204,3205],{"class":106}," https:\u002F\u002Fopencode.ai\u002Finstall",[89,3207,242],{"class":241},[89,3209,2789],{"class":102},[15,3211,3212],{},"或者使用 Homebrew：",[80,3214,3216],{"className":82,"code":3215,"language":84,"meta":85,"style":85},"brew install anomalyco\u002Ftap\u002Fopencode\n",[19,3217,3218],{"__ignoreMap":85},[89,3219,3220,3222,3224],{"class":91,"line":92},[89,3221,180],{"class":102},[89,3223,107],{"class":106},[89,3225,3226],{"class":106}," anomalyco\u002Ftap\u002Fopencode\n",[72,3228,3230],{"id":3229},"windows","Windows",[15,3232,3233],{},"在 Windows 上建議使用 WSL（Windows Subsystem for Linux）以獲得最佳體驗：",[80,3235,3237],{"className":82,"code":3236,"language":84,"meta":85,"style":85},"# 使用 Chocolatey\nchoco install opencode\n\n# 使用 Scoop\nscoop install opencode\n\n# 使用 NPM\nnpm install -g opencode-ai\n",[19,3238,3239,3244,3254,3258,3263,3272,3276,3281],{"__ignoreMap":85},[89,3240,3241],{"class":91,"line":92},[89,3242,3243],{"class":95},"# 使用 Chocolatey\n",[89,3245,3246,3249,3251],{"class":91,"line":99},[89,3247,3248],{"class":102},"choco",[89,3250,107],{"class":106},[89,3252,3253],{"class":106}," opencode\n",[89,3255,3256],{"class":91,"line":117},[89,3257,121],{"emptyLinePlaceholder":120},[89,3259,3260],{"class":91,"line":124},[89,3261,3262],{"class":95},"# 使用 Scoop\n",[89,3264,3265,3268,3270],{"class":91,"line":130},[89,3266,3267],{"class":102},"scoop",[89,3269,107],{"class":106},[89,3271,3253],{"class":106},[89,3273,3274],{"class":91,"line":142},[89,3275,121],{"emptyLinePlaceholder":120},[89,3277,3278],{"class":91,"line":147},[89,3279,3280],{"class":95},"# 使用 NPM\n",[89,3282,3283,3286,3288,3291],{"class":91,"line":153},[89,3284,3285],{"class":102},"npm",[89,3287,107],{"class":106},[89,3289,3290],{"class":110}," -g",[89,3292,3293],{"class":106}," opencode-ai\n",[72,3295,3296],{"id":3296},"使用套件管理器",[80,3298,3300],{"className":82,"code":3299,"language":84,"meta":85,"style":85},"# Node.js (npm)\nnpm install -g opencode-ai\n\n# Bun\nbun install -g opencode-ai\n\n# pnpm\npnpm install -g opencode-ai\n\n# Yarn\nyarn global add opencode-ai\n",[19,3301,3302,3307,3317,3321,3326,3337,3341,3346,3357,3361,3366],{"__ignoreMap":85},[89,3303,3304],{"class":91,"line":92},[89,3305,3306],{"class":95},"# Node.js (npm)\n",[89,3308,3309,3311,3313,3315],{"class":91,"line":99},[89,3310,3285],{"class":102},[89,3312,107],{"class":106},[89,3314,3290],{"class":110},[89,3316,3293],{"class":106},[89,3318,3319],{"class":91,"line":117},[89,3320,121],{"emptyLinePlaceholder":120},[89,3322,3323],{"class":91,"line":124},[89,3324,3325],{"class":95},"# Bun\n",[89,3327,3328,3331,3333,3335],{"class":91,"line":130},[89,3329,3330],{"class":102},"bun",[89,3332,107],{"class":106},[89,3334,3290],{"class":110},[89,3336,3293],{"class":106},[89,3338,3339],{"class":91,"line":142},[89,3340,121],{"emptyLinePlaceholder":120},[89,3342,3343],{"class":91,"line":147},[89,3344,3345],{"class":95},"# pnpm\n",[89,3347,3348,3351,3353,3355],{"class":91,"line":153},[89,3349,3350],{"class":102},"pnpm",[89,3352,107],{"class":106},[89,3354,3290],{"class":110},[89,3356,3293],{"class":106},[89,3358,3359],{"class":91,"line":166},[89,3360,121],{"emptyLinePlaceholder":120},[89,3362,3363],{"class":91,"line":171},[89,3364,3365],{"class":95},"# Yarn\n",[89,3367,3368,3371,3374,3376],{"class":91,"line":177},[89,3369,3370],{"class":102},"yarn",[89,3372,3373],{"class":106}," global",[89,3375,136],{"class":106},[89,3377,3293],{"class":106},[1881,3379],{},[11,3381,3383],{"id":3382},"配置-opencode","配置 OpenCode",[15,3385,3386],{},"安裝完成後，需要配置 LLM 提供者才能開始使用。",[72,3388,3390],{"id":3389},"連接-opencode-zen推薦","連接 OpenCode Zen（推薦）",[15,3392,3393],{},"OpenCode Zen 是經過團隊測試和驗證的優化模型集合，無需擔心模型品質不一致的問題。",[1995,3395,3396,3403,3412,3415],{},[50,3397,3398,3399,3402],{},"在終端機中輸入 ",[19,3400,3401],{},"\u002Fconnect"," 命令",[50,3404,3405,3406,3411],{},"選擇 opencode 並前往 ",[26,3407,3410],{"href":3408,"rel":3409},"https:\u002F\u002Fopencode.ai\u002Fauth",[30],"opencode.ai\u002Fauth"," 進行驗證",[50,3413,3414],{},"登入後新增付款資訊並複製 API 金鑰",[50,3416,3417],{},"將 API 金鑰貼上即可完成配置",[72,3419,3421],{"id":3420},"其他-llm-提供者","其他 LLM 提供者",[15,3423,3424],{},"如果你想使用其他 LLM 提供者（如 Claude、GPT、Gemini 等），也可以手動配置各提供者的 API 金鑰。",[1881,3426],{},[11,3428,3429],{"id":3429},"初始化專案",[15,3431,3432],{},"配置完成後，即可開始使用 OpenCode：",[80,3434,3436],{"className":82,"code":3435,"language":84,"meta":85,"style":85},"cd \u002Fpath\u002Fto\u002Fyour\u002Fproject\nopencode\n",[19,3437,3438,3446],{"__ignoreMap":85},[89,3439,3440,3443],{"class":91,"line":92},[89,3441,3442],{"class":110},"cd",[89,3444,3445],{"class":106}," \u002Fpath\u002Fto\u002Fyour\u002Fproject\n",[89,3447,3448],{"class":91,"line":99},[89,3449,3450],{"class":102},"opencode\n",[15,3452,3453],{},"初始化專案：",[80,3455,3457],{"className":82,"code":3456,"language":84,"meta":85,"style":85},"\u002Finit\n",[19,3458,3459],{"__ignoreMap":85},[89,3460,3461],{"class":91,"line":92},[89,3462,3456],{"class":102},[15,3464,3465,3466,3469],{},"這會讓 OpenCode 分析你的專案並在專案根目錄建立 ",[19,3467,3468],{},"AGENTS.md"," 檔案。建議將此檔案提交至 Git，這能幫助 OpenCode 理解專案結構和編碼規範。",[1881,3471],{},[11,3473,3475],{"id":3474},"opencode-實際應用","OpenCode 實際應用",[72,3477,3478],{"id":3478},"提問與解答",[15,3480,3481,3482,3485],{},"你可以讓 OpenCode 幫你解釋程式碼。使用 ",[19,3483,3484],{},"@"," 鍵可模糊搜尋專案中的檔案：",[80,3487,3492],{"className":3488,"code":3490,"language":3491},[3489],"language-text","How is authentication handled in @packages\u002Ffunctions\u002Fsrc\u002Fapi\u002Findex.ts\n","text",[19,3493,3490],{"__ignoreMap":85},[15,3495,3496],{},"這對於了解他人撰寫的程式碼特別有幫助。",[72,3498,3499],{"id":3499},"新增功能",[15,3501,3502],{},"OpenCode 的「規劃模式」是其強大功能之一。在這個模式下，OpenCode 不會直接修改程式碼，而是會提出實作計畫供你審視。",[1995,3504,3505,3512,3515,3518],{},[50,3506,3507,3508,3511],{},"按下 ",[2510,3509,3510],{},"Tab"," 鍵切換到規劃模式（畫面右下角會顯示指示器）",[50,3513,3514],{},"描述你想要的功能",[50,3516,3517],{},"檢視計畫並提供回饋或補充細節",[50,3519,3520],{},"確認計畫後，再切換回「建置模式」讓 OpenCode 執行修改",[72,3522,3523],{"id":3523},"程式碼修改",[15,3525,3526],{},"對於較簡單的修改，你可以直接要求 OpenCode 進行修改：",[80,3528,3531],{"className":3529,"code":3530,"language":3491},[3489],"We need to add authentication to the \u002Fsettings route. Take a look at how this is handled in the \u002Fnotes route in @packages\u002Ffunctions\u002Fsrc\u002Fnotes.ts and implement the same logic in @packages\u002Ffunctions\u002Fsrc\u002Fsettings.ts\n",[19,3532,3530],{"__ignoreMap":85},[72,3534,3535],{"id":3535},"復原變更",[15,3537,3538,3539,3542],{},"如果修改結果不滿意，可以使用 ",[19,3540,3541],{},"\u002Fundo"," 命令復原：",[80,3544,3547],{"className":3545,"code":3546,"language":3491},[3489],"\u002Fundo\n",[19,3548,3546],{"__ignoreMap":85},[15,3550,3551],{},"OpenCode 會恢復變更並顯示你原本的訊息，讓你可以調整提示後再試一次。",[1881,3553],{},[11,3555,3557],{"id":3556},"opencode-常用指令","OpenCode 常用指令",[15,3559,3560],{},"OpenCode 提供了豐富的指令來提升開發效率。這些指令可分為 TUI 指令和 CLI 指令兩種類型。",[72,3562,3564],{"id":3563},"tui-指令","TUI 指令",[15,3566,3567,3568,3571],{},"在 OpenCode 終端機介面中，輸入 ",[19,3569,3570],{},"\u002F"," 後跟指令名稱即可執行。以下是常用的 TUI 指令：",[3573,3574,3575,3588],"table",{},[3576,3577,3578],"thead",{},[3579,3580,3581,3585],"tr",{},[3582,3583,3584],"th",{},"指令",[3582,3586,3587],{},"說明",[3589,3590,3591,3605,3618,3627,3637,3647,3657,3673,3683,3693,3702,3715,3725,3735,3745,3755],"tbody",{},[3579,3592,3593,3599],{},[3594,3595,3596],"td",{},[19,3597,3598],{},"\u002Finit",[3594,3600,3601,3602,3604],{},"建立或更新 ",[19,3603,3468],{}," 檔案，分析專案結構並建立開發規範文件",[3579,3606,3607,3612],{},[3594,3608,3609],{},[19,3610,3611],{},"\u002Fnew",[3594,3613,3614,3615],{},"開始新的工作階段，別名：",[19,3616,3617],{},"\u002Fclear",[3579,3619,3620,3624],{},[3594,3621,3622],{},[19,3623,3541],{},[3594,3625,3626],{},"復原對話中的最後一條訊息，包括所有檔案變更",[3579,3628,3629,3634],{},[3594,3630,3631],{},[19,3632,3633],{},"\u002Fredo",[3594,3635,3636],{},"重做之前復原的訊息",[3579,3638,3639,3644],{},[3594,3640,3641],{},[19,3642,3643],{},"\u002Fshare",[3594,3645,3646],{},"分享當前工作階段，建立可分享的連結",[3579,3648,3649,3654],{},[3594,3650,3651],{},[19,3652,3653],{},"\u002Funshare",[3594,3655,3656],{},"取消分享當前工作階段",[3579,3658,3659,3664],{},[3594,3660,3661],{},[19,3662,3663],{},"\u002Fsessions",[3594,3665,3666,3667,1702,3670],{},"列出工作階段並在工作階段之間切換，別名：",[19,3668,3669],{},"\u002Fresume",[19,3671,3672],{},"\u002Fcontinue",[3579,3674,3675,3680],{},[3594,3676,3677],{},[19,3678,3679],{},"\u002Fmodels",[3594,3681,3682],{},"列出所有可用的模型",[3579,3684,3685,3690],{},[3594,3686,3687],{},[19,3688,3689],{},"\u002Fthemes",[3594,3691,3692],{},"列出可用的主題",[3579,3694,3695,3699],{},[3594,3696,3697],{},[19,3698,3401],{},[3594,3700,3701],{},"將 LLM 提供者新增到 OpenCode",[3579,3703,3704,3709],{},[3594,3705,3706],{},[19,3707,3708],{},"\u002Fcompact",[3594,3710,3711,3712],{},"壓縮當前工作階段，別名：",[19,3713,3714],{},"\u002Fsummarize",[3579,3716,3717,3722],{},[3594,3718,3719],{},[19,3720,3721],{},"\u002Fdetails",[3594,3723,3724],{},"切換工具執行詳情的顯示",[3579,3726,3727,3732],{},[3594,3728,3729],{},[19,3730,3731],{},"\u002Feditor",[3594,3733,3734],{},"開啟外部編輯器來撰寫訊息",[3579,3736,3737,3742],{},[3594,3738,3739],{},[19,3740,3741],{},"\u002Fexport",[3594,3743,3744],{},"將當前對話匯出為 Markdown",[3579,3746,3747,3752],{},[3594,3748,3749],{},[19,3750,3751],{},"\u002Fthinking",[3594,3753,3754],{},"切換思考\u002F推理區塊的可見性",[3579,3756,3757,3762],{},[3594,3758,3759],{},[19,3760,3761],{},"\u002Fhelp",[3594,3763,3764],{},"顯示說明對話框",[72,3766,3768],{"id":3767},"cli-指令","CLI 指令",[15,3770,3771],{},"除了 TUI 指令，OpenCode 還提供強大的命令列工具。以下是常用的 CLI 指令：",[80,3773,3775],{"className":82,"code":3774,"language":84,"meta":85,"style":85},"# 啟動 OpenCode\nopencode                          # 啟動 TUI\nopencode \u002Fpath\u002Fto\u002Fproject         # 指定專案目錄啟動\nopencode --continue               # 繼續上一個工作階段\n\n# 模型管理\nopencode models                   # 列出所有可用模型\nopencode models anthropic         # 列出特定提供者的模型\nopencode models --refresh         # 重新整理模型快取\n\n# 代理管理\nopencode agent create             # 建立新代理\nopencode agent list               # 列出所有代理\n\n# MCP 伺服器管理\nopencode mcp add                  # 新增 MCP 伺服器\nopencode mcp list                 # 列出所有 MCP 伺服器\nopencode mcp auth                 # 對 MCP 伺服器進行認證\n\n# 工作階段管理\nopencode session list             # 列出所有工作階段\nopencode export                   # 匯出工作階段資料\nopencode import                   # 匯入工作階段資料\n\n# 統計資訊\nopencode stats                    # 顯示 Token 用量和費用統計\nopencode stats --days 30          # 顯示最近 30 天的統計\n\n# 其他實用指令\nopencode run \"提示詞\"             # 非互動模式執行\nopencode serve                    # 啟動 API 伺服器\nopencode web                      # 啟動 Web 介面\nopencode upgrade                  # 更新 OpenCode\n",[19,3776,3777,3782,3789,3799,3809,3813,3818,3828,3840,3852,3856,3861,3874,3886,3890,3895,3907,3918,3930,3934,3939,3951,3962,3973,3978,3984,3994,4008,4013,4019,4033,4044,4055],{"__ignoreMap":85},[89,3778,3779],{"class":91,"line":92},[89,3780,3781],{"class":95},"# 啟動 OpenCode\n",[89,3783,3784,3786],{"class":91,"line":99},[89,3785,1795],{"class":102},[89,3787,3788],{"class":95},"                          # 啟動 TUI\n",[89,3790,3791,3793,3796],{"class":91,"line":117},[89,3792,1795],{"class":102},[89,3794,3795],{"class":106}," \u002Fpath\u002Fto\u002Fproject",[89,3797,3798],{"class":95},"         # 指定專案目錄啟動\n",[89,3800,3801,3803,3806],{"class":91,"line":124},[89,3802,1795],{"class":102},[89,3804,3805],{"class":110}," --continue",[89,3807,3808],{"class":95},"               # 繼續上一個工作階段\n",[89,3810,3811],{"class":91,"line":130},[89,3812,121],{"emptyLinePlaceholder":120},[89,3814,3815],{"class":91,"line":142},[89,3816,3817],{"class":95},"# 模型管理\n",[89,3819,3820,3822,3825],{"class":91,"line":147},[89,3821,1795],{"class":102},[89,3823,3824],{"class":106}," models",[89,3826,3827],{"class":95},"                   # 列出所有可用模型\n",[89,3829,3830,3832,3834,3837],{"class":91,"line":153},[89,3831,1795],{"class":102},[89,3833,3824],{"class":106},[89,3835,3836],{"class":106}," anthropic",[89,3838,3839],{"class":95},"         # 列出特定提供者的模型\n",[89,3841,3842,3844,3846,3849],{"class":91,"line":166},[89,3843,1795],{"class":102},[89,3845,3824],{"class":106},[89,3847,3848],{"class":110}," --refresh",[89,3850,3851],{"class":95},"         # 重新整理模型快取\n",[89,3853,3854],{"class":91,"line":171},[89,3855,121],{"emptyLinePlaceholder":120},[89,3857,3858],{"class":91,"line":177},[89,3859,3860],{"class":95},"# 代理管理\n",[89,3862,3863,3865,3868,3871],{"class":91,"line":469},[89,3864,1795],{"class":102},[89,3866,3867],{"class":106}," agent",[89,3869,3870],{"class":106}," create",[89,3872,3873],{"class":95},"             # 建立新代理\n",[89,3875,3876,3878,3880,3883],{"class":91,"line":489},[89,3877,1795],{"class":102},[89,3879,3867],{"class":106},[89,3881,3882],{"class":106}," list",[89,3884,3885],{"class":95},"               # 列出所有代理\n",[89,3887,3888],{"class":91,"line":509},[89,3889,121],{"emptyLinePlaceholder":120},[89,3891,3892],{"class":91,"line":515},[89,3893,3894],{"class":95},"# MCP 伺服器管理\n",[89,3896,3897,3899,3902,3904],{"class":91,"line":526},[89,3898,1795],{"class":102},[89,3900,3901],{"class":106}," mcp",[89,3903,136],{"class":106},[89,3905,3906],{"class":95},"                  # 新增 MCP 伺服器\n",[89,3908,3909,3911,3913,3915],{"class":91,"line":531},[89,3910,1795],{"class":102},[89,3912,3901],{"class":106},[89,3914,3882],{"class":106},[89,3916,3917],{"class":95},"                 # 列出所有 MCP 伺服器\n",[89,3919,3920,3922,3924,3927],{"class":91,"line":828},[89,3921,1795],{"class":102},[89,3923,3901],{"class":106},[89,3925,3926],{"class":106}," auth",[89,3928,3929],{"class":95},"                 # 對 MCP 伺服器進行認證\n",[89,3931,3932],{"class":91,"line":834},[89,3933,121],{"emptyLinePlaceholder":120},[89,3935,3936],{"class":91,"line":839},[89,3937,3938],{"class":95},"# 工作階段管理\n",[89,3940,3941,3943,3946,3948],{"class":91,"line":845},[89,3942,1795],{"class":102},[89,3944,3945],{"class":106}," session",[89,3947,3882],{"class":106},[89,3949,3950],{"class":95},"             # 列出所有工作階段\n",[89,3952,3954,3956,3959],{"class":91,"line":3953},22,[89,3955,1795],{"class":102},[89,3957,3958],{"class":106}," export",[89,3960,3961],{"class":95},"                   # 匯出工作階段資料\n",[89,3963,3965,3967,3970],{"class":91,"line":3964},23,[89,3966,1795],{"class":102},[89,3968,3969],{"class":106}," import",[89,3971,3972],{"class":95},"                   # 匯入工作階段資料\n",[89,3974,3976],{"class":91,"line":3975},24,[89,3977,121],{"emptyLinePlaceholder":120},[89,3979,3981],{"class":91,"line":3980},25,[89,3982,3983],{"class":95},"# 統計資訊\n",[89,3985,3987,3989,3991],{"class":91,"line":3986},26,[89,3988,1795],{"class":102},[89,3990,1928],{"class":106},[89,3992,3993],{"class":95},"                    # 顯示 Token 用量和費用統計\n",[89,3995,3997,3999,4001,4003,4005],{"class":91,"line":3996},27,[89,3998,1795],{"class":102},[89,4000,1928],{"class":106},[89,4002,1987],{"class":110},[89,4004,2241],{"class":110},[89,4006,4007],{"class":95},"          # 顯示最近 30 天的統計\n",[89,4009,4011],{"class":91,"line":4010},28,[89,4012,121],{"emptyLinePlaceholder":120},[89,4014,4016],{"class":91,"line":4015},29,[89,4017,4018],{"class":95},"# 其他實用指令\n",[89,4020,4022,4024,4027,4030],{"class":91,"line":4021},30,[89,4023,1795],{"class":102},[89,4025,4026],{"class":106}," run",[89,4028,4029],{"class":106}," \"提示詞\"",[89,4031,4032],{"class":95},"             # 非互動模式執行\n",[89,4034,4036,4038,4041],{"class":91,"line":4035},31,[89,4037,1795],{"class":102},[89,4039,4040],{"class":106}," serve",[89,4042,4043],{"class":95},"                    # 啟動 API 伺服器\n",[89,4045,4047,4049,4052],{"class":91,"line":4046},32,[89,4048,1795],{"class":102},[89,4050,4051],{"class":106}," web",[89,4053,4054],{"class":95},"                      # 啟動 Web 介面\n",[89,4056,4058,4060,4063],{"class":91,"line":4057},33,[89,4059,1795],{"class":102},[89,4061,4062],{"class":106}," upgrade",[89,4064,4065],{"class":95},"                  # 更新 OpenCode\n",[72,4067,4069],{"id":4068},"代理agents","代理（Agents）",[15,4071,4072,4073,4075,4076,4078],{},"OpenCode 內建了多種代理類型，可透過 ",[2510,4074,3510],{}," 鍵切換或使用 ",[19,4077,3484],{}," 提及呼叫：",[3573,4080,4081,4093],{},[3576,4082,4083],{},[3579,4084,4085,4088,4091],{},[3582,4086,4087],{},"代理",[3582,4089,4090],{},"類型",[3582,4092,3587],{},[3589,4094,4095,4106,4116,4127],{},[3579,4096,4097,4100,4103],{},[3594,4098,4099],{},"Build",[3594,4101,4102],{},"主代理",[3594,4104,4105],{},"預設代理，啟用所有工具",[3579,4107,4108,4111,4113],{},[3594,4109,4110],{},"Plan",[3594,4112,4102],{},[3594,4114,4115],{},"規劃和分析代理，無法修改檔案",[3579,4117,4118,4121,4124],{},[3594,4119,4120],{},"General",[3594,4122,4123],{},"子代理",[3594,4125,4126],{},"通用研究代理，完整工具存取",[3579,4128,4129,4132,4134],{},[3594,4130,4131],{},"Explore",[3594,4133,4123],{},[3594,4135,4136],{},"快速唯讀代理，用於探索程式碼庫",[72,4138,4140],{"id":4139},"技能skills","技能（Skills）",[15,4142,4143,4144,4147],{},"技能是可重複使用的行為定義，透過 ",[19,4145,4146],{},"SKILL.md"," 檔案設定。技能檔案放置位置：",[47,4149,4150,4156],{},[50,4151,4152,4153],{},"專案：",[19,4154,4155],{},".opencode\u002Fskills\u002F\u003Cname>\u002FSKILL.md",[50,4157,4158,4159],{},"全域：",[19,4160,4161],{},"~\u002F.config\u002Fopencode\u002Fskills\u002F\u003Cname>\u002FSKILL.md",[80,4163,4167],{"className":4164,"code":4165,"language":4166,"meta":85,"style":85},"language-yaml shiki shiki-themes github-light github-dark github-dark","---\nname: git-release\ndescription: Create consistent releases and changelogs\n---\n## What I do\n- Draft release notes from merged PRs\n- Propose a version bump\n- Provide a copy-pasteable git command\n## When to use me\nUse this when you are preparing a tagged release.\n","yaml",[19,4168,4169,4174,4179,4184,4188,4193,4198,4203,4208,4213],{"__ignoreMap":85},[89,4170,4171],{"class":91,"line":92},[89,4172,4173],{},"---\n",[89,4175,4176],{"class":91,"line":99},[89,4177,4178],{},"name: git-release\n",[89,4180,4181],{"class":91,"line":117},[89,4182,4183],{},"description: Create consistent releases and changelogs\n",[89,4185,4186],{"class":91,"line":124},[89,4187,4173],{},[89,4189,4190],{"class":91,"line":130},[89,4191,4192],{},"## What I do\n",[89,4194,4195],{"class":91,"line":142},[89,4196,4197],{},"- Draft release notes from merged PRs\n",[89,4199,4200],{"class":91,"line":147},[89,4201,4202],{},"- Propose a version bump\n",[89,4204,4205],{"class":91,"line":153},[89,4206,4207],{},"- Provide a copy-pasteable git command\n",[89,4209,4210],{"class":91,"line":166},[89,4211,4212],{},"## When to use me\n",[89,4214,4215],{"class":91,"line":171},[89,4216,4217],{},"Use this when you are preparing a tagged release.\n",[15,4219,4220],{},"透過靈活運用這些指令和快捷鍵，可以大幅提升使用 OpenCode 的開發效率。",[1881,4222],{},[11,4224,4225],{"id":4225},"進階功能",[72,4227,4228],{"id":4228},"主題自訂",[15,4230,4231],{},"OpenCode 支援多種主題，你可以根據喜好進行設定。",[72,4233,4234],{"id":4234},"快捷鍵自訂",[15,4236,4237],{},"自訂鍵位綁定以符合個人工作流程。",[72,4239,4240],{"id":4240},"程式碼格式化",[15,4242,4243],{},"配置程式碼格式化工具，確保程式碼風格一致。",[72,4245,4246],{"id":4246},"自訂命令",[15,4248,4249],{},"建立重複使用的自訂命令，提高工作效率。",[72,4251,4253],{"id":4252},"整合-github-copilot","整合 GitHub Copilot",[15,4255,4256],{},"登入 GitHub 即可使用現有的 Copilot 帳戶。",[72,4258,4260],{"id":4259},"整合-ide","整合 IDE",[15,4262,4263],{},"OpenCode 提供 IDE 擴充功能，讓你可在喜愛的編輯器中使用。",[1881,4265],{},[11,4267,4268],{"id":4268},"圖片支援",[15,4270,4271],{},"OpenCode 支援圖片分析功能。你可以將圖片拖曳到終端機中，OpenCode 會掃描圖片並將其加入提示中。這對於設計 UI 時參考範例圖片特別有用。",[1881,4273],{},[11,4275,4276],{"id":4276},"分享功能",[15,4278,4279,4280,4282],{},"使用 ",[19,4281,3643],{}," 命令可建立當前對話的分享連結，讓團隊成員能夠參考你的工作階段或協助除錯。",[1881,4284],{},[11,4286,3084],{"id":3084},[15,4288,4289],{},"OpenCode 作為一個開源的 AI 程式碼助手，提供了豐富的功能來提升開發效率。從自動化的 LSP 支援到多模型整合，再到強大的規劃和復原機制，OpenCode 為開發者提供了一個靈活且強大的 AI 輔助工具。",[15,4291,4292,4293,4295],{},"對於團隊開發而言，將 ",[19,4294,3468],{}," 提交至版本控制系統，能確保所有成員都能獲得一致的 AI 輔助體驗。而其隱私優先的設計理念，更讓企業和重視資料安全的開發者能夠放心使用。",[1728,4297,4298],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":85,"searchDepth":99,"depth":99,"links":4300},[4301,4304,4309,4313,4314,4320,4326,4334,4335,4336],{"id":3135,"depth":99,"text":3136,"children":4302},[4303],{"id":3142,"depth":117,"text":3143},{"id":3180,"depth":99,"text":3181,"children":4305},[4306,4307,4308],{"id":3187,"depth":117,"text":3188},{"id":3229,"depth":117,"text":3230},{"id":3296,"depth":117,"text":3296},{"id":3382,"depth":99,"text":3383,"children":4310},[4311,4312],{"id":3389,"depth":117,"text":3390},{"id":3420,"depth":117,"text":3421},{"id":3429,"depth":99,"text":3429},{"id":3474,"depth":99,"text":3475,"children":4315},[4316,4317,4318,4319],{"id":3478,"depth":117,"text":3478},{"id":3499,"depth":117,"text":3499},{"id":3523,"depth":117,"text":3523},{"id":3535,"depth":117,"text":3535},{"id":3556,"depth":99,"text":3557,"children":4321},[4322,4323,4324,4325],{"id":3563,"depth":117,"text":3564},{"id":3767,"depth":117,"text":3768},{"id":4068,"depth":117,"text":4069},{"id":4139,"depth":117,"text":4140},{"id":4225,"depth":99,"text":4225,"children":4327},[4328,4329,4330,4331,4332,4333],{"id":4228,"depth":117,"text":4228},{"id":4234,"depth":117,"text":4234},{"id":4240,"depth":117,"text":4240},{"id":4246,"depth":117,"text":4246},{"id":4252,"depth":117,"text":4253},{"id":4259,"depth":117,"text":4260},{"id":4268,"depth":99,"text":4268},{"id":4276,"depth":99,"text":4276},{"id":3084,"depth":99,"text":3084},"\u002Fimages\u002Farticles\u002F2026-02-24-opencode\u002Fcover.png",{},"\u002Farticles\u002F2026-02-24-opencode","2026-02-24 12:00:00",{"title":3130,"description":85},"articles\u002F2026-02-24-opencode","OpenCode 是一個開源的 AI 程式碼助手，支援終端機、桌面應用程式和 IDE 擴充功能。本文將帶你深入了解 OpenCode 的安裝、配置和各項強大功能，讓你體驗 AI 輔助開發的便利性。",[1795,2438,2440,2439],"hCbyfY05rfnLeV9qp9nMDhmuIDOO6nXzSa_pGswgHzA",{"id":4347,"title":4348,"body":4349,"category":3116,"description":85,"extension":1749,"image":4752,"meta":4753,"navigation":120,"path":4754,"pubDate":4755,"seo":4756,"status":120,"stem":4757,"summary":4758,"tags":4759,"__hash__":4761},"content\u002Farticles\u002F2025-11-16-ffmpeg-getting-started.md","FFmpeg 新手入門：從安裝到常用指令實戰",{"type":8,"value":4350,"toc":4744},[4351,4353,4356,4358,4361,4375,4378,4391,4394,4397,4415,4418,4446,4460,4463,4479,4482,4498,4501,4526,4545,4548,4551,4585,4609,4612,4615,4652,4672,4675,4725,4730,4732,4741],[11,4352,13],{"id":13},[15,4354,4355],{},"FFmpeg 是一套以命令列為主的開源多媒體處理工具，支援幾乎所有常見的音訊與影像格式（編碼\u002F封裝）。\n對開發者、系統工程師與內容創作者而言，FFmpeg 是自動化轉檔、批次處理、串流轉封裝與影音後製流程中不可或缺的工具。\n本文以實務為導向，示範安裝步驟與常用命令（轉檔、壓縮、截圖、合併、裁切等），並說明常見選項與應用場景，協助你快速在專案或腳本中整合 FFmpeg。",[11,4357,70],{"id":70},[15,4359,4360],{},"一、在 MacOS 安裝 ffmpeg",[80,4362,4364],{"className":82,"code":4363,"language":84,"meta":85,"style":85},"brew install ffmpeg\n",[19,4365,4366],{"__ignoreMap":85},[89,4367,4368,4370,4372],{"class":91,"line":92},[89,4369,180],{"class":102},[89,4371,107],{"class":106},[89,4373,4374],{"class":106}," ffmpeg\n",[15,4376,4377],{},"二、在終端機輸入以下指令，可取得 ffmpeg 版本號和相關設定資訊",[80,4379,4381],{"className":82,"code":4380,"language":84,"meta":85,"style":85},"ffmpeg -version\n",[19,4382,4383],{"__ignoreMap":85},[89,4384,4385,4388],{"class":91,"line":92},[89,4386,4387],{"class":102},"ffmpeg",[89,4389,4390],{"class":110}," -version\n",[11,4392,4393],{"id":4393},"轉檔",[15,4395,4396],{},"一、基本轉檔",[80,4398,4400],{"className":82,"code":4399,"language":84,"meta":85,"style":85},"ffmpeg -i input.mov output.mp4\n",[19,4401,4402],{"__ignoreMap":85},[89,4403,4404,4406,4409,4412],{"class":91,"line":92},[89,4405,4387],{"class":102},[89,4407,4408],{"class":110}," -i",[89,4410,4411],{"class":106}," input.mov",[89,4413,4414],{"class":106}," output.mp4\n",[15,4416,4417],{},"二、更換影片和音訊的編碼",[80,4419,4421],{"className":82,"code":4420,"language":84,"meta":85,"style":85},"ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4\n",[19,4422,4423],{"__ignoreMap":85},[89,4424,4425,4427,4429,4432,4435,4438,4441,4444],{"class":91,"line":92},[89,4426,4387],{"class":102},[89,4428,4408],{"class":110},[89,4430,4431],{"class":106}," input.mp4",[89,4433,4434],{"class":110}," -c:v",[89,4436,4437],{"class":106}," libx264",[89,4439,4440],{"class":110}," -c:a",[89,4442,4443],{"class":106}," aac",[89,4445,4414],{"class":106},[47,4447,4448,4454],{},[50,4449,4450,4453],{},[19,4451,4452],{},"-c:v libx264","：指定使用 H.264 編碼器進行影片編碼。",[50,4455,4456,4459],{},[19,4457,4458],{},"-c:a aac","： 指定使用 AAC 編碼器進行音頻編碼。",[15,4461,4462],{},"三、影片轉成序列圖片檔",[80,4464,4466],{"className":82,"code":4465,"language":84,"meta":85,"style":85},"ffmpeg -i input.mp4 video\u002Foutput_%04d.png\n",[19,4467,4468],{"__ignoreMap":85},[89,4469,4470,4472,4474,4476],{"class":91,"line":92},[89,4471,4387],{"class":102},[89,4473,4408],{"class":110},[89,4475,4431],{"class":106},[89,4477,4478],{"class":106}," video\u002Foutput_%04d.png\n",[15,4480,4481],{},"四、影片轉成音訊檔",[80,4483,4485],{"className":82,"code":4484,"language":84,"meta":85,"style":85},"ffmpeg -i input.mp4 music\u002Foutput.mp3\n",[19,4486,4487],{"__ignoreMap":85},[89,4488,4489,4491,4493,4495],{"class":91,"line":92},[89,4490,4387],{"class":102},[89,4492,4408],{"class":110},[89,4494,4431],{"class":106},[89,4496,4497],{"class":106}," music\u002Foutput.mp3\n",[15,4499,4500],{},"五、序列圖片轉成影片檔",[80,4502,4504],{"className":82,"code":4503,"language":84,"meta":85,"style":85},"ffmpeg -framerate 30 -i video\u002Foutput_%04d.png -c:v libx264 output.mp4\n",[19,4505,4506],{"__ignoreMap":85},[89,4507,4508,4510,4513,4515,4517,4520,4522,4524],{"class":91,"line":92},[89,4509,4387],{"class":102},[89,4511,4512],{"class":110}," -framerate",[89,4514,2241],{"class":110},[89,4516,4408],{"class":110},[89,4518,4519],{"class":106}," video\u002Foutput_%04d.png",[89,4521,4434],{"class":110},[89,4523,4437],{"class":106},[89,4525,4414],{"class":106},[47,4527,4528,4534,4540],{},[50,4529,4530,4533],{},[19,4531,4532],{},"framerate","：影格率（fps）",[50,4535,4536,4539],{},[19,4537,4538],{},"-i","：輸入",[50,4541,4542,4544],{},[19,4543,4452],{},"：使用 H264 編碼",[11,4546,4547],{"id":4547},"剪裁",[15,4549,4550],{},"一、時間裁切（截取片段）",[80,4552,4554],{"className":82,"code":4553,"language":84,"meta":85,"style":85},"ffmpeg -ss - -i input.mp4 -t 10 -c copy output_trim.mp4\n",[19,4555,4556],{"__ignoreMap":85},[89,4557,4558,4560,4563,4566,4568,4570,4573,4576,4579,4582],{"class":91,"line":92},[89,4559,4387],{"class":102},[89,4561,4562],{"class":110}," -ss",[89,4564,4565],{"class":106}," -",[89,4567,4408],{"class":110},[89,4569,4431],{"class":106},[89,4571,4572],{"class":110}," -t",[89,4574,4575],{"class":110}," 10",[89,4577,4578],{"class":110}," -c",[89,4580,4581],{"class":106}," copy",[89,4583,4584],{"class":106}," output_trim.mp4\n",[47,4586,4587,4593,4597,4603],{},[50,4588,4589,4592],{},[19,4590,4591],{},"-ss","： 開始時間",[50,4594,4595,4539],{},[19,4596,4538],{},[50,4598,4599,4602],{},[19,4600,4601],{},"-t","：截取時間(秒)",[50,4604,4605,4608],{},[19,4606,4607],{},"-c copy","：不進行重新編碼-",[11,4610,4611],{"id":4611},"合併",[15,4613,4614],{},"一、合併影片檔和聲音檔",[80,4616,4618],{"className":82,"code":4617,"language":84,"meta":85,"style":85},"ffmpeg -i input.mp4 -i audio.wav -c:v copy -c:a aac -b:a 192k -shortest output.mp4\n",[19,4619,4620],{"__ignoreMap":85},[89,4621,4622,4624,4626,4628,4630,4633,4635,4637,4639,4641,4644,4647,4650],{"class":91,"line":92},[89,4623,4387],{"class":102},[89,4625,4408],{"class":110},[89,4627,4431],{"class":106},[89,4629,4408],{"class":110},[89,4631,4632],{"class":106}," audio.wav",[89,4634,4434],{"class":110},[89,4636,4581],{"class":106},[89,4638,4440],{"class":110},[89,4640,4443],{"class":106},[89,4642,4643],{"class":110}," -b:a",[89,4645,4646],{"class":106}," 192k",[89,4648,4649],{"class":110}," -shortest",[89,4651,4414],{"class":106},[47,4653,4654,4660,4666],{},[50,4655,4656,4659],{},[19,4657,4658],{},"-c:v copy","：複製原影片，不重新編碼（保留畫質、速度快）",[50,4661,4662,4665],{},[19,4663,4664],{},"-c:a aac -b:a 192k","： 把音訊編成 AAC，192 kbps 常見且相容性好。",[50,4667,4668,4671],{},[19,4669,4670],{},"-shortest","：以較短的軌為準，避免多出黑畫面或靜音尾巴",[15,4673,4674],{},"二、合併圖片",[47,4676,4677,4689],{},[50,4678,4679,4680,4683],{},"建立影像清單 ",[19,4681,4682],{},"filelist.txt",[80,4684,4687],{"className":4685,"code":4686,"language":3491,"meta":85},[3489],"file 'part1.mp4'\nfile 'part2.mp4'\nfile 'part3.mp4'\n",[19,4688,4686],{"__ignoreMap":85},[50,4690,4691,4692],{},"串連輸出",[80,4693,4695],{"className":82,"code":4694,"language":84,"meta":85,"style":85},"ffmpeg -f concat -safe 0 -i filelist.txt -c copy output_concat.mp4\n",[19,4696,4697],{"__ignoreMap":85},[89,4698,4699,4701,4704,4707,4710,4713,4715,4718,4720,4722],{"class":91,"line":92},[89,4700,4387],{"class":102},[89,4702,4703],{"class":110}," -f",[89,4705,4706],{"class":106}," concat",[89,4708,4709],{"class":110}," -safe",[89,4711,4712],{"class":110}," 0",[89,4714,4408],{"class":110},[89,4716,4717],{"class":106}," filelist.txt",[89,4719,4578],{"class":110},[89,4721,4581],{"class":106},[89,4723,4724],{"class":106}," output_concat.mp4\n",[15,4726,4727],{},[2510,4728,4729],{},"注意：所有影片片段編碼參數需相同，否則會有導致音畫不同步，或是合併失敗",[11,4731,1696],{"id":1696},[15,4733,4734,4735,4740],{},"總結來說，FFmpeg 是一個功能強大的影音處理工具，只是功能對一般人來說複雜，而本文整理常用的使用情境，期望讓使用快速上手，若要更詳細的功能使用，可以參考",[26,4736,4739],{"href":4737,"rel":4738},"https:\u002F\u002Fffmpeg.org\u002Fffmpeg.html",[30],"官方文件","，希望這份指南能幫助你更好地利用 FFmpeg，打造更完美的影音作品！",[1728,4742,4743],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":85,"searchDepth":99,"depth":99,"links":4745},[4746,4747,4748,4749,4750,4751],{"id":13,"depth":99,"text":13},{"id":70,"depth":99,"text":70},{"id":4393,"depth":99,"text":4393},{"id":4547,"depth":99,"text":4547},{"id":4611,"depth":99,"text":4611},{"id":1696,"depth":99,"text":1696},"\u002Fimages\u002Farticles\u002F2025-11-16-ffmpeg-getting-started\u002Fcover.png",{},"\u002Farticles\u002F2025-11-16-ffmpeg-getting-started","2025-11-16 16:54:00",{"title":4348,"description":85},"articles\u002F2025-11-16-ffmpeg-getting-started","FFmpeg 是一個跨平台的開源多媒體工具組，用來處理音樂與影片。",[4760,3116,2439],"video","ZdvGeair61zT3Br9J0Csx2v78hP1q2MfzpRednjS9zw",{"id":4763,"title":4764,"body":4765,"category":2429,"description":85,"extension":1749,"image":4937,"meta":4938,"navigation":120,"path":4939,"pubDate":4940,"seo":4941,"status":120,"stem":4942,"summary":4943,"tags":4944,"__hash__":4946},"content\u002Farticles\u002F2025-08-05-ai-upscayl.md","告別模糊！用 Upscayl 輕鬆放大照片，讓細節更清晰",{"type":8,"value":4766,"toc":4929},[4767,4771,4774,4777,4833,4836,4842,4845,4851,4902,4905,4919,4921,4924],[11,4768,4770],{"id":4769},"什麼是-upscayl","什麼是 Upscayl？",[15,4772,4773],{},"Upscayl 是一款免費、開源的圖像放大（upscaling）工具，利用 AI（人工智慧）技術，尤其是 圖像超解析度（Super-Resolution）模型，將低解析度的圖片放大為高解析度，同時盡可能保留或重建細節，讓圖片變得更清晰、更銳利。",[11,4775,4776],{"id":4776},"主要特色",[47,4778,4779,4801,4815,4821,4827],{},[50,4780,4781,4784,4785,1702,4788,1702,4791,1702,4794,1702,4797,4800],{},[2510,4782,4783],{},"多個AI模型可選擇","： ",[19,4786,4787],{},"Upscayl",[19,4789,4790],{},"Upscayl lite",[19,4792,4793],{},"Remacri",[19,4795,4796],{},"Ultramax",[19,4798,4799],{},"Ultrasharp"," 等可以選擇",[50,4802,4803,4806,4807,1702,4809,4812,4813],{},[2510,4804,4805],{},"跨平台","：支援 ",[19,4808,3230],{},[19,4810,4811],{},"Linux"," 和 ",[19,4814,3125],{},[50,4816,4817,4820],{},[2510,4818,4819],{},"開援授權","：採用 MIT 授權",[50,4822,4823,4826],{},[2510,4824,4825],{},"支援批次處理","：可以處理多張圖片",[50,4828,4829,4832],{},[2510,4830,4831],{},"操作簡單","：使用介面非常友善，新手小白輕易上手",[11,4834,4835],{"id":4835},"下載網址",[15,4837,4838],{},[26,4839,4840],{"href":4840,"rel":4841},"https:\u002F\u002Fupscayl.github.io\u002F",[30],[11,4843,4844],{"id":4844},"操作介紹",[15,4846,4847],{},[2662,4848],{"alt":4849,"src":4850},"操作介面","\u002Fimages\u002Farticles\u002F2025-08-05-ai-upscayl\u002FUpscayl-01.png",[1995,4852,4853,4859,4865,4874,4880,4886,4892],{},[50,4854,4855,4858],{},[2510,4856,4857],{},"選擇批次處理","：可選擇單張圖片放大，或批次放大",[50,4860,4861,4864],{},[2510,4862,4863],{},"選舉圖片","：若單張放大時，則選擇圖片，若選擇批次放大，則選擇目錄",[50,4866,4867,4870,4871],{},[2510,4868,4869],{},"選擇放大模型","：可以依自已需求，選擇放大模型 ",[2662,4872],{"alt":4869,"src":4873},"\u002Fimages\u002Farticles\u002F2025-08-05-ai-upscayl\u002FUpscayl-02.png",[50,4875,4876,4879],{},[2510,4877,4878],{},"雙次放大","：進行兩次放大",[50,4881,4882,4885],{},[2510,4883,4884],{},"放大比例","：可選擇放大倍率",[50,4887,4888,4891],{},[2510,4889,4890],{},"選擇輸出位置","：可選擇輸出目錄",[50,4893,4894,4897,4898],{},[2510,4895,4896],{},"開始處理","：開始放大 ",[2662,4899],{"alt":4900,"src":4901},"放大後可瀏覽結果","\u002Fimages\u002Farticles\u002F2025-08-05-ai-upscayl\u002FUpscayl-03.png",[11,4903,4904],{"id":4904},"使用情境",[47,4906,4907,4910,4913,4916],{},[50,4908,4909],{},"放大老照片或低清圖片",[50,4911,4912],{},"為插圖、漫畫、像素風圖片增強清晰度",[50,4914,4915],{},"為網路下載的壓縮圖片進行畫質修復",[50,4917,4918],{},"用於 2D 遊戲素材的升級",[11,4920,1696],{"id":1696},[15,4922,4923],{},"Upscayl 是一款結合人工智慧與開源精神的圖像放大工具，讓使用者即使沒有專業技術背景，也能輕鬆將模糊、低解析度的圖片轉換為更清晰、可用的高解析版本。無論是修復舊照片、強化插圖，還是優化網路圖片，Upscayl 都提供了一種快速且免費的解決方案，是創作者與設計師不可或缺的好幫手。",[15,4925,4926],{},[2510,4927,4928],{},"注意！Upscayl 提供部份模型是無法使用於商用",{"title":85,"searchDepth":99,"depth":99,"links":4930},[4931,4932,4933,4934,4935,4936],{"id":4769,"depth":99,"text":4770},{"id":4776,"depth":99,"text":4776},{"id":4835,"depth":99,"text":4835},{"id":4844,"depth":99,"text":4844},{"id":4904,"depth":99,"text":4904},{"id":1696,"depth":99,"text":1696},"\u002Fimages\u002Farticles\u002F2025-08-05-ai-upscayl\u002Fcover.png",{},"\u002Farticles\u002F2025-08-05-ai-upscayl","2025-08-05 20:38:00",{"title":4764,"description":85},"articles\u002F2025-08-05-ai-upscayl","Upscayl 是一個基於開源人工智慧的免費圖片放大軟體，可以有效地提升低解析度的圖片品質。它支援 Linux、Windows 和 macOS 平台，並能將照片放大到超越原始畫質的程度。",[2438,4945,3116,2439],"圖片處理","tRflg5x3IYHijIQy2fPVyq0DlJreuDRMFZP2NyCvLa0",{"id":4948,"title":4949,"body":4950,"category":2429,"description":7682,"extension":1749,"image":7683,"meta":7684,"navigation":120,"path":7685,"pubDate":7686,"seo":7687,"status":120,"stem":7688,"summary":7689,"tags":7690,"__hash__":7691},"content\u002Farticles\u002F2025-07-12-gemini-cli.md","Gemini CLI 教學：善用 AI 提升你的終端機開發效率",{"type":8,"value":4951,"toc":7669},[4952,4956,4971,4975,4978,4982,5020,5024,5028,5075,5079,5082,5087,5093,5099,5105,5111,5120,5123,5378,5383,5560,5565,7454,7457,7464,7470,7475,7481,7505,7511,7517,7521,7529,7535,7539,7551,7636,7642,7644,7647,7650,7666],[1767,4953,4955],{"id":4954},"gemini-cli-教學將-gemini-的強大-ai-能力帶入你的終端機","Gemini CLI 教學：將 Gemini 的強大 AI 能力帶入你的終端機",[15,4957,4958,4959,4962,4963,4966,4967,4970],{},"Google 發最新的 AI 開發工具 ",[19,4960,4961],{},"Gemini CLI","，可以對標 Anthropic 的 ",[19,4964,4965],{},"Claude Code"," 和 OpenAI 的 ",[19,4968,4969],{},"Codex CLI","等 AI 開發工具，也讓使得 AI開發工具的竸爭進入白熱化。",[11,4972,4974],{"id":4973},"gemini-cli-是什麼","Gemini CLI 是什麼？",[15,4976,4977],{},"Gemini CLI 是一個開源的 AI 代理（AI Agent），它將 Google 的 Gemini 模型（特別是 Gemini 2.5 Pro）的能力直接整合到你的終端機環境中。這意味著你可以在不離開終端機的情況下，利用 AI 來協助你完成各種開發工作。",[72,4979,4981],{"id":4980},"主要特色與優勢","主要特色與優勢：",[47,4983,4984,4990,4996,5002,5008,5014],{},[50,4985,4986,4989],{},[2510,4987,4988],{},"無縫整合 Gemini 模型："," 直接在終端機中使用 Gemini 2.5 Pro 的強大功能，包括其高達 100 萬詞元的長脈絡（context window）。",[50,4991,4992,4995],{},[2510,4993,4994],{},"開源且高度擴充："," 採用 Apache 2.0 授權，原始碼公開透明，並支援 Model Context Protocol (MCP) 等擴充功能，讓你可以自訂和擴展其能力。",[50,4997,4998,5001],{},[2510,4999,5000],{},"多功能性："," 不僅限於程式碼生成，還能協助檔案操作、指令執行、動態故障排除、內容生成、問題解決、深入研究和任務管理。",[50,5003,5004,5007],{},[2510,5005,5006],{},"個人開發者免費額度："," 使用個人 Google 帳戶即可免費使用 Gemini CLI，提供業界領先的免費使用額度（每分鐘 60 次，每日最多 1,000 次模型執行）。",[50,5009,5010,5013],{},[2510,5011,5012],{},"AI-First Coding 概念："," 鼓勵開發者以 AI 為優先，將 AI 視為協作夥伴，透過清晰的提示詞引導 AI 完成任務，並審核其產出。",[50,5015,5016,5019],{},[2510,5017,5018],{},"與 Gemini Code Assist 整合："," 與 Google 的 AI 程式碼編寫輔助工具 Gemini Code Assist 採用相同核心技術，提供更一致的 AI 開發體驗。",[11,5021,5023],{"id":5022},"開始使用-gemini-cli","開始使用 Gemini CLI",[72,5025,5027],{"id":5026},"安裝步驟","安裝步驟：",[1995,5029,5030,5043,5065],{},[50,5031,5032,5035,5036,5039,5040,1726],{},[2510,5033,5034],{},"安裝 Node.js："," 確保你的系統已安裝 Node.js 版本 ",[19,5037,5038],{},"18"," 或以上，建議使用版本 ",[19,5041,5042],{},"20",[50,5044,5045,5048,5049],{},[2510,5046,5047],{},"安裝 Gemini CLI："," 在終端機中執行以下指令進行全域安裝：\n",[80,5050,5052],{"className":82,"code":5051,"language":84,"meta":85,"style":85},"npm install -g @google\u002Fgemini-cli\n",[19,5053,5054],{"__ignoreMap":85},[89,5055,5056,5058,5060,5062],{"class":91,"line":92},[89,5057,3285],{"class":102},[89,5059,107],{"class":106},[89,5061,3290],{"class":110},[89,5063,5064],{"class":106}," @google\u002Fgemini-cli\n",[50,5066,5067,5070,5071,5074],{},[2510,5068,5069],{},"初步設定："," 執行 ",[19,5072,5073],{},"gemini"," 指令，依照提示完成初步設定，例如選擇你偏好的 Theme 和進行身份驗證（通常是登入你的 Google 帳戶）。",[72,5076,5078],{"id":5077},"快速入門","快速入門：",[15,5080,5081],{},"讓我們透過一個簡單的範例來體驗 Gemini CLI 的強大之處。假設我們想生成一個計算費式數列的 Python 程式碼，並將其儲存並執行。",[15,5083,5084],{},[2510,5085,5086],{},"Prompt：",[80,5088,5091],{"className":5089,"code":5090,"language":3491},[3489],"使用html5開發一個飛機射擊遊戲，需有計分系統，每擊敗普通怪物得5分，擊敗Boss級怪物得100分，專案目錄：`~\u002Fwww\u002FAircraft-shooting`\n",[19,5092,5090],{"__ignoreMap":85},[15,5094,5095,5096,5098],{},"在執行過程中，",[19,5097,4961],{}," 會使用詢問互動方式，來協助使用者完成專案",[15,5100,5101,5102,5104],{},"建立檔案產與寫入檔案時，",[19,5103,4961],{}," 會讓使用者確認",[15,5106,5107],{},[2662,5108],{"alt":5109,"src":5110},"Gemini CLI詢問使用者是否建立檔案","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-01.png",[15,5112,5113,5114,5116,5117,5119],{},"確認後 ",[19,5115,4961],{}," 會開始建立相關程式，以此為例，",[19,5118,4961],{}," 建了以下程式",[15,5121,5122],{},"1 index.html",[80,5124,5128],{"className":5125,"code":5126,"language":5127,"meta":85,"style":85},"language-html shiki shiki-themes github-light github-dark github-dark","\u003C!DOCTYPE html>\n\u003Chtml lang=\"en\">\n\u003Chead>\n    \u003Cmeta charset=\"UTF-8\">\n    \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    \u003Ctitle>Aircraft Shooting Game\u003C\u002Ftitle>\n    \u003Clink rel=\"stylesheet\" href=\"style.css\">\n\u003C\u002Fhead>\n\u003Cbody>\n    \u003Ch1>Aircraft Shooting Game\u003C\u002Fh1>\n    \u003Ccanvas id=\"gameCanvas\" width=\"800\" height=\"600\">\u003C\u002Fcanvas>\n    \u003Cdiv id=\"score\">Score: 0\u003C\u002Fdiv>\n    \u003Cscript src=\"game.js\">\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","html",[19,5129,5130,5145,5162,5171,5189,5213,5227,5252,5261,5270,5282,5320,5341,5362,5370],{"__ignoreMap":85},[89,5131,5132,5135,5139,5142],{"class":91,"line":92},[89,5133,5134],{"class":306},"\u003C!",[89,5136,5138],{"class":5137},"sByVh","DOCTYPE",[89,5140,5141],{"class":102}," html",[89,5143,5144],{"class":306},">\n",[89,5146,5147,5150,5152,5155,5157,5160],{"class":91,"line":99},[89,5148,5149],{"class":306},"\u003C",[89,5151,5127],{"class":5137},[89,5153,5154],{"class":102}," lang",[89,5156,313],{"class":306},[89,5158,5159],{"class":106},"\"en\"",[89,5161,5144],{"class":306},[89,5163,5164,5166,5169],{"class":91,"line":117},[89,5165,5149],{"class":306},[89,5167,5168],{"class":5137},"head",[89,5170,5144],{"class":306},[89,5172,5173,5176,5179,5182,5184,5187],{"class":91,"line":124},[89,5174,5175],{"class":306},"    \u003C",[89,5177,5178],{"class":5137},"meta",[89,5180,5181],{"class":102}," charset",[89,5183,313],{"class":306},[89,5185,5186],{"class":106},"\"UTF-8\"",[89,5188,5144],{"class":306},[89,5190,5191,5193,5195,5198,5200,5203,5206,5208,5211],{"class":91,"line":130},[89,5192,5175],{"class":306},[89,5194,5178],{"class":5137},[89,5196,5197],{"class":102}," name",[89,5199,313],{"class":306},[89,5201,5202],{"class":106},"\"viewport\"",[89,5204,5205],{"class":102}," content",[89,5207,313],{"class":306},[89,5209,5210],{"class":106},"\"width=device-width, initial-scale=1.0\"",[89,5212,5144],{"class":306},[89,5214,5215,5217,5220,5223,5225],{"class":91,"line":142},[89,5216,5175],{"class":306},[89,5218,5219],{"class":5137},"title",[89,5221,5222],{"class":306},">Aircraft Shooting Game\u003C\u002F",[89,5224,5219],{"class":5137},[89,5226,5144],{"class":306},[89,5228,5229,5231,5234,5237,5239,5242,5245,5247,5250],{"class":91,"line":147},[89,5230,5175],{"class":306},[89,5232,5233],{"class":5137},"link",[89,5235,5236],{"class":102}," rel",[89,5238,313],{"class":306},[89,5240,5241],{"class":106},"\"stylesheet\"",[89,5243,5244],{"class":102}," href",[89,5246,313],{"class":306},[89,5248,5249],{"class":106},"\"style.css\"",[89,5251,5144],{"class":306},[89,5253,5254,5257,5259],{"class":91,"line":153},[89,5255,5256],{"class":306},"\u003C\u002F",[89,5258,5168],{"class":5137},[89,5260,5144],{"class":306},[89,5262,5263,5265,5268],{"class":91,"line":166},[89,5264,5149],{"class":306},[89,5266,5267],{"class":5137},"body",[89,5269,5144],{"class":306},[89,5271,5272,5274,5276,5278,5280],{"class":91,"line":171},[89,5273,5175],{"class":306},[89,5275,1767],{"class":5137},[89,5277,5222],{"class":306},[89,5279,1767],{"class":5137},[89,5281,5144],{"class":306},[89,5283,5284,5286,5289,5292,5294,5297,5300,5302,5305,5308,5310,5313,5316,5318],{"class":91,"line":177},[89,5285,5175],{"class":306},[89,5287,5288],{"class":5137},"canvas",[89,5290,5291],{"class":102}," id",[89,5293,313],{"class":306},[89,5295,5296],{"class":106},"\"gameCanvas\"",[89,5298,5299],{"class":102}," width",[89,5301,313],{"class":306},[89,5303,5304],{"class":106},"\"800\"",[89,5306,5307],{"class":102}," height",[89,5309,313],{"class":306},[89,5311,5312],{"class":106},"\"600\"",[89,5314,5315],{"class":306},">\u003C\u002F",[89,5317,5288],{"class":5137},[89,5319,5144],{"class":306},[89,5321,5322,5324,5327,5329,5331,5334,5337,5339],{"class":91,"line":469},[89,5323,5175],{"class":306},[89,5325,5326],{"class":5137},"div",[89,5328,5291],{"class":102},[89,5330,313],{"class":306},[89,5332,5333],{"class":106},"\"score\"",[89,5335,5336],{"class":306},">Score: 0\u003C\u002F",[89,5338,5326],{"class":5137},[89,5340,5144],{"class":306},[89,5342,5343,5345,5348,5351,5353,5356,5358,5360],{"class":91,"line":489},[89,5344,5175],{"class":306},[89,5346,5347],{"class":5137},"script",[89,5349,5350],{"class":102}," src",[89,5352,313],{"class":306},[89,5354,5355],{"class":106},"\"game.js\"",[89,5357,5315],{"class":306},[89,5359,5347],{"class":5137},[89,5361,5144],{"class":306},[89,5363,5364,5366,5368],{"class":91,"line":509},[89,5365,5256],{"class":306},[89,5367,5267],{"class":5137},[89,5369,5144],{"class":306},[89,5371,5372,5374,5376],{"class":91,"line":515},[89,5373,5256],{"class":306},[89,5375,5127],{"class":5137},[89,5377,5144],{"class":306},[1995,5379,5380],{"start":99},[50,5381,5382],{},"style.css",[80,5384,5388],{"className":5385,"code":5386,"language":5387,"meta":85,"style":85},"language-css shiki shiki-themes github-light github-dark github-dark","body {\n    font-family: sans-serif;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    margin: 0;\n    background-color: #f0f0f0;\n}\n\ncanvas {\n    border: 1px solid black;\n    background-color: #fff;\n}\n\n#score {\n    margin-top: 10px;\n    font-size: 24px;\n}\n","css",[19,5389,5390,5397,5410,5422,5434,5446,5457,5469,5473,5477,5483,5503,5514,5518,5522,5529,5542,5556],{"__ignoreMap":85},[89,5391,5392,5394],{"class":91,"line":92},[89,5393,5267],{"class":5137},[89,5395,5396],{"class":306}," {\n",[89,5398,5399,5402,5405,5408],{"class":91,"line":99},[89,5400,5401],{"class":110},"    font-family",[89,5403,5404],{"class":306},": ",[89,5406,5407],{"class":110},"sans-serif",[89,5409,552],{"class":306},[89,5411,5412,5415,5417,5420],{"class":91,"line":117},[89,5413,5414],{"class":110},"    display",[89,5416,5404],{"class":306},[89,5418,5419],{"class":110},"flex",[89,5421,552],{"class":306},[89,5423,5424,5427,5429,5432],{"class":91,"line":124},[89,5425,5426],{"class":110},"    flex-direction",[89,5428,5404],{"class":306},[89,5430,5431],{"class":110},"column",[89,5433,552],{"class":306},[89,5435,5436,5439,5441,5444],{"class":91,"line":130},[89,5437,5438],{"class":110},"    align-items",[89,5440,5404],{"class":306},[89,5442,5443],{"class":110},"center",[89,5445,552],{"class":306},[89,5447,5448,5451,5453,5455],{"class":91,"line":142},[89,5449,5450],{"class":110},"    margin",[89,5452,5404],{"class":306},[89,5454,755],{"class":110},[89,5456,552],{"class":306},[89,5458,5459,5462,5464,5467],{"class":91,"line":147},[89,5460,5461],{"class":110},"    background-color",[89,5463,5404],{"class":306},[89,5465,5466],{"class":110},"#f0f0f0",[89,5468,552],{"class":306},[89,5470,5471],{"class":91,"line":153},[89,5472,831],{"class":306},[89,5474,5475],{"class":91,"line":166},[89,5476,121],{"emptyLinePlaceholder":120},[89,5478,5479,5481],{"class":91,"line":171},[89,5480,5288],{"class":5137},[89,5482,5396],{"class":306},[89,5484,5485,5488,5490,5492,5495,5498,5501],{"class":91,"line":177},[89,5486,5487],{"class":110},"    border",[89,5489,5404],{"class":306},[89,5491,316],{"class":110},[89,5493,5494],{"class":241},"px",[89,5496,5497],{"class":110}," solid",[89,5499,5500],{"class":110}," black",[89,5502,552],{"class":306},[89,5504,5505,5507,5509,5512],{"class":91,"line":469},[89,5506,5461],{"class":110},[89,5508,5404],{"class":306},[89,5510,5511],{"class":110},"#fff",[89,5513,552],{"class":306},[89,5515,5516],{"class":91,"line":489},[89,5517,831],{"class":306},[89,5519,5520],{"class":91,"line":509},[89,5521,121],{"emptyLinePlaceholder":120},[89,5523,5524,5527],{"class":91,"line":515},[89,5525,5526],{"class":102},"#score",[89,5528,5396],{"class":306},[89,5530,5531,5534,5536,5538,5540],{"class":91,"line":526},[89,5532,5533],{"class":110},"    margin-top",[89,5535,5404],{"class":306},[89,5537,504],{"class":110},[89,5539,5494],{"class":241},[89,5541,552],{"class":306},[89,5543,5544,5547,5549,5552,5554],{"class":91,"line":531},[89,5545,5546],{"class":110},"    font-size",[89,5548,5404],{"class":306},[89,5550,5551],{"class":110},"24",[89,5553,5494],{"class":241},[89,5555,552],{"class":306},[89,5557,5558],{"class":91,"line":828},[89,5559,831],{"class":306},[1995,5561,5562],{"start":117},[50,5563,5564],{},"game.js",[80,5566,5570],{"className":5567,"code":5568,"language":5569,"meta":85,"style":85},"language-javascript shiki shiki-themes github-light github-dark github-dark","const canvas = document.getElementById('gameCanvas');\nconst ctx = canvas.getContext('2d');\nconst scoreElement = document.getElementById('score');\n\nlet score = 0;\nlet keys = {};\n\nclass Player {\n    constructor(x, y, width, height, color) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        this.color = color;\n        this.speed = 5;\n    }\n\n    draw() {\n        ctx.fillStyle = this.color;\n        ctx.fillRect(this.x, this.y, this.width, this.height);\n    }\n\n    update() {\n        if (keys['ArrowLeft'] && this.x > 0) {\n            this.x -= this.speed;\n        }\n        if (keys['ArrowRight'] && this.x \u003C canvas.width - this.width) {\n            this.x += this.speed;\n        }\n    }\n}\n\nclass Bullet {\n    constructor(x, y, width, height, color, speed) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        this.color = color;\n        this.speed = speed;\n    }\n\n    draw() {\n        ctx.fillStyle = this.color;\n        ctx.fillRect(this.x, this.y, this.width, this.height);\n    }\n\n    update() {\n        this.y -= this.speed;\n    }\n}\n\nclass Enemy {\n    constructor(x, y, width, height, color, speed, isBoss = false) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        this.color = color;\n        this.speed = speed;\n        this.isBoss = isBoss;\n    }\n\n    draw() {\n        ctx.fillStyle = this.color;\n        ctx.fillRect(this.x, this.y, this.width, this.height);\n    }\n\n    update() {\n        this.y += this.speed;\n    }\n}\n\nconst player = new Player(canvas.width \u002F 2 - 25, canvas.height - 60, 50, 50, 'blue');\nconst bullets = [];\nconst enemies = [];\n\nfunction spawnEnemy() {\n    const isBoss = Math.random() \u003C 0.1; \u002F\u002F 10% chance of being a boss\n    const width = isBoss ? 100 : 30;\n    const height = isBoss ? 100 : 30;\n    const color = isBoss ? 'red' : 'green';\n    const speed = isBoss ? 1 : 0.5;\n    const x = Math.random() * (canvas.width - width);\n    const y = -height;\n    enemies.push(new Enemy(x, y, width, height, color, speed, isBoss));\n}\n\nfunction updateScore(points) {\n    score += points;\n    scoreElement.textContent = `Score: ${score}`;\n}\n\nfunction collision(a, b) {\n    return a.x \u003C b.x + b.width &&\n           a.x + a.width > b.x &&\n           a.y \u003C b.y + b.height &&\n           a.y + a.height > b.y;\n}\n\nfunction gameLoop() {\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n    player.update();\n    player.draw();\n\n    bullets.forEach((bullet, bulletIndex) => {\n        bullet.update();\n        bullet.draw();\n\n        if (bullet.y \u003C 0) {\n            bullets.splice(bulletIndex, 1);\n        }\n\n        enemies.forEach((enemy, enemyIndex) => {\n            if (collision(bullet, enemy)) {\n                bullets.splice(bulletIndex, 1);\n                enemies.splice(enemyIndex, 1);\n                updateScore(enemy.isBoss ? 100 : 5);\n            }\n        });\n    });\n\n    enemies.forEach((enemy, enemyIndex) => {\n        enemy.update();\n        enemy.draw();\n\n        if (enemy.y > canvas.height) {\n            enemies.splice(enemyIndex, 1);\n        }\n\n        if (collision(player, enemy)) {\n            alert('Game Over!');\n            document.location.reload();\n        }\n    });\n\n    requestAnimationFrame(gameLoop);\n}\n\nwindow.addEventListener('keydown', (e) => {\n    keys[e.key] = true;\n    if (e.key === ' ') {\n        bullets.push(new Bullet(player.x + player.width \u002F 2 - 2.5, player.y, 5, 10, 'black', 7));\n    }\n});\n\nwindow.addEventListener('keyup', (e) => {\n    keys[e.key] = false;\n});\n\nsetInterval(spawnEnemy, 2000);\ngameLoop();\n","javascript",[19,5571,5572,5596,5618,5638,5642,5656,5668,5672,5682,5715,5728,5740,5752,5764,5776,5790,5795,5799,5807,5820,5851,5855,5859,5866,5894,5909,5914,5943,5956,5960,5964,5968,5972,5981,6013,6024,6035,6046,6057,6068,6080,6085,6090,6097,6108,6133,6138,6143,6150,6163,6168,6173,6178,6188,6229,6240,6251,6262,6273,6284,6295,6308,6313,6318,6325,6336,6361,6366,6371,6378,6391,6396,6401,6406,6457,6470,6482,6487,6498,6529,6554,6575,6599,6622,6649,6664,6683,6688,6693,6708,6719,6738,6743,6748,6767,6790,6807,6825,6840,6845,6850,6860,6880,6885,6896,6906,6911,6939,6949,6958,6963,6977,6993,6998,7003,7027,7042,7056,7071,7090,7096,7102,7108,7113,7134,7144,7153,7158,7171,7185,7190,7195,7207,7220,7231,7236,7241,7246,7255,7260,7265,7291,7304,7321,7373,7378,7384,7389,7411,7422,7427,7432,7446],{"__ignoreMap":85},[89,5573,5574,5577,5580,5583,5586,5589,5591,5594],{"class":91,"line":92},[89,5575,5576],{"class":241},"const",[89,5578,5579],{"class":110}," canvas",[89,5581,5582],{"class":241}," =",[89,5584,5585],{"class":306}," document.",[89,5587,5588],{"class":102},"getElementById",[89,5590,307],{"class":306},[89,5592,5593],{"class":106},"'gameCanvas'",[89,5595,319],{"class":306},[89,5597,5598,5600,5603,5605,5608,5611,5613,5616],{"class":91,"line":99},[89,5599,5576],{"class":241},[89,5601,5602],{"class":110}," ctx",[89,5604,5582],{"class":241},[89,5606,5607],{"class":306}," canvas.",[89,5609,5610],{"class":102},"getContext",[89,5612,307],{"class":306},[89,5614,5615],{"class":106},"'2d'",[89,5617,319],{"class":306},[89,5619,5620,5622,5625,5627,5629,5631,5633,5636],{"class":91,"line":117},[89,5621,5576],{"class":241},[89,5623,5624],{"class":110}," scoreElement",[89,5626,5582],{"class":241},[89,5628,5585],{"class":306},[89,5630,5588],{"class":102},[89,5632,307],{"class":306},[89,5634,5635],{"class":106},"'score'",[89,5637,319],{"class":306},[89,5639,5640],{"class":91,"line":124},[89,5641,121],{"emptyLinePlaceholder":120},[89,5643,5644,5647,5650,5652,5654],{"class":91,"line":130},[89,5645,5646],{"class":241},"let",[89,5648,5649],{"class":306}," score ",[89,5651,313],{"class":241},[89,5653,4712],{"class":110},[89,5655,552],{"class":306},[89,5657,5658,5660,5663,5665],{"class":91,"line":142},[89,5659,5646],{"class":241},[89,5661,5662],{"class":306}," keys ",[89,5664,313],{"class":241},[89,5666,5667],{"class":306}," {};\n",[89,5669,5670],{"class":91,"line":147},[89,5671,121],{"emptyLinePlaceholder":120},[89,5673,5674,5677,5680],{"class":91,"line":153},[89,5675,5676],{"class":241},"class",[89,5678,5679],{"class":102}," Player",[89,5681,5396],{"class":306},[89,5683,5684,5687,5689,5693,5695,5698,5700,5703,5705,5708,5710,5713],{"class":91,"line":166},[89,5685,5686],{"class":241},"    constructor",[89,5688,307],{"class":306},[89,5690,5692],{"class":5691},"sQHwn","x",[89,5694,386],{"class":306},[89,5696,5697],{"class":5691},"y",[89,5699,386],{"class":306},[89,5701,5702],{"class":5691},"width",[89,5704,386],{"class":306},[89,5706,5707],{"class":5691},"height",[89,5709,386],{"class":306},[89,5711,5712],{"class":5691},"color",[89,5714,732],{"class":306},[89,5716,5717,5720,5723,5725],{"class":91,"line":171},[89,5718,5719],{"class":110},"        this",[89,5721,5722],{"class":306},".x ",[89,5724,313],{"class":241},[89,5726,5727],{"class":306}," x;\n",[89,5729,5730,5732,5735,5737],{"class":91,"line":177},[89,5731,5719],{"class":110},[89,5733,5734],{"class":306},".y ",[89,5736,313],{"class":241},[89,5738,5739],{"class":306}," y;\n",[89,5741,5742,5744,5747,5749],{"class":91,"line":469},[89,5743,5719],{"class":110},[89,5745,5746],{"class":306},".width ",[89,5748,313],{"class":241},[89,5750,5751],{"class":306}," width;\n",[89,5753,5754,5756,5759,5761],{"class":91,"line":489},[89,5755,5719],{"class":110},[89,5757,5758],{"class":306},".height ",[89,5760,313],{"class":241},[89,5762,5763],{"class":306}," height;\n",[89,5765,5766,5768,5771,5773],{"class":91,"line":509},[89,5767,5719],{"class":110},[89,5769,5770],{"class":306},".color ",[89,5772,313],{"class":241},[89,5774,5775],{"class":306}," color;\n",[89,5777,5778,5780,5783,5785,5788],{"class":91,"line":515},[89,5779,5719],{"class":110},[89,5781,5782],{"class":306},".speed ",[89,5784,313],{"class":241},[89,5786,5787],{"class":110}," 5",[89,5789,552],{"class":306},[89,5791,5792],{"class":91,"line":526},[89,5793,5794],{"class":306},"    }\n",[89,5796,5797],{"class":91,"line":531},[89,5798,121],{"emptyLinePlaceholder":120},[89,5800,5801,5804],{"class":91,"line":828},[89,5802,5803],{"class":102},"    draw",[89,5805,5806],{"class":306},"() {\n",[89,5808,5809,5812,5814,5817],{"class":91,"line":834},[89,5810,5811],{"class":306},"        ctx.fillStyle ",[89,5813,313],{"class":241},[89,5815,5816],{"class":110}," this",[89,5818,5819],{"class":306},".color;\n",[89,5821,5822,5825,5828,5830,5833,5836,5838,5841,5843,5846,5848],{"class":91,"line":839},[89,5823,5824],{"class":306},"        ctx.",[89,5826,5827],{"class":102},"fillRect",[89,5829,307],{"class":306},[89,5831,5832],{"class":110},"this",[89,5834,5835],{"class":306},".x, ",[89,5837,5832],{"class":110},[89,5839,5840],{"class":306},".y, ",[89,5842,5832],{"class":110},[89,5844,5845],{"class":306},".width, ",[89,5847,5832],{"class":110},[89,5849,5850],{"class":306},".height);\n",[89,5852,5853],{"class":91,"line":845},[89,5854,5794],{"class":306},[89,5856,5857],{"class":91,"line":3953},[89,5858,121],{"emptyLinePlaceholder":120},[89,5860,5861,5864],{"class":91,"line":3964},[89,5862,5863],{"class":102},"    update",[89,5865,5806],{"class":306},[89,5867,5868,5871,5874,5877,5880,5883,5885,5887,5890,5892],{"class":91,"line":3975},[89,5869,5870],{"class":241},"        if",[89,5872,5873],{"class":306}," (keys[",[89,5875,5876],{"class":106},"'ArrowLeft'",[89,5878,5879],{"class":306},"] ",[89,5881,5882],{"class":241},"&&",[89,5884,5816],{"class":110},[89,5886,5722],{"class":306},[89,5888,5889],{"class":241},">",[89,5891,4712],{"class":110},[89,5893,732],{"class":306},[89,5895,5896,5899,5901,5904,5906],{"class":91,"line":3980},[89,5897,5898],{"class":110},"            this",[89,5900,5722],{"class":306},[89,5902,5903],{"class":241},"-=",[89,5905,5816],{"class":110},[89,5907,5908],{"class":306},".speed;\n",[89,5910,5911],{"class":91,"line":3986},[89,5912,5913],{"class":306},"        }\n",[89,5915,5916,5918,5920,5923,5925,5927,5929,5931,5933,5936,5938,5940],{"class":91,"line":3996},[89,5917,5870],{"class":241},[89,5919,5873],{"class":306},[89,5921,5922],{"class":106},"'ArrowRight'",[89,5924,5879],{"class":306},[89,5926,5882],{"class":241},[89,5928,5816],{"class":110},[89,5930,5722],{"class":306},[89,5932,5149],{"class":241},[89,5934,5935],{"class":306}," canvas.width ",[89,5937,748],{"class":241},[89,5939,5816],{"class":110},[89,5941,5942],{"class":306},".width) {\n",[89,5944,5945,5947,5949,5952,5954],{"class":91,"line":4010},[89,5946,5898],{"class":110},[89,5948,5722],{"class":306},[89,5950,5951],{"class":241},"+=",[89,5953,5816],{"class":110},[89,5955,5908],{"class":306},[89,5957,5958],{"class":91,"line":4015},[89,5959,5913],{"class":306},[89,5961,5962],{"class":91,"line":4021},[89,5963,5794],{"class":306},[89,5965,5966],{"class":91,"line":4035},[89,5967,831],{"class":306},[89,5969,5970],{"class":91,"line":4046},[89,5971,121],{"emptyLinePlaceholder":120},[89,5973,5974,5976,5979],{"class":91,"line":4057},[89,5975,5676],{"class":241},[89,5977,5978],{"class":102}," Bullet",[89,5980,5396],{"class":306},[89,5982,5984,5986,5988,5990,5992,5994,5996,5998,6000,6002,6004,6006,6008,6011],{"class":91,"line":5983},34,[89,5985,5686],{"class":241},[89,5987,307],{"class":306},[89,5989,5692],{"class":5691},[89,5991,386],{"class":306},[89,5993,5697],{"class":5691},[89,5995,386],{"class":306},[89,5997,5702],{"class":5691},[89,5999,386],{"class":306},[89,6001,5707],{"class":5691},[89,6003,386],{"class":306},[89,6005,5712],{"class":5691},[89,6007,386],{"class":306},[89,6009,6010],{"class":5691},"speed",[89,6012,732],{"class":306},[89,6014,6016,6018,6020,6022],{"class":91,"line":6015},35,[89,6017,5719],{"class":110},[89,6019,5722],{"class":306},[89,6021,313],{"class":241},[89,6023,5727],{"class":306},[89,6025,6027,6029,6031,6033],{"class":91,"line":6026},36,[89,6028,5719],{"class":110},[89,6030,5734],{"class":306},[89,6032,313],{"class":241},[89,6034,5739],{"class":306},[89,6036,6038,6040,6042,6044],{"class":91,"line":6037},37,[89,6039,5719],{"class":110},[89,6041,5746],{"class":306},[89,6043,313],{"class":241},[89,6045,5751],{"class":306},[89,6047,6049,6051,6053,6055],{"class":91,"line":6048},38,[89,6050,5719],{"class":110},[89,6052,5758],{"class":306},[89,6054,313],{"class":241},[89,6056,5763],{"class":306},[89,6058,6060,6062,6064,6066],{"class":91,"line":6059},39,[89,6061,5719],{"class":110},[89,6063,5770],{"class":306},[89,6065,313],{"class":241},[89,6067,5775],{"class":306},[89,6069,6071,6073,6075,6077],{"class":91,"line":6070},40,[89,6072,5719],{"class":110},[89,6074,5782],{"class":306},[89,6076,313],{"class":241},[89,6078,6079],{"class":306}," speed;\n",[89,6081,6083],{"class":91,"line":6082},41,[89,6084,5794],{"class":306},[89,6086,6088],{"class":91,"line":6087},42,[89,6089,121],{"emptyLinePlaceholder":120},[89,6091,6093,6095],{"class":91,"line":6092},43,[89,6094,5803],{"class":102},[89,6096,5806],{"class":306},[89,6098,6100,6102,6104,6106],{"class":91,"line":6099},44,[89,6101,5811],{"class":306},[89,6103,313],{"class":241},[89,6105,5816],{"class":110},[89,6107,5819],{"class":306},[89,6109,6111,6113,6115,6117,6119,6121,6123,6125,6127,6129,6131],{"class":91,"line":6110},45,[89,6112,5824],{"class":306},[89,6114,5827],{"class":102},[89,6116,307],{"class":306},[89,6118,5832],{"class":110},[89,6120,5835],{"class":306},[89,6122,5832],{"class":110},[89,6124,5840],{"class":306},[89,6126,5832],{"class":110},[89,6128,5845],{"class":306},[89,6130,5832],{"class":110},[89,6132,5850],{"class":306},[89,6134,6136],{"class":91,"line":6135},46,[89,6137,5794],{"class":306},[89,6139,6141],{"class":91,"line":6140},47,[89,6142,121],{"emptyLinePlaceholder":120},[89,6144,6146,6148],{"class":91,"line":6145},48,[89,6147,5863],{"class":102},[89,6149,5806],{"class":306},[89,6151,6153,6155,6157,6159,6161],{"class":91,"line":6152},49,[89,6154,5719],{"class":110},[89,6156,5734],{"class":306},[89,6158,5903],{"class":241},[89,6160,5816],{"class":110},[89,6162,5908],{"class":306},[89,6164,6166],{"class":91,"line":6165},50,[89,6167,5794],{"class":306},[89,6169,6171],{"class":91,"line":6170},51,[89,6172,831],{"class":306},[89,6174,6176],{"class":91,"line":6175},52,[89,6177,121],{"emptyLinePlaceholder":120},[89,6179,6181,6183,6186],{"class":91,"line":6180},53,[89,6182,5676],{"class":241},[89,6184,6185],{"class":102}," Enemy",[89,6187,5396],{"class":306},[89,6189,6191,6193,6195,6197,6199,6201,6203,6205,6207,6209,6211,6213,6215,6217,6219,6222,6224,6227],{"class":91,"line":6190},54,[89,6192,5686],{"class":241},[89,6194,307],{"class":306},[89,6196,5692],{"class":5691},[89,6198,386],{"class":306},[89,6200,5697],{"class":5691},[89,6202,386],{"class":306},[89,6204,5702],{"class":5691},[89,6206,386],{"class":306},[89,6208,5707],{"class":5691},[89,6210,386],{"class":306},[89,6212,5712],{"class":5691},[89,6214,386],{"class":306},[89,6216,6010],{"class":5691},[89,6218,386],{"class":306},[89,6220,6221],{"class":5691},"isBoss",[89,6223,5582],{"class":241},[89,6225,6226],{"class":110}," false",[89,6228,732],{"class":306},[89,6230,6232,6234,6236,6238],{"class":91,"line":6231},55,[89,6233,5719],{"class":110},[89,6235,5722],{"class":306},[89,6237,313],{"class":241},[89,6239,5727],{"class":306},[89,6241,6243,6245,6247,6249],{"class":91,"line":6242},56,[89,6244,5719],{"class":110},[89,6246,5734],{"class":306},[89,6248,313],{"class":241},[89,6250,5739],{"class":306},[89,6252,6254,6256,6258,6260],{"class":91,"line":6253},57,[89,6255,5719],{"class":110},[89,6257,5746],{"class":306},[89,6259,313],{"class":241},[89,6261,5751],{"class":306},[89,6263,6265,6267,6269,6271],{"class":91,"line":6264},58,[89,6266,5719],{"class":110},[89,6268,5758],{"class":306},[89,6270,313],{"class":241},[89,6272,5763],{"class":306},[89,6274,6276,6278,6280,6282],{"class":91,"line":6275},59,[89,6277,5719],{"class":110},[89,6279,5770],{"class":306},[89,6281,313],{"class":241},[89,6283,5775],{"class":306},[89,6285,6287,6289,6291,6293],{"class":91,"line":6286},60,[89,6288,5719],{"class":110},[89,6290,5782],{"class":306},[89,6292,313],{"class":241},[89,6294,6079],{"class":306},[89,6296,6298,6300,6303,6305],{"class":91,"line":6297},61,[89,6299,5719],{"class":110},[89,6301,6302],{"class":306},".isBoss ",[89,6304,313],{"class":241},[89,6306,6307],{"class":306}," isBoss;\n",[89,6309,6311],{"class":91,"line":6310},62,[89,6312,5794],{"class":306},[89,6314,6316],{"class":91,"line":6315},63,[89,6317,121],{"emptyLinePlaceholder":120},[89,6319,6321,6323],{"class":91,"line":6320},64,[89,6322,5803],{"class":102},[89,6324,5806],{"class":306},[89,6326,6328,6330,6332,6334],{"class":91,"line":6327},65,[89,6329,5811],{"class":306},[89,6331,313],{"class":241},[89,6333,5816],{"class":110},[89,6335,5819],{"class":306},[89,6337,6339,6341,6343,6345,6347,6349,6351,6353,6355,6357,6359],{"class":91,"line":6338},66,[89,6340,5824],{"class":306},[89,6342,5827],{"class":102},[89,6344,307],{"class":306},[89,6346,5832],{"class":110},[89,6348,5835],{"class":306},[89,6350,5832],{"class":110},[89,6352,5840],{"class":306},[89,6354,5832],{"class":110},[89,6356,5845],{"class":306},[89,6358,5832],{"class":110},[89,6360,5850],{"class":306},[89,6362,6364],{"class":91,"line":6363},67,[89,6365,5794],{"class":306},[89,6367,6369],{"class":91,"line":6368},68,[89,6370,121],{"emptyLinePlaceholder":120},[89,6372,6374,6376],{"class":91,"line":6373},69,[89,6375,5863],{"class":102},[89,6377,5806],{"class":306},[89,6379,6381,6383,6385,6387,6389],{"class":91,"line":6380},70,[89,6382,5719],{"class":110},[89,6384,5734],{"class":306},[89,6386,5951],{"class":241},[89,6388,5816],{"class":110},[89,6390,5908],{"class":306},[89,6392,6394],{"class":91,"line":6393},71,[89,6395,5794],{"class":306},[89,6397,6399],{"class":91,"line":6398},72,[89,6400,831],{"class":306},[89,6402,6404],{"class":91,"line":6403},73,[89,6405,121],{"emptyLinePlaceholder":120},[89,6407,6409,6411,6414,6416,6418,6420,6423,6425,6428,6430,6433,6436,6438,6441,6443,6446,6448,6450,6452,6455],{"class":91,"line":6408},74,[89,6410,5576],{"class":241},[89,6412,6413],{"class":110}," player",[89,6415,5582],{"class":241},[89,6417,333],{"class":241},[89,6419,5679],{"class":102},[89,6421,6422],{"class":306},"(canvas.width ",[89,6424,3570],{"class":241},[89,6426,6427],{"class":110}," 2",[89,6429,4565],{"class":241},[89,6431,6432],{"class":110}," 25",[89,6434,6435],{"class":306},", canvas.height ",[89,6437,748],{"class":241},[89,6439,6440],{"class":110}," 60",[89,6442,386],{"class":306},[89,6444,6445],{"class":110},"50",[89,6447,386],{"class":306},[89,6449,6445],{"class":110},[89,6451,386],{"class":306},[89,6453,6454],{"class":106},"'blue'",[89,6456,319],{"class":306},[89,6458,6460,6462,6465,6467],{"class":91,"line":6459},75,[89,6461,5576],{"class":241},[89,6463,6464],{"class":110}," bullets",[89,6466,5582],{"class":241},[89,6468,6469],{"class":306}," [];\n",[89,6471,6473,6475,6478,6480],{"class":91,"line":6472},76,[89,6474,5576],{"class":241},[89,6476,6477],{"class":110}," enemies",[89,6479,5582],{"class":241},[89,6481,6469],{"class":306},[89,6483,6485],{"class":91,"line":6484},77,[89,6486,121],{"emptyLinePlaceholder":120},[89,6488,6490,6493,6496],{"class":91,"line":6489},78,[89,6491,6492],{"class":241},"function",[89,6494,6495],{"class":102}," spawnEnemy",[89,6497,5806],{"class":306},[89,6499,6501,6504,6507,6509,6512,6515,6518,6520,6523,6526],{"class":91,"line":6500},79,[89,6502,6503],{"class":241},"    const",[89,6505,6506],{"class":110}," isBoss",[89,6508,5582],{"class":241},[89,6510,6511],{"class":306}," Math.",[89,6513,6514],{"class":102},"random",[89,6516,6517],{"class":306},"() ",[89,6519,5149],{"class":241},[89,6521,6522],{"class":110}," 0.1",[89,6524,6525],{"class":306},"; ",[89,6527,6528],{"class":95},"\u002F\u002F 10% chance of being a boss\n",[89,6530,6532,6534,6536,6538,6541,6544,6547,6550,6552],{"class":91,"line":6531},80,[89,6533,6503],{"class":241},[89,6535,5299],{"class":110},[89,6537,5582],{"class":241},[89,6539,6540],{"class":306}," isBoss ",[89,6542,6543],{"class":241},"?",[89,6545,6546],{"class":110}," 100",[89,6548,6549],{"class":241}," :",[89,6551,2241],{"class":110},[89,6553,552],{"class":306},[89,6555,6557,6559,6561,6563,6565,6567,6569,6571,6573],{"class":91,"line":6556},81,[89,6558,6503],{"class":241},[89,6560,5307],{"class":110},[89,6562,5582],{"class":241},[89,6564,6540],{"class":306},[89,6566,6543],{"class":241},[89,6568,6546],{"class":110},[89,6570,6549],{"class":241},[89,6572,2241],{"class":110},[89,6574,552],{"class":306},[89,6576,6578,6580,6583,6585,6587,6589,6592,6594,6597],{"class":91,"line":6577},82,[89,6579,6503],{"class":241},[89,6581,6582],{"class":110}," color",[89,6584,5582],{"class":241},[89,6586,6540],{"class":306},[89,6588,6543],{"class":241},[89,6590,6591],{"class":106}," 'red'",[89,6593,6549],{"class":241},[89,6595,6596],{"class":106}," 'green'",[89,6598,552],{"class":306},[89,6600,6602,6604,6607,6609,6611,6613,6615,6617,6620],{"class":91,"line":6601},83,[89,6603,6503],{"class":241},[89,6605,6606],{"class":110}," speed",[89,6608,5582],{"class":241},[89,6610,6540],{"class":306},[89,6612,6543],{"class":241},[89,6614,714],{"class":110},[89,6616,6549],{"class":241},[89,6618,6619],{"class":110}," 0.5",[89,6621,552],{"class":306},[89,6623,6625,6627,6630,6632,6634,6636,6638,6641,6644,6646],{"class":91,"line":6624},84,[89,6626,6503],{"class":241},[89,6628,6629],{"class":110}," x",[89,6631,5582],{"class":241},[89,6633,6511],{"class":306},[89,6635,6514],{"class":102},[89,6637,6517],{"class":306},[89,6639,6640],{"class":241},"*",[89,6642,6643],{"class":306}," (canvas.width ",[89,6645,748],{"class":241},[89,6647,6648],{"class":306}," width);\n",[89,6650,6652,6654,6657,6659,6661],{"class":91,"line":6651},85,[89,6653,6503],{"class":241},[89,6655,6656],{"class":110}," y",[89,6658,5582],{"class":241},[89,6660,4565],{"class":241},[89,6662,6663],{"class":306},"height;\n",[89,6665,6667,6670,6673,6675,6678,6680],{"class":91,"line":6666},86,[89,6668,6669],{"class":306},"    enemies.",[89,6671,6672],{"class":102},"push",[89,6674,307],{"class":306},[89,6676,6677],{"class":241},"new",[89,6679,6185],{"class":102},[89,6681,6682],{"class":306},"(x, y, width, height, color, speed, isBoss));\n",[89,6684,6686],{"class":91,"line":6685},87,[89,6687,831],{"class":306},[89,6689,6691],{"class":91,"line":6690},88,[89,6692,121],{"emptyLinePlaceholder":120},[89,6694,6696,6698,6701,6703,6706],{"class":91,"line":6695},89,[89,6697,6492],{"class":241},[89,6699,6700],{"class":102}," updateScore",[89,6702,307],{"class":306},[89,6704,6705],{"class":5691},"points",[89,6707,732],{"class":306},[89,6709,6711,6714,6716],{"class":91,"line":6710},90,[89,6712,6713],{"class":306},"    score ",[89,6715,5951],{"class":241},[89,6717,6718],{"class":306}," points;\n",[89,6720,6722,6725,6727,6730,6733,6736],{"class":91,"line":6721},91,[89,6723,6724],{"class":306},"    scoreElement.textContent ",[89,6726,313],{"class":241},[89,6728,6729],{"class":106}," `Score: ${",[89,6731,6732],{"class":306},"score",[89,6734,6735],{"class":106},"}`",[89,6737,552],{"class":306},[89,6739,6741],{"class":91,"line":6740},92,[89,6742,831],{"class":306},[89,6744,6746],{"class":91,"line":6745},93,[89,6747,121],{"emptyLinePlaceholder":120},[89,6749,6751,6753,6756,6758,6760,6762,6765],{"class":91,"line":6750},94,[89,6752,6492],{"class":241},[89,6754,6755],{"class":102}," collision",[89,6757,307],{"class":306},[89,6759,26],{"class":5691},[89,6761,386],{"class":306},[89,6763,6764],{"class":5691},"b",[89,6766,732],{"class":306},[89,6768,6770,6773,6776,6778,6781,6784,6787],{"class":91,"line":6769},95,[89,6771,6772],{"class":241},"    return",[89,6774,6775],{"class":306}," a.x ",[89,6777,5149],{"class":241},[89,6779,6780],{"class":306}," b.x ",[89,6782,6783],{"class":241},"+",[89,6785,6786],{"class":306}," b.width ",[89,6788,6789],{"class":241},"&&\n",[89,6791,6793,6796,6798,6801,6803,6805],{"class":91,"line":6792},96,[89,6794,6795],{"class":306},"           a.x ",[89,6797,6783],{"class":241},[89,6799,6800],{"class":306}," a.width ",[89,6802,5889],{"class":241},[89,6804,6780],{"class":306},[89,6806,6789],{"class":241},[89,6808,6810,6813,6815,6818,6820,6823],{"class":91,"line":6809},97,[89,6811,6812],{"class":306},"           a.y ",[89,6814,5149],{"class":241},[89,6816,6817],{"class":306}," b.y ",[89,6819,6783],{"class":241},[89,6821,6822],{"class":306}," b.height ",[89,6824,6789],{"class":241},[89,6826,6828,6830,6832,6835,6837],{"class":91,"line":6827},98,[89,6829,6812],{"class":306},[89,6831,6783],{"class":241},[89,6833,6834],{"class":306}," a.height ",[89,6836,5889],{"class":241},[89,6838,6839],{"class":306}," b.y;\n",[89,6841,6843],{"class":91,"line":6842},99,[89,6844,831],{"class":306},[89,6846,6848],{"class":91,"line":6847},100,[89,6849,121],{"emptyLinePlaceholder":120},[89,6851,6853,6855,6858],{"class":91,"line":6852},101,[89,6854,6492],{"class":241},[89,6856,6857],{"class":102}," gameLoop",[89,6859,5806],{"class":306},[89,6861,6863,6866,6869,6871,6873,6875,6877],{"class":91,"line":6862},102,[89,6864,6865],{"class":306},"    ctx.",[89,6867,6868],{"class":102},"clearRect",[89,6870,307],{"class":306},[89,6872,755],{"class":110},[89,6874,386],{"class":306},[89,6876,755],{"class":110},[89,6878,6879],{"class":306},", canvas.width, canvas.height);\n",[89,6881,6883],{"class":91,"line":6882},103,[89,6884,121],{"emptyLinePlaceholder":120},[89,6886,6888,6891,6894],{"class":91,"line":6887},104,[89,6889,6890],{"class":306},"    player.",[89,6892,6893],{"class":102},"update",[89,6895,523],{"class":306},[89,6897,6899,6901,6904],{"class":91,"line":6898},105,[89,6900,6890],{"class":306},[89,6902,6903],{"class":102},"draw",[89,6905,523],{"class":306},[89,6907,6909],{"class":91,"line":6908},106,[89,6910,121],{"emptyLinePlaceholder":120},[89,6912,6914,6917,6920,6923,6926,6928,6931,6934,6937],{"class":91,"line":6913},107,[89,6915,6916],{"class":306},"    bullets.",[89,6918,6919],{"class":102},"forEach",[89,6921,6922],{"class":306},"((",[89,6924,6925],{"class":5691},"bullet",[89,6927,386],{"class":306},[89,6929,6930],{"class":5691},"bulletIndex",[89,6932,6933],{"class":306},") ",[89,6935,6936],{"class":241},"=>",[89,6938,5396],{"class":306},[89,6940,6942,6945,6947],{"class":91,"line":6941},108,[89,6943,6944],{"class":306},"        bullet.",[89,6946,6893],{"class":102},[89,6948,523],{"class":306},[89,6950,6952,6954,6956],{"class":91,"line":6951},109,[89,6953,6944],{"class":306},[89,6955,6903],{"class":102},[89,6957,523],{"class":306},[89,6959,6961],{"class":91,"line":6960},110,[89,6962,121],{"emptyLinePlaceholder":120},[89,6964,6966,6968,6971,6973,6975],{"class":91,"line":6965},111,[89,6967,5870],{"class":241},[89,6969,6970],{"class":306}," (bullet.y ",[89,6972,5149],{"class":241},[89,6974,4712],{"class":110},[89,6976,732],{"class":306},[89,6978,6980,6983,6986,6989,6991],{"class":91,"line":6979},112,[89,6981,6982],{"class":306},"            bullets.",[89,6984,6985],{"class":102},"splice",[89,6987,6988],{"class":306},"(bulletIndex, ",[89,6990,316],{"class":110},[89,6992,319],{"class":306},[89,6994,6996],{"class":91,"line":6995},113,[89,6997,5913],{"class":306},[89,6999,7001],{"class":91,"line":7000},114,[89,7002,121],{"emptyLinePlaceholder":120},[89,7004,7006,7009,7011,7013,7016,7018,7021,7023,7025],{"class":91,"line":7005},115,[89,7007,7008],{"class":306},"        enemies.",[89,7010,6919],{"class":102},[89,7012,6922],{"class":306},[89,7014,7015],{"class":5691},"enemy",[89,7017,386],{"class":306},[89,7019,7020],{"class":5691},"enemyIndex",[89,7022,6933],{"class":306},[89,7024,6936],{"class":241},[89,7026,5396],{"class":306},[89,7028,7030,7033,7036,7039],{"class":91,"line":7029},116,[89,7031,7032],{"class":241},"            if",[89,7034,7035],{"class":306}," (",[89,7037,7038],{"class":102},"collision",[89,7040,7041],{"class":306},"(bullet, enemy)) {\n",[89,7043,7045,7048,7050,7052,7054],{"class":91,"line":7044},117,[89,7046,7047],{"class":306},"                bullets.",[89,7049,6985],{"class":102},[89,7051,6988],{"class":306},[89,7053,316],{"class":110},[89,7055,319],{"class":306},[89,7057,7059,7062,7064,7067,7069],{"class":91,"line":7058},118,[89,7060,7061],{"class":306},"                enemies.",[89,7063,6985],{"class":102},[89,7065,7066],{"class":306},"(enemyIndex, ",[89,7068,316],{"class":110},[89,7070,319],{"class":306},[89,7072,7074,7077,7080,7082,7084,7086,7088],{"class":91,"line":7073},119,[89,7075,7076],{"class":102},"                updateScore",[89,7078,7079],{"class":306},"(enemy.isBoss ",[89,7081,6543],{"class":241},[89,7083,6546],{"class":110},[89,7085,6549],{"class":241},[89,7087,5787],{"class":110},[89,7089,319],{"class":306},[89,7091,7093],{"class":91,"line":7092},120,[89,7094,7095],{"class":306},"            }\n",[89,7097,7099],{"class":91,"line":7098},121,[89,7100,7101],{"class":306},"        });\n",[89,7103,7105],{"class":91,"line":7104},122,[89,7106,7107],{"class":306},"    });\n",[89,7109,7111],{"class":91,"line":7110},123,[89,7112,121],{"emptyLinePlaceholder":120},[89,7114,7116,7118,7120,7122,7124,7126,7128,7130,7132],{"class":91,"line":7115},124,[89,7117,6669],{"class":306},[89,7119,6919],{"class":102},[89,7121,6922],{"class":306},[89,7123,7015],{"class":5691},[89,7125,386],{"class":306},[89,7127,7020],{"class":5691},[89,7129,6933],{"class":306},[89,7131,6936],{"class":241},[89,7133,5396],{"class":306},[89,7135,7137,7140,7142],{"class":91,"line":7136},125,[89,7138,7139],{"class":306},"        enemy.",[89,7141,6893],{"class":102},[89,7143,523],{"class":306},[89,7145,7147,7149,7151],{"class":91,"line":7146},126,[89,7148,7139],{"class":306},[89,7150,6903],{"class":102},[89,7152,523],{"class":306},[89,7154,7156],{"class":91,"line":7155},127,[89,7157,121],{"emptyLinePlaceholder":120},[89,7159,7161,7163,7166,7168],{"class":91,"line":7160},128,[89,7162,5870],{"class":241},[89,7164,7165],{"class":306}," (enemy.y ",[89,7167,5889],{"class":241},[89,7169,7170],{"class":306}," canvas.height) {\n",[89,7172,7174,7177,7179,7181,7183],{"class":91,"line":7173},129,[89,7175,7176],{"class":306},"            enemies.",[89,7178,6985],{"class":102},[89,7180,7066],{"class":306},[89,7182,316],{"class":110},[89,7184,319],{"class":306},[89,7186,7188],{"class":91,"line":7187},130,[89,7189,5913],{"class":306},[89,7191,7193],{"class":91,"line":7192},131,[89,7194,121],{"emptyLinePlaceholder":120},[89,7196,7198,7200,7202,7204],{"class":91,"line":7197},132,[89,7199,5870],{"class":241},[89,7201,7035],{"class":306},[89,7203,7038],{"class":102},[89,7205,7206],{"class":306},"(player, enemy)) {\n",[89,7208,7210,7213,7215,7218],{"class":91,"line":7209},133,[89,7211,7212],{"class":102},"            alert",[89,7214,307],{"class":306},[89,7216,7217],{"class":106},"'Game Over!'",[89,7219,319],{"class":306},[89,7221,7223,7226,7229],{"class":91,"line":7222},134,[89,7224,7225],{"class":306},"            document.location.",[89,7227,7228],{"class":102},"reload",[89,7230,523],{"class":306},[89,7232,7234],{"class":91,"line":7233},135,[89,7235,5913],{"class":306},[89,7237,7239],{"class":91,"line":7238},136,[89,7240,7107],{"class":306},[89,7242,7244],{"class":91,"line":7243},137,[89,7245,121],{"emptyLinePlaceholder":120},[89,7247,7249,7252],{"class":91,"line":7248},138,[89,7250,7251],{"class":102},"    requestAnimationFrame",[89,7253,7254],{"class":306},"(gameLoop);\n",[89,7256,7258],{"class":91,"line":7257},139,[89,7259,831],{"class":306},[89,7261,7263],{"class":91,"line":7262},140,[89,7264,121],{"emptyLinePlaceholder":120},[89,7266,7268,7271,7274,7276,7279,7282,7285,7287,7289],{"class":91,"line":7267},141,[89,7269,7270],{"class":306},"window.",[89,7272,7273],{"class":102},"addEventListener",[89,7275,307],{"class":306},[89,7277,7278],{"class":106},"'keydown'",[89,7280,7281],{"class":306},", (",[89,7283,7284],{"class":5691},"e",[89,7286,6933],{"class":306},[89,7288,6936],{"class":241},[89,7290,5396],{"class":306},[89,7292,7294,7297,7299,7302],{"class":91,"line":7293},142,[89,7295,7296],{"class":306},"    keys[e.key] ",[89,7298,313],{"class":241},[89,7300,7301],{"class":110}," true",[89,7303,552],{"class":306},[89,7305,7307,7310,7313,7316,7319],{"class":91,"line":7306},143,[89,7308,7309],{"class":241},"    if",[89,7311,7312],{"class":306}," (e.key ",[89,7314,7315],{"class":241},"===",[89,7317,7318],{"class":106}," ' '",[89,7320,732],{"class":306},[89,7322,7324,7327,7329,7331,7333,7335,7338,7340,7343,7345,7347,7349,7352,7355,7357,7359,7361,7363,7366,7368,7371],{"class":91,"line":7323},144,[89,7325,7326],{"class":306},"        bullets.",[89,7328,6672],{"class":102},[89,7330,307],{"class":306},[89,7332,6677],{"class":241},[89,7334,5978],{"class":102},[89,7336,7337],{"class":306},"(player.x ",[89,7339,6783],{"class":241},[89,7341,7342],{"class":306}," player.width ",[89,7344,3570],{"class":241},[89,7346,6427],{"class":110},[89,7348,4565],{"class":241},[89,7350,7351],{"class":110}," 2.5",[89,7353,7354],{"class":306},", player.y, ",[89,7356,484],{"class":110},[89,7358,386],{"class":306},[89,7360,504],{"class":110},[89,7362,386],{"class":306},[89,7364,7365],{"class":106},"'black'",[89,7367,386],{"class":306},[89,7369,7370],{"class":110},"7",[89,7372,825],{"class":306},[89,7374,7376],{"class":91,"line":7375},145,[89,7377,5794],{"class":306},[89,7379,7381],{"class":91,"line":7380},146,[89,7382,7383],{"class":306},"});\n",[89,7385,7387],{"class":91,"line":7386},147,[89,7388,121],{"emptyLinePlaceholder":120},[89,7390,7392,7394,7396,7398,7401,7403,7405,7407,7409],{"class":91,"line":7391},148,[89,7393,7270],{"class":306},[89,7395,7273],{"class":102},[89,7397,307],{"class":306},[89,7399,7400],{"class":106},"'keyup'",[89,7402,7281],{"class":306},[89,7404,7284],{"class":5691},[89,7406,6933],{"class":306},[89,7408,6936],{"class":241},[89,7410,5396],{"class":306},[89,7412,7414,7416,7418,7420],{"class":91,"line":7413},149,[89,7415,7296],{"class":306},[89,7417,313],{"class":241},[89,7419,6226],{"class":110},[89,7421,552],{"class":306},[89,7423,7425],{"class":91,"line":7424},150,[89,7426,7383],{"class":306},[89,7428,7430],{"class":91,"line":7429},151,[89,7431,121],{"emptyLinePlaceholder":120},[89,7433,7435,7438,7441,7444],{"class":91,"line":7434},152,[89,7436,7437],{"class":102},"setInterval",[89,7439,7440],{"class":306},"(spawnEnemy, ",[89,7442,7443],{"class":110},"2000",[89,7445,319],{"class":306},[89,7447,7449,7452],{"class":91,"line":7448},153,[89,7450,7451],{"class":102},"gameLoop",[89,7453,523],{"class":306},[15,7455,7456],{},"4 遊戲玩法",[15,7458,7459,7460,7463],{},"遊戲建立完成，",[19,7461,7462],{},"Gemnini CLI"," 也會提示遊戲玩法",[15,7465,7466],{},[2662,7467],{"alt":7468,"src":7469},"Gemini CLI遊戲玩法","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-03.png",[1995,7471,7472],{"start":130},[50,7473,7474],{},"執行結果",[15,7476,7477],{},[2662,7478],{"alt":7479,"src":7480},"Gemini CLI執行結果","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-04.png",[1995,7482,7483,7502],{"start":142},[50,7484,7485,7486,7489,7490,7492,7493],{},"更改風格",[7487,7488],"br",{},"如果你覺得畫面太陽春，你他可以請 ",[19,7491,4961],{}," 幫你優化",[80,7494,7496],{"className":82,"code":7495,"language":84,"meta":85,"style":85},"請將遊戲畫面風格換成2000年街機風格\n",[19,7497,7498],{"__ignoreMap":85},[89,7499,7500],{"class":91,"line":92},[89,7501,7495],{"class":102},[50,7503,7504],{},"修改過後的結果",[15,7506,7507],{},[2662,7508],{"alt":7509,"src":7510},"Gemini CLI修改過後的結果","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-05.png",[15,7512,7513,7514,7516],{},"以上是 ",[19,7515,7462],{}," 簡易使用範例",[72,7518,7520],{"id":7519},"gemini-cli-的相關指令","Gemini CLI 的相關指令",[15,7522,7523,7525,7526,7528],{},[19,7524,7462],{}," 內建了一個常用指令，詳細可用 ",[19,7527,3761],{}," 進行指令查詢",[15,7530,7531],{},[2662,7532],{"alt":7533,"src":7534},"Gemini CLi help","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-help.png",[72,7536,7538],{"id":7537},"記憶功態-memory","記憶功態 (Memory)",[15,7540,7541,7542,7544,7545,7547,7548,7550],{},"若你要處理比較複雜的問題，由於 LLM 對於長文處理，有時會有失憶的問題，或當我們重啟 ",[19,7543,4961],{},"，",[19,7546,4961],{}," 忘記之前互動的要求，因此 ",[19,7549,4961],{}," 有了記憶功能，而使用方式如下：",[47,7552,7553,7596,7617],{},[50,7554,7555,7556,7559,7560,7563,7564,7581,7583,7584,7586,7587,7589,7590,7592,7593,7595],{},"以",[19,7557,7558],{},"markdown","格式，建立 ",[19,7561,7562],{},"GEMINI.md","，你可以將之記錄",[47,7565,7566,7569,7572,7575,7578],{},[50,7567,7568],{},"環境設定",[50,7570,7571],{},"工作需求",[50,7573,7574],{},"工作項目",[50,7576,7577],{},"使用相關 MCP 指令",[50,7579,7580],{},"程式碼風格",[7487,7582],{},"當你在某個目錄下啟動 ",[19,7585,4961],{}," 代理模式時，它會分層搜尋 ",[19,7588,7562],{}," 檔案：從當前工作目錄開始，向上搜尋到專案根目錄，甚至到你的主目錄。它也會搜尋子目錄中的 ",[19,7591,7562],{}," 檔案。所有找到的 ",[19,7594,7562],{}," 檔案的內容會被合併，作為「指令上下文」提供給 Gemini 模型。",[50,7597,7598,7599,2521,7601,7603,7604],{},"更新記憶內容",[7487,7600],{},[19,7602,4961],{}," 下達指令：",[80,7605,7607],{"className":82,"code":7606,"language":84,"meta":85,"style":85},"\u002Fmemory refresh\n",[19,7608,7609],{"__ignoreMap":85},[89,7610,7611,7614],{"class":91,"line":92},[89,7612,7613],{"class":102},"\u002Fmemory",[89,7615,7616],{"class":106}," refresh\n",[50,7618,7619,7620,2521,7622,7603,7624],{},"顯示記憶內容：",[7487,7621],{},[19,7623,4961],{},[80,7625,7627],{"className":82,"code":7626,"language":84,"meta":85,"style":85},"\u002Fmemory show\n",[19,7628,7629],{"__ignoreMap":85},[89,7630,7631,7633],{"class":91,"line":92},[89,7632,7613],{"class":102},[89,7634,7635],{"class":106}," show\n",[15,7637,7638,7639,7641],{},"如此 ",[19,7640,4961],{}," 在執行專案開發時，更能依據我的需求，完成我們的任務。",[11,7643,1696],{"id":1696},[15,7645,7646],{},"Gemini CLI 是一個功能強大且易於使用的工具，它將先進的 AI 能力帶入了開發者最熟悉的終端機環境。透過清晰的提示詞和適當的審核，你可以大幅提升開發效率，加速專案進程。立即安裝 Gemini CLI，體驗用AI開發的魅力吧，而目前提供的免費額度可以完成一些簡單的小專案，若要完成更大的專案，當然就需要考慮付費。",[11,7648,7649],{"id":7649},"相關網站",[47,7651,7652,7659],{},[50,7653,7654,7655],{},"Gemini CLI Github: ",[26,7656,7657],{"href":7657,"rel":7658},"https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli",[30],[50,7660,7661,7662],{},"Google 官方部落格資訊: ",[26,7663,7664],{"href":7664,"rel":7665},"https:\u002F\u002Fblog.google\u002Fintl\u002Fzh-tw\u002Fproducts\u002Fcloud\u002Fgemini-cli-your-open-source-ai-agent\u002F",[30],[1728,7667,7668],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sByVh, html code.shiki .sByVh{--shiki-light:#22863A;--shiki-default:#85E89D;--shiki-dark:#85E89D}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":85,"searchDepth":99,"depth":99,"links":7670},[7671,7674,7680,7681],{"id":4973,"depth":99,"text":4974,"children":7672},[7673],{"id":4980,"depth":117,"text":4981},{"id":5022,"depth":99,"text":5023,"children":7675},[7676,7677,7678,7679],{"id":5026,"depth":117,"text":5027},{"id":5077,"depth":117,"text":5078},{"id":7519,"depth":117,"text":7520},{"id":7537,"depth":117,"text":7538},{"id":1696,"depth":99,"text":1696},{"id":7649,"depth":99,"text":7649},"Google 發最新的 AI 開發工具 Gemini CLI，可以對標 Anthropic 的 Claude Code 和 OpenAI 的 Codex CLI等 AI 開發工具，也讓使得 AI開發工具的竸爭進入白熱化。","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fcover.png",{},"\u002Farticles\u002F2025-07-12-gemini-cli","2025-07-12 20:38:00",{"title":4949,"description":7682},"articles\u002F2025-07-12-gemini-cli","本文將帶你了解 Gemini CLI，一個能將 Gemini 強大 AI 能力整合至終端機的開源工具。學習如何安裝、使用 Gemini CLI 進行程式碼生成、任務自動化，並體驗 AI-First Coding 的開發模式。",[2438,2440,2439],"06YY6CfnzHfs2KDK962SeuY3nvJMZ0lWwdR0AfkGsr8",{"id":7693,"title":7694,"body":7695,"category":2429,"description":85,"extension":1749,"image":8483,"meta":8484,"navigation":120,"path":8485,"pubDate":8486,"seo":8487,"status":120,"stem":8488,"summary":8489,"tags":8490,"__hash__":8491},"content\u002Farticles\u002F2025-03-17-open-manus.md","使用 OpenManus 在本地端玩轉 AI Agent",{"type":8,"value":7696,"toc":8459},[7697,7699,7702,7705,7729,7731,7737,7741,7745,7779,7783,7806,7809,7827,7831,7835,7855,7858,7876,7879,7919,7922,7940,7943,7946,7962,7965,8325,8337,8349,8352,8363,8376,8379,8382,8395,8398,8434,8437,8440,8447,8449,8456],[11,7698,13],{"id":13},[15,7700,7701],{},"OpenManus 是一個開源的通用型 AI Agent，是 Manus 的替代方案，無需等待昂貴的激活碼即可使用。以下是 OpenManus 的使用教學，希望能幫助你快速上手：",[11,7703,7704],{"id":7704},"環境需求",[47,7706,7707,7719],{},[50,7708,7709,2731,7712,7714,7715,7714,7717],{},[2510,7710,7711],{},"作業系統",[19,7713,4811],{}," \u002F ",[19,7716,3230],{},[19,7718,3125],{},[50,7720,7721,7724,7725,7728],{},[2510,7722,7723],{},"Python","：版本 ",[19,7726,7727],{},"3.10"," 以上",[11,7730,2730],{"id":2730},[15,7732,7733],{},[26,7734,7735],{"href":7735,"rel":7736},"https:\u002F\u002Fgithub.com\u002Fmannaandpoem\u002FOpenManus",[30],[11,7738,7740],{"id":7739},"使用-conda-安裝","使用 Conda 安裝",[72,7742,7744],{"id":7743},"建立新的-conda-環境","建立新的 Conda 環境",[80,7746,7748],{"className":82,"code":7747,"language":84,"meta":85,"style":85},"conda create -n open_manus python=3.12\nconda activate open_manus\n",[19,7749,7750,7769],{"__ignoreMap":85},[89,7751,7752,7755,7757,7760,7763,7766],{"class":91,"line":92},[89,7753,7754],{"class":102},"conda",[89,7756,3870],{"class":106},[89,7758,7759],{"class":110}," -n",[89,7761,7762],{"class":106}," open_manus",[89,7764,7765],{"class":106}," python=",[89,7767,7768],{"class":110},"3.12\n",[89,7770,7771,7773,7776],{"class":91,"line":99},[89,7772,7754],{"class":102},[89,7774,7775],{"class":106}," activate",[89,7777,7778],{"class":106}," open_manus\n",[72,7780,7782],{"id":7781},"clone-儲存庫","Clone 儲存庫",[80,7784,7786],{"className":82,"code":7785,"language":84,"meta":85,"style":85},"git clone https:\u002F\u002Fgithub.com\u002Fmannaandpoem\u002FOpenManus.git\ncd OpenManus\n",[19,7787,7788,7799],{"__ignoreMap":85},[89,7789,7790,7793,7796],{"class":91,"line":92},[89,7791,7792],{"class":102},"git",[89,7794,7795],{"class":106}," clone",[89,7797,7798],{"class":106}," https:\u002F\u002Fgithub.com\u002Fmannaandpoem\u002FOpenManus.git\n",[89,7800,7801,7803],{"class":91,"line":99},[89,7802,3442],{"class":110},[89,7804,7805],{"class":106}," OpenManus\n",[72,7807,7808],{"id":7808},"安裝相依套件",[80,7810,7812],{"className":82,"code":7811,"language":84,"meta":85,"style":85},"pip install -r requirements.txt\n",[19,7813,7814],{"__ignoreMap":85},[89,7815,7816,7819,7821,7824],{"class":91,"line":92},[89,7817,7818],{"class":102},"pip",[89,7820,107],{"class":106},[89,7822,7823],{"class":110}," -r",[89,7825,7826],{"class":106}," requirements.txt\n",[11,7828,7830],{"id":7829},"使用-uv-安裝","使用 uv 安裝",[72,7832,7834],{"id":7833},"安裝-uv-環境","安裝 uv 環境",[80,7836,7838],{"className":82,"code":7837,"language":84,"meta":85,"style":85},"curl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\n",[19,7839,7840],{"__ignoreMap":85},[89,7841,7842,7844,7847,7850,7852],{"class":91,"line":92},[89,7843,2778],{"class":102},[89,7845,7846],{"class":110}," -LsSf",[89,7848,7849],{"class":106}," https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh",[89,7851,242],{"class":241},[89,7853,7854],{"class":102}," sh\n",[72,7856,7782],{"id":7857},"clone-儲存庫-1",[80,7859,7860],{"className":82,"code":7785,"language":84,"meta":85,"style":85},[19,7861,7862,7870],{"__ignoreMap":85},[89,7863,7864,7866,7868],{"class":91,"line":92},[89,7865,7792],{"class":102},[89,7867,7795],{"class":106},[89,7869,7798],{"class":106},[89,7871,7872,7874],{"class":91,"line":99},[89,7873,3442],{"class":110},[89,7875,7805],{"class":106},[72,7877,7878],{"id":7878},"建立新的虛擬環境並啟動它",[80,7880,7882],{"className":82,"code":7881,"language":84,"meta":85,"style":85},"uv venv --python 3.12\nsource .venv\u002Fbin\u002Factivate  # On Unix\u002FmacOS\n# Or on Windows:\n# .venv\\Scripts\\activate\n",[19,7883,7884,7898,7909,7914],{"__ignoreMap":85},[89,7885,7886,7889,7892,7895],{"class":91,"line":92},[89,7887,7888],{"class":102},"uv",[89,7890,7891],{"class":106}," venv",[89,7893,7894],{"class":110}," --python",[89,7896,7897],{"class":110}," 3.12\n",[89,7899,7900,7903,7906],{"class":91,"line":99},[89,7901,7902],{"class":110},"source",[89,7904,7905],{"class":106}," .venv\u002Fbin\u002Factivate",[89,7907,7908],{"class":95},"  # On Unix\u002FmacOS\n",[89,7910,7911],{"class":91,"line":117},[89,7912,7913],{"class":95},"# Or on Windows:\n",[89,7915,7916],{"class":91,"line":124},[89,7917,7918],{"class":95},"# .venv\\Scripts\\activate\n",[72,7920,7808],{"id":7921},"安裝相依套件-1",[80,7923,7925],{"className":82,"code":7924,"language":84,"meta":85,"style":85},"uv pip install -r requirements.txt\n",[19,7926,7927],{"__ignoreMap":85},[89,7928,7929,7931,7934,7936,7938],{"class":91,"line":92},[89,7930,7888],{"class":102},[89,7932,7933],{"class":106}," pip",[89,7935,107],{"class":106},[89,7937,7823],{"class":110},[89,7939,7826],{"class":106},[11,7941,7942],{"id":7942},"設定",[72,7944,7945],{"id":7945},"建立設定檔",[80,7947,7949],{"className":82,"code":7948,"language":84,"meta":85,"style":85},"cp config\u002Fconfig.example.toml config\u002Fconfig.toml\n",[19,7950,7951],{"__ignoreMap":85},[89,7952,7953,7956,7959],{"class":91,"line":92},[89,7954,7955],{"class":102},"cp",[89,7957,7958],{"class":106}," config\u002Fconfig.example.toml",[89,7960,7961],{"class":106}," config\u002Fconfig.toml\n",[72,7963,7964],{"id":7964},"編輯設定檔",[80,7966,7968],{"className":82,"code":7967,"language":84,"meta":85,"style":85},"# [llm] #AZURE OPENAI:\n# api_type= 'azure'\n# model = \"YOUR_MODEL_NAME\" #\"gpt-4o-mini\"\n# base_url = \"{YOUR_AZURE_ENDPOINT.rstrip('\u002F')}\u002Fopenai\u002Fdeployments\u002F{AZURE_DEPOLYMENT_ID}\"\n# api_key = \"AZURE API KEY\"\n# max_tokens = 8096\n# temperature = 0.0\n# api_version=\"AZURE API VERSION\" #\"2024-08-01-preview\"\n\n [llm] #OLLAMA:\n api_type = 'ollama'\n model = \"llama3\"\n base_url = \"http:\u002F\u002F127.0.0.1:11434\u002Fv1\"\n api_key = \"ollama\"\n max_tokens = 4096\n temperature = 0.0\n\n# Optional configuration for specific LLM models\n#[llm.vision]\n# model = \"claude-3-7-sonnet\"    # The vision model to use\n# base_url = \"https:\u002F\u002Fapi.openai.com\u002Fv1\"    # API endpoint URL for vision model\n# api_key = \"sk-...\"    # Your API key for vision model\n# max_tokens = 8192     # Maximum number of tokens in the response\n# temperature = 0.0     # Controls randomness for vision model\n\n[llm.vision] #OLLAMA VISION:\napi_type = 'ollama'\nmodel = \"llama3.2-vision:latest\"\nbase_url = \"http:\u002F\u002F127.0.0.1:11434\u002Fv1\"\napi_key = \"ollama\"\nmax_tokens = 4096\ntemperature = 0.0\n\n# Optional configuration for specific browser configuration\n# [browser]\n# Whether to run browser in headless mode (default: false)\n#headless = false\n# Disable browser security features (default: true)\n#disable_security = true\n# Extra arguments to pass to the browser\n#extra_chromium_args = []\n# Path to a Chrome instance to use to connect to your normal browser\n# e.g. '\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome'\n#chrome_instance_path = \"\"\n# Connect to a browser instance via WebSocket\n#wss_url = \"\"\n# Connect to a browser instance via CDP\n#cdp_url = \"\"\n\n# Optional configuration, Proxy settings for the browser\n# [browser.proxy]\n# server = \"http:\u002F\u002Fproxy-server:port\"\n# username = \"proxy-username\"\n# password = \"proxy-password\"\n\n# Optional configuration, Search settings.\n# [search]\n# Search engine for agent to use. Default is \"Google\", can be set to \"Baidu\" or \"DuckDuckGo\".\nengine = \"Google\"\n",[19,7969,7970,7975,7980,7985,7990,7995,8000,8005,8010,8014,8022,8032,8042,8052,8062,8072,8082,8086,8091,8096,8101,8106,8111,8116,8121,8125,8133,8142,8152,8161,8170,8179,8188,8192,8197,8202,8207,8212,8217,8222,8227,8232,8237,8242,8247,8252,8257,8262,8267,8271,8276,8281,8286,8291,8296,8300,8305,8310,8315],{"__ignoreMap":85},[89,7971,7972],{"class":91,"line":92},[89,7973,7974],{"class":95},"# [llm] #AZURE OPENAI:\n",[89,7976,7977],{"class":91,"line":99},[89,7978,7979],{"class":95},"# api_type= 'azure'\n",[89,7981,7982],{"class":91,"line":117},[89,7983,7984],{"class":95},"# model = \"YOUR_MODEL_NAME\" #\"gpt-4o-mini\"\n",[89,7986,7987],{"class":91,"line":124},[89,7988,7989],{"class":95},"# base_url = \"{YOUR_AZURE_ENDPOINT.rstrip('\u002F')}\u002Fopenai\u002Fdeployments\u002F{AZURE_DEPOLYMENT_ID}\"\n",[89,7991,7992],{"class":91,"line":130},[89,7993,7994],{"class":95},"# api_key = \"AZURE API KEY\"\n",[89,7996,7997],{"class":91,"line":142},[89,7998,7999],{"class":95},"# max_tokens = 8096\n",[89,8001,8002],{"class":91,"line":147},[89,8003,8004],{"class":95},"# temperature = 0.0\n",[89,8006,8007],{"class":91,"line":153},[89,8008,8009],{"class":95},"# api_version=\"AZURE API VERSION\" #\"2024-08-01-preview\"\n",[89,8011,8012],{"class":91,"line":166},[89,8013,121],{"emptyLinePlaceholder":120},[89,8015,8016,8019],{"class":91,"line":171},[89,8017,8018],{"class":306}," [llm] ",[89,8020,8021],{"class":95},"#OLLAMA:\n",[89,8023,8024,8027,8029],{"class":91,"line":177},[89,8025,8026],{"class":102}," api_type",[89,8028,5582],{"class":106},[89,8030,8031],{"class":106}," 'ollama'\n",[89,8033,8034,8037,8039],{"class":91,"line":469},[89,8035,8036],{"class":102}," model",[89,8038,5582],{"class":106},[89,8040,8041],{"class":106}," \"llama3\"\n",[89,8043,8044,8047,8049],{"class":91,"line":489},[89,8045,8046],{"class":102}," base_url",[89,8048,5582],{"class":106},[89,8050,8051],{"class":106}," \"http:\u002F\u002F127.0.0.1:11434\u002Fv1\"\n",[89,8053,8054,8057,8059],{"class":91,"line":509},[89,8055,8056],{"class":102}," api_key",[89,8058,5582],{"class":106},[89,8060,8061],{"class":106}," \"ollama\"\n",[89,8063,8064,8067,8069],{"class":91,"line":515},[89,8065,8066],{"class":102}," max_tokens",[89,8068,5582],{"class":106},[89,8070,8071],{"class":110}," 4096\n",[89,8073,8074,8077,8079],{"class":91,"line":526},[89,8075,8076],{"class":102}," temperature",[89,8078,5582],{"class":106},[89,8080,8081],{"class":110}," 0.0\n",[89,8083,8084],{"class":91,"line":531},[89,8085,121],{"emptyLinePlaceholder":120},[89,8087,8088],{"class":91,"line":828},[89,8089,8090],{"class":95},"# Optional configuration for specific LLM models\n",[89,8092,8093],{"class":91,"line":834},[89,8094,8095],{"class":95},"#[llm.vision]\n",[89,8097,8098],{"class":91,"line":839},[89,8099,8100],{"class":95},"# model = \"claude-3-7-sonnet\"    # The vision model to use\n",[89,8102,8103],{"class":91,"line":845},[89,8104,8105],{"class":95},"# base_url = \"https:\u002F\u002Fapi.openai.com\u002Fv1\"    # API endpoint URL for vision model\n",[89,8107,8108],{"class":91,"line":3953},[89,8109,8110],{"class":95},"# api_key = \"sk-...\"    # Your API key for vision model\n",[89,8112,8113],{"class":91,"line":3964},[89,8114,8115],{"class":95},"# max_tokens = 8192     # Maximum number of tokens in the response\n",[89,8117,8118],{"class":91,"line":3975},[89,8119,8120],{"class":95},"# temperature = 0.0     # Controls randomness for vision model\n",[89,8122,8123],{"class":91,"line":3980},[89,8124,121],{"emptyLinePlaceholder":120},[89,8126,8127,8130],{"class":91,"line":3986},[89,8128,8129],{"class":306},"[llm.vision] ",[89,8131,8132],{"class":95},"#OLLAMA VISION:\n",[89,8134,8135,8138,8140],{"class":91,"line":3996},[89,8136,8137],{"class":102},"api_type",[89,8139,5582],{"class":106},[89,8141,8031],{"class":106},[89,8143,8144,8147,8149],{"class":91,"line":4010},[89,8145,8146],{"class":102},"model",[89,8148,5582],{"class":106},[89,8150,8151],{"class":106}," \"llama3.2-vision:latest\"\n",[89,8153,8154,8157,8159],{"class":91,"line":4015},[89,8155,8156],{"class":102},"base_url",[89,8158,5582],{"class":106},[89,8160,8051],{"class":106},[89,8162,8163,8166,8168],{"class":91,"line":4021},[89,8164,8165],{"class":102},"api_key",[89,8167,5582],{"class":106},[89,8169,8061],{"class":106},[89,8171,8172,8175,8177],{"class":91,"line":4035},[89,8173,8174],{"class":102},"max_tokens",[89,8176,5582],{"class":106},[89,8178,8071],{"class":110},[89,8180,8181,8184,8186],{"class":91,"line":4046},[89,8182,8183],{"class":102},"temperature",[89,8185,5582],{"class":106},[89,8187,8081],{"class":110},[89,8189,8190],{"class":91,"line":4057},[89,8191,121],{"emptyLinePlaceholder":120},[89,8193,8194],{"class":91,"line":5983},[89,8195,8196],{"class":95},"# Optional configuration for specific browser configuration\n",[89,8198,8199],{"class":91,"line":6015},[89,8200,8201],{"class":95},"# [browser]\n",[89,8203,8204],{"class":91,"line":6026},[89,8205,8206],{"class":95},"# Whether to run browser in headless mode (default: false)\n",[89,8208,8209],{"class":91,"line":6037},[89,8210,8211],{"class":95},"#headless = false\n",[89,8213,8214],{"class":91,"line":6048},[89,8215,8216],{"class":95},"# Disable browser security features (default: true)\n",[89,8218,8219],{"class":91,"line":6059},[89,8220,8221],{"class":95},"#disable_security = true\n",[89,8223,8224],{"class":91,"line":6070},[89,8225,8226],{"class":95},"# Extra arguments to pass to the browser\n",[89,8228,8229],{"class":91,"line":6082},[89,8230,8231],{"class":95},"#extra_chromium_args = []\n",[89,8233,8234],{"class":91,"line":6087},[89,8235,8236],{"class":95},"# Path to a Chrome instance to use to connect to your normal browser\n",[89,8238,8239],{"class":91,"line":6092},[89,8240,8241],{"class":95},"# e.g. '\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome'\n",[89,8243,8244],{"class":91,"line":6099},[89,8245,8246],{"class":95},"#chrome_instance_path = \"\"\n",[89,8248,8249],{"class":91,"line":6110},[89,8250,8251],{"class":95},"# Connect to a browser instance via WebSocket\n",[89,8253,8254],{"class":91,"line":6135},[89,8255,8256],{"class":95},"#wss_url = \"\"\n",[89,8258,8259],{"class":91,"line":6140},[89,8260,8261],{"class":95},"# Connect to a browser instance via CDP\n",[89,8263,8264],{"class":91,"line":6145},[89,8265,8266],{"class":95},"#cdp_url = \"\"\n",[89,8268,8269],{"class":91,"line":6152},[89,8270,121],{"emptyLinePlaceholder":120},[89,8272,8273],{"class":91,"line":6165},[89,8274,8275],{"class":95},"# Optional configuration, Proxy settings for the browser\n",[89,8277,8278],{"class":91,"line":6170},[89,8279,8280],{"class":95},"# [browser.proxy]\n",[89,8282,8283],{"class":91,"line":6175},[89,8284,8285],{"class":95},"# server = \"http:\u002F\u002Fproxy-server:port\"\n",[89,8287,8288],{"class":91,"line":6180},[89,8289,8290],{"class":95},"# username = \"proxy-username\"\n",[89,8292,8293],{"class":91,"line":6190},[89,8294,8295],{"class":95},"# password = \"proxy-password\"\n",[89,8297,8298],{"class":91,"line":6231},[89,8299,121],{"emptyLinePlaceholder":120},[89,8301,8302],{"class":91,"line":6242},[89,8303,8304],{"class":95},"# Optional configuration, Search settings.\n",[89,8306,8307],{"class":91,"line":6253},[89,8308,8309],{"class":95},"# [search]\n",[89,8311,8312],{"class":91,"line":6264},[89,8313,8314],{"class":95},"# Search engine for agent to use. Default is \"Google\", can be set to \"Baidu\" or \"DuckDuckGo\".\n",[89,8316,8317,8320,8322],{"class":91,"line":6275},[89,8318,8319],{"class":102},"engine",[89,8321,5582],{"class":106},[89,8323,8324],{"class":106}," \"Google\"\n",[15,8326,8327,8328,8331,8332],{},"其中 ",[19,8329,8330],{},"[llm]"," 的 ollama model 並非所有 model 著支援，目前只支援 ",[26,8333,8336],{"href":8334,"rel":8335},"https:\u002F\u002Follama.com\u002Fsearch?c=tools",[30],"ollama tool 模型",[15,8338,8339,8340,8343,8344],{},"而 ",[19,8341,8342],{},"[llm.vision]"," 的 ollama model 則必需支援",[26,8345,8348],{"href":8346,"rel":8347},"https:\u002F\u002Follama.com\u002Fsearch?c=vision",[30],"視覺的模型",[11,8350,8351],{"id":8351},"瀏覽器安裝",[15,8353,8354,8355,8358,8359,8362],{},"在使用 ",[19,8356,8357],{},"OpenManus"," 時，有時需要使用網路爬蟲時，會要求你安裝 ",[19,8360,8361],{},"Chromium"," 瀏覽器，你可以事先透過下列指令進行安裝",[80,8364,8366],{"className":82,"code":8365,"language":84,"meta":85,"style":85},"playwright install\n",[19,8367,8368],{"__ignoreMap":85},[89,8369,8370,8373],{"class":91,"line":92},[89,8371,8372],{"class":102},"playwright",[89,8374,8375],{"class":106}," install\n",[11,8377,8378],{"id":8378},"啟用服務",[15,8380,8381],{},"上面安裝完成後，就可以啟用服務",[80,8383,8385],{"className":82,"code":8384,"language":84,"meta":85,"style":85},"python main.py\n",[19,8386,8387],{"__ignoreMap":85},[89,8388,8389,8392],{"class":91,"line":92},[89,8390,8391],{"class":102},"python",[89,8393,8394],{"class":106}," main.py\n",[11,8396,8397],{"id":8397},"啟用服務的畫面",[80,8399,8401],{"className":82,"code":8400,"language":84,"meta":85,"style":85},"INFO     [browser_use] BrowserUse logging setup complete with level info\nINFO     [root] Anonymized telemetry enabled. See https:\u002F\u002Fdocs.browser-use.com\u002Fdevelopment\u002Ftelemetry for more information.\nEnter your prompt:\n",[19,8402,8403,8411,8423],{"__ignoreMap":85},[89,8404,8405,8408],{"class":91,"line":92},[89,8406,8407],{"class":102},"INFO",[89,8409,8410],{"class":306},"     [browser_use] BrowserUse logging setup complete with level info\n",[89,8412,8413,8415,8418,8420],{"class":91,"line":99},[89,8414,8407],{"class":102},[89,8416,8417],{"class":306},"     [root] Anonymized telemetry enabled. See https:\u002F\u002Fdocs.browser-use.com\u002Fdevelopment\u002Ftelemetry ",[89,8419,706],{"class":241},[89,8421,8422],{"class":306}," more information.\n",[89,8424,8425,8428,8431],{"class":91,"line":117},[89,8426,8427],{"class":102},"Enter",[89,8429,8430],{"class":106}," your",[89,8432,8433],{"class":106}," prompt:\n",[15,8435,8436],{},"在終端機輸入你的需求提示詞",[15,8438,8439],{},"如：請從網路上搜尋 近期熱門的 LLM 大語言模型的介紹，並以繁體中文整理成一篇文章，以 markdown 格式輸出 \"LLM_大語言模型介紹.md\"",[15,8441,8442,8443,8446],{},"執行結果會儲存在 ",[19,8444,8445],{},"OpenManus\u002Fworkspace"," 資料夾",[11,8448,1696],{"id":1696},[15,8450,8451,8452,8455],{},"總而言之，OpenManus 提供了一個無需等待邀請碼、即可在本地端體驗 AI Agent 功能的開源方案。透過搭配 Ollama，使用者可以輕鬆地利用各種大型語言模型和視覺模型，執行從網路資訊蒐集到文章撰寫等多種任務。儘管目前 Ollama 對於 ",[19,8453,8454],{},"tool"," 模型和視覺模型的支援仍在發展中，OpenManus 仍然為對 AI Agent 技術感興趣的使用者提供了一個方便且彈性的實驗平台。隨著專案的持續發展和更多模型的支援，OpenManus 有望成為本地端 AI 應用的重要工具之一。",[1728,8457,8458],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}",{"title":85,"searchDepth":99,"depth":99,"links":8460},[8461,8462,8463,8464,8469,8475,8479,8480,8481,8482],{"id":13,"depth":99,"text":13},{"id":7704,"depth":99,"text":7704},{"id":2730,"depth":99,"text":2730},{"id":7739,"depth":99,"text":7740,"children":8465},[8466,8467,8468],{"id":7743,"depth":117,"text":7744},{"id":7781,"depth":117,"text":7782},{"id":7808,"depth":117,"text":7808},{"id":7829,"depth":99,"text":7830,"children":8470},[8471,8472,8473,8474],{"id":7833,"depth":117,"text":7834},{"id":7857,"depth":117,"text":7782},{"id":7878,"depth":117,"text":7878},{"id":7921,"depth":117,"text":7808},{"id":7942,"depth":99,"text":7942,"children":8476},[8477,8478],{"id":7945,"depth":117,"text":7945},{"id":7964,"depth":117,"text":7964},{"id":8351,"depth":99,"text":8351},{"id":8378,"depth":99,"text":8378},{"id":8397,"depth":99,"text":8397},{"id":1696,"depth":99,"text":1696},"\u002Fimages\u002Farticles\u002F2025-03-17-open-manus\u002Fcover.png",{},"\u002Farticles\u002F2025-03-17-open-manus","2025-03-17 14:38:00",{"title":7694,"description":85},"articles\u002F2025-03-17-open-manus","最近的 Manus 爆紅的 AI 工具，但需要邀請碼，而 OpenManus 則是開源版，且可以在本地配合 ollama 使用",[2438],"3Et6YOZPsuqir3pZgApsjYIZn_5nPPKlO4oaWvr2Sj0",{"id":8493,"title":8494,"body":8495,"category":8669,"description":85,"extension":1749,"image":8670,"meta":8671,"navigation":120,"path":8672,"pubDate":8673,"seo":8674,"status":120,"stem":8675,"summary":8676,"tags":8677,"__hash__":8678},"content\u002Farticles\u002F2025-02-05-linux-nohup.md","nohup 指令：讓程式在登出後繼續執行的秘訣",{"type":8,"value":8496,"toc":8661},[8497,8504,8509,8512,8524,8538,8541,8551,8578,8592,8596,8602,8629,8647,8649,8652,8658],[11,8498,8500,8501,1856],{"id":8499},"什麼是-nohup","什麼是 ",[19,8502,8503],{},"nohup",[15,8505,8506,8508],{},[19,8507,8503],{}," 是Linux系統中的一個命令，用於讓指定的程式在用戶登出或終端機連接斷開後繼續執行。它會忽略SIGHUP（掛起）信號，使程序能夠在背景下不受干擾地運行。",[11,8510,8511],{"id":8511},"基本語法",[80,8513,8515],{"className":82,"code":8514,"language":84,"meta":85,"style":85},"nohup [指令] &\n",[19,8516,8517],{"__ignoreMap":85},[89,8518,8519,8521],{"class":91,"line":92},[89,8520,8503],{"class":102},[89,8522,8523],{"class":306}," [指令] &\n",[47,8525,8526,8532],{},[50,8527,8528,8531],{},[19,8529,8530],{},"[指令]","：您希望在背景執行的命令。",[50,8533,8534,8537],{},[19,8535,8536],{},"&","：表示將命令放在後台執行",[11,8539,8540],{"id":8540},"使用範例",[15,8542,8543,8544,8547,8548,8550],{},"假設我們有一個簡單的Python腳本 ",[19,8545,8546],{},"my_script.py","，它會運行一個耗時的計算任務。我們可以使用 ",[19,8549,8503],{}," 命令來確保該任務即使在登出後仍能繼續執行：",[80,8552,8554],{"className":82,"code":8553,"language":84,"meta":85,"style":85},"nohup python my_script.py >> output.log 2>&1 &\n",[19,8555,8556],{"__ignoreMap":85},[89,8557,8558,8560,8563,8566,8569,8572,8575],{"class":91,"line":92},[89,8559,8503],{"class":102},[89,8561,8562],{"class":106}," python",[89,8564,8565],{"class":106}," my_script.py",[89,8567,8568],{"class":241}," >>",[89,8570,8571],{"class":106}," output.log",[89,8573,8574],{"class":241}," 2>&1",[89,8576,8577],{"class":306}," &\n",[47,8579,8580,8586],{},[50,8581,8582,8585],{},[19,8583,8584],{},">>"," output.log：將標準輸出重定向到output.log文件。",[50,8587,8588,8591],{},[19,8589,8590],{},"2>&1","：將錯誤輸出也重定向到stdout，這樣即使發生錯誤也能被記錄在output.log中。",[11,8593,8595],{"id":8594},"過濾-nohup-ignoring-input-訊息","過濾 nohup: ignoring input 訊息",[15,8597,8598,8599,8601],{},"當你使用 ",[19,8600,8503],{}," 執行命令時，它會輸出 nohup: ignoring input，這是因為 nohup 預設會忽略標準輸入 (stdin)，以確保命令不會因等待輸入而中斷。這條訊息通常會寫入 nohup.out 或你指定的 log 檔案。如果你不想讓這行訊息出現在 log 檔案中，可以使用以下方法：",[80,8603,8605],{"className":82,"code":8604,"language":84,"meta":85,"style":85},"nohup python my_script.py >> output.log 2>&1 \u003C \u002Fdev\u002Fnull &\n",[19,8606,8607],{"__ignoreMap":85},[89,8608,8609,8611,8613,8615,8617,8619,8621,8624,8627],{"class":91,"line":92},[89,8610,8503],{"class":102},[89,8612,8562],{"class":106},[89,8614,8565],{"class":106},[89,8616,8568],{"class":241},[89,8618,8571],{"class":106},[89,8620,8574],{"class":241},[89,8622,8623],{"class":241}," \u003C",[89,8625,8626],{"class":106}," \u002Fdev\u002Fnull",[89,8628,8577],{"class":306},[47,8630,8631,8636,8641],{},[50,8632,8633,8635],{},[19,8634,8584],{}," 將標準輸出導向 output.log",[50,8637,8638,8640],{},[19,8639,8590],{}," 將錯誤輸出也重定向到stdout，這樣即使發生錯誤也能被記錄在output.log中。",[50,8642,8643,8646],{},[19,8644,8645],{},"\u003C \u002Fdev\u002Fnull"," 讓標準輸入 (stdin) 來自空設備，避免 nohup 顯示 ignoring input",[11,8648,1696],{"id":1696},[15,8650,8651],{},"掌握nohup指令對Linux使用者來說是非常有用的，特別是在需要長時間運行的任務中。利用這個簡單但強大的工具，您可以讓程序在后台無受干擾地執行，從而提高工作效率。",[15,8653,8654,8655,8657],{},"透過本文介紹的範例和技巧，相信您已經能夠自如地使用 ",[19,8656,8503],{}," 指令來管理您的Linux系統上的背景任務了！",[1728,8659,8660],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}",{"title":85,"searchDepth":99,"depth":99,"links":8662},[8663,8665,8666,8667,8668],{"id":8499,"depth":99,"text":8664},"什麼是 nohup？",{"id":8511,"depth":99,"text":8511},{"id":8540,"depth":99,"text":8540},{"id":8594,"depth":99,"text":8595},{"id":1696,"depth":99,"text":1696},"dev_ops","\u002Fimages\u002Farticles\u002F2025-02-05-linux-nohup\u002Fcover.png",{},"\u002Farticles\u002F2025-02-05-linux-nohup","2025-02-05 14:30:00",{"title":8494,"description":85},"articles\u002F2025-02-05-linux-nohup","在Linux環境下進行長時間運行的任務時，我們常常希望即使用戶登出終端機或連線中斷，任務也能繼續執行。nohup指令正是為此而生！本文將介紹如何使用nohup來執行背景任務，並重定向其輸出，確保您的程序在離線後仍能順利運行。",[8669,4811],"CwukBZ_XTh1QBVKDTwDEghU7F3HeG06Wv0jF4kxOzVI",{"id":8680,"title":8681,"body":8682,"category":3116,"description":8686,"extension":1749,"image":9360,"meta":9361,"navigation":120,"path":9362,"pubDate":9363,"seo":9364,"status":120,"stem":9365,"summary":9366,"tags":9367,"__hash__":9368},"content\u002Farticles\u002F2025-01-24-mac-os-app.md","MacOS：2025 我推的 Mac 好用 App",{"type":8,"value":8683,"toc":9300},[8684,8687,8689,8694,8698,8701,8708,8712,8715,8721,8725,8728,8734,8738,8741,8747,8751,8754,8760,8764,8767,8773,8777,8780,8786,8790,8793,8799,8803,8806,8812,8816,8819,8825,8829,8832,8838,8842,8845,8851,8854,8860,8864,8867,8873,8877,8880,8886,8890,8893,8899,8902,8908,8912,8915,8921,8924,8929,8933,8936,8942,8946,8951,8955,8958,8964,8967,8972,8976,8979,8985,8988,8993,8996,8999,9005,9009,9012,9018,9022,9025,9031,9035,9038,9044,9048,9051,9057,9061,9064,9070,9074,9077,9083,9087,9090,9096,9100,9103,9109,9113,9116,9122,9129,9133,9136,9142,9145,9150,9154,9157,9163,9166,9169,9175,9179,9182,9188,9192,9195,9201,9205,9208,9214,9218,9223,9226,9239,9245,9249,9252,9258,9262,9265,9272,9276,9279,9282,9288,9291,9294],[15,8685,8686],{},"農曆年假期將近，想要重新安裝我使用 MacOS ，在這邊整理一下目前自已常用的 Mac App。",[11,8688,2440],{"id":2440},[15,8690,8691],{},[2662,8692],{"alt":2440,"src":8693},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fdev-tool.png",[72,8695,8697],{"id":8696},"vscode","VSCode",[15,8699,8700],{},"一款輕量級但功能強大的源代碼編輯器，支援多種編程語言，並具有豐富的擴展生態系統。",[15,8702,8703,8704],{},"官網：",[26,8705,8706],{"href":8706,"rel":8707},"https:\u002F\u002Fcode.visualstudio.com\u002F",[30],[72,8709,8711],{"id":8710},"iterm2","Iterm2",[15,8713,8714],{},"一款功能強大的終端模擬器，提供分屏、標籤頁、熱鍵等多種功能，適合開發者使用。",[15,8716,8703,8717],{},[26,8718,8719],{"href":8719,"rel":8720},"https:\u002F\u002Fiterm2.com\u002F",[30],[72,8722,8724],{"id":8723},"utm","UTM",[15,8726,8727],{},"一款虛擬機應用程式，允許用戶在 macOS 上運行其他操作系統，如 Windows 和 Linux。",[15,8729,8703,8730],{},[26,8731,8732],{"href":8732,"rel":8733},"https:\u002F\u002Fmac.getutm.app\u002F",[30],[72,8735,8737],{"id":8736},"postman","Postman",[15,8739,8740],{},"API 開發和測試工具，方便發送 HTTP 請求、檢視回應。",[15,8742,8703,8743],{},[26,8744,8745],{"href":8745,"rel":8746},"https:\u002F\u002Fwww.postman.com\u002F",[30],[72,8748,8750],{"id":8749},"github-desktop","GitHub Desktop",[15,8752,8753],{},"GitHub 官方推出的桌面應用，提供圖形化界面，方便用戶管理 GitHub 上的代碼庫。",[15,8755,8703,8756],{},[26,8757,8758],{"href":8758,"rel":8759},"https:\u002F\u002Fgithub.com\u002Fapps\u002Fdesktop",[30],[72,8761,8763],{"id":8762},"textmate","TextMate",[15,8765,8766],{},"一款功能強大的文本編輯器，支援多種編程語言，具有語法高亮、代碼折疊等功能。",[15,8768,8703,8769],{},[26,8770,8771],{"href":8771,"rel":8772},"https:\u002F\u002Fmacromates.com\u002F",[30],[72,8774,8776],{"id":8775},"docker","Docker",[15,8778,8779],{},"一個開源的容器化平台，允許開發者打包應用及其依賴，實現跨平台運行。",[15,8781,8703,8782],{},[26,8783,8784],{"href":8784,"rel":8785},"https:\u002F\u002Fwww.docker.com\u002F",[30],[72,8787,8789],{"id":8788},"orbstack","Orbstack",[15,8791,8792],{},"一款輕量級的虛擬化工具，專為 macOS 設計，簡化容器和虛擬機的管理。",[15,8794,8703,8795],{},[26,8796,8797],{"href":8797,"rel":8798},"https:\u002F\u002Forbstack.dev\u002F",[30],[72,8800,8802],{"id":8801},"devtoys","DevToys",[15,8804,8805],{},"提供許多開發者常用的小工具，例如 JSON 格式化、編碼轉換等",[15,8807,8703,8808],{},[26,8809,8810],{"href":8810,"rel":8811},"https:\u002F\u002Fdevtoys.app\u002F",[30],[72,8813,8815],{"id":8814},"dbeaver","DBeaver",[15,8817,8818],{},"通用資料庫管理工具，支援多種資料庫系統，包含 MySQL、SQLite、PostgreSQL、MongoDB 等。",[15,8820,8703,8821],{},[26,8822,8823],{"href":8823,"rel":8824},"https:\u002F\u002Fdbeaver.io\u002F",[30],[72,8826,8828],{"id":8827},"pgadmin4","PgAdmin4",[15,8830,8831],{},"PostgreSQL 資料庫的管理工具。",[15,8833,8703,8834],{},[26,8835,8836],{"href":8836,"rel":8837},"https:\u002F\u002Fwww.pgadmin.org\u002F",[30],[72,8839,8841],{"id":8840},"frame0","Frame0",[15,8843,8844],{},"可以快速建置手繪風格 UI Prototype 的工具。",[15,8846,8703,8847],{},[26,8848,8849],{"href":8849,"rel":8850},"https:\u002F\u002Fframe0.app",[30],[11,8852,8853],{"id":8853},"網路工具",[15,8855,8856],{},[2662,8857],{"alt":8858,"src":8859},"瀏覽器","\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fbrowser.png",[72,8861,8863],{"id":8862},"arc-browser","Arc Browser",[15,8865,8866],{},"rc 瀏覽器由 The Browser Company 開發，旨在重新定義網頁瀏覽體驗。它基於 Chromium 引擎，並使用 Swift 編寫，支援 Chrome 擴充功能，預設搜尋引擎為 Google。",[15,8868,8703,8869],{},[26,8870,8871],{"href":8871,"rel":8872},"https:\u002F\u002Farc.net\u002F",[30],[72,8874,8876],{"id":8875},"firefox","Firefox",[15,8878,8879],{},"Mozilla Firefox（簡稱 Firefox）是一款由 Mozilla 基金會及其子公司 Mozilla 公司開發的自由且開源的網頁瀏覽器。自 2004 年 11 月 9 日首次發布以來，Firefox 一直致力於提供快速、安全且注重隱私的瀏覽體驗",[15,8881,8703,8882],{},[26,8883,8884],{"href":8884,"rel":8885},"https:\u002F\u002Fwww.mozilla.org\u002Fzh-TW\u002Ffirefox\u002Fnew\u002F",[30],[72,8887,8889],{"id":8888},"neat-download-manager","Neat Download Manager",[15,8891,8892],{},"Neat Download Manager 是一款免費且輕量級的下載管理器，適用於 Windows 和 macOS 平台。\n該軟體支援多執行緒下載，能有效提升下載速度，並提供續傳、暫停等功能，方便管理下載任務。",[15,8894,8703,8895],{},[26,8896,8897],{"href":8897,"rel":8898},"https:\u002F\u002Fwww.neatdownloadmanager.com\u002Findex.php\u002Fen\u002F",[30],[11,8900,8901],{"id":8901},"筆記軟體",[15,8903,8904],{},[2662,8905],{"alt":8906,"src":8907},"筆記","\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002FNotebook.png",[72,8909,8911],{"id":8910},"obsidian","Obsidian",[15,8913,8914],{},"Obsidian 是一款免費且開源的筆記軟體，支援 Markdown 語法，所有筆記以 .md 檔案形式儲存在指定的資料夾中，方便使用者將檔案匯入其他軟體。",[15,8916,8703,8917],{},[26,8918,8919],{"href":8919,"rel":8920},"https:\u002F\u002Fobsidian.md\u002F",[30],[11,8922,8923],{"id":8923},"媒體播放器",[15,8925,8926],{},[2662,8927],{"alt":8923,"src":8928},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fmedia-player.png",[72,8930,8932],{"id":8931},"iina","IINA",[15,8934,8935],{},"IINA 是一款專為 macOS 設計的免費開源多媒體播放器，基於 mpv 引擎，使用 Swift 編寫，旨在提供現代化且直覺的使用體驗。",[15,8937,8703,8938],{},[26,8939,8940],{"href":8940,"rel":8941},"https:\u002F\u002Fiina.io\u002F",[30],[11,8943,8945],{"id":8944},"壓縮解壓","壓縮\u002F解壓",[15,8947,8948],{},[2662,8949],{"alt":8945,"src":8950},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fzip.png",[72,8952,8954],{"id":8953},"keka","Keka",[15,8956,8957],{},"Keka 是一款專為 macOS 設計的免費開源壓縮與解壓縮軟體，支援多種壓縮格式，包括 7Z、ZIP、TAR、GZIP、BZIP2、XZ、LZIP、DMG、ISO、BROTLI、ZSTD、LRZIP、WIM 等。",[15,8959,8703,8960],{},[26,8961,8962],{"href":8962,"rel":8963},"https:\u002F\u002Fwww.keka.io\u002F",[30],[11,8965,8966],{"id":8966},"密碼管理",[15,8968,8969],{},[2662,8970],{"alt":8966,"src":8971},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fpassword.png",[72,8973,8975],{"id":8974},"keepassxc","KeePassXC",[15,8977,8978],{},"KeePassXC 是一款免費且開源的密碼管理器，旨在安全地存儲和管理您的敏感資訊。它基於 KeePassX，並使用 Qt5 庫構建，支援 Windows、macOS 和 Linux 等多個平台。",[15,8980,8703,8981],{},[26,8982,8983],{"href":8983,"rel":8984},"https:\u002F\u002Fkeepassxc.org\u002F",[30],[11,8986,8987],{"id":8987},"系統管理",[15,8989,8990],{},[2662,8991],{"alt":8987,"src":8992},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fsystem.png",[72,8994,2713],{"id":8995},"appcleaner",[15,8997,8998],{},"AppCleaner 是一款免費且開源的 macOS 應用程式卸載工具，旨在徹底移除應用程式及其相關檔案，避免遺留不必要的設定或暫存檔案。",[15,9000,8703,9001],{},[26,9002,9003],{"href":9003,"rel":9004},"https:\u002F\u002Ffreemacsoft.net\u002Fappcleaner\u002F",[30],[72,9006,9008],{"id":9007},"stats","Stats",[15,9010,9011],{},"Stats 是一個免費的 macOS 應用程式，可以顯示系統資源使用情況，包括 CPU、記憶體和磁盤空間。它也提供了一些有用的工具來管理這些資源。",[15,9013,8703,9014],{},[26,9015,9016],{"href":9016,"rel":9017},"https:\u002F\u002Fgithub.com\u002Fexelban\u002Fstats",[30],[72,9019,9021],{"id":9020},"raycast","Raycast",[15,9023,9024],{},"Raycast 是一個 macOS 的應用程式，可以幫助你快速找到和操作文件和資料夾。它還提供了許多其他有用的功能，如搜索、排序和分類。",[15,9026,8703,9027],{},[26,9028,9029],{"href":9029,"rel":9030},"https:\u002F\u002Fraycast.app\u002F",[30],[72,9032,9034],{"id":9033},"aidente","AIDente",[15,9036,9037],{},"調整 MacBook 電池充電上限的工具，以延長電池壽命。",[15,9039,8703,9040],{},[26,9041,9042],{"href":9042,"rel":9043},"https:\u002F\u002Fapphousekitchen.com",[30],[72,9045,9047],{"id":9046},"shotter","Shotter",[15,9049,9050],{},"功能強大的螢幕截圖工具，支援滾動截圖、圖片編輯等",[15,9052,8703,9053],{},[26,9054,9055],{"href":9055,"rel":9056},"https:\u002F\u002Fshottr.cc\u002F",[30],[72,9058,9060],{"id":9059},"xnip","Xnip",[15,9062,9063],{},"另一款好用的截圖工具，提供多種截圖模式和編輯功能。",[15,9065,8703,9066],{},[26,9067,9068],{"href":9068,"rel":9069},"https:\u002F\u002Fxnipapp.com\u002F",[30],[72,9071,9073],{"id":9072},"mos","Mos",[15,9075,9076],{},"平滑滑鼠滾動的工具，提升使用體驗。",[15,9078,8703,9079],{},[26,9080,9081],{"href":9081,"rel":9082},"https:\u002F\u002Fmos.caldis.me",[30],[72,9084,9086],{"id":9085},"prettyclean","PrettyClean",[15,9088,9089],{},"清理系統垃圾檔案的工具",[15,9091,8703,9092],{},[26,9093,9094],{"href":9094,"rel":9095},"https:\u002F\u002Fwww.prettyclean.cc\u002Fen",[30],[72,9097,9099],{"id":9098},"betterdisplay","BetterDisplay",[15,9101,9102],{},"調整螢幕解析度、亮度、對比度等設定的工具",[15,9104,8703,9105],{},[26,9106,9107],{"href":9107,"rel":9108},"https:\u002F\u002Fgithub.com\u002Fwaydabber\u002FBetterDisplay",[30],[72,9110,9112],{"id":9111},"ntfstool","NTFSTool",[15,9114,9115],{},"在 macOS 上讀寫 NTFS 格式硬碟的工具",[15,9117,8703,9118],{},[26,9119,9120],{"href":9120,"rel":9121},"https:\u002F\u002Fntfstool.com",[30],[15,9123,9124,9125],{},"GitHub：",[26,9126,9127],{"href":9127,"rel":9128},"https:\u002F\u002Fgithub.com\u002Fntfstool\u002Fntfstool",[30],[72,9130,9132],{"id":9131},"landrop","LANDrop",[15,9134,9135],{},"在區域網路內傳輸檔案的工具，支援多種平台，包含 macOS、Windows、 Linux、Android 和 iOS。",[15,9137,8703,9138],{},[26,9139,9140],{"href":9140,"rel":9141},"https:\u002F\u002Flandrop.app",[30],[11,9143,9144],{"id":9144},"圖像處理",[15,9146,9147],{},[2662,9148],{"alt":9144,"src":9149},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fpicture.png",[72,9151,9153],{"id":9152},"inkscape","Inkscape",[15,9155,9156],{},"開源的向量圖形編輯器，類似 Adobe Illustrator。",[15,9158,8703,9159],{},[26,9160,9161],{"href":9161,"rel":9162},"https:\u002F\u002Finkscape.org\u002F",[30],[72,9164,9165],{"id":9165},"krita",[15,9167,9168],{},"開源的繪圖軟體，適合數位繪畫和插圖創作，支援 PNG、JPEG 和 TIFF 等格式。",[15,9170,8703,9171],{},[26,9172,9173],{"href":9173,"rel":9174},"https:\u002F\u002Fkrita.org\u002Fzh-tw\u002F",[30],[72,9176,9178],{"id":9177},"photoscape-x","Photoscape X",[15,9180,9181],{},"免費的圖片編輯軟體，提供多種編輯工具和特效。",[15,9183,8703,9184],{},[26,9185,9186],{"href":9186,"rel":9187},"http:\u002F\u002Fx.photoscape.org",[30],[72,9189,9191],{"id":9190},"picture-view","Picture View",[15,9193,9194],{},"Picture View - 是一款輕巧快速的 macOS 圖片瀏覽應用程式。體積小巧，方便快速的檢視圖片，不產生緩存，適合作為預設看圖應用。多種看圖模式，操作方便快捷，支援查看EXIF訊息，支援防止系統休眠",[15,9196,8703,9197],{},[26,9198,9199],{"href":9199,"rel":9200},"https:\u002F\u002Fwl879.github.io\u002Fapps\u002Fpicview\u002Findex.html",[30],[72,9202,9204],{"id":9203},"itsycal","Itsycal",[15,9206,9207],{},"在選單列顯示小巧的日曆",[15,9209,8703,9210],{},[26,9211,9212],{"href":9212,"rel":9213},"https:\u002F\u002Fwww.mowglii.com\u002Fitsycal\u002F",[30],[11,9215,9217],{"id":9216},"ai工具","AI工具",[15,9219,9220],{},[2662,9221],{"alt":9217,"src":9222},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002FAI.png",[72,9224,9225],{"id":9225},"ollama",[15,9227,9228,9229,1702,9232,1702,9235,9238],{},"在本地運行大型語言模型的工具，常見的開源模型如 ",[19,9230,9231],{},"LLama3",[19,9233,9234],{},"Phi4",[19,9236,9237],{},"gemma2","等。",[15,9240,8703,9241],{},[26,9242,9243],{"href":9243,"rel":9244},"https:\u002F\u002Follama.ai\u002F",[30],[72,9246,9248],{"id":9247},"chatbox-ai","Chatbox AI",[15,9250,9251],{},"Chatbox 是一款免費且開源的跨平台 AI 客戶端應用和智能助手，支援多種先進的 AI 模型和 API，旨在提升用戶的工作與學習效率。",[15,9253,8703,9254],{},[26,9255,9256],{"href":9256,"rel":9257},"https:\u002F\u002Fchatboxai.app\u002Fzh-TW",[30],[72,9259,9261],{"id":9260},"open-webui","Open WebUI",[15,9263,9264],{},"Open WebUI 是一款免費且開源的自託管 Web 使用者介面，旨在為大型語言模型（LLM）提供直觀且功能豐富的操作平台",[15,9266,9267,9268],{},"網址：",[26,9269,9270],{"href":9270,"rel":9271},"https:\u002F\u002Fopenwebui.com\u002F",[30],[72,9273,9275],{"id":9274},"pinokio","Pinokio",[15,9277,9278],{},"Pinokio 是一款免費且開源的 AI 應用管理工具，旨在簡化各種 AI 應用和模型的安裝與管理過程。",[15,9280,9281],{},"透過 Pinokio，用戶無需進行繁瑣的環境配置或使用終端命令，即可一鍵安裝和運行多種 AI 工具，如大型語言模型（LLM）、AI 繪畫、AI 語音、AI 視頻以及 AI 音樂等。",[15,9283,9267,9284],{},[26,9285,9286],{"href":9286,"rel":9287},"https:\u002F\u002Fpinokio.computer\u002F",[30],[72,9289,4787],{"id":9290},"upscayl",[15,9292,9293],{},"使用 AI 技術將圖像轉換為更清晰的版本，並添加更多的细節。Upscayl 是一個非常有用的工具，特別適合需要高質量圖像的人像。",[15,9295,8703,9296],{},[26,9297,9298],{"href":9298,"rel":9299},"https:\u002F\u002Fupscayl.org\u002F",[30],{"title":85,"searchDepth":99,"depth":99,"links":9301},[9302,9316,9321,9324,9327,9330,9333,9346,9353],{"id":2440,"depth":99,"text":2440,"children":9303},[9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315],{"id":8696,"depth":117,"text":8697},{"id":8710,"depth":117,"text":8711},{"id":8723,"depth":117,"text":8724},{"id":8736,"depth":117,"text":8737},{"id":8749,"depth":117,"text":8750},{"id":8762,"depth":117,"text":8763},{"id":8775,"depth":117,"text":8776},{"id":8788,"depth":117,"text":8789},{"id":8801,"depth":117,"text":8802},{"id":8814,"depth":117,"text":8815},{"id":8827,"depth":117,"text":8828},{"id":8840,"depth":117,"text":8841},{"id":8853,"depth":99,"text":8853,"children":9317},[9318,9319,9320],{"id":8862,"depth":117,"text":8863},{"id":8875,"depth":117,"text":8876},{"id":8888,"depth":117,"text":8889},{"id":8901,"depth":99,"text":8901,"children":9322},[9323],{"id":8910,"depth":117,"text":8911},{"id":8923,"depth":99,"text":8923,"children":9325},[9326],{"id":8931,"depth":117,"text":8932},{"id":8944,"depth":99,"text":8945,"children":9328},[9329],{"id":8953,"depth":117,"text":8954},{"id":8966,"depth":99,"text":8966,"children":9331},[9332],{"id":8974,"depth":117,"text":8975},{"id":8987,"depth":99,"text":8987,"children":9334},[9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345],{"id":8995,"depth":117,"text":2713},{"id":9007,"depth":117,"text":9008},{"id":9020,"depth":117,"text":9021},{"id":9033,"depth":117,"text":9034},{"id":9046,"depth":117,"text":9047},{"id":9059,"depth":117,"text":9060},{"id":9072,"depth":117,"text":9073},{"id":9085,"depth":117,"text":9086},{"id":9098,"depth":117,"text":9099},{"id":9111,"depth":117,"text":9112},{"id":9131,"depth":117,"text":9132},{"id":9144,"depth":99,"text":9144,"children":9347},[9348,9349,9350,9351,9352],{"id":9152,"depth":117,"text":9153},{"id":9165,"depth":117,"text":9165},{"id":9177,"depth":117,"text":9178},{"id":9190,"depth":117,"text":9191},{"id":9203,"depth":117,"text":9204},{"id":9216,"depth":99,"text":9217,"children":9354},[9355,9356,9357,9358,9359],{"id":9225,"depth":117,"text":9225},{"id":9247,"depth":117,"text":9248},{"id":9260,"depth":117,"text":9261},{"id":9274,"depth":117,"text":9275},{"id":9290,"depth":117,"text":4787},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fcover.png",{},"\u002Farticles\u002F2025-01-24-mac-os-app","2025-01-24 18:30:00",{"title":8681,"description":8686},"articles\u002F2025-01-24-mac-os-app","整理目前自已常用 Mac App，包含開發工具、網路工具、筆記軟體、媒體播放器、壓縮\u002F解壓、密碼管理、系統管理、圖像處理及AI工具",[3125,3116],"N4MPdGJ1ZPhYGjQBN5k3ooU7PUeIDvfSyYFtfWfW1dY",{"id":9370,"title":9371,"body":9372,"category":9682,"description":85,"extension":1749,"image":9683,"meta":9684,"navigation":120,"path":9685,"pubDate":9686,"seo":9687,"status":120,"stem":9688,"summary":9689,"tags":9690,"__hash__":9692},"content\u002Farticles\u002F2025-01-20-postgresql-materialzed-view.md","PostgreSQL 的高效查詢策略：利用 Materialized View 達成更快的回應速度",{"type":8,"value":9373,"toc":9668},[9374,9378,9388,9392,9395,9398,9424,9427,9487,9491,9505,9509,9512,9515,9535,9539,9546,9575,9578,9581,9602,9606,9613,9622,9626,9629,9660,9662,9665],[11,9375,9377],{"id":9376},"postgresql-view-檢視表-和-materialized-view-實體化檢視表","PostgreSQL VIEW (檢視表) 和 Materialized View (實體化檢視表)",[15,9379,9380,9381,4812,9384,9387],{},"PostgreSQL 提供了 ",[19,9382,9383],{},"VIEW",[19,9385,9386],{},"MATERIALIZED VIEW"," 兩種檢示表，分別用於查詢和儲存結果。",[72,9389,9391],{"id":9390},"view-檢視表","VIEW (檢視表)",[15,9393,9394],{},"是一種虛擬表，它會根據查詢語句來生成資料。當查詢時，PostgreSQL 會自動計算並返回結果集。",[15,9396,9397],{},"其優點如下：",[47,9399,9400,9406,9412,9418],{},[50,9401,9402,9405],{},[2510,9403,9404],{},"簡化查詢","：將複雜查詢存為檢示表，可以簡化後續的查詢。",[50,9407,9408,9411],{},[2510,9409,9410],{},"提高安全性","：檢視表可以避免直接對數據庫進行操作，提高了安全性，並可以限制用戶對數據資料的查詢權限。",[50,9413,9414,9417],{},[2510,9415,9416],{},"可重用性","：檢視表可以被多次使用，而不需要重新計算。",[50,9419,9420,9423],{},[2510,9421,9422],{},"節省空間","：不保存數據，節省空間。",[72,9425,9426],{"id":9426},"範例",[80,9428,9432],{"className":9429,"code":9430,"language":9431,"meta":85,"style":85},"language-sql shiki shiki-themes github-light github-dark github-dark","CREATE  VIEW my_view AS\nSELECT column1, column2, COUNT(*) AS total_count\nFROM my_table\nGROUP BY column1, column2;\n","sql",[19,9433,9434,9448,9471,9479],{"__ignoreMap":85},[89,9435,9436,9439,9442,9445],{"class":91,"line":92},[89,9437,9438],{"class":241},"CREATE",[89,9440,9441],{"class":241},"  VIEW",[89,9443,9444],{"class":102}," my_view",[89,9446,9447],{"class":241}," AS\n",[89,9449,9450,9453,9456,9459,9461,9463,9465,9468],{"class":91,"line":99},[89,9451,9452],{"class":241},"SELECT",[89,9454,9455],{"class":306}," column1, column2, ",[89,9457,9458],{"class":110},"COUNT",[89,9460,307],{"class":306},[89,9462,6640],{"class":241},[89,9464,6933],{"class":306},[89,9466,9467],{"class":241},"AS",[89,9469,9470],{"class":306}," total_count\n",[89,9472,9473,9476],{"class":91,"line":117},[89,9474,9475],{"class":241},"FROM",[89,9477,9478],{"class":306}," my_table\n",[89,9480,9481,9484],{"class":91,"line":124},[89,9482,9483],{"class":241},"GROUP BY",[89,9485,9486],{"class":306}," column1, column2;\n",[72,9488,9490],{"id":9489},"view-的缺點","VIEW 的缺點",[47,9492,9493,9499],{},[50,9494,9495,9498],{},[2510,9496,9497],{},"性能問題","：太複雜的檢示表查詢可能會影響性能。",[50,9500,9501,9504],{},[2510,9502,9503],{},"無法建立索引","：檢視表本身不能直接建立索引，需要對原始數據進行索引。",[11,9506,9508],{"id":9507},"materialized-view-實體化檢視表","Materialized View (實體化檢視表)",[15,9510,9511],{},"Materialized View 是一種檢視表，它會在查詢時計算並儲存結果。這意味著當查詢 Materialized View 時，它會直接使用儲存的結果而不是重新計算。",[15,9513,9514],{},"其特點如下：",[47,9516,9517,9523,9529],{},[50,9518,9519,9522],{},[2510,9520,9521],{},"資料存儲","：Materialized View 會在查詢時計算並儲存結果。這意味著當查詢 Materialized View 時，它會直接使用儲存的結果而不是重新計算。",[50,9524,9525,9528],{},[2510,9526,9527],{},"性能優勢","：因為資料已經被計算好，所以查詢速度會更快，特別是複雜的查詢。",[50,9530,9531,9534],{},[2510,9532,9533],{},"索引支持","：Materialized View 可以像普通表一樣建立索引，因此可以對檢視表進行高效的查詢操作。",[72,9536,9538],{"id":9537},"建立-materialized-view","建立 Materialized View",[15,9540,9541,9542,9545],{},"在 PostgreSQL 中，可以使用 ",[19,9543,9544],{},"CREATE MATERIALIZED VIEW"," 语句來建立 Materialized View。以下是一個簡單的示例：",[80,9547,9549],{"className":9429,"code":9548,"language":9431,"meta":85,"style":85},"CREATE MATERIALIZED VIEW my_materialized_view AS\nSELECT column1, column2, ...\nFROM my_table;\n",[19,9550,9551,9561,9568],{"__ignoreMap":85},[89,9552,9553,9555,9558],{"class":91,"line":92},[89,9554,9438],{"class":241},[89,9556,9557],{"class":306}," MATERIALIZED VIEW my_materialized_view ",[89,9559,9560],{"class":241},"AS\n",[89,9562,9563,9565],{"class":91,"line":99},[89,9564,9452],{"class":241},[89,9566,9567],{"class":306}," column1, column2, ...\n",[89,9569,9570,9572],{"class":91,"line":117},[89,9571,9475],{"class":241},[89,9573,9574],{"class":306}," my_table;\n",[72,9576,9577],{"id":9577},"建立索引",[15,9579,9580],{},"Materialized View 可以像普通表一樣建立索引，因此可以對檢視表進行高效的查詢操作。以下是一個示例：",[80,9582,9584],{"className":9429,"code":9583,"language":9431,"meta":85,"style":85},"CREATE INDEX idx_my_materialized_view_column1 ON my_materialized_view(column1);\n",[19,9585,9586],{"__ignoreMap":85},[89,9587,9588,9590,9593,9596,9599],{"class":91,"line":92},[89,9589,9438],{"class":241},[89,9591,9592],{"class":241}," INDEX",[89,9594,9595],{"class":102}," idx_my_materialized_view_column1",[89,9597,9598],{"class":241}," ON",[89,9600,9601],{"class":306}," my_materialized_view(column1);\n",[72,9603,9605],{"id":9604},"更新-materialized-view","更新 Materialized View",[15,9607,9608,9609,9612],{},"Materialized View 會自動更新，當數據庫中的表發生更改時。你可以使用 ",[19,9610,9611],{},"REFRESH MATERIALIZED VIEW"," 语句來刷新 Materialized View：",[80,9614,9616],{"className":9429,"code":9615,"language":9431,"meta":85,"style":85},"REFRESH MATERIALIZED VIEW my_materialized_view;\n",[19,9617,9618],{"__ignoreMap":85},[89,9619,9620],{"class":91,"line":92},[89,9621,9615],{"class":306},[72,9623,9625],{"id":9624},"使用-materialized-view","使用 Materialized View",[15,9627,9628],{},"Materialized View 可以像普通表一樣使用，因此可以對檢視表進行高效的查詢操作。以下是一個示例：",[80,9630,9632],{"className":9429,"code":9631,"language":9431,"meta":85,"style":85},"SELECT * FROM my_materialized_view WHERE column1 = 'value';\n",[19,9633,9634],{"__ignoreMap":85},[89,9635,9636,9638,9641,9644,9647,9650,9653,9655,9658],{"class":91,"line":92},[89,9637,9452],{"class":241},[89,9639,9640],{"class":241}," *",[89,9642,9643],{"class":241}," FROM",[89,9645,9646],{"class":306}," my_materialized_view ",[89,9648,9649],{"class":241},"WHERE",[89,9651,9652],{"class":306}," column1 ",[89,9654,313],{"class":241},[89,9656,9657],{"class":106}," 'value'",[89,9659,552],{"class":306},[11,9661,1696],{"id":1696},[15,9663,9664],{},"Materialized View 是一個非常有用的工具，它可以在數據庫中提供快速的查詢結果。通過使用索引和定期刷新，Materialized View 可以提高查詢性能，使應用程序更加高效。",[1728,9666,9667],{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}",{"title":85,"searchDepth":99,"depth":99,"links":9669},[9670,9675,9681],{"id":9376,"depth":99,"text":9377,"children":9671},[9672,9673,9674],{"id":9390,"depth":117,"text":9391},{"id":9426,"depth":117,"text":9426},{"id":9489,"depth":117,"text":9490},{"id":9507,"depth":99,"text":9508,"children":9676},[9677,9678,9679,9680],{"id":9537,"depth":117,"text":9538},{"id":9577,"depth":117,"text":9577},{"id":9604,"depth":117,"text":9605},{"id":9624,"depth":117,"text":9625},{"id":1696,"depth":99,"text":1696},"database","\u002Fimages\u002Farticles\u002F2025-01-20-postgresql-materialized-view\u002Fcover.png",{},"\u002Farticles\u002F2025-01-20-postgresql-materialzed-view","2025-01-20 15:25:00",{"title":9371,"description":85},"articles\u002F2025-01-20-postgresql-materialzed-view","PostgreSQL Materialized View 是一種數據視圖，它會將查詢結果儲存到一個表中，以便在需要時快速訪問。",[9691],"Postgresql","OtEICcXMOXYLMC9l2mst1JtQEi3zUxzEx8O9Q062GcY",{"id":9694,"title":9695,"body":9696,"category":1833,"description":85,"extension":1749,"image":9736,"meta":9737,"navigation":120,"path":9738,"pubDate":9739,"seo":9740,"status":120,"stem":9741,"summary":9742,"tags":9743,"__hash__":9744},"content\u002Farticles\u002F2025-01-19-2025-new-theme.md","2025 新版型",{"type":8,"value":9697,"toc":9733},[9698,9700,9715,9724],[11,9699,1769],{"id":1769},[15,9701,9702,9703,9706,9707,9710,9711,9714],{},"年初時，我對自己的部落格進行了重新設計和結構化。這次重構依然採用了 ",[19,9704,9705],{},"Nuxt.js"," 和其 ",[19,9708,9709],{},"Nuxt\u002Fcontent"," 模組來管理文章內容，並利用 ",[19,9712,9713],{},"Tailwind CSS"," 進行樣式設定。",[15,9716,9717,9718,9720,9721,9723],{},"原本打算使用 ",[19,9719,9705],{}," V3 來完成此次更新，因為網站已經接近完成狀態。然而，在生成靜態頁面時遇到了一些問題，因此決定先以穩定的 ",[19,9722,9705],{}," V2 進行重構工作。",[15,9725,9726,9727,9729,9730,9732],{},"尽管如此，我仍將持續研究 ",[19,9728,9705],{}," V3 的相關功能，並期待將這些新特性引入到我的項目中。即使官方對 ",[19,9731,9705],{}," V2 還會提供安全更新，但許多令人興奮的新功能僅在 V3 中實現。",{"title":85,"searchDepth":99,"depth":99,"links":9734},[9735],{"id":1769,"depth":99,"text":1769},"\u002Fimages\u002Farticles\u002F2025-01-19-2025-new-theme\u002Fcover.png",{},"\u002Farticles\u002F2025-01-19-2025-new-theme","2025-01-19 22:48:30",{"title":9695,"description":85},"articles\u002F2025-01-19-2025-new-theme","替網站做了新版型，新版型回歸簡約風格",[1833],"MsdGgluY9CLV2K69xHavUg9vNq1FVnQLpldIMwcohqI",{"id":9746,"title":9747,"body":9748,"category":2429,"description":85,"extension":1749,"image":10135,"meta":10136,"navigation":120,"path":10137,"pubDate":10138,"seo":10139,"status":120,"stem":10140,"summary":10141,"tags":10142,"__hash__":10143},"content\u002Farticles\u002F2024-06-07-ollama.md","用 ollama 來玩免費開源語言模型",{"type":8,"value":9749,"toc":10120},[9750,9752,9769,9772,9789,9793,9796,9800,9818,9822,9837,9840,9937,9941,9944,9977,9980,10019,10023,10038,10050,10093,10097,10109,10117],[11,9751,13],{"id":13},[15,9753,9754,9755,9758,9759,9758,9762,9758,9765,9768],{},"Ollama 是一個支持 ",[19,9756,9757],{},"Llama 3"," 、 ",[19,9760,9761],{},"Mistral",[19,9763,9764],{},"Gemma",[19,9766,9767],{},"Phi 3"," 等大型語言模型的框架，適用於 macOS、Windows、Linux 和 Docker。",[11,9770,9771],{"id":9771},"下載",[15,9773,9774,9775,9780,9781,9780,9785,242],{},"下載位址：\n| ",[26,9776,9779],{"href":9777,"rel":9778},"https:\u002F\u002Follama.com\u002Fdownload\u002Fmac",[30],"MAC"," | ",[26,9782,4811],{"href":9783,"rel":9784},"https:\u002F\u002Follama.com\u002Fdownload\u002Flinux",[30],[26,9786,3230],{"href":9787,"rel":9788},"https:\u002F\u002Follama.com\u002Fdownload\u002Fwindows",[30],[72,9790,9792],{"id":9791},"windows-macos-安裝","Windows \u002F MacOS 安裝",[15,9794,9795],{},"依安裝精靈進行即可",[72,9797,9799],{"id":9798},"linux-在透過-curl-安裝","Linux 在透過 curl 安裝",[80,9801,9803],{"className":82,"code":9802,"language":84,"meta":85,"style":85},"curl -fsSL https:\u002F\u002Follama.com\u002Finstall.sh | sh\n",[19,9804,9805],{"__ignoreMap":85},[89,9806,9807,9809,9811,9814,9816],{"class":91,"line":92},[89,9808,2778],{"class":102},[89,9810,2781],{"class":110},[89,9812,9813],{"class":106}," https:\u002F\u002Follama.com\u002Finstall.sh",[89,9815,242],{"class":241},[89,9817,7854],{"class":102},[72,9819,9821],{"id":9820},"docker-安裝","Docker 安裝",[80,9823,9825],{"className":82,"code":9824,"language":84,"meta":85,"style":85},"docker pull ollama\u002Follama\n",[19,9826,9827],{"__ignoreMap":85},[89,9828,9829,9831,9834],{"class":91,"line":92},[89,9830,8775],{"class":102},[89,9832,9833],{"class":106}," pull",[89,9835,9836],{"class":106}," ollama\u002Follama\n",[11,9838,9839],{"id":9839},"快速開始",[1995,9841,9842,9862,9883,9899,9920],{},[50,9843,9844,9845,9847,9848],{},"運行 ",[19,9846,9757],{}," 模型",[80,9849,9851],{"className":82,"code":9850,"language":84,"meta":85,"style":85},"ollama run llama3\n",[19,9852,9853],{"__ignoreMap":85},[89,9854,9855,9857,9859],{"class":91,"line":92},[89,9856,9225],{"class":102},[89,9858,4026],{"class":106},[89,9860,9861],{"class":106}," llama3\n",[50,9863,9864,9865,9877,9879],{},"查看所有支持的模型：",[80,9866,9868],{"className":82,"code":9867,"language":84,"meta":85,"style":85},"ollama list\n",[19,9869,9870],{"__ignoreMap":85},[89,9871,9872,9874],{"class":91,"line":92},[89,9873,9225],{"class":102},[89,9875,9876],{"class":106}," list\n",[7487,9878],{},[2662,9880],{"alt":9881,"src":9882,"title":9881},"ollama list","\u002Fimages\u002Farticles\u002F2024-06-07-ollama\u002Follama-list.png",[50,9884,9885,9886],{},"拉取模型",[80,9887,9889],{"className":82,"code":9888,"language":84,"meta":85,"style":85},"ollama pull llama3\n",[19,9890,9891],{"__ignoreMap":85},[89,9892,9893,9895,9897],{"class":91,"line":92},[89,9894,9225],{"class":102},[89,9896,9833],{"class":106},[89,9898,9861],{"class":106},[50,9900,9901,9902],{},"複製模型",[80,9903,9905],{"className":82,"code":9904,"language":84,"meta":85,"style":85},"ollama cp llama3 my-model\n",[19,9906,9907],{"__ignoreMap":85},[89,9908,9909,9911,9914,9917],{"class":91,"line":92},[89,9910,9225],{"class":102},[89,9912,9913],{"class":106}," cp",[89,9915,9916],{"class":106}," llama3",[89,9918,9919],{"class":106}," my-model\n",[50,9921,9922,9923],{},"刪除模型",[80,9924,9926],{"className":82,"code":9925,"language":84,"meta":85,"style":85},"ollama rm llama3\n",[19,9927,9928],{"__ignoreMap":85},[89,9929,9930,9932,9935],{"class":91,"line":92},[89,9931,9225],{"class":102},[89,9933,9934],{"class":106}," rm",[89,9936,9861],{"class":106},[11,9938,9940],{"id":9939},"利用-rest-api","利用 REST API",[72,9942,9943],{"id":9943},"產生回應",[80,9945,9947],{"className":82,"code":9946,"language":84,"meta":85,"style":85},"curl http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate -d '{\n  \"model\": \"llama3\",\n  \"prompt\":\"Why is the sky blue?\"\n}'\n",[19,9948,9949,9962,9967,9972],{"__ignoreMap":85},[89,9950,9951,9953,9956,9959],{"class":91,"line":92},[89,9952,2778],{"class":102},[89,9954,9955],{"class":106}," http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate",[89,9957,9958],{"class":110}," -d",[89,9960,9961],{"class":106}," '{\n",[89,9963,9964],{"class":91,"line":99},[89,9965,9966],{"class":106},"  \"model\": \"llama3\",\n",[89,9968,9969],{"class":91,"line":117},[89,9970,9971],{"class":106},"  \"prompt\":\"Why is the sky blue?\"\n",[89,9973,9974],{"class":91,"line":124},[89,9975,9976],{"class":106},"}'\n",[72,9978,9979],{"id":9979},"使用一個模型聊天",[80,9981,9983],{"className":82,"code":9982,"language":84,"meta":85,"style":85},"curl http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fchat -d '{\n  \"model\": \"llama3\",\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"why is the sky blue?\" }\n  ]\n}'\n",[19,9984,9985,9996,10000,10005,10010,10015],{"__ignoreMap":85},[89,9986,9987,9989,9992,9994],{"class":91,"line":92},[89,9988,2778],{"class":102},[89,9990,9991],{"class":106}," http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fchat",[89,9993,9958],{"class":110},[89,9995,9961],{"class":106},[89,9997,9998],{"class":91,"line":99},[89,9999,9966],{"class":106},[89,10001,10002],{"class":91,"line":117},[89,10003,10004],{"class":106},"  \"messages\": [\n",[89,10006,10007],{"class":91,"line":124},[89,10008,10009],{"class":106},"    { \"role\": \"user\", \"content\": \"why is the sky blue?\" }\n",[89,10011,10012],{"class":91,"line":130},[89,10013,10014],{"class":106},"  ]\n",[89,10016,10017],{"class":91,"line":142},[89,10018,9976],{"class":106},[11,10020,10022],{"id":10021},"open-webui-圖型化介面","Open WebUI 圖型化介面",[15,10024,10025,10026,1726,10028,10030,10031,10034,10035,10037],{},"由於 ollama 是開源，所以有不少開源軟體，幫 ollama 製作圖型化介面。而目前站長推薦使用 ",[19,10027,9261],{},[19,10029,9261],{},"的操作介面和 ",[19,10032,10033],{},"chatGPT"," 很接近，是運行在 ",[19,10036,8775],{},"的環境下。",[15,10039,10040,10041,10043,10044,10046,10047,10049],{},"只要安裝好",[19,10042,8776],{},"的環境後和",[19,10045,9225],{},"的服務後，只要執行下列指令就可以開始玩",[19,10048,9225],{},"了",[80,10051,10053],{"className":82,"code":10052,"language":84,"meta":85,"style":85},"docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:\u002Fapp\u002Fbackend\u002Fdata --name open-webui --restart always ghcr.io\u002Fopen-webui\u002Fopen-webui:main\n",[19,10054,10055],{"__ignoreMap":85},[89,10056,10057,10059,10061,10063,10066,10069,10072,10075,10078,10081,10084,10087,10090],{"class":91,"line":92},[89,10058,8775],{"class":102},[89,10060,4026],{"class":106},[89,10062,9958],{"class":110},[89,10064,10065],{"class":110}," -p",[89,10067,10068],{"class":106}," 3000:8080",[89,10070,10071],{"class":110}," --add-host=host.docker.internal:host-gateway",[89,10073,10074],{"class":110}," -v",[89,10076,10077],{"class":106}," open-webui:\u002Fapp\u002Fbackend\u002Fdata",[89,10079,10080],{"class":110}," --name",[89,10082,10083],{"class":106}," open-webui",[89,10085,10086],{"class":110}," --restart",[89,10088,10089],{"class":106}," always",[89,10091,10092],{"class":106}," ghcr.io\u002Fopen-webui\u002Fopen-webui:main\n",[11,10094,10096],{"id":10095},"使用-vscode-插件","使用 VScode 插件",[15,10098,10099,10100,10102,10103,10106,10107],{},"除了用 ",[19,10101,9261],{}," 之外，有在使用 ",[19,10104,10105],{},"VScode"," 編輯器，可以安裝下面插件，就可使用 ",[19,10108,9225],{},[15,10110,10111,10112],{},"插件網址： ",[26,10113,10116],{"href":10114,"rel":10115},"https:\u002F\u002Fwww.continue.dev\u002F",[30],"插件官網",[1728,10118,10119],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":85,"searchDepth":99,"depth":99,"links":10121},[10122,10123,10128,10129,10133,10134],{"id":13,"depth":99,"text":13},{"id":9771,"depth":99,"text":9771,"children":10124},[10125,10126,10127],{"id":9791,"depth":117,"text":9792},{"id":9798,"depth":117,"text":9799},{"id":9820,"depth":117,"text":9821},{"id":9839,"depth":99,"text":9839},{"id":9939,"depth":99,"text":9940,"children":10130},[10131,10132],{"id":9943,"depth":117,"text":9943},{"id":9979,"depth":117,"text":9979},{"id":10021,"depth":99,"text":10022},{"id":10095,"depth":99,"text":10096},"\u002Fimages\u002Farticles\u002F2024-06-07-ollama\u002Fcover.png",{},"\u002Farticles\u002F2024-06-07-ollama","2024-06-07 22:48:30",{"title":9747,"description":85},"articles\u002F2024-06-07-ollama","在 ChatGPT 問世後，大多數科技大廠都推出了自家的語言模型，而有不少開源模型出現。我們可以透過 OLLAMA 在自己的電腦中，建立私有的語言模型服務，並且能夠自由控制和定制模型的性能和功能。",[2438,3116],"msNB0mNO6nmpAdDzC7_7HVLJFs6WFG8kMP_fzndMH6A",{"id":10145,"title":10146,"body":10147,"category":1748,"description":85,"extension":1749,"image":11701,"meta":11702,"navigation":120,"path":11703,"pubDate":11704,"seo":11705,"status":120,"stem":11706,"summary":11707,"tags":11708,"__hash__":11709},"content\u002Farticles\u002F2023-10-04-php-carbon.md","【PHP】如何利用 nesbot\u002Fcarbon 處理日期和時間",{"type":8,"value":10148,"toc":11691},[10149,10151,10160,10175,10178,10235,10238,10246,10249,10353,10355,11177,11180,11229,11232,11688],[11,10150,70],{"id":70},[15,10152,4279,10153,10156,10157],{},[19,10154,10155],{},"composer"," 安裝 ",[19,10158,10159],{},"carbon",[80,10161,10163],{"className":82,"code":10162,"language":84,"meta":85,"style":85},"composer require nesbot\u002Fcarbon\n",[19,10164,10165],{"__ignoreMap":85},[89,10166,10167,10169,10172],{"class":91,"line":92},[89,10168,10155],{"class":102},[89,10170,10171],{"class":106}," require",[89,10173,10174],{"class":106}," nesbot\u002Fcarbon\n",[15,10176,10177],{},"簡易使用範例：",[80,10179,10181],{"className":290,"code":10180,"language":235,"meta":85,"style":85},"require 'vendor\u002Fautoload.php';\n\nuse Carbon\\Carbon;\n\nprintf(\"Now: %s\", Carbon::now());\n",[19,10182,10183,10193,10197,10207,10211],{"__ignoreMap":85},[89,10184,10185,10188,10191],{"class":91,"line":92},[89,10186,10187],{"class":241},"require",[89,10189,10190],{"class":106}," 'vendor\u002Fautoload.php'",[89,10192,552],{"class":306},[89,10194,10195],{"class":91,"line":99},[89,10196,121],{"emptyLinePlaceholder":120},[89,10198,10199,10202,10205],{"class":91,"line":117},[89,10200,10201],{"class":241},"use",[89,10203,10204],{"class":110}," Carbon\\Carbon",[89,10206,552],{"class":306},[89,10208,10209],{"class":91,"line":124},[89,10210,121],{"emptyLinePlaceholder":120},[89,10212,10213,10216,10218,10221,10223,10226,10229,10232],{"class":91,"line":130},[89,10214,10215],{"class":110},"printf",[89,10217,307],{"class":306},[89,10219,10220],{"class":106},"\"Now: %s\"",[89,10222,386],{"class":306},[89,10224,10225],{"class":110},"Carbon",[89,10227,10228],{"class":241},"::",[89,10230,10231],{"class":102},"now",[89,10233,10234],{"class":306},"());\n",[11,10236,10237],{"id":10237},"日期格式化",[47,10239,10240],{},[50,10241,10242,10245],{},[19,10243,10244],{},"format($value)","：將日期時間進行格式化輸出，其中格式",[11,10247,10248],{"id":10248},"取得與調整時間",[47,10250,10251,10257,10263,10269,10275,10287,10298,10309,10320,10331,10342],{},[50,10252,10253,10256],{},[19,10254,10255],{},"now()","：獲得當前的日期與時間",[50,10258,10259,10262],{},[19,10260,10261],{},"today()","：獲得當天的日期",[50,10264,10265,10268],{},[19,10266,10267],{},"tomorrow()","：獲取明天的日期",[50,10270,10271,10274],{},[19,10272,10273],{},"yesterday()","：：獲取昨天的日期",[50,10276,10277,7714,10280,10283,10284],{},[19,10278,10279],{},"addYear($value)",[19,10281,10282],{},"subYear($value)","：將年份增加\u002F減少 ",[19,10285,10286],{},"$value",[50,10288,10289,7714,10292,10295,10296],{},[19,10290,10291],{},"addQuarter($value)",[19,10293,10294],{},"subQuarter($value)","：將季度增加\u002F減少 ",[19,10297,10286],{},[50,10299,10300,7714,10303,10306,10307],{},[19,10301,10302],{},"addMonth($value)",[19,10304,10305],{},"subMonth($value)","：將月份增加\u002F減少 ",[19,10308,10286],{},[50,10310,10311,7714,10314,10317,10318],{},[19,10312,10313],{},"addDay($value)",[19,10315,10316],{},"subDay($value)","：將天數增加\u002F減少 ",[19,10319,10286],{},[50,10321,10322,7714,10325,10328,10329],{},[19,10323,10324],{},"addHour($value)",[19,10326,10327],{},"subHour($value)","：將小時增加\u002F減少 ",[19,10330,10286],{},[50,10332,10333,7714,10336,10339,10340],{},[19,10334,10335],{},"addMinute($value)",[19,10337,10338],{},"subMinute($value)","：將分鐘增加\u002F減少 ",[19,10341,10286],{},[50,10343,10344,7714,10347,10350,10351],{},[19,10345,10346],{},"addSecond($value)",[19,10348,10349],{},"subSecond($value)","：將秒數增加\u002F減少 ",[19,10352,10286],{},[72,10354,9426],{"id":9426},[80,10356,10358],{"className":290,"code":10357,"language":235,"meta":85,"style":85},"use Carbon\\Carbon;\n\n\u002F**\n * ：獲得當前的日期與時間\n *\u002F\necho Carbon::now();\n\n\u002F\u002F印出結果：2023-10-25 07:12:30\n\n\u002F**\n * 獲得當天的日期\n *\u002F\necho Carbon::today()->format(\"Y-m-d\");\n\n\u002F\u002F印出結果：2023-10-25\n\n\u002F**\n * 獲取明天的日期\n *\u002F\n\necho Carbon::tomorrow()->format(\"Y-m-d\");\n\n\u002F\u002F印出結果：2023-10-26\n\n\u002F**\n * 獲取昨天的日期\n *\u002F\n\necho Carbon::yesterday()->format(\"Y-m-d\");\n\n\u002F\u002F印出結果： 2023-10-24\n\n\u002F**\n * 將年份增加\u002F減少 `$value`\n *\u002F\n\necho Carbon::now()->addYear(1)->format(\"Y-m-d H:i:s\");\necho \" \u002F \";\necho Carbon::now()->subYear(1)->format(\"Y-m-d H:i:s\");\n\n\u002F\u002F印出結果： 2024-10-25 07:30:52 \u002F 2022-10-25 07:30:52\n\n\u002F**\n * 將季度增加\u002F減少 `$value`\n *\u002F\n\necho Carbon::now()->addQuarter(1)->format(\"Y-m-d H:i:s\");\necho \" \u002F \";\necho Carbon::now()->subQuarter(1)->format(\"Y-m-d H:i:s\");\n\n\u002F\u002F印出結果：2024-01-25 07:31:57 \u002F 2023-07-25 07:31:57\n\n\u002F**\n * 將月份增加\u002F減少 `$value`\n *\u002F\necho Carbon::now()->subMonth(1)->format(\"Y-m-d H:i:s\");\necho \" \u002F \";\necho Carbon::now()->addMonth(1)->format(\"Y-m-d H:i:s\");\n\n\u002F\u002F印出結果：2023-09-25 07:37:37 \u002F 2023-11-25 07:37:37\n\n\u002F**\n * 將天數增加\u002F減少 `$value`\n *\u002F\necho Carbon::now()->subDay(1)->format(\"Y-m-d H:i:s\");\necho \" \u002F \";\necho Carbon::now()->addDay(1)->format(\"Y-m-d H:i:s\");\n\n\u002F\u002F印出結果：2023-10-24 07:38:45 \u002F 2023-10-26 07:38:45\n\n\u002F**\n * 將小時增加\u002F減少 `$value`\n *\u002F\necho Carbon::now()->subHour(1)->format(\"Y-m-d H:i:s\");\necho \" \u002F \";\necho Carbon::now()->addHour(1)->format(\"Y-m-d H:i:s\");\n\n\u002F\u002F印出結果：2023-10-25 06:48:25 \u002F 2023-10-25 08:48:25\n\n\u002F**\n * 將秒數增加\u002F減少 `$value`\n *\u002F\necho Carbon::now()->subSecond(1)->format(\"Y-m-d H:i:s\");\necho \" \u002F \";\necho Carbon::now()->addSecond(1)->format(\"Y-m-d H:i:s\");\n\n\u002F\u002F印出結果：2023-10-25 07:49:58 \u002F 2023-10-25 07:50:00\n",[19,10359,10360,10368,10372,10377,10382,10387,10400,10404,10409,10413,10417,10422,10426,10452,10456,10461,10465,10469,10474,10478,10482,10505,10509,10514,10518,10522,10527,10531,10535,10558,10562,10567,10571,10575,10580,10584,10588,10622,10631,10664,10668,10673,10677,10681,10686,10690,10694,10727,10735,10768,10772,10777,10781,10785,10790,10794,10827,10835,10868,10872,10877,10881,10885,10890,10894,10927,10935,10968,10972,10977,10981,10985,10990,10994,11027,11035,11068,11072,11077,11081,11085,11090,11094,11127,11135,11168,11172],{"__ignoreMap":85},[89,10361,10362,10364,10366],{"class":91,"line":92},[89,10363,10201],{"class":241},[89,10365,10204],{"class":110},[89,10367,552],{"class":306},[89,10369,10370],{"class":91,"line":99},[89,10371,121],{"emptyLinePlaceholder":120},[89,10373,10374],{"class":91,"line":117},[89,10375,10376],{"class":95},"\u002F**\n",[89,10378,10379],{"class":91,"line":124},[89,10380,10381],{"class":95}," * ：獲得當前的日期與時間\n",[89,10383,10384],{"class":91,"line":130},[89,10385,10386],{"class":95}," *\u002F\n",[89,10388,10389,10391,10394,10396,10398],{"class":91,"line":142},[89,10390,534],{"class":110},[89,10392,10393],{"class":110}," Carbon",[89,10395,10228],{"class":241},[89,10397,10231],{"class":102},[89,10399,523],{"class":306},[89,10401,10402],{"class":91,"line":147},[89,10403,121],{"emptyLinePlaceholder":120},[89,10405,10406],{"class":91,"line":153},[89,10407,10408],{"class":95},"\u002F\u002F印出結果：2023-10-25 07:12:30\n",[89,10410,10411],{"class":91,"line":166},[89,10412,121],{"emptyLinePlaceholder":120},[89,10414,10415],{"class":91,"line":171},[89,10416,10376],{"class":95},[89,10418,10419],{"class":91,"line":177},[89,10420,10421],{"class":95}," * 獲得當天的日期\n",[89,10423,10424],{"class":91,"line":469},[89,10425,10386],{"class":95},[89,10427,10428,10430,10432,10434,10437,10440,10442,10445,10447,10450],{"class":91,"line":489},[89,10429,534],{"class":110},[89,10431,10393],{"class":110},[89,10433,10228],{"class":241},[89,10435,10436],{"class":102},"today",[89,10438,10439],{"class":306},"()",[89,10441,375],{"class":241},[89,10443,10444],{"class":102},"format",[89,10446,307],{"class":306},[89,10448,10449],{"class":106},"\"Y-m-d\"",[89,10451,319],{"class":306},[89,10453,10454],{"class":91,"line":509},[89,10455,121],{"emptyLinePlaceholder":120},[89,10457,10458],{"class":91,"line":515},[89,10459,10460],{"class":95},"\u002F\u002F印出結果：2023-10-25\n",[89,10462,10463],{"class":91,"line":526},[89,10464,121],{"emptyLinePlaceholder":120},[89,10466,10467],{"class":91,"line":531},[89,10468,10376],{"class":95},[89,10470,10471],{"class":91,"line":828},[89,10472,10473],{"class":95}," * 獲取明天的日期\n",[89,10475,10476],{"class":91,"line":834},[89,10477,10386],{"class":95},[89,10479,10480],{"class":91,"line":839},[89,10481,121],{"emptyLinePlaceholder":120},[89,10483,10484,10486,10488,10490,10493,10495,10497,10499,10501,10503],{"class":91,"line":845},[89,10485,534],{"class":110},[89,10487,10393],{"class":110},[89,10489,10228],{"class":241},[89,10491,10492],{"class":102},"tomorrow",[89,10494,10439],{"class":306},[89,10496,375],{"class":241},[89,10498,10444],{"class":102},[89,10500,307],{"class":306},[89,10502,10449],{"class":106},[89,10504,319],{"class":306},[89,10506,10507],{"class":91,"line":3953},[89,10508,121],{"emptyLinePlaceholder":120},[89,10510,10511],{"class":91,"line":3964},[89,10512,10513],{"class":95},"\u002F\u002F印出結果：2023-10-26\n",[89,10515,10516],{"class":91,"line":3975},[89,10517,121],{"emptyLinePlaceholder":120},[89,10519,10520],{"class":91,"line":3980},[89,10521,10376],{"class":95},[89,10523,10524],{"class":91,"line":3986},[89,10525,10526],{"class":95}," * 獲取昨天的日期\n",[89,10528,10529],{"class":91,"line":3996},[89,10530,10386],{"class":95},[89,10532,10533],{"class":91,"line":4010},[89,10534,121],{"emptyLinePlaceholder":120},[89,10536,10537,10539,10541,10543,10546,10548,10550,10552,10554,10556],{"class":91,"line":4015},[89,10538,534],{"class":110},[89,10540,10393],{"class":110},[89,10542,10228],{"class":241},[89,10544,10545],{"class":102},"yesterday",[89,10547,10439],{"class":306},[89,10549,375],{"class":241},[89,10551,10444],{"class":102},[89,10553,307],{"class":306},[89,10555,10449],{"class":106},[89,10557,319],{"class":306},[89,10559,10560],{"class":91,"line":4021},[89,10561,121],{"emptyLinePlaceholder":120},[89,10563,10564],{"class":91,"line":4035},[89,10565,10566],{"class":95},"\u002F\u002F印出結果： 2023-10-24\n",[89,10568,10569],{"class":91,"line":4046},[89,10570,121],{"emptyLinePlaceholder":120},[89,10572,10573],{"class":91,"line":4057},[89,10574,10376],{"class":95},[89,10576,10577],{"class":91,"line":5983},[89,10578,10579],{"class":95}," * 將年份增加\u002F減少 `$value`\n",[89,10581,10582],{"class":91,"line":6015},[89,10583,10386],{"class":95},[89,10585,10586],{"class":91,"line":6026},[89,10587,121],{"emptyLinePlaceholder":120},[89,10589,10590,10592,10594,10596,10598,10600,10602,10605,10607,10609,10611,10613,10615,10617,10620],{"class":91,"line":6037},[89,10591,534],{"class":110},[89,10593,10393],{"class":110},[89,10595,10228],{"class":241},[89,10597,10231],{"class":102},[89,10599,10439],{"class":306},[89,10601,375],{"class":241},[89,10603,10604],{"class":102},"addYear",[89,10606,307],{"class":306},[89,10608,316],{"class":110},[89,10610,1163],{"class":306},[89,10612,375],{"class":241},[89,10614,10444],{"class":102},[89,10616,307],{"class":306},[89,10618,10619],{"class":106},"\"Y-m-d H:i:s\"",[89,10621,319],{"class":306},[89,10623,10624,10626,10629],{"class":91,"line":6048},[89,10625,534],{"class":110},[89,10627,10628],{"class":106}," \" \u002F \"",[89,10630,552],{"class":306},[89,10632,10633,10635,10637,10639,10641,10643,10645,10648,10650,10652,10654,10656,10658,10660,10662],{"class":91,"line":6059},[89,10634,534],{"class":110},[89,10636,10393],{"class":110},[89,10638,10228],{"class":241},[89,10640,10231],{"class":102},[89,10642,10439],{"class":306},[89,10644,375],{"class":241},[89,10646,10647],{"class":102},"subYear",[89,10649,307],{"class":306},[89,10651,316],{"class":110},[89,10653,1163],{"class":306},[89,10655,375],{"class":241},[89,10657,10444],{"class":102},[89,10659,307],{"class":306},[89,10661,10619],{"class":106},[89,10663,319],{"class":306},[89,10665,10666],{"class":91,"line":6070},[89,10667,121],{"emptyLinePlaceholder":120},[89,10669,10670],{"class":91,"line":6082},[89,10671,10672],{"class":95},"\u002F\u002F印出結果： 2024-10-25 07:30:52 \u002F 2022-10-25 07:30:52\n",[89,10674,10675],{"class":91,"line":6087},[89,10676,121],{"emptyLinePlaceholder":120},[89,10678,10679],{"class":91,"line":6092},[89,10680,10376],{"class":95},[89,10682,10683],{"class":91,"line":6099},[89,10684,10685],{"class":95}," * 將季度增加\u002F減少 `$value`\n",[89,10687,10688],{"class":91,"line":6110},[89,10689,10386],{"class":95},[89,10691,10692],{"class":91,"line":6135},[89,10693,121],{"emptyLinePlaceholder":120},[89,10695,10696,10698,10700,10702,10704,10706,10708,10711,10713,10715,10717,10719,10721,10723,10725],{"class":91,"line":6140},[89,10697,534],{"class":110},[89,10699,10393],{"class":110},[89,10701,10228],{"class":241},[89,10703,10231],{"class":102},[89,10705,10439],{"class":306},[89,10707,375],{"class":241},[89,10709,10710],{"class":102},"addQuarter",[89,10712,307],{"class":306},[89,10714,316],{"class":110},[89,10716,1163],{"class":306},[89,10718,375],{"class":241},[89,10720,10444],{"class":102},[89,10722,307],{"class":306},[89,10724,10619],{"class":106},[89,10726,319],{"class":306},[89,10728,10729,10731,10733],{"class":91,"line":6145},[89,10730,534],{"class":110},[89,10732,10628],{"class":106},[89,10734,552],{"class":306},[89,10736,10737,10739,10741,10743,10745,10747,10749,10752,10754,10756,10758,10760,10762,10764,10766],{"class":91,"line":6152},[89,10738,534],{"class":110},[89,10740,10393],{"class":110},[89,10742,10228],{"class":241},[89,10744,10231],{"class":102},[89,10746,10439],{"class":306},[89,10748,375],{"class":241},[89,10750,10751],{"class":102},"subQuarter",[89,10753,307],{"class":306},[89,10755,316],{"class":110},[89,10757,1163],{"class":306},[89,10759,375],{"class":241},[89,10761,10444],{"class":102},[89,10763,307],{"class":306},[89,10765,10619],{"class":106},[89,10767,319],{"class":306},[89,10769,10770],{"class":91,"line":6165},[89,10771,121],{"emptyLinePlaceholder":120},[89,10773,10774],{"class":91,"line":6170},[89,10775,10776],{"class":95},"\u002F\u002F印出結果：2024-01-25 07:31:57 \u002F 2023-07-25 07:31:57\n",[89,10778,10779],{"class":91,"line":6175},[89,10780,121],{"emptyLinePlaceholder":120},[89,10782,10783],{"class":91,"line":6180},[89,10784,10376],{"class":95},[89,10786,10787],{"class":91,"line":6190},[89,10788,10789],{"class":95}," * 將月份增加\u002F減少 `$value`\n",[89,10791,10792],{"class":91,"line":6231},[89,10793,10386],{"class":95},[89,10795,10796,10798,10800,10802,10804,10806,10808,10811,10813,10815,10817,10819,10821,10823,10825],{"class":91,"line":6242},[89,10797,534],{"class":110},[89,10799,10393],{"class":110},[89,10801,10228],{"class":241},[89,10803,10231],{"class":102},[89,10805,10439],{"class":306},[89,10807,375],{"class":241},[89,10809,10810],{"class":102},"subMonth",[89,10812,307],{"class":306},[89,10814,316],{"class":110},[89,10816,1163],{"class":306},[89,10818,375],{"class":241},[89,10820,10444],{"class":102},[89,10822,307],{"class":306},[89,10824,10619],{"class":106},[89,10826,319],{"class":306},[89,10828,10829,10831,10833],{"class":91,"line":6253},[89,10830,534],{"class":110},[89,10832,10628],{"class":106},[89,10834,552],{"class":306},[89,10836,10837,10839,10841,10843,10845,10847,10849,10852,10854,10856,10858,10860,10862,10864,10866],{"class":91,"line":6264},[89,10838,534],{"class":110},[89,10840,10393],{"class":110},[89,10842,10228],{"class":241},[89,10844,10231],{"class":102},[89,10846,10439],{"class":306},[89,10848,375],{"class":241},[89,10850,10851],{"class":102},"addMonth",[89,10853,307],{"class":306},[89,10855,316],{"class":110},[89,10857,1163],{"class":306},[89,10859,375],{"class":241},[89,10861,10444],{"class":102},[89,10863,307],{"class":306},[89,10865,10619],{"class":106},[89,10867,319],{"class":306},[89,10869,10870],{"class":91,"line":6275},[89,10871,121],{"emptyLinePlaceholder":120},[89,10873,10874],{"class":91,"line":6286},[89,10875,10876],{"class":95},"\u002F\u002F印出結果：2023-09-25 07:37:37 \u002F 2023-11-25 07:37:37\n",[89,10878,10879],{"class":91,"line":6297},[89,10880,121],{"emptyLinePlaceholder":120},[89,10882,10883],{"class":91,"line":6310},[89,10884,10376],{"class":95},[89,10886,10887],{"class":91,"line":6315},[89,10888,10889],{"class":95}," * 將天數增加\u002F減少 `$value`\n",[89,10891,10892],{"class":91,"line":6320},[89,10893,10386],{"class":95},[89,10895,10896,10898,10900,10902,10904,10906,10908,10911,10913,10915,10917,10919,10921,10923,10925],{"class":91,"line":6327},[89,10897,534],{"class":110},[89,10899,10393],{"class":110},[89,10901,10228],{"class":241},[89,10903,10231],{"class":102},[89,10905,10439],{"class":306},[89,10907,375],{"class":241},[89,10909,10910],{"class":102},"subDay",[89,10912,307],{"class":306},[89,10914,316],{"class":110},[89,10916,1163],{"class":306},[89,10918,375],{"class":241},[89,10920,10444],{"class":102},[89,10922,307],{"class":306},[89,10924,10619],{"class":106},[89,10926,319],{"class":306},[89,10928,10929,10931,10933],{"class":91,"line":6338},[89,10930,534],{"class":110},[89,10932,10628],{"class":106},[89,10934,552],{"class":306},[89,10936,10937,10939,10941,10943,10945,10947,10949,10952,10954,10956,10958,10960,10962,10964,10966],{"class":91,"line":6363},[89,10938,534],{"class":110},[89,10940,10393],{"class":110},[89,10942,10228],{"class":241},[89,10944,10231],{"class":102},[89,10946,10439],{"class":306},[89,10948,375],{"class":241},[89,10950,10951],{"class":102},"addDay",[89,10953,307],{"class":306},[89,10955,316],{"class":110},[89,10957,1163],{"class":306},[89,10959,375],{"class":241},[89,10961,10444],{"class":102},[89,10963,307],{"class":306},[89,10965,10619],{"class":106},[89,10967,319],{"class":306},[89,10969,10970],{"class":91,"line":6368},[89,10971,121],{"emptyLinePlaceholder":120},[89,10973,10974],{"class":91,"line":6373},[89,10975,10976],{"class":95},"\u002F\u002F印出結果：2023-10-24 07:38:45 \u002F 2023-10-26 07:38:45\n",[89,10978,10979],{"class":91,"line":6380},[89,10980,121],{"emptyLinePlaceholder":120},[89,10982,10983],{"class":91,"line":6393},[89,10984,10376],{"class":95},[89,10986,10987],{"class":91,"line":6398},[89,10988,10989],{"class":95}," * 將小時增加\u002F減少 `$value`\n",[89,10991,10992],{"class":91,"line":6403},[89,10993,10386],{"class":95},[89,10995,10996,10998,11000,11002,11004,11006,11008,11011,11013,11015,11017,11019,11021,11023,11025],{"class":91,"line":6408},[89,10997,534],{"class":110},[89,10999,10393],{"class":110},[89,11001,10228],{"class":241},[89,11003,10231],{"class":102},[89,11005,10439],{"class":306},[89,11007,375],{"class":241},[89,11009,11010],{"class":102},"subHour",[89,11012,307],{"class":306},[89,11014,316],{"class":110},[89,11016,1163],{"class":306},[89,11018,375],{"class":241},[89,11020,10444],{"class":102},[89,11022,307],{"class":306},[89,11024,10619],{"class":106},[89,11026,319],{"class":306},[89,11028,11029,11031,11033],{"class":91,"line":6459},[89,11030,534],{"class":110},[89,11032,10628],{"class":106},[89,11034,552],{"class":306},[89,11036,11037,11039,11041,11043,11045,11047,11049,11052,11054,11056,11058,11060,11062,11064,11066],{"class":91,"line":6472},[89,11038,534],{"class":110},[89,11040,10393],{"class":110},[89,11042,10228],{"class":241},[89,11044,10231],{"class":102},[89,11046,10439],{"class":306},[89,11048,375],{"class":241},[89,11050,11051],{"class":102},"addHour",[89,11053,307],{"class":306},[89,11055,316],{"class":110},[89,11057,1163],{"class":306},[89,11059,375],{"class":241},[89,11061,10444],{"class":102},[89,11063,307],{"class":306},[89,11065,10619],{"class":106},[89,11067,319],{"class":306},[89,11069,11070],{"class":91,"line":6484},[89,11071,121],{"emptyLinePlaceholder":120},[89,11073,11074],{"class":91,"line":6489},[89,11075,11076],{"class":95},"\u002F\u002F印出結果：2023-10-25 06:48:25 \u002F 2023-10-25 08:48:25\n",[89,11078,11079],{"class":91,"line":6500},[89,11080,121],{"emptyLinePlaceholder":120},[89,11082,11083],{"class":91,"line":6531},[89,11084,10376],{"class":95},[89,11086,11087],{"class":91,"line":6556},[89,11088,11089],{"class":95}," * 將秒數增加\u002F減少 `$value`\n",[89,11091,11092],{"class":91,"line":6577},[89,11093,10386],{"class":95},[89,11095,11096,11098,11100,11102,11104,11106,11108,11111,11113,11115,11117,11119,11121,11123,11125],{"class":91,"line":6601},[89,11097,534],{"class":110},[89,11099,10393],{"class":110},[89,11101,10228],{"class":241},[89,11103,10231],{"class":102},[89,11105,10439],{"class":306},[89,11107,375],{"class":241},[89,11109,11110],{"class":102},"subSecond",[89,11112,307],{"class":306},[89,11114,316],{"class":110},[89,11116,1163],{"class":306},[89,11118,375],{"class":241},[89,11120,10444],{"class":102},[89,11122,307],{"class":306},[89,11124,10619],{"class":106},[89,11126,319],{"class":306},[89,11128,11129,11131,11133],{"class":91,"line":6624},[89,11130,534],{"class":110},[89,11132,10628],{"class":106},[89,11134,552],{"class":306},[89,11136,11137,11139,11141,11143,11145,11147,11149,11152,11154,11156,11158,11160,11162,11164,11166],{"class":91,"line":6651},[89,11138,534],{"class":110},[89,11140,10393],{"class":110},[89,11142,10228],{"class":241},[89,11144,10231],{"class":102},[89,11146,10439],{"class":306},[89,11148,375],{"class":241},[89,11150,11151],{"class":102},"addSecond",[89,11153,307],{"class":306},[89,11155,316],{"class":110},[89,11157,1163],{"class":306},[89,11159,375],{"class":241},[89,11161,10444],{"class":102},[89,11163,307],{"class":306},[89,11165,10619],{"class":106},[89,11167,319],{"class":306},[89,11169,11170],{"class":91,"line":6666},[89,11171,121],{"emptyLinePlaceholder":120},[89,11173,11174],{"class":91,"line":6685},[89,11175,11176],{"class":95},"\u002F\u002F印出結果：2023-10-25 07:49:58 \u002F 2023-10-25 07:50:00\n",[11,11178,11179],{"id":11179},"比較時間",[47,11181,11182,11192,11200,11208,11216],{},[50,11183,11184,11187,11188,11191],{},[19,11185,11186],{},"eq($datetime)","：是否等於 ",[19,11189,11190],{},"$datetime","，回傳布林值",[50,11193,11194,11197,11198,11191],{},[19,11195,11196],{},"ne($datetime)","：是否不等於 ",[19,11199,11190],{},[50,11201,11202,11205,11206,11191],{},[19,11203,11204],{},"gt($datetime)","：是否大於 ",[19,11207,11190],{},[50,11209,11210,11213,11214,11191],{},[19,11211,11212],{},"lt($datetime)","：是否小於 ",[19,11215,11190],{},[50,11217,11218,11221,11222,1702,11225,11228],{},[19,11219,11220],{},"between($startTime, $endTime)","：是否介於 ",[19,11223,11224],{},"$startTime",[19,11226,11227],{},"$endTime"," 之間，回傳布林值",[72,11230,9426],{"id":11231},"範例-1",[80,11233,11235],{"className":290,"code":11234,"language":235,"meta":85,"style":85},"use Carbon\\Carbon;\n\n\u002F**\n * 比較兩個時間，是否相等\n *\u002F\nvar_dump(Carbon::today()->eq(Carbon::today()));\n\u002F\u002F印出結果：bool(true)\nvar_dump(Carbon::today()->eq(Carbon::now()));\n\u002F\u002F印出結果：bool(false)\n\n\u002F**\n * 比較兩個時間，是否不相等\n *\u002F\nvar_dump(Carbon::today()->ne(Carbon::today()));\n\u002F\u002F印出結果：bool(false)\nvar_dump(Carbon::today()->ne(Carbon::tomorrow()));\n\u002F\u002F印出結果：bool(true)\n\n\u002F**\n * 比較兩個時間，是否大於\n *\u002F\nvar_dump(Carbon::tomorrow()->gt(Carbon::now()));\n\u002F\u002F印出結果：bool(true)\nvar_dump(Carbon::now()->gt(Carbon::tomorrow()));\n\u002F\u002F印出結果：bool(false)\n\n\u002F**\n * 比較兩個時間，是否小於\n *\u002F\nvar_dump(Carbon::now()->lt(Carbon::tomorrow()));\n\u002F\u002F印出結果：bool(true)\nvar_dump(Carbon::tomorrow()->lt(Carbon::now()));\n\u002F\u002F印出結果：bool(false)\n\n\u002F**\n * 是否介於 `$startTime`、`$endTime` 之間\n *\u002F\nvar_dump(Carbon::now()->between(Carbon::yesterday(), Carbon::tomorrow()));\n\u002F\u002F 印出結果：bool(true)\nvar_dump(Carbon::now()->addDay(2)->between(Carbon::yesterday(), Carbon::tomorrow()));\n\u002F\u002F 印出結果：bool(false)\n",[19,11236,11237,11245,11249,11253,11258,11262,11293,11298,11326,11331,11335,11339,11344,11348,11377,11381,11409,11413,11417,11421,11426,11430,11459,11463,11491,11495,11499,11503,11508,11512,11541,11545,11573,11577,11581,11585,11590,11594,11632,11637,11683],{"__ignoreMap":85},[89,11238,11239,11241,11243],{"class":91,"line":92},[89,11240,10201],{"class":241},[89,11242,10204],{"class":110},[89,11244,552],{"class":306},[89,11246,11247],{"class":91,"line":99},[89,11248,121],{"emptyLinePlaceholder":120},[89,11250,11251],{"class":91,"line":117},[89,11252,10376],{"class":95},[89,11254,11255],{"class":91,"line":124},[89,11256,11257],{"class":95}," * 比較兩個時間，是否相等\n",[89,11259,11260],{"class":91,"line":130},[89,11261,10386],{"class":95},[89,11263,11264,11267,11269,11271,11273,11275,11277,11279,11282,11284,11286,11288,11290],{"class":91,"line":142},[89,11265,11266],{"class":110},"var_dump",[89,11268,307],{"class":306},[89,11270,10225],{"class":110},[89,11272,10228],{"class":241},[89,11274,10436],{"class":102},[89,11276,10439],{"class":306},[89,11278,375],{"class":241},[89,11280,11281],{"class":102},"eq",[89,11283,307],{"class":306},[89,11285,10225],{"class":110},[89,11287,10228],{"class":241},[89,11289,10436],{"class":102},[89,11291,11292],{"class":306},"()));\n",[89,11294,11295],{"class":91,"line":147},[89,11296,11297],{"class":95},"\u002F\u002F印出結果：bool(true)\n",[89,11299,11300,11302,11304,11306,11308,11310,11312,11314,11316,11318,11320,11322,11324],{"class":91,"line":153},[89,11301,11266],{"class":110},[89,11303,307],{"class":306},[89,11305,10225],{"class":110},[89,11307,10228],{"class":241},[89,11309,10436],{"class":102},[89,11311,10439],{"class":306},[89,11313,375],{"class":241},[89,11315,11281],{"class":102},[89,11317,307],{"class":306},[89,11319,10225],{"class":110},[89,11321,10228],{"class":241},[89,11323,10231],{"class":102},[89,11325,11292],{"class":306},[89,11327,11328],{"class":91,"line":166},[89,11329,11330],{"class":95},"\u002F\u002F印出結果：bool(false)\n",[89,11332,11333],{"class":91,"line":171},[89,11334,121],{"emptyLinePlaceholder":120},[89,11336,11337],{"class":91,"line":177},[89,11338,10376],{"class":95},[89,11340,11341],{"class":91,"line":469},[89,11342,11343],{"class":95}," * 比較兩個時間，是否不相等\n",[89,11345,11346],{"class":91,"line":489},[89,11347,10386],{"class":95},[89,11349,11350,11352,11354,11356,11358,11360,11362,11364,11367,11369,11371,11373,11375],{"class":91,"line":509},[89,11351,11266],{"class":110},[89,11353,307],{"class":306},[89,11355,10225],{"class":110},[89,11357,10228],{"class":241},[89,11359,10436],{"class":102},[89,11361,10439],{"class":306},[89,11363,375],{"class":241},[89,11365,11366],{"class":102},"ne",[89,11368,307],{"class":306},[89,11370,10225],{"class":110},[89,11372,10228],{"class":241},[89,11374,10436],{"class":102},[89,11376,11292],{"class":306},[89,11378,11379],{"class":91,"line":515},[89,11380,11330],{"class":95},[89,11382,11383,11385,11387,11389,11391,11393,11395,11397,11399,11401,11403,11405,11407],{"class":91,"line":526},[89,11384,11266],{"class":110},[89,11386,307],{"class":306},[89,11388,10225],{"class":110},[89,11390,10228],{"class":241},[89,11392,10436],{"class":102},[89,11394,10439],{"class":306},[89,11396,375],{"class":241},[89,11398,11366],{"class":102},[89,11400,307],{"class":306},[89,11402,10225],{"class":110},[89,11404,10228],{"class":241},[89,11406,10492],{"class":102},[89,11408,11292],{"class":306},[89,11410,11411],{"class":91,"line":531},[89,11412,11297],{"class":95},[89,11414,11415],{"class":91,"line":828},[89,11416,121],{"emptyLinePlaceholder":120},[89,11418,11419],{"class":91,"line":834},[89,11420,10376],{"class":95},[89,11422,11423],{"class":91,"line":839},[89,11424,11425],{"class":95}," * 比較兩個時間，是否大於\n",[89,11427,11428],{"class":91,"line":845},[89,11429,10386],{"class":95},[89,11431,11432,11434,11436,11438,11440,11442,11444,11446,11449,11451,11453,11455,11457],{"class":91,"line":3953},[89,11433,11266],{"class":110},[89,11435,307],{"class":306},[89,11437,10225],{"class":110},[89,11439,10228],{"class":241},[89,11441,10492],{"class":102},[89,11443,10439],{"class":306},[89,11445,375],{"class":241},[89,11447,11448],{"class":102},"gt",[89,11450,307],{"class":306},[89,11452,10225],{"class":110},[89,11454,10228],{"class":241},[89,11456,10231],{"class":102},[89,11458,11292],{"class":306},[89,11460,11461],{"class":91,"line":3964},[89,11462,11297],{"class":95},[89,11464,11465,11467,11469,11471,11473,11475,11477,11479,11481,11483,11485,11487,11489],{"class":91,"line":3975},[89,11466,11266],{"class":110},[89,11468,307],{"class":306},[89,11470,10225],{"class":110},[89,11472,10228],{"class":241},[89,11474,10231],{"class":102},[89,11476,10439],{"class":306},[89,11478,375],{"class":241},[89,11480,11448],{"class":102},[89,11482,307],{"class":306},[89,11484,10225],{"class":110},[89,11486,10228],{"class":241},[89,11488,10492],{"class":102},[89,11490,11292],{"class":306},[89,11492,11493],{"class":91,"line":3980},[89,11494,11330],{"class":95},[89,11496,11497],{"class":91,"line":3986},[89,11498,121],{"emptyLinePlaceholder":120},[89,11500,11501],{"class":91,"line":3996},[89,11502,10376],{"class":95},[89,11504,11505],{"class":91,"line":4010},[89,11506,11507],{"class":95}," * 比較兩個時間，是否小於\n",[89,11509,11510],{"class":91,"line":4015},[89,11511,10386],{"class":95},[89,11513,11514,11516,11518,11520,11522,11524,11526,11528,11531,11533,11535,11537,11539],{"class":91,"line":4021},[89,11515,11266],{"class":110},[89,11517,307],{"class":306},[89,11519,10225],{"class":110},[89,11521,10228],{"class":241},[89,11523,10231],{"class":102},[89,11525,10439],{"class":306},[89,11527,375],{"class":241},[89,11529,11530],{"class":102},"lt",[89,11532,307],{"class":306},[89,11534,10225],{"class":110},[89,11536,10228],{"class":241},[89,11538,10492],{"class":102},[89,11540,11292],{"class":306},[89,11542,11543],{"class":91,"line":4035},[89,11544,11297],{"class":95},[89,11546,11547,11549,11551,11553,11555,11557,11559,11561,11563,11565,11567,11569,11571],{"class":91,"line":4046},[89,11548,11266],{"class":110},[89,11550,307],{"class":306},[89,11552,10225],{"class":110},[89,11554,10228],{"class":241},[89,11556,10492],{"class":102},[89,11558,10439],{"class":306},[89,11560,375],{"class":241},[89,11562,11530],{"class":102},[89,11564,307],{"class":306},[89,11566,10225],{"class":110},[89,11568,10228],{"class":241},[89,11570,10231],{"class":102},[89,11572,11292],{"class":306},[89,11574,11575],{"class":91,"line":4057},[89,11576,11330],{"class":95},[89,11578,11579],{"class":91,"line":5983},[89,11580,121],{"emptyLinePlaceholder":120},[89,11582,11583],{"class":91,"line":6015},[89,11584,10376],{"class":95},[89,11586,11587],{"class":91,"line":6026},[89,11588,11589],{"class":95}," * 是否介於 `$startTime`、`$endTime` 之間\n",[89,11591,11592],{"class":91,"line":6037},[89,11593,10386],{"class":95},[89,11595,11596,11598,11600,11602,11604,11606,11608,11610,11613,11615,11617,11619,11621,11624,11626,11628,11630],{"class":91,"line":6048},[89,11597,11266],{"class":110},[89,11599,307],{"class":306},[89,11601,10225],{"class":110},[89,11603,10228],{"class":241},[89,11605,10231],{"class":102},[89,11607,10439],{"class":306},[89,11609,375],{"class":241},[89,11611,11612],{"class":102},"between",[89,11614,307],{"class":306},[89,11616,10225],{"class":110},[89,11618,10228],{"class":241},[89,11620,10545],{"class":102},[89,11622,11623],{"class":306},"(), ",[89,11625,10225],{"class":110},[89,11627,10228],{"class":241},[89,11629,10492],{"class":102},[89,11631,11292],{"class":306},[89,11633,11634],{"class":91,"line":6059},[89,11635,11636],{"class":95},"\u002F\u002F 印出結果：bool(true)\n",[89,11638,11639,11641,11643,11645,11647,11649,11651,11653,11655,11657,11659,11661,11663,11665,11667,11669,11671,11673,11675,11677,11679,11681],{"class":91,"line":6070},[89,11640,11266],{"class":110},[89,11642,307],{"class":306},[89,11644,10225],{"class":110},[89,11646,10228],{"class":241},[89,11648,10231],{"class":102},[89,11650,10439],{"class":306},[89,11652,375],{"class":241},[89,11654,10951],{"class":102},[89,11656,307],{"class":306},[89,11658,808],{"class":110},[89,11660,1163],{"class":306},[89,11662,375],{"class":241},[89,11664,11612],{"class":102},[89,11666,307],{"class":306},[89,11668,10225],{"class":110},[89,11670,10228],{"class":241},[89,11672,10545],{"class":102},[89,11674,11623],{"class":306},[89,11676,10225],{"class":110},[89,11678,10228],{"class":241},[89,11680,10492],{"class":102},[89,11682,11292],{"class":306},[89,11684,11685],{"class":91,"line":6082},[89,11686,11687],{"class":95},"\u002F\u002F 印出結果：bool(false)\n",[1728,11689,11690],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":85,"searchDepth":99,"depth":99,"links":11692},[11693,11694,11695,11698],{"id":70,"depth":99,"text":70},{"id":10237,"depth":99,"text":10237},{"id":10248,"depth":99,"text":10248,"children":11696},[11697],{"id":9426,"depth":117,"text":9426},{"id":11179,"depth":99,"text":11179,"children":11699},[11700],{"id":11231,"depth":117,"text":9426},"\u002Fimages\u002Farticles\u002F2023-10-04-php-carbon\u002Fcover.png",{},"\u002Farticles\u002F2023-10-04-php-carbon","2023-10-04 18:34:00",{"title":10146,"description":85},"articles\u002F2023-10-04-php-carbon","PHP語言在處理日期和時間時，Carbon 套件是一個非常有用的工具。Carbon 套件繼承了原生的 Datetime，並新增了許多語意化的行為，讓處理時間的難度降低許多。在這篇教學中，將會介紹 Carbon 套件的基本使用方法，以及如何在 PHP 中使用 Carbon 套件來處理日期和時間。",[235],"Xh7cdroYoCQtQdwWDDM6GaqTsi98DBN_3I6O6Srqow4",{"id":11711,"title":11712,"body":11713,"category":1748,"description":85,"extension":1749,"image":11791,"meta":11792,"navigation":120,"path":11793,"pubDate":11704,"seo":11794,"status":120,"stem":11795,"summary":11796,"tags":11797,"__hash__":11799},"content\u002Farticles\u002F2024-05-01-telegram-bot-get-chat-id.md","如何取得 Telegram Bot 所有的 Chat ID",{"type":8,"value":11714,"toc":11784},[11715,11719,11722,11726,11733,11738,11741,11745,11748,11752,11759,11763,11772],[11,11716,11718],{"id":11717},"步驟1-創建-telegram-bot-並獲取-api-token","步驟1: 創建 Telegram Bot 並獲取 API Token",[15,11720,11721],{},"首先,我們需要透過 Telegram 的 @BotFather 創建一個新的 Bot,並獲取該 Bot 的 API Token。API Token 是一個類似於 \"123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11\" 的字串,用於向 Telegram 的 API 服務器進行身份驗證。",[11,11723,11725],{"id":11724},"步驟2-使用-getupdates-方法獲取更新","步驟2: 使用 getUpdates 方法獲取更新",[15,11727,11728,11729],{},"接下來,我們可以在瀏覽器中訪問以下 URL,將 ",[11730,11731,11732],"token",{}," 替換為你的 API Token:",[15,11734,11735],{},[19,11736,11737],{},"https:\u002F\u002Fapi.telegram.org\u002Fbot\u003Ctoken>\u002FgetUpdates",[15,11739,11740],{},"這將返回一個 JSON 格式的數據,包含了最近的更新。",[11,11742,11744],{"id":11743},"步驟3-從更新中提取-chat-id","步驟3: 從更新中提取 Chat ID",[15,11746,11747],{},"在返回的 JSON 數據中,查找 \"result\" 數組。每個元素代表一個更新,其中包含 \"message\" 或 \"channel_post\" 對象。在這些對象中,可以找到 \"chat\" 對象,其 \"id\" 字段就是該會話的 Chat ID。\n對於私人會話,Chat ID 為正整數。對於群組,Chat ID 為負數,需要在前面加 \"-100\"。",[11,11749,11751],{"id":11750},"步驟4-儲存所有-chat-id","步驟4: 儲存所有 Chat ID",[15,11753,11754,11755,11758],{},"遍歷所有更新的 \"chat\" 對象,獲取並儲存所有的 Chat ID。需要注意的是,",[19,11756,11757],{},"getUpdates"," 只能獲取最近的更新,如果要獲取所有的 Chat ID,可能需要多次調用該方法。",[11,11760,11762],{"id":11761},"在-php-語言中如何快速取得","在 PHP 語言中，如何快速取得",[15,11764,11765,11766,11771],{},"可使用 ",[26,11767,11770],{"href":11768,"rel":11769},"https:\u002F\u002Fgithub.com\u002Fphp-telegram-bot\u002Fcore",[30],"php-telegram-bot\u002Fcore"," 這個套件處理。",[15,11773,11774,11775,11778,11779],{},"透過 Webhook 方式，使用 ",[19,11776,11777],{},"getupdates"," 函式來取得 chat id, 可參考 ",[26,11780,11783],{"href":11781,"rel":11782},"https:\u002F\u002Fgithub.com\u002Fphp-telegram-bot\u002Fcore?tab=readme-ov-file#getupdates-installation",[30],"官方教學",{"title":85,"searchDepth":99,"depth":99,"links":11785},[11786,11787,11788,11789,11790],{"id":11717,"depth":99,"text":11718},{"id":11724,"depth":99,"text":11725},{"id":11743,"depth":99,"text":11744},{"id":11750,"depth":99,"text":11751},{"id":11761,"depth":99,"text":11762},"\u002Fimages\u002Farticles\u002F2024-05-01-telegram-bot-get-chat-id\u002Fcover.png",{},"\u002Farticles\u002F2024-05-01-telegram-bot-get-chat-id",{"title":11712,"description":85},"articles\u002F2024-05-01-telegram-bot-get-chat-id","在開發 Telegram Bot 時,有時候我們需要獲取所有與 Bot 互動過的 Chat ID,無論是私人對話還是群組對話。取得這些 Chat ID 對於發送廣播消息或管理會話非常有用。本文將詳細介紹如何透過 Telegram Bot API 獲取所有的 Chat ID。",[11798,235],"Telegram","NGatZI0ync1nfpUr5-l0cWDQlW30EzCC3zULFpvSyyw",{"id":11801,"title":11802,"body":11803,"category":1748,"description":85,"extension":1749,"image":12678,"meta":12679,"navigation":120,"path":12680,"pubDate":12681,"seo":12682,"status":120,"stem":12683,"summary":12684,"tags":12685,"__hash__":12686},"content\u002Farticles\u002F2023-05-07-go-function.md","《Go 學習筆記6》函式",{"type":8,"value":11804,"toc":12674},[11805,11810,11813,11816,11877,11881,12011,12015,12036,12040,12088,12092,12220,12224,12233,12237,12242,12309,12313,12642,12646,12671],[862,11806,11807],{},[15,11808,11809],{},"這是自學 Go lang 的筆記，若內容有誤，請留言區提醒，我會儘快改正，謝謝",[15,11811,11812],{},"在 Go 語中，為了可以重復使用某個程式碼片段，我們使用函式 (function) 來進實作。而在 Go 語言中，function 可以輸入多個參數值，也可以回傳多個參數值",[15,11814,11815],{},"##無 return 函式",[80,11817,11821],{"className":11818,"code":11819,"language":11820,"meta":85,"style":85},"language-go shiki shiki-themes github-light github-dark github-dark","func 函式名 (參數1 變數型態, 參數2 變數型態, ...) {\n    \u002F\u002F執行程式片段\n}\n\n\u002F\u002F呼叫方式\n函式名(參數1, 參數2)\n","go",[19,11822,11823,11851,11856,11860,11864,11869],{"__ignoreMap":85},[89,11824,11825,11828,11831,11834,11837,11839,11842,11844,11846,11849],{"class":91,"line":92},[89,11826,11827],{"class":241},"func",[89,11829,11830],{"class":306}," 函式名 (",[89,11832,11833],{"class":5691},"參數1",[89,11835,11836],{"class":102}," 變數型態",[89,11838,386],{"class":306},[89,11840,11841],{"class":5691},"參數2",[89,11843,11836],{"class":102},[89,11845,386],{"class":306},[89,11847,11848],{"class":241},"...",[89,11850,732],{"class":306},[89,11852,11853],{"class":91,"line":99},[89,11854,11855],{"class":95},"    \u002F\u002F執行程式片段\n",[89,11857,11858],{"class":91,"line":117},[89,11859,831],{"class":306},[89,11861,11862],{"class":91,"line":124},[89,11863,121],{"emptyLinePlaceholder":120},[89,11865,11866],{"class":91,"line":130},[89,11867,11868],{"class":95},"\u002F\u002F呼叫方式\n",[89,11870,11871,11874],{"class":91,"line":142},[89,11872,11873],{"class":102},"函式名",[89,11875,11876],{"class":306},"(參數1, 參數2)\n",[15,11878,11879],{},[2510,11880,9426],{},[80,11882,11884],{"className":11818,"code":11883,"language":11820,"meta":85,"style":85},"package main\nimport \"fmt\"\nfunc main() {\n    hello(\"Allen\", 23)\n}\n\nfunc hello(name string, age int8) {\n    fmt.Printf(\"Hello %s\\r\\n\", name)\n    fmt.Printf(\"年紀 %d\\r\\n\", age)\n}\n",[19,11885,11886,11894,11908,11917,11934,11938,11942,11967,11988,12007],{"__ignoreMap":85},[89,11887,11888,11891],{"class":91,"line":92},[89,11889,11890],{"class":241},"package",[89,11892,11893],{"class":102}," main\n",[89,11895,11896,11899,11902,11905],{"class":91,"line":99},[89,11897,11898],{"class":241},"import",[89,11900,11901],{"class":106}," \"",[89,11903,11904],{"class":102},"fmt",[89,11906,11907],{"class":106},"\"\n",[89,11909,11910,11912,11915],{"class":91,"line":117},[89,11911,11827],{"class":241},[89,11913,11914],{"class":102}," main",[89,11916,5806],{"class":306},[89,11918,11919,11922,11924,11927,11929,11932],{"class":91,"line":124},[89,11920,11921],{"class":102},"    hello",[89,11923,307],{"class":306},[89,11925,11926],{"class":106},"\"Allen\"",[89,11928,386],{"class":306},[89,11930,11931],{"class":110},"23",[89,11933,392],{"class":306},[89,11935,11936],{"class":91,"line":130},[89,11937,831],{"class":306},[89,11939,11940],{"class":91,"line":142},[89,11941,121],{"emptyLinePlaceholder":120},[89,11943,11944,11946,11949,11951,11954,11957,11959,11962,11965],{"class":91,"line":147},[89,11945,11827],{"class":241},[89,11947,11948],{"class":102}," hello",[89,11950,307],{"class":306},[89,11952,11953],{"class":5691},"name",[89,11955,11956],{"class":241}," string",[89,11958,386],{"class":306},[89,11960,11961],{"class":5691},"age",[89,11963,11964],{"class":241}," int8",[89,11966,732],{"class":306},[89,11968,11969,11972,11975,11977,11980,11983,11985],{"class":91,"line":153},[89,11970,11971],{"class":306},"    fmt.",[89,11973,11974],{"class":102},"Printf",[89,11976,307],{"class":306},[89,11978,11979],{"class":106},"\"Hello ",[89,11981,11982],{"class":110},"%s\\r\\n",[89,11984,549],{"class":106},[89,11986,11987],{"class":306},", name)\n",[89,11989,11990,11992,11994,11996,11999,12002,12004],{"class":91,"line":166},[89,11991,11971],{"class":306},[89,11993,11974],{"class":102},[89,11995,307],{"class":306},[89,11997,11998],{"class":106},"\"年紀 ",[89,12000,12001],{"class":110},"%d\\r\\n",[89,12003,549],{"class":106},[89,12005,12006],{"class":306},", age)\n",[89,12008,12009],{"class":91,"line":171},[89,12010,831],{"class":306},[15,12012,12013],{},[2510,12014,7474],{},[80,12016,12018],{"className":82,"code":12017,"language":84,"meta":85,"style":85},"Hello Allen\n年紀 23\n",[19,12019,12020,12028],{"__ignoreMap":85},[89,12021,12022,12025],{"class":91,"line":92},[89,12023,12024],{"class":102},"Hello",[89,12026,12027],{"class":106}," Allen\n",[89,12029,12030,12033],{"class":91,"line":99},[89,12031,12032],{"class":102},"年紀",[89,12034,12035],{"class":110}," 23\n",[11,12037,12039],{"id":12038},"return-函式","return 函式",[80,12041,12043],{"className":11818,"code":12042,"language":11820,"meta":85,"style":85},"func 函式名  (參數1 變數型態, 參數2 變數型態, ...) 回傳型態 {\n    \u002F\u002F執行程式片段\n    return 回傳值\n}\n",[19,12044,12045,12073,12077,12084],{"__ignoreMap":85},[89,12046,12047,12049,12052,12054,12056,12058,12060,12062,12064,12066,12068,12071],{"class":91,"line":92},[89,12048,11827],{"class":241},[89,12050,12051],{"class":306}," 函式名  (",[89,12053,11833],{"class":5691},[89,12055,11836],{"class":102},[89,12057,386],{"class":306},[89,12059,11841],{"class":5691},[89,12061,11836],{"class":102},[89,12063,386],{"class":306},[89,12065,11848],{"class":241},[89,12067,6933],{"class":306},[89,12069,12070],{"class":102},"回傳型態",[89,12072,5396],{"class":306},[89,12074,12075],{"class":91,"line":99},[89,12076,11855],{"class":95},[89,12078,12079,12081],{"class":91,"line":117},[89,12080,6772],{"class":241},[89,12082,12083],{"class":306}," 回傳值\n",[89,12085,12086],{"class":91,"line":124},[89,12087,831],{"class":306},[15,12089,12090],{},[2510,12091,9426],{},[80,12093,12095],{"className":11818,"code":12094,"language":11820,"meta":85,"style":85},"package main\nimport \"fmt\"\nfunc main() {\n    total := sum(4, 2, 3)\n    fmt.Println(total)\n}\n\nfunc sum(x int, y int, z int) int {\n    return x + y + z\n}\n\n",[19,12096,12097,12103,12113,12121,12147,12158,12162,12166,12199,12216],{"__ignoreMap":85},[89,12098,12099,12101],{"class":91,"line":92},[89,12100,11890],{"class":241},[89,12102,11893],{"class":102},[89,12104,12105,12107,12109,12111],{"class":91,"line":99},[89,12106,11898],{"class":241},[89,12108,11901],{"class":106},[89,12110,11904],{"class":102},[89,12112,11907],{"class":106},[89,12114,12115,12117,12119],{"class":91,"line":117},[89,12116,11827],{"class":241},[89,12118,11914],{"class":102},[89,12120,5806],{"class":306},[89,12122,12123,12126,12129,12132,12134,12136,12138,12140,12142,12145],{"class":91,"line":124},[89,12124,12125],{"class":306},"    total ",[89,12127,12128],{"class":241},":=",[89,12130,12131],{"class":102}," sum",[89,12133,307],{"class":306},[89,12135,1304],{"class":110},[89,12137,386],{"class":306},[89,12139,808],{"class":110},[89,12141,386],{"class":306},[89,12143,12144],{"class":110},"3",[89,12146,392],{"class":306},[89,12148,12149,12152,12155],{"class":91,"line":130},[89,12150,12151],{"class":306},"    fmt.",[89,12153,12154],{"class":102},"Println",[89,12156,12157],{"class":306},"(total)\n",[89,12159,12160],{"class":91,"line":142},[89,12161,831],{"class":306},[89,12163,12164],{"class":91,"line":147},[89,12165,121],{"emptyLinePlaceholder":120},[89,12167,12168,12170,12172,12174,12176,12179,12181,12183,12185,12187,12190,12192,12194,12197],{"class":91,"line":153},[89,12169,11827],{"class":241},[89,12171,12131],{"class":102},[89,12173,307],{"class":306},[89,12175,5692],{"class":5691},[89,12177,12178],{"class":241}," int",[89,12180,386],{"class":306},[89,12182,5697],{"class":5691},[89,12184,12178],{"class":241},[89,12186,386],{"class":306},[89,12188,12189],{"class":5691},"z",[89,12191,12178],{"class":241},[89,12193,6933],{"class":306},[89,12195,12196],{"class":241},"int",[89,12198,5396],{"class":306},[89,12200,12201,12203,12206,12208,12211,12213],{"class":91,"line":166},[89,12202,6772],{"class":241},[89,12204,12205],{"class":306}," x ",[89,12207,6783],{"class":241},[89,12209,12210],{"class":306}," y ",[89,12212,6783],{"class":241},[89,12214,12215],{"class":306}," z\n",[89,12217,12218],{"class":91,"line":171},[89,12219,831],{"class":306},[15,12221,12222],{},[2510,12223,7474],{},[80,12225,12227],{"className":82,"code":12226,"language":84,"meta":85,"style":85},"9\n",[19,12228,12229],{"__ignoreMap":85},[89,12230,12231],{"class":91,"line":92},[89,12232,12226],{"class":102},[11,12234,12236],{"id":12235},"return-多個值","return 多個值",[15,12238,12239],{},[2510,12240,12241],{},"格式",[80,12243,12245],{"className":11818,"code":12244,"language":11820,"meta":85,"style":85},"func 函式名  (參數1 變數型態, 參數2 變數型態, ...) (回傳型態1, 回傳型態2, 回傳型態3,...) {\n    \u002F\u002F執行程式片段1\n    return 回傳值1, 回傳值2, 回傳值3,...\n}\n",[19,12246,12247,12290,12295,12305],{"__ignoreMap":85},[89,12248,12249,12251,12253,12255,12257,12259,12261,12263,12265,12267,12270,12273,12275,12278,12280,12283,12286,12288],{"class":91,"line":92},[89,12250,11827],{"class":241},[89,12252,12051],{"class":306},[89,12254,11833],{"class":5691},[89,12256,11836],{"class":102},[89,12258,386],{"class":306},[89,12260,11841],{"class":5691},[89,12262,11836],{"class":102},[89,12264,386],{"class":306},[89,12266,11848],{"class":241},[89,12268,12269],{"class":306},") (",[89,12271,12272],{"class":102},"回傳型態1",[89,12274,386],{"class":306},[89,12276,12277],{"class":102},"回傳型態2",[89,12279,386],{"class":306},[89,12281,12282],{"class":102},"回傳型態3",[89,12284,12285],{"class":306},",",[89,12287,11848],{"class":241},[89,12289,732],{"class":306},[89,12291,12292],{"class":91,"line":99},[89,12293,12294],{"class":95},"    \u002F\u002F執行程式片段1\n",[89,12296,12297,12299,12302],{"class":91,"line":117},[89,12298,6772],{"class":241},[89,12300,12301],{"class":306}," 回傳值1, 回傳值2, 回傳值3,",[89,12303,12304],{"class":241},"...\n",[89,12306,12307],{"class":91,"line":124},[89,12308,831],{"class":306},[15,12310,12311],{},[2510,12312,9426],{},[80,12314,12316],{"className":11818,"code":12315,"language":11820,"meta":85,"style":85},"package main\nimport \"fmt\"\n\nfunc main() {\n    var name string\n    var sex bool\n    var height float32\n    var weight float32\n    var sexString string\n    \n    name, sex, height, weight = getPersonData()\n\n    sexString = getSexString(sex)\n\n    fmt.Printf(\"姓名：%s\\r\\n\", name)\n    fmt.Printf(\"性別：%s\\r\\n\", sexString)\n    fmt.Printf(\"身高：%.2f\\r\\n\", height)\n    fmt.Printf(\"體重：%.2f\\r\\n\", weight)\n}\n\n\nfunc getPersonData() (string, bool, float32, float32) {\n    return \"小明\", true, 175.0, 60.5\n}\n\nfunc getSexString(sex bool) string {\n    if sex == true {\n        return \"男\"\n    } else {\n        return \"女\"\n    }\n}\n",[19,12317,12318,12324,12334,12338,12346,12357,12367,12377,12386,12395,12400,12412,12416,12429,12433,12450,12468,12487,12505,12509,12513,12517,12545,12567,12571,12575,12595,12608,12616,12626,12633,12638],{"__ignoreMap":85},[89,12319,12320,12322],{"class":91,"line":92},[89,12321,11890],{"class":241},[89,12323,11893],{"class":102},[89,12325,12326,12328,12330,12332],{"class":91,"line":99},[89,12327,11898],{"class":241},[89,12329,11901],{"class":106},[89,12331,11904],{"class":102},[89,12333,11907],{"class":106},[89,12335,12336],{"class":91,"line":117},[89,12337,121],{"emptyLinePlaceholder":120},[89,12339,12340,12342,12344],{"class":91,"line":124},[89,12341,11827],{"class":241},[89,12343,11914],{"class":102},[89,12345,5806],{"class":306},[89,12347,12348,12351,12354],{"class":91,"line":130},[89,12349,12350],{"class":241},"    var",[89,12352,12353],{"class":306}," name ",[89,12355,12356],{"class":241},"string\n",[89,12358,12359,12361,12364],{"class":91,"line":142},[89,12360,12350],{"class":241},[89,12362,12363],{"class":306}," sex ",[89,12365,12366],{"class":241},"bool\n",[89,12368,12369,12371,12374],{"class":91,"line":147},[89,12370,12350],{"class":241},[89,12372,12373],{"class":306}," height ",[89,12375,12376],{"class":241},"float32\n",[89,12378,12379,12381,12384],{"class":91,"line":153},[89,12380,12350],{"class":241},[89,12382,12383],{"class":306}," weight ",[89,12385,12376],{"class":241},[89,12387,12388,12390,12393],{"class":91,"line":166},[89,12389,12350],{"class":241},[89,12391,12392],{"class":306}," sexString ",[89,12394,12356],{"class":241},[89,12396,12397],{"class":91,"line":171},[89,12398,12399],{"class":306},"    \n",[89,12401,12402,12405,12407,12410],{"class":91,"line":177},[89,12403,12404],{"class":306},"    name, sex, height, weight ",[89,12406,313],{"class":241},[89,12408,12409],{"class":102}," getPersonData",[89,12411,967],{"class":306},[89,12413,12414],{"class":91,"line":469},[89,12415,121],{"emptyLinePlaceholder":120},[89,12417,12418,12421,12423,12426],{"class":91,"line":489},[89,12419,12420],{"class":306},"    sexString ",[89,12422,313],{"class":241},[89,12424,12425],{"class":102}," getSexString",[89,12427,12428],{"class":306},"(sex)\n",[89,12430,12431],{"class":91,"line":509},[89,12432,121],{"emptyLinePlaceholder":120},[89,12434,12435,12437,12439,12441,12444,12446,12448],{"class":91,"line":515},[89,12436,12151],{"class":306},[89,12438,11974],{"class":102},[89,12440,307],{"class":306},[89,12442,12443],{"class":106},"\"姓名：",[89,12445,11982],{"class":110},[89,12447,549],{"class":106},[89,12449,11987],{"class":306},[89,12451,12452,12454,12456,12458,12461,12463,12465],{"class":91,"line":526},[89,12453,12151],{"class":306},[89,12455,11974],{"class":102},[89,12457,307],{"class":306},[89,12459,12460],{"class":106},"\"性別：",[89,12462,11982],{"class":110},[89,12464,549],{"class":106},[89,12466,12467],{"class":306},", sexString)\n",[89,12469,12470,12472,12474,12476,12479,12482,12484],{"class":91,"line":531},[89,12471,12151],{"class":306},[89,12473,11974],{"class":102},[89,12475,307],{"class":306},[89,12477,12478],{"class":106},"\"身高：",[89,12480,12481],{"class":110},"%.2f\\r\\n",[89,12483,549],{"class":106},[89,12485,12486],{"class":306},", height)\n",[89,12488,12489,12491,12493,12495,12498,12500,12502],{"class":91,"line":828},[89,12490,12151],{"class":306},[89,12492,11974],{"class":102},[89,12494,307],{"class":306},[89,12496,12497],{"class":106},"\"體重：",[89,12499,12481],{"class":110},[89,12501,549],{"class":106},[89,12503,12504],{"class":306},", weight)\n",[89,12506,12507],{"class":91,"line":834},[89,12508,831],{"class":306},[89,12510,12511],{"class":91,"line":839},[89,12512,121],{"emptyLinePlaceholder":120},[89,12514,12515],{"class":91,"line":845},[89,12516,121],{"emptyLinePlaceholder":120},[89,12518,12519,12521,12523,12526,12529,12531,12534,12536,12539,12541,12543],{"class":91,"line":3953},[89,12520,11827],{"class":241},[89,12522,12409],{"class":102},[89,12524,12525],{"class":306},"() (",[89,12527,12528],{"class":241},"string",[89,12530,386],{"class":306},[89,12532,12533],{"class":241},"bool",[89,12535,386],{"class":306},[89,12537,12538],{"class":241},"float32",[89,12540,386],{"class":306},[89,12542,12538],{"class":241},[89,12544,732],{"class":306},[89,12546,12547,12549,12552,12554,12557,12559,12562,12564],{"class":91,"line":3964},[89,12548,6772],{"class":241},[89,12550,12551],{"class":106}," \"小明\"",[89,12553,386],{"class":306},[89,12555,12556],{"class":110},"true",[89,12558,386],{"class":306},[89,12560,12561],{"class":110},"175.0",[89,12563,386],{"class":306},[89,12565,12566],{"class":110},"60.5\n",[89,12568,12569],{"class":91,"line":3975},[89,12570,831],{"class":306},[89,12572,12573],{"class":91,"line":3980},[89,12574,121],{"emptyLinePlaceholder":120},[89,12576,12577,12579,12581,12583,12586,12589,12591,12593],{"class":91,"line":3986},[89,12578,11827],{"class":241},[89,12580,12425],{"class":102},[89,12582,307],{"class":306},[89,12584,12585],{"class":5691},"sex",[89,12587,12588],{"class":241}," bool",[89,12590,6933],{"class":306},[89,12592,12528],{"class":241},[89,12594,5396],{"class":306},[89,12596,12597,12599,12601,12604,12606],{"class":91,"line":3996},[89,12598,7309],{"class":241},[89,12600,12363],{"class":306},[89,12602,12603],{"class":241},"==",[89,12605,7301],{"class":110},[89,12607,5396],{"class":306},[89,12609,12610,12613],{"class":91,"line":4010},[89,12611,12612],{"class":241},"        return",[89,12614,12615],{"class":106}," \"男\"\n",[89,12617,12618,12621,12624],{"class":91,"line":4015},[89,12619,12620],{"class":306},"    } ",[89,12622,12623],{"class":241},"else",[89,12625,5396],{"class":306},[89,12627,12628,12630],{"class":91,"line":4021},[89,12629,12612],{"class":241},[89,12631,12632],{"class":106}," \"女\"\n",[89,12634,12635],{"class":91,"line":4035},[89,12636,12637],{"class":306},"    }\n",[89,12639,12640],{"class":91,"line":4046},[89,12641,831],{"class":306},[15,12643,12644],{},[2510,12645,7474],{},[80,12647,12649],{"className":82,"code":12648,"language":84,"meta":85,"style":85},"姓名：小明\n性別：男\n身高：175.00\n體重：60.50\n",[19,12650,12651,12656,12661,12666],{"__ignoreMap":85},[89,12652,12653],{"class":91,"line":92},[89,12654,12655],{"class":102},"姓名：小明\n",[89,12657,12658],{"class":91,"line":99},[89,12659,12660],{"class":102},"性別：男\n",[89,12662,12663],{"class":91,"line":117},[89,12664,12665],{"class":102},"身高：175.00\n",[89,12667,12668],{"class":91,"line":124},[89,12669,12670],{"class":102},"體重：60.50\n",[1728,12672,12673],{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":85,"searchDepth":99,"depth":99,"links":12675},[12676,12677],{"id":12038,"depth":99,"text":12039},{"id":12235,"depth":99,"text":12236},"\u002Fimages\u002Farticles\u002F2023-02-26-go-lang-setup\u002Fcover.png",{},"\u002Farticles\u002F2023-05-07-go-function","2023-04-07 22:34:00",{"title":11802,"description":85},"articles\u002F2023-05-07-go-function","這篇文章，會介紹 Go 語言中，function 的使用方式",[11820],"kPWUrG71WxLeaVN03IJAFQyE8rs9AzsGWm7HLFKYbUw",{"id":12688,"title":12689,"body":12690,"category":1748,"description":85,"extension":1749,"image":12678,"meta":15524,"navigation":120,"path":15525,"pubDate":15526,"seo":15527,"status":120,"stem":15528,"summary":15529,"tags":15530,"__hash__":15531},"content\u002Farticles\u002F2023-03-28-flow control.md","《Go 學習筆記5》流程控制",{"type":8,"value":12691,"toc":15515},[12692,12696,12700,12704,12757,12761,12959,12963,12984,12987,12990,12994,13048,13052,13304,13308,13317,13321,13326,13347,13351,13428,13431,13605,13609,14549,14552,14555,14778,14782,14839,14842,14845,15145,15149,15261,15265,15274,15277,15284,15310,15315,15446,15450,15509,15512],[862,12693,12694],{},[15,12695,11809],{},[11,12697,12699],{"id":12698},"if-判斷","if 判斷",[15,12701,12702],{},[2510,12703,12241],{},[80,12705,12707],{"className":11818,"code":12706,"language":11820,"meta":85,"style":85},"if 條件1 {\n  \u002F\u002F若條件1成立，則執行此段程式\n} else if 條件2 {\n  \u002F\u002F若條件2成立，則執行此段程式\n} else {\n  \u002F\u002F若上述條件都位成立，則執行本段程式\n}\n",[19,12708,12709,12717,12722,12735,12740,12748,12753],{"__ignoreMap":85},[89,12710,12711,12714],{"class":91,"line":92},[89,12712,12713],{"class":241},"if",[89,12715,12716],{"class":306}," 條件1 {\n",[89,12718,12719],{"class":91,"line":99},[89,12720,12721],{"class":95},"  \u002F\u002F若條件1成立，則執行此段程式\n",[89,12723,12724,12727,12729,12732],{"class":91,"line":117},[89,12725,12726],{"class":306},"} ",[89,12728,12623],{"class":241},[89,12730,12731],{"class":241}," if",[89,12733,12734],{"class":306}," 條件2 {\n",[89,12736,12737],{"class":91,"line":124},[89,12738,12739],{"class":95},"  \u002F\u002F若條件2成立，則執行此段程式\n",[89,12741,12742,12744,12746],{"class":91,"line":130},[89,12743,12726],{"class":306},[89,12745,12623],{"class":241},[89,12747,5396],{"class":306},[89,12749,12750],{"class":91,"line":142},[89,12751,12752],{"class":95},"  \u002F\u002F若上述條件都位成立，則執行本段程式\n",[89,12754,12755],{"class":91,"line":147},[89,12756,831],{"class":306},[15,12758,12759],{},[2510,12760,9426],{},[80,12762,12764],{"className":11818,"code":12763,"language":11820,"meta":85,"style":85},"package main\n\nimport \"fmt\"\n\nfunc main() {\n\n    var grade float32\n    fmt.Print(\"請輸入分數：\")\n    fmt.Scan(&grade)\n\n    if grade >= 80 {\n        fmt.Printf(\"你的成績為：%.2f，成績不錯唷\\r\\n\", grade)\n    } else if grade >= 60 {\n        fmt.Printf(\"您的成積為 %.2f ，恭喜你及格了\\r\\n\", grade)\n    } else {\n        fmt.Printf(\"您的成績為 %.2f ，不及格~再努力\\r\\n\", grade)\n    }\n}\n",[19,12765,12766,12772,12776,12786,12790,12798,12802,12811,12825,12839,12843,12857,12883,12899,12921,12929,12951,12955],{"__ignoreMap":85},[89,12767,12768,12770],{"class":91,"line":92},[89,12769,11890],{"class":241},[89,12771,11893],{"class":102},[89,12773,12774],{"class":91,"line":99},[89,12775,121],{"emptyLinePlaceholder":120},[89,12777,12778,12780,12782,12784],{"class":91,"line":117},[89,12779,11898],{"class":241},[89,12781,11901],{"class":106},[89,12783,11904],{"class":102},[89,12785,11907],{"class":106},[89,12787,12788],{"class":91,"line":124},[89,12789,121],{"emptyLinePlaceholder":120},[89,12791,12792,12794,12796],{"class":91,"line":130},[89,12793,11827],{"class":241},[89,12795,11914],{"class":102},[89,12797,5806],{"class":306},[89,12799,12800],{"class":91,"line":142},[89,12801,121],{"emptyLinePlaceholder":120},[89,12803,12804,12806,12809],{"class":91,"line":147},[89,12805,12350],{"class":241},[89,12807,12808],{"class":306}," grade ",[89,12810,12376],{"class":241},[89,12812,12813,12815,12818,12820,12823],{"class":91,"line":153},[89,12814,12151],{"class":306},[89,12816,12817],{"class":102},"Print",[89,12819,307],{"class":306},[89,12821,12822],{"class":106},"\"請輸入分數：\"",[89,12824,392],{"class":306},[89,12826,12827,12829,12832,12834,12836],{"class":91,"line":166},[89,12828,12151],{"class":306},[89,12830,12831],{"class":102},"Scan",[89,12833,307],{"class":306},[89,12835,8536],{"class":241},[89,12837,12838],{"class":306},"grade)\n",[89,12840,12841],{"class":91,"line":171},[89,12842,121],{"emptyLinePlaceholder":120},[89,12844,12845,12847,12849,12852,12855],{"class":91,"line":177},[89,12846,7309],{"class":241},[89,12848,12808],{"class":306},[89,12850,12851],{"class":241},">=",[89,12853,12854],{"class":110}," 80",[89,12856,5396],{"class":306},[89,12858,12859,12862,12864,12866,12869,12872,12875,12878,12880],{"class":91,"line":469},[89,12860,12861],{"class":306},"        fmt.",[89,12863,11974],{"class":102},[89,12865,307],{"class":306},[89,12867,12868],{"class":106},"\"你的成績為：",[89,12870,12871],{"class":110},"%.2f",[89,12873,12874],{"class":106},"，成績不錯唷",[89,12876,12877],{"class":110},"\\r\\n",[89,12879,549],{"class":106},[89,12881,12882],{"class":306},", grade)\n",[89,12884,12885,12887,12889,12891,12893,12895,12897],{"class":91,"line":489},[89,12886,12620],{"class":306},[89,12888,12623],{"class":241},[89,12890,12731],{"class":241},[89,12892,12808],{"class":306},[89,12894,12851],{"class":241},[89,12896,6440],{"class":110},[89,12898,5396],{"class":306},[89,12900,12901,12903,12905,12907,12910,12912,12915,12917,12919],{"class":91,"line":509},[89,12902,12861],{"class":306},[89,12904,11974],{"class":102},[89,12906,307],{"class":306},[89,12908,12909],{"class":106},"\"您的成積為 ",[89,12911,12871],{"class":110},[89,12913,12914],{"class":106}," ，恭喜你及格了",[89,12916,12877],{"class":110},[89,12918,549],{"class":106},[89,12920,12882],{"class":306},[89,12922,12923,12925,12927],{"class":91,"line":515},[89,12924,12620],{"class":306},[89,12926,12623],{"class":241},[89,12928,5396],{"class":306},[89,12930,12931,12933,12935,12937,12940,12942,12945,12947,12949],{"class":91,"line":526},[89,12932,12861],{"class":306},[89,12934,11974],{"class":102},[89,12936,307],{"class":306},[89,12938,12939],{"class":106},"\"您的成績為 ",[89,12941,12871],{"class":110},[89,12943,12944],{"class":106}," ，不及格~再努力",[89,12946,12877],{"class":110},[89,12948,549],{"class":106},[89,12950,12882],{"class":306},[89,12952,12953],{"class":91,"line":531},[89,12954,5794],{"class":306},[89,12956,12957],{"class":91,"line":828},[89,12958,831],{"class":306},[15,12960,12961],{},[2510,12962,7474],{},[80,12964,12966],{"className":82,"code":12965,"language":84,"meta":85,"style":85},"請輸入分數：59.99\n您的成績為 59.99 ，不及格~再努力\n",[19,12967,12968,12973],{"__ignoreMap":85},[89,12969,12970],{"class":91,"line":92},[89,12971,12972],{"class":102},"請輸入分數：59.99\n",[89,12974,12975,12978,12981],{"class":91,"line":99},[89,12976,12977],{"class":102},"您的成績為",[89,12979,12980],{"class":110}," 59.99",[89,12982,12983],{"class":106}," ，不及格~再努力\n",[11,12985,12986],{"id":12986},"switch",[15,12988,12989],{},"也是一個判斷語法，會依不用結執行該段程式",[15,12991,12992],{},[2510,12993,12241],{},[80,12995,12997],{"className":11818,"code":12996,"language":11820,"meta":85,"style":85},"switch (判斷式) {\n    case value1:\n        \u002F\u002F程式片段1\n    case value2:\n        \u002F\u002F程式片段2\n    default:\n        \u002F\u002F若所有條件都不符合，則執行這個程式片段\n}\n    \n",[19,12998,12999,13006,13014,13019,13026,13031,13039,13044],{"__ignoreMap":85},[89,13000,13001,13003],{"class":91,"line":92},[89,13002,12986],{"class":241},[89,13004,13005],{"class":306}," (判斷式) {\n",[89,13007,13008,13011],{"class":91,"line":99},[89,13009,13010],{"class":241},"    case",[89,13012,13013],{"class":306}," value1:\n",[89,13015,13016],{"class":91,"line":117},[89,13017,13018],{"class":95},"        \u002F\u002F程式片段1\n",[89,13020,13021,13023],{"class":91,"line":124},[89,13022,13010],{"class":241},[89,13024,13025],{"class":306}," value2:\n",[89,13027,13028],{"class":91,"line":130},[89,13029,13030],{"class":95},"        \u002F\u002F程式片段2\n",[89,13032,13033,13036],{"class":91,"line":142},[89,13034,13035],{"class":241},"    default",[89,13037,13038],{"class":306},":\n",[89,13040,13041],{"class":91,"line":147},[89,13042,13043],{"class":95},"        \u002F\u002F若所有條件都不符合，則執行這個程式片段\n",[89,13045,13046],{"class":91,"line":153},[89,13047,831],{"class":306},[15,13049,13050],{},[2510,13051,9426],{},[80,13053,13055],{"className":11818,"code":13054,"language":11820,"meta":85,"style":85},"package main\n\nimport (\n    \"fmt\"\n    \"time\"\n)\n\nfunc main() {\n    now := time.Now()\n    week := now.Weekday()\n    switch week {\n    case 0:\n        fmt.Println(\"星期日\")\n    case 1:\n        fmt.Println(\"星期一\")\n    case 2:\n        fmt.Println(\"星期二\")\n    case 3:\n        fmt.Println(\"星期三\")\n    case 4:\n        fmt.Println(\"星期四\")\n    case 5:\n        fmt.Println(\"星期五\")\n    case 6:\n        fmt.Println(\"星期六\")\n    }\n}\n",[19,13056,13057,13063,13067,13074,13083,13092,13096,13100,13108,13123,13138,13146,13154,13167,13175,13188,13196,13209,13218,13231,13240,13253,13261,13274,13283,13296,13300],{"__ignoreMap":85},[89,13058,13059,13061],{"class":91,"line":92},[89,13060,11890],{"class":241},[89,13062,11893],{"class":102},[89,13064,13065],{"class":91,"line":99},[89,13066,121],{"emptyLinePlaceholder":120},[89,13068,13069,13071],{"class":91,"line":117},[89,13070,11898],{"class":241},[89,13072,13073],{"class":306}," (\n",[89,13075,13076,13079,13081],{"class":91,"line":124},[89,13077,13078],{"class":106},"    \"",[89,13080,11904],{"class":102},[89,13082,11907],{"class":106},[89,13084,13085,13087,13090],{"class":91,"line":130},[89,13086,13078],{"class":106},[89,13088,13089],{"class":102},"time",[89,13091,11907],{"class":106},[89,13093,13094],{"class":91,"line":142},[89,13095,392],{"class":306},[89,13097,13098],{"class":91,"line":147},[89,13099,121],{"emptyLinePlaceholder":120},[89,13101,13102,13104,13106],{"class":91,"line":153},[89,13103,11827],{"class":241},[89,13105,11914],{"class":102},[89,13107,5806],{"class":306},[89,13109,13110,13113,13115,13118,13121],{"class":91,"line":166},[89,13111,13112],{"class":306},"    now ",[89,13114,12128],{"class":241},[89,13116,13117],{"class":306}," time.",[89,13119,13120],{"class":102},"Now",[89,13122,967],{"class":306},[89,13124,13125,13128,13130,13133,13136],{"class":91,"line":171},[89,13126,13127],{"class":306},"    week ",[89,13129,12128],{"class":241},[89,13131,13132],{"class":306}," now.",[89,13134,13135],{"class":102},"Weekday",[89,13137,967],{"class":306},[89,13139,13140,13143],{"class":91,"line":177},[89,13141,13142],{"class":241},"    switch",[89,13144,13145],{"class":306}," week {\n",[89,13147,13148,13150,13152],{"class":91,"line":469},[89,13149,13010],{"class":241},[89,13151,4712],{"class":110},[89,13153,13038],{"class":306},[89,13155,13156,13158,13160,13162,13165],{"class":91,"line":489},[89,13157,12861],{"class":306},[89,13159,12154],{"class":102},[89,13161,307],{"class":306},[89,13163,13164],{"class":106},"\"星期日\"",[89,13166,392],{"class":306},[89,13168,13169,13171,13173],{"class":91,"line":509},[89,13170,13010],{"class":241},[89,13172,714],{"class":110},[89,13174,13038],{"class":306},[89,13176,13177,13179,13181,13183,13186],{"class":91,"line":515},[89,13178,12861],{"class":306},[89,13180,12154],{"class":102},[89,13182,307],{"class":306},[89,13184,13185],{"class":106},"\"星期一\"",[89,13187,392],{"class":306},[89,13189,13190,13192,13194],{"class":91,"line":526},[89,13191,13010],{"class":241},[89,13193,6427],{"class":110},[89,13195,13038],{"class":306},[89,13197,13198,13200,13202,13204,13207],{"class":91,"line":531},[89,13199,12861],{"class":306},[89,13201,12154],{"class":102},[89,13203,307],{"class":306},[89,13205,13206],{"class":106},"\"星期二\"",[89,13208,392],{"class":306},[89,13210,13211,13213,13216],{"class":91,"line":828},[89,13212,13010],{"class":241},[89,13214,13215],{"class":110}," 3",[89,13217,13038],{"class":306},[89,13219,13220,13222,13224,13226,13229],{"class":91,"line":834},[89,13221,12861],{"class":306},[89,13223,12154],{"class":102},[89,13225,307],{"class":306},[89,13227,13228],{"class":106},"\"星期三\"",[89,13230,392],{"class":306},[89,13232,13233,13235,13238],{"class":91,"line":839},[89,13234,13010],{"class":241},[89,13236,13237],{"class":110}," 4",[89,13239,13038],{"class":306},[89,13241,13242,13244,13246,13248,13251],{"class":91,"line":845},[89,13243,12861],{"class":306},[89,13245,12154],{"class":102},[89,13247,307],{"class":306},[89,13249,13250],{"class":106},"\"星期四\"",[89,13252,392],{"class":306},[89,13254,13255,13257,13259],{"class":91,"line":3953},[89,13256,13010],{"class":241},[89,13258,5787],{"class":110},[89,13260,13038],{"class":306},[89,13262,13263,13265,13267,13269,13272],{"class":91,"line":3964},[89,13264,12861],{"class":306},[89,13266,12154],{"class":102},[89,13268,307],{"class":306},[89,13270,13271],{"class":106},"\"星期五\"",[89,13273,392],{"class":306},[89,13275,13276,13278,13281],{"class":91,"line":3975},[89,13277,13010],{"class":241},[89,13279,13280],{"class":110}," 6",[89,13282,13038],{"class":306},[89,13284,13285,13287,13289,13291,13294],{"class":91,"line":3980},[89,13286,12861],{"class":306},[89,13288,12154],{"class":102},[89,13290,307],{"class":306},[89,13292,13293],{"class":106},"\"星期六\"",[89,13295,392],{"class":306},[89,13297,13298],{"class":91,"line":3986},[89,13299,5794],{"class":306},[89,13301,13302],{"class":91,"line":3996},[89,13303,831],{"class":306},[15,13305,13306],{},[2510,13307,7474],{},[80,13309,13311],{"className":82,"code":13310,"language":84,"meta":85,"style":85},"星期二\n",[19,13312,13313],{"__ignoreMap":85},[89,13314,13315],{"class":91,"line":92},[89,13316,13310],{"class":102},[11,13318,13320],{"id":13319},"for-迴圈","for 迴圈",[15,13322,13323],{},[2510,13324,13325],{},"基本格式",[80,13327,13329],{"className":11818,"code":13328,"language":11820,"meta":85,"style":85},"for 初始執行指令;布林判斷式;後執行指令 {\n    \u002F\u002F若布林判斷式為 true 則執行程式片段\n}\n",[19,13330,13331,13338,13343],{"__ignoreMap":85},[89,13332,13333,13335],{"class":91,"line":92},[89,13334,706],{"class":241},[89,13336,13337],{"class":306}," 初始執行指令;布林判斷式;後執行指令 {\n",[89,13339,13340],{"class":91,"line":99},[89,13341,13342],{"class":95},"    \u002F\u002F若布林判斷式為 true 則執行程式片段\n",[89,13344,13345],{"class":91,"line":117},[89,13346,831],{"class":306},[15,13348,13349],{},[2510,13350,9426],{},[80,13352,13354],{"className":11818,"code":13353,"language":11820,"meta":85,"style":85},"package main\nimport \"fmt\"\nfunc main() {\n    \u002F\u002F for 循環的基本形式\n    for i := 0; i \u003C 5; i++ {\n        fmt.Println(i)\n    }\n}\n",[19,13355,13356,13362,13372,13380,13385,13411,13420,13424],{"__ignoreMap":85},[89,13357,13358,13360],{"class":91,"line":92},[89,13359,11890],{"class":241},[89,13361,11893],{"class":102},[89,13363,13364,13366,13368,13370],{"class":91,"line":99},[89,13365,11898],{"class":241},[89,13367,11901],{"class":106},[89,13369,11904],{"class":102},[89,13371,11907],{"class":106},[89,13373,13374,13376,13378],{"class":91,"line":117},[89,13375,11827],{"class":241},[89,13377,11914],{"class":102},[89,13379,5806],{"class":306},[89,13381,13382],{"class":91,"line":124},[89,13383,13384],{"class":95},"    \u002F\u002F for 循環的基本形式\n",[89,13386,13387,13390,13393,13395,13397,13400,13402,13404,13407,13409],{"class":91,"line":130},[89,13388,13389],{"class":241},"    for",[89,13391,13392],{"class":306}," i ",[89,13394,12128],{"class":241},[89,13396,4712],{"class":110},[89,13398,13399],{"class":306},"; i ",[89,13401,5149],{"class":241},[89,13403,5787],{"class":110},[89,13405,13406],{"class":306},"; i",[89,13408,729],{"class":241},[89,13410,5396],{"class":306},[89,13412,13413,13415,13417],{"class":91,"line":142},[89,13414,12861],{"class":306},[89,13416,12154],{"class":102},[89,13418,13419],{"class":306},"(i)\n",[89,13421,13422],{"class":91,"line":147},[89,13423,5794],{"class":306},[89,13425,13426],{"class":91,"line":153},[89,13427,831],{"class":306},[15,13429,13430],{},"九九乘法",[80,13432,13434],{"className":11818,"code":13433,"language":11820,"meta":85,"style":85},"package main\nimport \"fmt\"\n\nfunc main() {\n    var x int\n    var y int\n    for x = 2; x \u003C= 9; x++ {\n        for y = 1; y \u003C= 9; y++ {\n            var z int = x * y\n            fmt.Printf(\"%d X %d = %d\\n\", x, y, z)\n        }\n        fmt.Println(\"==============\")\n    }\n}\n",[19,13435,13436,13442,13452,13456,13464,13473,13481,13506,13531,13550,13580,13584,13597,13601],{"__ignoreMap":85},[89,13437,13438,13440],{"class":91,"line":92},[89,13439,11890],{"class":241},[89,13441,11893],{"class":102},[89,13443,13444,13446,13448,13450],{"class":91,"line":99},[89,13445,11898],{"class":241},[89,13447,11901],{"class":106},[89,13449,11904],{"class":102},[89,13451,11907],{"class":106},[89,13453,13454],{"class":91,"line":117},[89,13455,121],{"emptyLinePlaceholder":120},[89,13457,13458,13460,13462],{"class":91,"line":124},[89,13459,11827],{"class":241},[89,13461,11914],{"class":102},[89,13463,5806],{"class":306},[89,13465,13466,13468,13470],{"class":91,"line":130},[89,13467,12350],{"class":241},[89,13469,12205],{"class":306},[89,13471,13472],{"class":241},"int\n",[89,13474,13475,13477,13479],{"class":91,"line":142},[89,13476,12350],{"class":241},[89,13478,12210],{"class":306},[89,13480,13472],{"class":241},[89,13482,13483,13485,13487,13489,13491,13494,13496,13499,13502,13504],{"class":91,"line":147},[89,13484,13389],{"class":241},[89,13486,12205],{"class":306},[89,13488,313],{"class":241},[89,13490,6427],{"class":110},[89,13492,13493],{"class":306},"; x ",[89,13495,720],{"class":241},[89,13497,13498],{"class":110}," 9",[89,13500,13501],{"class":306},"; x",[89,13503,729],{"class":241},[89,13505,5396],{"class":306},[89,13507,13508,13511,13513,13515,13517,13520,13522,13524,13527,13529],{"class":91,"line":153},[89,13509,13510],{"class":241},"        for",[89,13512,12210],{"class":306},[89,13514,313],{"class":241},[89,13516,714],{"class":110},[89,13518,13519],{"class":306},"; y ",[89,13521,720],{"class":241},[89,13523,13498],{"class":110},[89,13525,13526],{"class":306},"; y",[89,13528,729],{"class":241},[89,13530,5396],{"class":306},[89,13532,13533,13536,13539,13541,13543,13545,13547],{"class":91,"line":166},[89,13534,13535],{"class":241},"            var",[89,13537,13538],{"class":306}," z ",[89,13540,12196],{"class":241},[89,13542,5582],{"class":241},[89,13544,12205],{"class":306},[89,13546,6640],{"class":241},[89,13548,13549],{"class":306}," y\n",[89,13551,13552,13555,13557,13559,13561,13564,13567,13569,13572,13575,13577],{"class":91,"line":171},[89,13553,13554],{"class":306},"            fmt.",[89,13556,11974],{"class":102},[89,13558,307],{"class":306},[89,13560,549],{"class":106},[89,13562,13563],{"class":110},"%d",[89,13565,13566],{"class":106}," X ",[89,13568,13563],{"class":110},[89,13570,13571],{"class":106}," = ",[89,13573,13574],{"class":110},"%d\\n",[89,13576,549],{"class":106},[89,13578,13579],{"class":306},", x, y, z)\n",[89,13581,13582],{"class":91,"line":177},[89,13583,5913],{"class":306},[89,13585,13586,13588,13590,13592,13595],{"class":91,"line":469},[89,13587,12861],{"class":306},[89,13589,12154],{"class":102},[89,13591,307],{"class":306},[89,13593,13594],{"class":106},"\"==============\"",[89,13596,392],{"class":306},[89,13598,13599],{"class":91,"line":489},[89,13600,5794],{"class":306},[89,13602,13603],{"class":91,"line":509},[89,13604,831],{"class":306},[15,13606,13607],{},[2510,13608,7474],{},[80,13610,13612],{"className":82,"code":13611,"language":84,"meta":85,"style":85},"2 X 1 = 2\n2 X 2 = 4\n2 X 3 = 6\n2 X 4 = 8\n2 X 5 = 10\n2 X 6 = 12\n2 X 7 = 14\n2 X 8 = 16\n2 X 9 = 18\n==============\n3 X 1 = 3\n3 X 2 = 6\n3 X 3 = 9\n3 X 4 = 12\n3 X 5 = 15\n3 X 6 = 18\n3 X 7 = 21\n3 X 8 = 24\n3 X 9 = 27\n==============\n4 X 1 = 4\n4 X 2 = 8\n4 X 3 = 12\n4 X 4 = 16\n4 X 5 = 20\n4 X 6 = 24\n4 X 7 = 28\n4 X 8 = 32\n4 X 9 = 36\n==============\n5 X 1 = 5\n5 X 2 = 10\n5 X 3 = 15\n5 X 4 = 20\n5 X 5 = 25\n5 X 6 = 30\n5 X 7 = 35\n5 X 8 = 40\n5 X 9 = 45\n==============\n6 X 1 = 6\n6 X 2 = 12\n6 X 3 = 18\n6 X 4 = 24\n6 X 5 = 30\n6 X 6 = 36\n6 X 7 = 42\n6 X 8 = 48\n6 X 9 = 54\n==============\n7 X 1 = 7\n7 X 2 = 14\n7 X 3 = 21\n7 X 4 = 28\n7 X 5 = 35\n7 X 6 = 42\n7 X 7 = 49\n7 X 8 = 56\n7 X 9 = 63\n==============\n8 X 1 = 8\n8 X 2 = 16\n8 X 3 = 24\n8 X 4 = 32\n8 X 5 = 40\n8 X 6 = 48\n8 X 7 = 56\n8 X 8 = 64\n8 X 9 = 72\n==============\n9 X 1 = 9\n9 X 2 = 18\n9 X 3 = 27\n9 X 4 = 36\n9 X 5 = 45\n9 X 6 = 54\n9 X 7 = 63\n9 X 8 = 72\n9 X 9 = 81\n==============\n",[19,13613,13614,13628,13641,13654,13667,13680,13693,13707,13721,13734,13739,13751,13763,13776,13788,13801,13813,13826,13839,13852,13856,13868,13880,13892,13904,13917,13929,13942,13955,13968,13972,13984,13996,14008,14020,14033,14046,14059,14072,14085,14089,14102,14114,14126,14138,14150,14162,14175,14188,14201,14205,14217,14229,14241,14253,14265,14277,14290,14303,14316,14320,14333,14345,14357,14369,14381,14393,14405,14418,14431,14435,14448,14460,14472,14484,14496,14508,14520,14532,14545],{"__ignoreMap":85},[89,13615,13616,13618,13621,13623,13625],{"class":91,"line":92},[89,13617,808],{"class":102},[89,13619,13620],{"class":106}," X",[89,13622,714],{"class":110},[89,13624,5582],{"class":106},[89,13626,13627],{"class":110}," 2\n",[89,13629,13630,13632,13634,13636,13638],{"class":91,"line":99},[89,13631,808],{"class":102},[89,13633,13620],{"class":106},[89,13635,6427],{"class":110},[89,13637,5582],{"class":106},[89,13639,13640],{"class":110}," 4\n",[89,13642,13643,13645,13647,13649,13651],{"class":91,"line":117},[89,13644,808],{"class":102},[89,13646,13620],{"class":106},[89,13648,13215],{"class":110},[89,13650,5582],{"class":106},[89,13652,13653],{"class":110}," 6\n",[89,13655,13656,13658,13660,13662,13664],{"class":91,"line":124},[89,13657,808],{"class":102},[89,13659,13620],{"class":106},[89,13661,13237],{"class":110},[89,13663,5582],{"class":106},[89,13665,13666],{"class":110}," 8\n",[89,13668,13669,13671,13673,13675,13677],{"class":91,"line":130},[89,13670,808],{"class":102},[89,13672,13620],{"class":106},[89,13674,5787],{"class":110},[89,13676,5582],{"class":106},[89,13678,13679],{"class":110}," 10\n",[89,13681,13682,13684,13686,13688,13690],{"class":91,"line":142},[89,13683,808],{"class":102},[89,13685,13620],{"class":106},[89,13687,13280],{"class":110},[89,13689,5582],{"class":106},[89,13691,13692],{"class":110}," 12\n",[89,13694,13695,13697,13699,13702,13704],{"class":91,"line":147},[89,13696,808],{"class":102},[89,13698,13620],{"class":106},[89,13700,13701],{"class":110}," 7",[89,13703,5582],{"class":106},[89,13705,13706],{"class":110}," 14\n",[89,13708,13709,13711,13713,13716,13718],{"class":91,"line":153},[89,13710,808],{"class":102},[89,13712,13620],{"class":106},[89,13714,13715],{"class":110}," 8",[89,13717,5582],{"class":106},[89,13719,13720],{"class":110}," 16\n",[89,13722,13723,13725,13727,13729,13731],{"class":91,"line":166},[89,13724,808],{"class":102},[89,13726,13620],{"class":106},[89,13728,13498],{"class":110},[89,13730,5582],{"class":106},[89,13732,13733],{"class":110}," 18\n",[89,13735,13736],{"class":91,"line":171},[89,13737,13738],{"class":106},"==============\n",[89,13740,13741,13743,13745,13747,13749],{"class":91,"line":177},[89,13742,12144],{"class":102},[89,13744,13620],{"class":106},[89,13746,714],{"class":110},[89,13748,5582],{"class":106},[89,13750,2132],{"class":110},[89,13752,13753,13755,13757,13759,13761],{"class":91,"line":469},[89,13754,12144],{"class":102},[89,13756,13620],{"class":106},[89,13758,6427],{"class":110},[89,13760,5582],{"class":106},[89,13762,13653],{"class":110},[89,13764,13765,13767,13769,13771,13773],{"class":91,"line":489},[89,13766,12144],{"class":102},[89,13768,13620],{"class":106},[89,13770,13215],{"class":110},[89,13772,5582],{"class":106},[89,13774,13775],{"class":110}," 9\n",[89,13777,13778,13780,13782,13784,13786],{"class":91,"line":509},[89,13779,12144],{"class":102},[89,13781,13620],{"class":106},[89,13783,13237],{"class":110},[89,13785,5582],{"class":106},[89,13787,13692],{"class":110},[89,13789,13790,13792,13794,13796,13798],{"class":91,"line":515},[89,13791,12144],{"class":102},[89,13793,13620],{"class":106},[89,13795,5787],{"class":110},[89,13797,5582],{"class":106},[89,13799,13800],{"class":110}," 15\n",[89,13802,13803,13805,13807,13809,13811],{"class":91,"line":526},[89,13804,12144],{"class":102},[89,13806,13620],{"class":106},[89,13808,13280],{"class":110},[89,13810,5582],{"class":106},[89,13812,13733],{"class":110},[89,13814,13815,13817,13819,13821,13823],{"class":91,"line":531},[89,13816,12144],{"class":102},[89,13818,13620],{"class":106},[89,13820,13701],{"class":110},[89,13822,5582],{"class":106},[89,13824,13825],{"class":110}," 21\n",[89,13827,13828,13830,13832,13834,13836],{"class":91,"line":828},[89,13829,12144],{"class":102},[89,13831,13620],{"class":106},[89,13833,13715],{"class":110},[89,13835,5582],{"class":106},[89,13837,13838],{"class":110}," 24\n",[89,13840,13841,13843,13845,13847,13849],{"class":91,"line":834},[89,13842,12144],{"class":102},[89,13844,13620],{"class":106},[89,13846,13498],{"class":110},[89,13848,5582],{"class":106},[89,13850,13851],{"class":110}," 27\n",[89,13853,13854],{"class":91,"line":839},[89,13855,13738],{"class":106},[89,13857,13858,13860,13862,13864,13866],{"class":91,"line":845},[89,13859,1304],{"class":102},[89,13861,13620],{"class":106},[89,13863,714],{"class":110},[89,13865,5582],{"class":106},[89,13867,13640],{"class":110},[89,13869,13870,13872,13874,13876,13878],{"class":91,"line":3953},[89,13871,1304],{"class":102},[89,13873,13620],{"class":106},[89,13875,6427],{"class":110},[89,13877,5582],{"class":106},[89,13879,13666],{"class":110},[89,13881,13882,13884,13886,13888,13890],{"class":91,"line":3964},[89,13883,1304],{"class":102},[89,13885,13620],{"class":106},[89,13887,13215],{"class":110},[89,13889,5582],{"class":106},[89,13891,13692],{"class":110},[89,13893,13894,13896,13898,13900,13902],{"class":91,"line":3975},[89,13895,1304],{"class":102},[89,13897,13620],{"class":106},[89,13899,13237],{"class":110},[89,13901,5582],{"class":106},[89,13903,13720],{"class":110},[89,13905,13906,13908,13910,13912,13914],{"class":91,"line":3980},[89,13907,1304],{"class":102},[89,13909,13620],{"class":106},[89,13911,5787],{"class":110},[89,13913,5582],{"class":106},[89,13915,13916],{"class":110}," 20\n",[89,13918,13919,13921,13923,13925,13927],{"class":91,"line":3986},[89,13920,1304],{"class":102},[89,13922,13620],{"class":106},[89,13924,13280],{"class":110},[89,13926,5582],{"class":106},[89,13928,13838],{"class":110},[89,13930,13931,13933,13935,13937,13939],{"class":91,"line":3996},[89,13932,1304],{"class":102},[89,13934,13620],{"class":106},[89,13936,13701],{"class":110},[89,13938,5582],{"class":106},[89,13940,13941],{"class":110}," 28\n",[89,13943,13944,13946,13948,13950,13952],{"class":91,"line":4010},[89,13945,1304],{"class":102},[89,13947,13620],{"class":106},[89,13949,13715],{"class":110},[89,13951,5582],{"class":106},[89,13953,13954],{"class":110}," 32\n",[89,13956,13957,13959,13961,13963,13965],{"class":91,"line":4015},[89,13958,1304],{"class":102},[89,13960,13620],{"class":106},[89,13962,13498],{"class":110},[89,13964,5582],{"class":106},[89,13966,13967],{"class":110}," 36\n",[89,13969,13970],{"class":91,"line":4021},[89,13971,13738],{"class":106},[89,13973,13974,13976,13978,13980,13982],{"class":91,"line":4035},[89,13975,484],{"class":102},[89,13977,13620],{"class":106},[89,13979,714],{"class":110},[89,13981,5582],{"class":106},[89,13983,2066],{"class":110},[89,13985,13986,13988,13990,13992,13994],{"class":91,"line":4046},[89,13987,484],{"class":102},[89,13989,13620],{"class":106},[89,13991,6427],{"class":110},[89,13993,5582],{"class":106},[89,13995,13679],{"class":110},[89,13997,13998,14000,14002,14004,14006],{"class":91,"line":4057},[89,13999,484],{"class":102},[89,14001,13620],{"class":106},[89,14003,13215],{"class":110},[89,14005,5582],{"class":106},[89,14007,13800],{"class":110},[89,14009,14010,14012,14014,14016,14018],{"class":91,"line":5983},[89,14011,484],{"class":102},[89,14013,13620],{"class":106},[89,14015,13237],{"class":110},[89,14017,5582],{"class":106},[89,14019,13916],{"class":110},[89,14021,14022,14024,14026,14028,14030],{"class":91,"line":6015},[89,14023,484],{"class":102},[89,14025,13620],{"class":106},[89,14027,5787],{"class":110},[89,14029,5582],{"class":106},[89,14031,14032],{"class":110}," 25\n",[89,14034,14035,14037,14039,14041,14043],{"class":91,"line":6026},[89,14036,484],{"class":102},[89,14038,13620],{"class":106},[89,14040,13280],{"class":110},[89,14042,5582],{"class":106},[89,14044,14045],{"class":110}," 30\n",[89,14047,14048,14050,14052,14054,14056],{"class":91,"line":6037},[89,14049,484],{"class":102},[89,14051,13620],{"class":106},[89,14053,13701],{"class":110},[89,14055,5582],{"class":106},[89,14057,14058],{"class":110}," 35\n",[89,14060,14061,14063,14065,14067,14069],{"class":91,"line":6048},[89,14062,484],{"class":102},[89,14064,13620],{"class":106},[89,14066,13715],{"class":110},[89,14068,5582],{"class":106},[89,14070,14071],{"class":110}," 40\n",[89,14073,14074,14076,14078,14080,14082],{"class":91,"line":6059},[89,14075,484],{"class":102},[89,14077,13620],{"class":106},[89,14079,13498],{"class":110},[89,14081,5582],{"class":106},[89,14083,14084],{"class":110}," 45\n",[89,14086,14087],{"class":91,"line":6070},[89,14088,13738],{"class":106},[89,14090,14091,14094,14096,14098,14100],{"class":91,"line":6082},[89,14092,14093],{"class":102},"6",[89,14095,13620],{"class":106},[89,14097,714],{"class":110},[89,14099,5582],{"class":106},[89,14101,13653],{"class":110},[89,14103,14104,14106,14108,14110,14112],{"class":91,"line":6087},[89,14105,14093],{"class":102},[89,14107,13620],{"class":106},[89,14109,6427],{"class":110},[89,14111,5582],{"class":106},[89,14113,13692],{"class":110},[89,14115,14116,14118,14120,14122,14124],{"class":91,"line":6092},[89,14117,14093],{"class":102},[89,14119,13620],{"class":106},[89,14121,13215],{"class":110},[89,14123,5582],{"class":106},[89,14125,13733],{"class":110},[89,14127,14128,14130,14132,14134,14136],{"class":91,"line":6099},[89,14129,14093],{"class":102},[89,14131,13620],{"class":106},[89,14133,13237],{"class":110},[89,14135,5582],{"class":106},[89,14137,13838],{"class":110},[89,14139,14140,14142,14144,14146,14148],{"class":91,"line":6110},[89,14141,14093],{"class":102},[89,14143,13620],{"class":106},[89,14145,5787],{"class":110},[89,14147,5582],{"class":106},[89,14149,14045],{"class":110},[89,14151,14152,14154,14156,14158,14160],{"class":91,"line":6135},[89,14153,14093],{"class":102},[89,14155,13620],{"class":106},[89,14157,13280],{"class":110},[89,14159,5582],{"class":106},[89,14161,13967],{"class":110},[89,14163,14164,14166,14168,14170,14172],{"class":91,"line":6140},[89,14165,14093],{"class":102},[89,14167,13620],{"class":106},[89,14169,13701],{"class":110},[89,14171,5582],{"class":106},[89,14173,14174],{"class":110}," 42\n",[89,14176,14177,14179,14181,14183,14185],{"class":91,"line":6145},[89,14178,14093],{"class":102},[89,14180,13620],{"class":106},[89,14182,13715],{"class":110},[89,14184,5582],{"class":106},[89,14186,14187],{"class":110}," 48\n",[89,14189,14190,14192,14194,14196,14198],{"class":91,"line":6152},[89,14191,14093],{"class":102},[89,14193,13620],{"class":106},[89,14195,13498],{"class":110},[89,14197,5582],{"class":106},[89,14199,14200],{"class":110}," 54\n",[89,14202,14203],{"class":91,"line":6165},[89,14204,13738],{"class":106},[89,14206,14207,14209,14211,14213,14215],{"class":91,"line":6170},[89,14208,7370],{"class":102},[89,14210,13620],{"class":106},[89,14212,714],{"class":110},[89,14214,5582],{"class":106},[89,14216,1990],{"class":110},[89,14218,14219,14221,14223,14225,14227],{"class":91,"line":6175},[89,14220,7370],{"class":102},[89,14222,13620],{"class":106},[89,14224,6427],{"class":110},[89,14226,5582],{"class":106},[89,14228,13706],{"class":110},[89,14230,14231,14233,14235,14237,14239],{"class":91,"line":6180},[89,14232,7370],{"class":102},[89,14234,13620],{"class":106},[89,14236,13215],{"class":110},[89,14238,5582],{"class":106},[89,14240,13825],{"class":110},[89,14242,14243,14245,14247,14249,14251],{"class":91,"line":6190},[89,14244,7370],{"class":102},[89,14246,13620],{"class":106},[89,14248,13237],{"class":110},[89,14250,5582],{"class":106},[89,14252,13941],{"class":110},[89,14254,14255,14257,14259,14261,14263],{"class":91,"line":6231},[89,14256,7370],{"class":102},[89,14258,13620],{"class":106},[89,14260,5787],{"class":110},[89,14262,5582],{"class":106},[89,14264,14058],{"class":110},[89,14266,14267,14269,14271,14273,14275],{"class":91,"line":6242},[89,14268,7370],{"class":102},[89,14270,13620],{"class":106},[89,14272,13280],{"class":110},[89,14274,5582],{"class":106},[89,14276,14174],{"class":110},[89,14278,14279,14281,14283,14285,14287],{"class":91,"line":6253},[89,14280,7370],{"class":102},[89,14282,13620],{"class":106},[89,14284,13701],{"class":110},[89,14286,5582],{"class":106},[89,14288,14289],{"class":110}," 49\n",[89,14291,14292,14294,14296,14298,14300],{"class":91,"line":6264},[89,14293,7370],{"class":102},[89,14295,13620],{"class":106},[89,14297,13715],{"class":110},[89,14299,5582],{"class":106},[89,14301,14302],{"class":110}," 56\n",[89,14304,14305,14307,14309,14311,14313],{"class":91,"line":6275},[89,14306,7370],{"class":102},[89,14308,13620],{"class":106},[89,14310,13498],{"class":110},[89,14312,5582],{"class":106},[89,14314,14315],{"class":110}," 63\n",[89,14317,14318],{"class":91,"line":6286},[89,14319,13738],{"class":106},[89,14321,14322,14325,14327,14329,14331],{"class":91,"line":6297},[89,14323,14324],{"class":102},"8",[89,14326,13620],{"class":106},[89,14328,714],{"class":110},[89,14330,5582],{"class":106},[89,14332,13666],{"class":110},[89,14334,14335,14337,14339,14341,14343],{"class":91,"line":6310},[89,14336,14324],{"class":102},[89,14338,13620],{"class":106},[89,14340,6427],{"class":110},[89,14342,5582],{"class":106},[89,14344,13720],{"class":110},[89,14346,14347,14349,14351,14353,14355],{"class":91,"line":6315},[89,14348,14324],{"class":102},[89,14350,13620],{"class":106},[89,14352,13215],{"class":110},[89,14354,5582],{"class":106},[89,14356,13838],{"class":110},[89,14358,14359,14361,14363,14365,14367],{"class":91,"line":6320},[89,14360,14324],{"class":102},[89,14362,13620],{"class":106},[89,14364,13237],{"class":110},[89,14366,5582],{"class":106},[89,14368,13954],{"class":110},[89,14370,14371,14373,14375,14377,14379],{"class":91,"line":6327},[89,14372,14324],{"class":102},[89,14374,13620],{"class":106},[89,14376,5787],{"class":110},[89,14378,5582],{"class":106},[89,14380,14071],{"class":110},[89,14382,14383,14385,14387,14389,14391],{"class":91,"line":6338},[89,14384,14324],{"class":102},[89,14386,13620],{"class":106},[89,14388,13280],{"class":110},[89,14390,5582],{"class":106},[89,14392,14187],{"class":110},[89,14394,14395,14397,14399,14401,14403],{"class":91,"line":6363},[89,14396,14324],{"class":102},[89,14398,13620],{"class":106},[89,14400,13701],{"class":110},[89,14402,5582],{"class":106},[89,14404,14302],{"class":110},[89,14406,14407,14409,14411,14413,14415],{"class":91,"line":6368},[89,14408,14324],{"class":102},[89,14410,13620],{"class":106},[89,14412,13715],{"class":110},[89,14414,5582],{"class":106},[89,14416,14417],{"class":110}," 64\n",[89,14419,14420,14422,14424,14426,14428],{"class":91,"line":6373},[89,14421,14324],{"class":102},[89,14423,13620],{"class":106},[89,14425,13498],{"class":110},[89,14427,5582],{"class":106},[89,14429,14430],{"class":110}," 72\n",[89,14432,14433],{"class":91,"line":6380},[89,14434,13738],{"class":106},[89,14436,14437,14440,14442,14444,14446],{"class":91,"line":6393},[89,14438,14439],{"class":102},"9",[89,14441,13620],{"class":106},[89,14443,714],{"class":110},[89,14445,5582],{"class":106},[89,14447,13775],{"class":110},[89,14449,14450,14452,14454,14456,14458],{"class":91,"line":6398},[89,14451,14439],{"class":102},[89,14453,13620],{"class":106},[89,14455,6427],{"class":110},[89,14457,5582],{"class":106},[89,14459,13733],{"class":110},[89,14461,14462,14464,14466,14468,14470],{"class":91,"line":6403},[89,14463,14439],{"class":102},[89,14465,13620],{"class":106},[89,14467,13215],{"class":110},[89,14469,5582],{"class":106},[89,14471,13851],{"class":110},[89,14473,14474,14476,14478,14480,14482],{"class":91,"line":6408},[89,14475,14439],{"class":102},[89,14477,13620],{"class":106},[89,14479,13237],{"class":110},[89,14481,5582],{"class":106},[89,14483,13967],{"class":110},[89,14485,14486,14488,14490,14492,14494],{"class":91,"line":6459},[89,14487,14439],{"class":102},[89,14489,13620],{"class":106},[89,14491,5787],{"class":110},[89,14493,5582],{"class":106},[89,14495,14084],{"class":110},[89,14497,14498,14500,14502,14504,14506],{"class":91,"line":6472},[89,14499,14439],{"class":102},[89,14501,13620],{"class":106},[89,14503,13280],{"class":110},[89,14505,5582],{"class":106},[89,14507,14200],{"class":110},[89,14509,14510,14512,14514,14516,14518],{"class":91,"line":6484},[89,14511,14439],{"class":102},[89,14513,13620],{"class":106},[89,14515,13701],{"class":110},[89,14517,5582],{"class":106},[89,14519,14315],{"class":110},[89,14521,14522,14524,14526,14528,14530],{"class":91,"line":6489},[89,14523,14439],{"class":102},[89,14525,13620],{"class":106},[89,14527,13715],{"class":110},[89,14529,5582],{"class":106},[89,14531,14430],{"class":110},[89,14533,14534,14536,14538,14540,14542],{"class":91,"line":6500},[89,14535,14439],{"class":102},[89,14537,13620],{"class":106},[89,14539,13498],{"class":110},[89,14541,5582],{"class":106},[89,14543,14544],{"class":110}," 81\n",[89,14546,14547],{"class":91,"line":6531},[89,14548,13738],{"class":106},[72,14550,14551],{"id":14551},"break",[15,14553,14554],{},"用於跳出整個迴圈，結束迴圈的執行",[80,14556,14558],{"className":11818,"code":14557,"language":11820,"meta":85,"style":85},"package main\n\nimport (\n    \"fmt\"\n    \"math\u002Frand\"\n    \"time\"\n)\n\nfunc main() {\n\n    var index int\n\n    for index = 0; index \u003C 10; index++ {\n\n        seed := rand.NewSource(time.Now().UnixNano())\n\n        rNum := rand.New(seed)\n\n        num := rNum.Intn(100)\n\n        if num > 60 {\n            break\n        }\n\n        fmt.Println(index, num)\n    }\n}\n",[19,14559,14560,14566,14570,14576,14584,14593,14601,14605,14609,14617,14621,14630,14634,14658,14662,14689,14693,14708,14712,14731,14735,14748,14753,14757,14761,14770,14774],{"__ignoreMap":85},[89,14561,14562,14564],{"class":91,"line":92},[89,14563,11890],{"class":241},[89,14565,11893],{"class":102},[89,14567,14568],{"class":91,"line":99},[89,14569,121],{"emptyLinePlaceholder":120},[89,14571,14572,14574],{"class":91,"line":117},[89,14573,11898],{"class":241},[89,14575,13073],{"class":306},[89,14577,14578,14580,14582],{"class":91,"line":124},[89,14579,13078],{"class":106},[89,14581,11904],{"class":102},[89,14583,11907],{"class":106},[89,14585,14586,14588,14591],{"class":91,"line":130},[89,14587,13078],{"class":106},[89,14589,14590],{"class":102},"math\u002Frand",[89,14592,11907],{"class":106},[89,14594,14595,14597,14599],{"class":91,"line":142},[89,14596,13078],{"class":106},[89,14598,13089],{"class":102},[89,14600,11907],{"class":106},[89,14602,14603],{"class":91,"line":147},[89,14604,392],{"class":306},[89,14606,14607],{"class":91,"line":153},[89,14608,121],{"emptyLinePlaceholder":120},[89,14610,14611,14613,14615],{"class":91,"line":166},[89,14612,11827],{"class":241},[89,14614,11914],{"class":102},[89,14616,5806],{"class":306},[89,14618,14619],{"class":91,"line":171},[89,14620,121],{"emptyLinePlaceholder":120},[89,14622,14623,14625,14628],{"class":91,"line":177},[89,14624,12350],{"class":241},[89,14626,14627],{"class":306}," index ",[89,14629,13472],{"class":241},[89,14631,14632],{"class":91,"line":469},[89,14633,121],{"emptyLinePlaceholder":120},[89,14635,14636,14638,14640,14642,14644,14647,14649,14651,14654,14656],{"class":91,"line":489},[89,14637,13389],{"class":241},[89,14639,14627],{"class":306},[89,14641,313],{"class":241},[89,14643,4712],{"class":110},[89,14645,14646],{"class":306},"; index ",[89,14648,5149],{"class":241},[89,14650,4575],{"class":110},[89,14652,14653],{"class":306},"; index",[89,14655,729],{"class":241},[89,14657,5396],{"class":306},[89,14659,14660],{"class":91,"line":509},[89,14661,121],{"emptyLinePlaceholder":120},[89,14663,14664,14667,14669,14672,14675,14678,14680,14683,14686],{"class":91,"line":515},[89,14665,14666],{"class":306},"        seed ",[89,14668,12128],{"class":241},[89,14670,14671],{"class":306}," rand.",[89,14673,14674],{"class":102},"NewSource",[89,14676,14677],{"class":306},"(time.",[89,14679,13120],{"class":102},[89,14681,14682],{"class":306},"().",[89,14684,14685],{"class":102},"UnixNano",[89,14687,14688],{"class":306},"())\n",[89,14690,14691],{"class":91,"line":526},[89,14692,121],{"emptyLinePlaceholder":120},[89,14694,14695,14698,14700,14702,14705],{"class":91,"line":531},[89,14696,14697],{"class":306},"        rNum ",[89,14699,12128],{"class":241},[89,14701,14671],{"class":306},[89,14703,14704],{"class":102},"New",[89,14706,14707],{"class":306},"(seed)\n",[89,14709,14710],{"class":91,"line":828},[89,14711,121],{"emptyLinePlaceholder":120},[89,14713,14714,14717,14719,14722,14725,14727,14729],{"class":91,"line":834},[89,14715,14716],{"class":306},"        num ",[89,14718,12128],{"class":241},[89,14720,14721],{"class":306}," rNum.",[89,14723,14724],{"class":102},"Intn",[89,14726,307],{"class":306},[89,14728,822],{"class":110},[89,14730,392],{"class":306},[89,14732,14733],{"class":91,"line":839},[89,14734,121],{"emptyLinePlaceholder":120},[89,14736,14737,14739,14742,14744,14746],{"class":91,"line":845},[89,14738,5870],{"class":241},[89,14740,14741],{"class":306}," num ",[89,14743,5889],{"class":241},[89,14745,6440],{"class":110},[89,14747,5396],{"class":306},[89,14749,14750],{"class":91,"line":3953},[89,14751,14752],{"class":241},"            break\n",[89,14754,14755],{"class":91,"line":3964},[89,14756,5913],{"class":306},[89,14758,14759],{"class":91,"line":3975},[89,14760,121],{"emptyLinePlaceholder":120},[89,14762,14763,14765,14767],{"class":91,"line":3980},[89,14764,12861],{"class":306},[89,14766,12154],{"class":102},[89,14768,14769],{"class":306},"(index, num)\n",[89,14771,14772],{"class":91,"line":3986},[89,14773,5794],{"class":306},[89,14775,14776],{"class":91,"line":3996},[89,14777,831],{"class":306},[15,14779,14780],{},[2510,14781,7474],{},[80,14783,14785],{"className":82,"code":14784,"language":84,"meta":85,"style":85},"0 26\n1 19\n2 59\n3 45\n4 14\n5 25\n6 50\n7 14\n",[19,14786,14787,14794,14801,14808,14814,14820,14826,14833],{"__ignoreMap":85},[89,14788,14789,14791],{"class":91,"line":92},[89,14790,755],{"class":102},[89,14792,14793],{"class":110}," 26\n",[89,14795,14796,14798],{"class":91,"line":99},[89,14797,316],{"class":102},[89,14799,14800],{"class":110}," 19\n",[89,14802,14803,14805],{"class":91,"line":117},[89,14804,808],{"class":102},[89,14806,14807],{"class":110}," 59\n",[89,14809,14810,14812],{"class":91,"line":124},[89,14811,12144],{"class":102},[89,14813,14084],{"class":110},[89,14815,14816,14818],{"class":91,"line":130},[89,14817,1304],{"class":102},[89,14819,13706],{"class":110},[89,14821,14822,14824],{"class":91,"line":142},[89,14823,484],{"class":102},[89,14825,14032],{"class":110},[89,14827,14828,14830],{"class":91,"line":147},[89,14829,14093],{"class":102},[89,14831,14832],{"class":110}," 50\n",[89,14834,14835,14837],{"class":91,"line":153},[89,14836,7370],{"class":102},[89,14838,13706],{"class":110},[72,14840,14841],{"id":14841},"continue",[15,14843,14844],{},"用於跳過當前迴圈的剩餘部分，直接進入下一次迴圈的執行",[80,14846,14848],{"className":11818,"code":14847,"language":11820,"meta":85,"style":85},"package main\n\nimport (\n    \"fmt\"\n    \"math\u002Frand\"\n    \"time\"\n)\n\nconst (\n    RED   = \"\\x1b[31m\"\n    GREEN = \"\\x1b[32m\"\n    RESET = \"\\x1b[0m\"\n)\n\nfunc main() {\n    var index int\n    for index = 0; index \u003C 10; index++ {\n        seed := rand.NewSource(time.Now().UnixNano())\n        rNum := rand.New(seed)\n        num := rNum.Intn(100)\n\n        if num \u003C 60 {\n            fmt.Printf(\"%d 號學生的分數為 %d %s不及格%s\\n\", index, num, RED, RESET)\n            continue\n        }\n\n        fmt.Printf(\"%d 號學生的分數為 %d，%s恭喜級格了%s\\n\", index, num, GREEN, RESET)\n    }\n\n}\n",[19,14849,14850,14856,14860,14866,14874,14882,14890,14894,14898,14904,14920,14934,14948,14952,14956,14964,14972,14994,15014,15026,15042,15046,15058,15089,15094,15098,15102,15133,15137,15141],{"__ignoreMap":85},[89,14851,14852,14854],{"class":91,"line":92},[89,14853,11890],{"class":241},[89,14855,11893],{"class":102},[89,14857,14858],{"class":91,"line":99},[89,14859,121],{"emptyLinePlaceholder":120},[89,14861,14862,14864],{"class":91,"line":117},[89,14863,11898],{"class":241},[89,14865,13073],{"class":306},[89,14867,14868,14870,14872],{"class":91,"line":124},[89,14869,13078],{"class":106},[89,14871,11904],{"class":102},[89,14873,11907],{"class":106},[89,14875,14876,14878,14880],{"class":91,"line":130},[89,14877,13078],{"class":106},[89,14879,14590],{"class":102},[89,14881,11907],{"class":106},[89,14883,14884,14886,14888],{"class":91,"line":142},[89,14885,13078],{"class":106},[89,14887,13089],{"class":102},[89,14889,11907],{"class":106},[89,14891,14892],{"class":91,"line":147},[89,14893,392],{"class":306},[89,14895,14896],{"class":91,"line":153},[89,14897,121],{"emptyLinePlaceholder":120},[89,14899,14900,14902],{"class":91,"line":166},[89,14901,5576],{"class":241},[89,14903,13073],{"class":306},[89,14905,14906,14909,14912,14914,14917],{"class":91,"line":171},[89,14907,14908],{"class":110},"    RED",[89,14910,14911],{"class":241},"   =",[89,14913,11901],{"class":106},[89,14915,14916],{"class":110},"\\x1b",[89,14918,14919],{"class":106},"[31m\"\n",[89,14921,14922,14925,14927,14929,14931],{"class":91,"line":177},[89,14923,14924],{"class":110},"    GREEN",[89,14926,5582],{"class":241},[89,14928,11901],{"class":106},[89,14930,14916],{"class":110},[89,14932,14933],{"class":106},"[32m\"\n",[89,14935,14936,14939,14941,14943,14945],{"class":91,"line":469},[89,14937,14938],{"class":110},"    RESET",[89,14940,5582],{"class":241},[89,14942,11901],{"class":106},[89,14944,14916],{"class":110},[89,14946,14947],{"class":106},"[0m\"\n",[89,14949,14950],{"class":91,"line":489},[89,14951,392],{"class":306},[89,14953,14954],{"class":91,"line":509},[89,14955,121],{"emptyLinePlaceholder":120},[89,14957,14958,14960,14962],{"class":91,"line":515},[89,14959,11827],{"class":241},[89,14961,11914],{"class":102},[89,14963,5806],{"class":306},[89,14965,14966,14968,14970],{"class":91,"line":526},[89,14967,12350],{"class":241},[89,14969,14627],{"class":306},[89,14971,13472],{"class":241},[89,14973,14974,14976,14978,14980,14982,14984,14986,14988,14990,14992],{"class":91,"line":531},[89,14975,13389],{"class":241},[89,14977,14627],{"class":306},[89,14979,313],{"class":241},[89,14981,4712],{"class":110},[89,14983,14646],{"class":306},[89,14985,5149],{"class":241},[89,14987,4575],{"class":110},[89,14989,14653],{"class":306},[89,14991,729],{"class":241},[89,14993,5396],{"class":306},[89,14995,14996,14998,15000,15002,15004,15006,15008,15010,15012],{"class":91,"line":828},[89,14997,14666],{"class":306},[89,14999,12128],{"class":241},[89,15001,14671],{"class":306},[89,15003,14674],{"class":102},[89,15005,14677],{"class":306},[89,15007,13120],{"class":102},[89,15009,14682],{"class":306},[89,15011,14685],{"class":102},[89,15013,14688],{"class":306},[89,15015,15016,15018,15020,15022,15024],{"class":91,"line":834},[89,15017,14697],{"class":306},[89,15019,12128],{"class":241},[89,15021,14671],{"class":306},[89,15023,14704],{"class":102},[89,15025,14707],{"class":306},[89,15027,15028,15030,15032,15034,15036,15038,15040],{"class":91,"line":839},[89,15029,14716],{"class":306},[89,15031,12128],{"class":241},[89,15033,14721],{"class":306},[89,15035,14724],{"class":102},[89,15037,307],{"class":306},[89,15039,822],{"class":110},[89,15041,392],{"class":306},[89,15043,15044],{"class":91,"line":845},[89,15045,121],{"emptyLinePlaceholder":120},[89,15047,15048,15050,15052,15054,15056],{"class":91,"line":3953},[89,15049,5870],{"class":241},[89,15051,14741],{"class":306},[89,15053,5149],{"class":241},[89,15055,6440],{"class":110},[89,15057,5396],{"class":306},[89,15059,15060,15062,15064,15066,15068,15070,15073,15075,15078,15081,15084,15086],{"class":91,"line":3964},[89,15061,13554],{"class":306},[89,15063,11974],{"class":102},[89,15065,307],{"class":306},[89,15067,549],{"class":106},[89,15069,13563],{"class":110},[89,15071,15072],{"class":106}," 號學生的分數為 ",[89,15074,13563],{"class":110},[89,15076,15077],{"class":110}," %s",[89,15079,15080],{"class":106},"不及格",[89,15082,15083],{"class":110},"%s\\n",[89,15085,549],{"class":106},[89,15087,15088],{"class":306},", index, num, RED, RESET)\n",[89,15090,15091],{"class":91,"line":3975},[89,15092,15093],{"class":241},"            continue\n",[89,15095,15096],{"class":91,"line":3980},[89,15097,5913],{"class":306},[89,15099,15100],{"class":91,"line":3986},[89,15101,121],{"emptyLinePlaceholder":120},[89,15103,15104,15106,15108,15110,15112,15114,15116,15118,15120,15123,15126,15128,15130],{"class":91,"line":3996},[89,15105,12861],{"class":306},[89,15107,11974],{"class":102},[89,15109,307],{"class":306},[89,15111,549],{"class":106},[89,15113,13563],{"class":110},[89,15115,15072],{"class":106},[89,15117,13563],{"class":110},[89,15119,7544],{"class":106},[89,15121,15122],{"class":110},"%s",[89,15124,15125],{"class":106},"恭喜級格了",[89,15127,15083],{"class":110},[89,15129,549],{"class":106},[89,15131,15132],{"class":306},", index, num, GREEN, RESET)\n",[89,15134,15135],{"class":91,"line":4010},[89,15136,5794],{"class":306},[89,15138,15139],{"class":91,"line":4015},[89,15140,121],{"emptyLinePlaceholder":120},[89,15142,15143],{"class":91,"line":4021},[89,15144,831],{"class":306},[15,15146,15147],{},[2510,15148,7474],{},[80,15150,15152],{"className":82,"code":15151,"language":84,"meta":85,"style":85},"0 號學生的分數為 38 不及格\n1 號學生的分數為 26 不及格\n2 號學生的分數為 21 不及格\n3 號學生的分數為 37 不及格\n4 號學生的分數為 58 不及格\n5 號學生的分數為 40 不及格\n6 號學生的分數為 44 不及格\n7 號學生的分數為 64，恭喜級格了\n8 號學生的分數為 93，恭喜級格了\n9 號學生的分數為 0 不及格\n",[19,15153,15154,15167,15178,15189,15200,15211,15222,15233,15242,15251],{"__ignoreMap":85},[89,15155,15156,15158,15161,15164],{"class":91,"line":92},[89,15157,755],{"class":102},[89,15159,15160],{"class":106}," 號學生的分數為",[89,15162,15163],{"class":110}," 38",[89,15165,15166],{"class":106}," 不及格\n",[89,15168,15169,15171,15173,15176],{"class":91,"line":99},[89,15170,316],{"class":102},[89,15172,15160],{"class":106},[89,15174,15175],{"class":110}," 26",[89,15177,15166],{"class":106},[89,15179,15180,15182,15184,15187],{"class":91,"line":117},[89,15181,808],{"class":102},[89,15183,15160],{"class":106},[89,15185,15186],{"class":110}," 21",[89,15188,15166],{"class":106},[89,15190,15191,15193,15195,15198],{"class":91,"line":124},[89,15192,12144],{"class":102},[89,15194,15160],{"class":106},[89,15196,15197],{"class":110}," 37",[89,15199,15166],{"class":106},[89,15201,15202,15204,15206,15209],{"class":91,"line":130},[89,15203,1304],{"class":102},[89,15205,15160],{"class":106},[89,15207,15208],{"class":110}," 58",[89,15210,15166],{"class":106},[89,15212,15213,15215,15217,15220],{"class":91,"line":142},[89,15214,484],{"class":102},[89,15216,15160],{"class":106},[89,15218,15219],{"class":110}," 40",[89,15221,15166],{"class":106},[89,15223,15224,15226,15228,15231],{"class":91,"line":147},[89,15225,14093],{"class":102},[89,15227,15160],{"class":106},[89,15229,15230],{"class":110}," 44",[89,15232,15166],{"class":106},[89,15234,15235,15237,15239],{"class":91,"line":153},[89,15236,7370],{"class":102},[89,15238,15160],{"class":106},[89,15240,15241],{"class":106}," 64，恭喜級格了\n",[89,15243,15244,15246,15248],{"class":91,"line":166},[89,15245,14324],{"class":102},[89,15247,15160],{"class":106},[89,15249,15250],{"class":106}," 93，恭喜級格了\n",[89,15252,15253,15255,15257,15259],{"class":91,"line":171},[89,15254,14439],{"class":102},[89,15256,15160],{"class":106},[89,15258,4712],{"class":110},[89,15260,15166],{"class":106},[15,15262,15263],{},[2510,15264,3587],{},[15,15266,15267,15268,15270,15271,15273],{},"從上面範例結果，可以了解 ",[19,15269,14551],{}," 只是達成條件，就會跳開整個迴圈，而 ",[19,15272,14841],{},"，只會跳過此次迴圈。",[11,15275,15276],{"id":15276},"goto",[15,15278,15279,15281,15282],{},[19,15280,15276],{}," 程式執行時，無條件跳至某行執行，為確保程式邏輯清晰，程式碼易於維護，不建義使用 ",[19,15283,15276],{},[80,15285,15287],{"className":11818,"code":15286,"language":11820,"meta":85,"style":85},"go label\n\nlabel:\n  \u002F\u002F程式片段\n",[19,15288,15289,15296,15300,15305],{"__ignoreMap":85},[89,15290,15291,15293],{"class":91,"line":92},[89,15292,11820],{"class":241},[89,15294,15295],{"class":306}," label\n",[89,15297,15298],{"class":91,"line":99},[89,15299,121],{"emptyLinePlaceholder":120},[89,15301,15302],{"class":91,"line":117},[89,15303,15304],{"class":306},"label:\n",[89,15306,15307],{"class":91,"line":124},[89,15308,15309],{"class":95},"  \u002F\u002F程式片段\n",[15,15311,15312],{},[2510,15313,15314],{},"範例程式",[80,15316,15318],{"className":11818,"code":15317,"language":11820,"meta":85,"style":85},"package main\n\nimport \"fmt\"\n\nfunc main() {\n\n    i := 0\n    for {\n        i++\n        fmt.Println(i)\n\n        if i >= 10 {\n            goto Here\n        }\n    }\n\nHere:\n    fmt.Println(\"程式結束\")\n}\n",[19,15319,15320,15326,15330,15340,15344,15352,15356,15366,15372,15380,15388,15392,15404,15412,15416,15420,15424,15429,15442],{"__ignoreMap":85},[89,15321,15322,15324],{"class":91,"line":92},[89,15323,11890],{"class":241},[89,15325,11893],{"class":102},[89,15327,15328],{"class":91,"line":99},[89,15329,121],{"emptyLinePlaceholder":120},[89,15331,15332,15334,15336,15338],{"class":91,"line":117},[89,15333,11898],{"class":241},[89,15335,11901],{"class":106},[89,15337,11904],{"class":102},[89,15339,11907],{"class":106},[89,15341,15342],{"class":91,"line":124},[89,15343,121],{"emptyLinePlaceholder":120},[89,15345,15346,15348,15350],{"class":91,"line":130},[89,15347,11827],{"class":241},[89,15349,11914],{"class":102},[89,15351,5806],{"class":306},[89,15353,15354],{"class":91,"line":142},[89,15355,121],{"emptyLinePlaceholder":120},[89,15357,15358,15361,15363],{"class":91,"line":147},[89,15359,15360],{"class":306},"    i ",[89,15362,12128],{"class":241},[89,15364,15365],{"class":110}," 0\n",[89,15367,15368,15370],{"class":91,"line":153},[89,15369,13389],{"class":241},[89,15371,5396],{"class":306},[89,15373,15374,15377],{"class":91,"line":166},[89,15375,15376],{"class":306},"        i",[89,15378,15379],{"class":241},"++\n",[89,15381,15382,15384,15386],{"class":91,"line":171},[89,15383,12861],{"class":306},[89,15385,12154],{"class":102},[89,15387,13419],{"class":306},[89,15389,15390],{"class":91,"line":177},[89,15391,121],{"emptyLinePlaceholder":120},[89,15393,15394,15396,15398,15400,15402],{"class":91,"line":469},[89,15395,5870],{"class":241},[89,15397,13392],{"class":306},[89,15399,12851],{"class":241},[89,15401,4575],{"class":110},[89,15403,5396],{"class":306},[89,15405,15406,15409],{"class":91,"line":489},[89,15407,15408],{"class":241},"            goto",[89,15410,15411],{"class":306}," Here\n",[89,15413,15414],{"class":91,"line":509},[89,15415,5913],{"class":306},[89,15417,15418],{"class":91,"line":515},[89,15419,5794],{"class":306},[89,15421,15422],{"class":91,"line":526},[89,15423,121],{"emptyLinePlaceholder":120},[89,15425,15426],{"class":91,"line":531},[89,15427,15428],{"class":306},"Here:\n",[89,15430,15431,15433,15435,15437,15440],{"class":91,"line":828},[89,15432,12151],{"class":306},[89,15434,12154],{"class":102},[89,15436,307],{"class":306},[89,15438,15439],{"class":106},"\"程式結束\"",[89,15441,392],{"class":306},[89,15443,15444],{"class":91,"line":834},[89,15445,831],{"class":306},[15,15447,15448],{},[2510,15449,7474],{},[80,15451,15453],{"className":82,"code":15452,"language":84,"meta":85,"style":85},"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n和式結束\n",[19,15454,15455,15460,15465,15470,15475,15480,15485,15490,15495,15499,15504],{"__ignoreMap":85},[89,15456,15457],{"class":91,"line":92},[89,15458,15459],{"class":102},"1\n",[89,15461,15462],{"class":91,"line":99},[89,15463,15464],{"class":102},"2\n",[89,15466,15467],{"class":91,"line":117},[89,15468,15469],{"class":102},"3\n",[89,15471,15472],{"class":91,"line":124},[89,15473,15474],{"class":102},"4\n",[89,15476,15477],{"class":91,"line":130},[89,15478,15479],{"class":102},"5\n",[89,15481,15482],{"class":91,"line":142},[89,15483,15484],{"class":102},"6\n",[89,15486,15487],{"class":91,"line":147},[89,15488,15489],{"class":102},"7\n",[89,15491,15492],{"class":91,"line":153},[89,15493,15494],{"class":102},"8\n",[89,15496,15497],{"class":91,"line":166},[89,15498,12226],{"class":102},[89,15500,15501],{"class":91,"line":171},[89,15502,15503],{"class":102},"10\n",[89,15505,15506],{"class":91,"line":177},[89,15507,15508],{"class":102},"和式結束\n",[15,15510,15511],{},"以上是 go 語言中，常用的流程控制，若有遺漏或說明錯誤可以在下留言討論。",[1728,15513,15514],{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":85,"searchDepth":99,"depth":99,"links":15516},[15517,15518,15519,15523],{"id":12698,"depth":99,"text":12699},{"id":12986,"depth":99,"text":12986},{"id":13319,"depth":99,"text":13320,"children":15520},[15521,15522],{"id":14551,"depth":117,"text":14551},{"id":14841,"depth":117,"text":14841},{"id":15276,"depth":99,"text":15276},{},"\u002Farticles\u002F2023-03-28-flow-control","2023-03-28 17:34:00",{"title":12689,"description":85},"articles\u002F2023-03-28-flow control","這篇文章，會介紹 Go 語言中，常用的流程控制，包含 if、switch、for 等流程控制",[11820],"PX_VcjowVs0VcmxH_B9vEPuEHEYzfHxwTQKLCqRsmjU",{"id":15533,"title":15534,"body":15535,"category":1748,"description":85,"extension":1749,"image":12678,"meta":16284,"navigation":120,"path":16285,"pubDate":16286,"seo":16287,"status":120,"stem":16288,"summary":16289,"tags":16290,"__hash__":16291},"content\u002Farticles\u002F2023-03-07-go-print.md","《Go 學習筆記4》基本輸入輸出",{"type":8,"value":15536,"toc":16280},[15537,15541,15544,15564,15568,15799,15803,15856,15860,15893,15896,15910,15914,16212,16216,16277],[862,15538,15539],{},[15,15540,11809],{},[11,15542,15543],{"id":15543},"輸出",[47,15545,15546,15552,15558],{},[50,15547,15548,15551],{},[19,15549,15550],{},"print(data, data, data)","：輸出資料但不換行",[50,15553,15554,15557],{},[19,15555,15556],{},"Println(data, data, data)","：輸出資料並換行",[50,15559,15560,15563],{},[19,15561,15562],{},"Printf(\"{format}\", data)","：依照格式輸出內容",[15,15565,15566],{},[2510,15567,15314],{},[80,15569,15571],{"className":11818,"code":15570,"language":11820,"meta":85,"style":85},"package main\n\nimport \"fmt\"\n\nfunc main() {\n\n  fmt.Print(\"我是一行字串\")\n\n  fmt.Println(\"我會換行\")\n\n  fmt.Println(\"你看見換行了嗎\")\n\n  fmt.Printf(\"這是一個整數： %d\\r\\n\", 5)\n\n  fmt.Printf(\"這是一浮點數： %.2f\\r\\n\", 0.344)\n\n  fmt.Printf(\"這是一個布林值： %t\\r\\n\", true)\n\n  fmt.Printf(\"這是一個字元： %c\\r\\n\", 'j')\n\n  fmt.Printf(\"這是一個字串： %s\\r\\n\", \"Allen\")\n\n}\n",[19,15572,15573,15579,15583,15593,15597,15605,15609,15623,15627,15640,15644,15657,15661,15682,15686,15708,15712,15734,15738,15766,15770,15791,15795],{"__ignoreMap":85},[89,15574,15575,15577],{"class":91,"line":92},[89,15576,11890],{"class":241},[89,15578,11893],{"class":102},[89,15580,15581],{"class":91,"line":99},[89,15582,121],{"emptyLinePlaceholder":120},[89,15584,15585,15587,15589,15591],{"class":91,"line":117},[89,15586,11898],{"class":241},[89,15588,11901],{"class":106},[89,15590,11904],{"class":102},[89,15592,11907],{"class":106},[89,15594,15595],{"class":91,"line":124},[89,15596,121],{"emptyLinePlaceholder":120},[89,15598,15599,15601,15603],{"class":91,"line":130},[89,15600,11827],{"class":241},[89,15602,11914],{"class":102},[89,15604,5806],{"class":306},[89,15606,15607],{"class":91,"line":142},[89,15608,121],{"emptyLinePlaceholder":120},[89,15610,15611,15614,15616,15618,15621],{"class":91,"line":147},[89,15612,15613],{"class":306},"  fmt.",[89,15615,12817],{"class":102},[89,15617,307],{"class":306},[89,15619,15620],{"class":106},"\"我是一行字串\"",[89,15622,392],{"class":306},[89,15624,15625],{"class":91,"line":153},[89,15626,121],{"emptyLinePlaceholder":120},[89,15628,15629,15631,15633,15635,15638],{"class":91,"line":166},[89,15630,15613],{"class":306},[89,15632,12154],{"class":102},[89,15634,307],{"class":306},[89,15636,15637],{"class":106},"\"我會換行\"",[89,15639,392],{"class":306},[89,15641,15642],{"class":91,"line":171},[89,15643,121],{"emptyLinePlaceholder":120},[89,15645,15646,15648,15650,15652,15655],{"class":91,"line":177},[89,15647,15613],{"class":306},[89,15649,12154],{"class":102},[89,15651,307],{"class":306},[89,15653,15654],{"class":106},"\"你看見換行了嗎\"",[89,15656,392],{"class":306},[89,15658,15659],{"class":91,"line":469},[89,15660,121],{"emptyLinePlaceholder":120},[89,15662,15663,15665,15667,15669,15672,15674,15676,15678,15680],{"class":91,"line":489},[89,15664,15613],{"class":306},[89,15666,11974],{"class":102},[89,15668,307],{"class":306},[89,15670,15671],{"class":106},"\"這是一個整數： ",[89,15673,12001],{"class":110},[89,15675,549],{"class":106},[89,15677,386],{"class":306},[89,15679,484],{"class":110},[89,15681,392],{"class":306},[89,15683,15684],{"class":91,"line":509},[89,15685,121],{"emptyLinePlaceholder":120},[89,15687,15688,15690,15692,15694,15697,15699,15701,15703,15706],{"class":91,"line":515},[89,15689,15613],{"class":306},[89,15691,11974],{"class":102},[89,15693,307],{"class":306},[89,15695,15696],{"class":106},"\"這是一浮點數： ",[89,15698,12481],{"class":110},[89,15700,549],{"class":106},[89,15702,386],{"class":306},[89,15704,15705],{"class":110},"0.344",[89,15707,392],{"class":306},[89,15709,15710],{"class":91,"line":526},[89,15711,121],{"emptyLinePlaceholder":120},[89,15713,15714,15716,15718,15720,15723,15726,15728,15730,15732],{"class":91,"line":531},[89,15715,15613],{"class":306},[89,15717,11974],{"class":102},[89,15719,307],{"class":306},[89,15721,15722],{"class":106},"\"這是一個布林值： ",[89,15724,15725],{"class":110},"%t\\r\\n",[89,15727,549],{"class":106},[89,15729,386],{"class":306},[89,15731,12556],{"class":110},[89,15733,392],{"class":306},[89,15735,15736],{"class":91,"line":828},[89,15737,121],{"emptyLinePlaceholder":120},[89,15739,15740,15742,15744,15746,15749,15752,15754,15756,15759,15762,15764],{"class":91,"line":834},[89,15741,15613],{"class":306},[89,15743,11974],{"class":102},[89,15745,307],{"class":306},[89,15747,15748],{"class":106},"\"這是一個字元： ",[89,15750,15751],{"class":110},"%c\\r\\n",[89,15753,549],{"class":106},[89,15755,386],{"class":306},[89,15757,15758],{"class":106},"'",[89,15760,15761],{"class":110},"j",[89,15763,15758],{"class":106},[89,15765,392],{"class":306},[89,15767,15768],{"class":91,"line":839},[89,15769,121],{"emptyLinePlaceholder":120},[89,15771,15772,15774,15776,15778,15781,15783,15785,15787,15789],{"class":91,"line":845},[89,15773,15613],{"class":306},[89,15775,11974],{"class":102},[89,15777,307],{"class":306},[89,15779,15780],{"class":106},"\"這是一個字串： ",[89,15782,11982],{"class":110},[89,15784,549],{"class":106},[89,15786,386],{"class":306},[89,15788,11926],{"class":106},[89,15790,392],{"class":306},[89,15792,15793],{"class":91,"line":3953},[89,15794,121],{"emptyLinePlaceholder":120},[89,15796,15797],{"class":91,"line":3964},[89,15798,831],{"class":306},[15,15800,15801],{},[2510,15802,7474],{},[80,15804,15806],{"className":82,"code":15805,"language":84,"meta":85,"style":85},"我是一行字串我會換行\n你看見換行了嗎\n這是一個整數： 5\n這是一浮點數： 0.34\n這是一個布林值： true\n這是一個字元： j\n這是一個字串： Allen\n",[19,15807,15808,15813,15818,15825,15833,15841,15849],{"__ignoreMap":85},[89,15809,15810],{"class":91,"line":92},[89,15811,15812],{"class":102},"我是一行字串我會換行\n",[89,15814,15815],{"class":91,"line":99},[89,15816,15817],{"class":102},"你看見換行了嗎\n",[89,15819,15820,15823],{"class":91,"line":117},[89,15821,15822],{"class":102},"這是一個整數：",[89,15824,2066],{"class":110},[89,15826,15827,15830],{"class":91,"line":124},[89,15828,15829],{"class":102},"這是一浮點數：",[89,15831,15832],{"class":110}," 0.34\n",[89,15834,15835,15838],{"class":91,"line":130},[89,15836,15837],{"class":102},"這是一個布林值：",[89,15839,15840],{"class":110}," true\n",[89,15842,15843,15846],{"class":91,"line":142},[89,15844,15845],{"class":102},"這是一個字元：",[89,15847,15848],{"class":106}," j\n",[89,15850,15851,15854],{"class":91,"line":147},[89,15852,15853],{"class":102},"這是一個字串：",[89,15855,12027],{"class":106},[15,15857,15858],{},[2510,15859,3587],{},[1995,15861,15862,15868],{},[50,15863,15864,15865,15867],{},"其中浮點數 ",[19,15866,12871],{}," 表示取到小數點第二位",[50,15869,15870,3056,15872,15874,15875],{},[19,15871,12877],{},[19,15873,546],{}," 都是換行的控制字元\n",[1995,15876,15877,15882],{},[50,15878,15879,15881],{},[19,15880,546],{},"：在 Unix 系統中，此控制字元，表示換到下一行的開頭，在 Windows 系統中，只會進行換行",[50,15883,15884,15886,15887,15890,15891],{},[19,15885,12877],{},"：在 Windows，",[19,15888,15889],{},"\\r"," 代表 Enter 鍵，所以我們需要換到下一行的開頭時，我們必需用 ",[19,15892,12877],{},[11,15894,15895],{"id":15895},"輸入",[47,15897,15898,15904],{},[50,15899,15900,15903],{},[19,15901,15902],{},"scan(&x)","：會讀取整行輸入，並將輸入內容軟成字串型態",[50,15905,15906,15909],{},[19,15907,15908],{},"scanf(\"%d %.2f\", &x)","：可以指定輸入格式，並可一次輸入多個參數",[15,15911,15912],{},[2510,15913,15314],{},[80,15915,15917],{"className":11818,"code":15916,"language":11820,"meta":85,"style":85},"package main\n\nimport \"fmt\"\n\nfunc main() {\n\n    var name string\n\n    var age int8\n\n    var height float32\n\n    var weight float32\n\n    fmt.Print(\"請輸入您的姓名：\")\n    fmt.Scanln(&name)\n    fmt.Print(\"請輸入你的年紀：\")\n    fmt.Scanf(\"%d\", &age)\n    fmt.Print(\"請輸入你的身高和體重：\")\n    fmt.Scanf(\"%f %f\", &height, &weight)\n\n    age = int8(age)\n    height = float32(height)\n    weight = float32(weight)\n\n    fmt.Println(\"====您輸入的內容如下=====\")\n    fmt.Printf(\"您的大名是： %s \\r\\n您的年齡： %d\\r\\n您的身高： %.2f\\r\\n您的體重：%.2f\\r\\n\", name, age, height, weight)\n\n}\n",[19,15918,15919,15925,15929,15939,15943,15951,15955,15963,15967,15977,15981,15989,15993,16001,16005,16018,16032,16045,16067,16080,16110,16114,16126,16139,16151,16155,16168,16204,16208],{"__ignoreMap":85},[89,15920,15921,15923],{"class":91,"line":92},[89,15922,11890],{"class":241},[89,15924,11893],{"class":102},[89,15926,15927],{"class":91,"line":99},[89,15928,121],{"emptyLinePlaceholder":120},[89,15930,15931,15933,15935,15937],{"class":91,"line":117},[89,15932,11898],{"class":241},[89,15934,11901],{"class":106},[89,15936,11904],{"class":102},[89,15938,11907],{"class":106},[89,15940,15941],{"class":91,"line":124},[89,15942,121],{"emptyLinePlaceholder":120},[89,15944,15945,15947,15949],{"class":91,"line":130},[89,15946,11827],{"class":241},[89,15948,11914],{"class":102},[89,15950,5806],{"class":306},[89,15952,15953],{"class":91,"line":142},[89,15954,121],{"emptyLinePlaceholder":120},[89,15956,15957,15959,15961],{"class":91,"line":147},[89,15958,12350],{"class":241},[89,15960,12353],{"class":306},[89,15962,12356],{"class":241},[89,15964,15965],{"class":91,"line":153},[89,15966,121],{"emptyLinePlaceholder":120},[89,15968,15969,15971,15974],{"class":91,"line":166},[89,15970,12350],{"class":241},[89,15972,15973],{"class":306}," age ",[89,15975,15976],{"class":241},"int8\n",[89,15978,15979],{"class":91,"line":171},[89,15980,121],{"emptyLinePlaceholder":120},[89,15982,15983,15985,15987],{"class":91,"line":177},[89,15984,12350],{"class":241},[89,15986,12373],{"class":306},[89,15988,12376],{"class":241},[89,15990,15991],{"class":91,"line":469},[89,15992,121],{"emptyLinePlaceholder":120},[89,15994,15995,15997,15999],{"class":91,"line":489},[89,15996,12350],{"class":241},[89,15998,12383],{"class":306},[89,16000,12376],{"class":241},[89,16002,16003],{"class":91,"line":509},[89,16004,121],{"emptyLinePlaceholder":120},[89,16006,16007,16009,16011,16013,16016],{"class":91,"line":515},[89,16008,12151],{"class":306},[89,16010,12817],{"class":102},[89,16012,307],{"class":306},[89,16014,16015],{"class":106},"\"請輸入您的姓名：\"",[89,16017,392],{"class":306},[89,16019,16020,16022,16025,16027,16029],{"class":91,"line":526},[89,16021,12151],{"class":306},[89,16023,16024],{"class":102},"Scanln",[89,16026,307],{"class":306},[89,16028,8536],{"class":241},[89,16030,16031],{"class":306},"name)\n",[89,16033,16034,16036,16038,16040,16043],{"class":91,"line":531},[89,16035,12151],{"class":306},[89,16037,12817],{"class":102},[89,16039,307],{"class":306},[89,16041,16042],{"class":106},"\"請輸入你的年紀：\"",[89,16044,392],{"class":306},[89,16046,16047,16049,16052,16054,16056,16058,16060,16062,16064],{"class":91,"line":828},[89,16048,12151],{"class":306},[89,16050,16051],{"class":102},"Scanf",[89,16053,307],{"class":306},[89,16055,549],{"class":106},[89,16057,13563],{"class":110},[89,16059,549],{"class":106},[89,16061,386],{"class":306},[89,16063,8536],{"class":241},[89,16065,16066],{"class":306},"age)\n",[89,16068,16069,16071,16073,16075,16078],{"class":91,"line":834},[89,16070,12151],{"class":306},[89,16072,12817],{"class":102},[89,16074,307],{"class":306},[89,16076,16077],{"class":106},"\"請輸入你的身高和體重：\"",[89,16079,392],{"class":306},[89,16081,16082,16084,16086,16088,16090,16093,16096,16098,16100,16102,16105,16107],{"class":91,"line":839},[89,16083,12151],{"class":306},[89,16085,16051],{"class":102},[89,16087,307],{"class":306},[89,16089,549],{"class":106},[89,16091,16092],{"class":110},"%f",[89,16094,16095],{"class":110}," %f",[89,16097,549],{"class":106},[89,16099,386],{"class":306},[89,16101,8536],{"class":241},[89,16103,16104],{"class":306},"height, ",[89,16106,8536],{"class":241},[89,16108,16109],{"class":306},"weight)\n",[89,16111,16112],{"class":91,"line":845},[89,16113,121],{"emptyLinePlaceholder":120},[89,16115,16116,16119,16121,16123],{"class":91,"line":3953},[89,16117,16118],{"class":306},"    age ",[89,16120,313],{"class":241},[89,16122,11964],{"class":241},[89,16124,16125],{"class":306},"(age)\n",[89,16127,16128,16131,16133,16136],{"class":91,"line":3964},[89,16129,16130],{"class":306},"    height ",[89,16132,313],{"class":241},[89,16134,16135],{"class":241}," float32",[89,16137,16138],{"class":306},"(height)\n",[89,16140,16141,16144,16146,16148],{"class":91,"line":3975},[89,16142,16143],{"class":306},"    weight ",[89,16145,313],{"class":241},[89,16147,16135],{"class":241},[89,16149,16150],{"class":306},"(weight)\n",[89,16152,16153],{"class":91,"line":3980},[89,16154,121],{"emptyLinePlaceholder":120},[89,16156,16157,16159,16161,16163,16166],{"class":91,"line":3986},[89,16158,12151],{"class":306},[89,16160,12154],{"class":102},[89,16162,307],{"class":306},[89,16164,16165],{"class":106},"\"====您輸入的內容如下=====\"",[89,16167,392],{"class":306},[89,16169,16170,16172,16174,16176,16179,16181,16184,16187,16189,16192,16194,16197,16199,16201],{"class":91,"line":3996},[89,16171,12151],{"class":306},[89,16173,11974],{"class":102},[89,16175,307],{"class":306},[89,16177,16178],{"class":106},"\"您的大名是： ",[89,16180,15122],{"class":110},[89,16182,16183],{"class":110}," \\r\\n",[89,16185,16186],{"class":106},"您的年齡： ",[89,16188,12001],{"class":110},[89,16190,16191],{"class":106},"您的身高： ",[89,16193,12481],{"class":110},[89,16195,16196],{"class":106},"您的體重：",[89,16198,12481],{"class":110},[89,16200,549],{"class":106},[89,16202,16203],{"class":306},", name, age, height, weight)\n",[89,16205,16206],{"class":91,"line":4010},[89,16207,121],{"emptyLinePlaceholder":120},[89,16209,16210],{"class":91,"line":4015},[89,16211,831],{"class":306},[15,16213,16214],{},[2510,16215,7474],{},[80,16217,16219],{"className":82,"code":16218,"language":84,"meta":85,"style":85},"請輸入您的姓名：Allen\n請輸入你的年紀：25\n請輸入你的身高和體重：175 70 \n====您輸入的內容如下=====\n您的大名是： Allen \n您的年齡： 25\n您的身高： 175.00\n您的體重：70.00\n",[19,16220,16221,16226,16231,16242,16247,16257,16264,16272],{"__ignoreMap":85},[89,16222,16223],{"class":91,"line":92},[89,16224,16225],{"class":102},"請輸入您的姓名：Allen\n",[89,16227,16228],{"class":91,"line":99},[89,16229,16230],{"class":102},"請輸入你的年紀：25\n",[89,16232,16233,16236,16239],{"class":91,"line":117},[89,16234,16235],{"class":102},"請輸入你的身高和體重：175",[89,16237,16238],{"class":110}," 70",[89,16240,16241],{"class":306}," \n",[89,16243,16244],{"class":91,"line":124},[89,16245,16246],{"class":106},"====您輸入的內容如下=====\n",[89,16248,16249,16252,16255],{"class":91,"line":130},[89,16250,16251],{"class":102},"您的大名是：",[89,16253,16254],{"class":106}," Allen",[89,16256,16241],{"class":306},[89,16258,16259,16262],{"class":91,"line":142},[89,16260,16261],{"class":102},"您的年齡：",[89,16263,14032],{"class":110},[89,16265,16266,16269],{"class":91,"line":147},[89,16267,16268],{"class":102},"您的身高：",[89,16270,16271],{"class":110}," 175.00\n",[89,16273,16274],{"class":91,"line":153},[89,16275,16276],{"class":102},"您的體重：70.00\n",[1728,16278,16279],{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":85,"searchDepth":99,"depth":99,"links":16281},[16282,16283],{"id":15543,"depth":99,"text":15543},{"id":15895,"depth":99,"text":15895},{},"\u002Farticles\u002F2023-03-07-go-print","2023-03-07 23:26:00",{"title":15534,"description":85},"articles\u002F2023-03-07-go-print","在 Go lang 中，會使用 `fmt` 這個套件，來處理基本的輸入輸出",[11820],"qed74xM3e9OGLUD8A3VRr5d374RcyCdF1WljBm5JUi0",{"id":16293,"title":16294,"body":16295,"category":1748,"description":85,"extension":1749,"image":12678,"meta":16837,"navigation":120,"path":16838,"pubDate":16839,"seo":16840,"status":120,"stem":16841,"summary":16842,"tags":16843,"__hash__":16844},"content\u002Farticles\u002F2023-03-01-go-lang-variable.md","《Go 學習筆記2》 變數型態",{"type":8,"value":16296,"toc":16826},[16297,16301,16304,16313,16357,16362,16394,16397,16411,16415,16473,16476,16616,16619,16631,16634,16641,16644,16652,16673,16676,16684,16687,16695,16804,16808,16823],[862,16298,16299],{},[15,16300,11809],{},[11,16302,16303],{"id":16303},"變數宣告",[15,16305,16306,16307,4812,16310,16312],{},"在 Go lang 變數宣告，可使用 ",[19,16308,16309],{},"var",[19,16311,12128],{}," 兩個關鍵字，進行變數宣告。",[80,16314,16316],{"className":11818,"code":16315,"language":11820,"meta":85,"style":85},"var x int =  10\nvar y float32 = 3.1412\nvar z string = \"Hello World\"\n",[19,16317,16318,16331,16344],{"__ignoreMap":85},[89,16319,16320,16322,16324,16326,16328],{"class":91,"line":92},[89,16321,16309],{"class":241},[89,16323,12205],{"class":306},[89,16325,12196],{"class":241},[89,16327,5582],{"class":241},[89,16329,16330],{"class":110},"  10\n",[89,16332,16333,16335,16337,16339,16341],{"class":91,"line":99},[89,16334,16309],{"class":241},[89,16336,12210],{"class":306},[89,16338,12538],{"class":241},[89,16340,5582],{"class":241},[89,16342,16343],{"class":110}," 3.1412\n",[89,16345,16346,16348,16350,16352,16354],{"class":91,"line":117},[89,16347,16309],{"class":241},[89,16349,13538],{"class":306},[89,16351,12528],{"class":241},[89,16353,5582],{"class":241},[89,16355,16356],{"class":106}," \"Hello World\"\n",[15,16358,4279,16359,16361],{},[19,16360,12128],{}," 符號變數宣告時，可以省略型態，系統會自動推斷變數的型態",[80,16363,16365],{"className":11818,"code":16364,"language":11820,"meta":85,"style":85},"x := 10\ny := 3.1412\nz := \"Hello World\"\n",[19,16366,16367,16376,16385],{"__ignoreMap":85},[89,16368,16369,16372,16374],{"class":91,"line":92},[89,16370,16371],{"class":306},"x ",[89,16373,12128],{"class":241},[89,16375,13679],{"class":110},[89,16377,16378,16381,16383],{"class":91,"line":99},[89,16379,16380],{"class":306},"y ",[89,16382,12128],{"class":241},[89,16384,16343],{"class":110},[89,16386,16387,16390,16392],{"class":91,"line":117},[89,16388,16389],{"class":306},"z ",[89,16391,12128],{"class":241},[89,16393,16356],{"class":106},[15,16395,16396],{},"多變數宣告",[80,16398,16400],{"className":11818,"code":16399,"language":11820,"meta":85,"style":85},"var x, y, z int\n",[19,16401,16402],{"__ignoreMap":85},[89,16403,16404,16406,16409],{"class":91,"line":92},[89,16405,16309],{"class":241},[89,16407,16408],{"class":306}," x, y, z ",[89,16410,13472],{"class":241},[11,16412,16414],{"id":16413},"go-語言的變數型態包括","Go 語言的變數型態包括:",[47,16416,16417,16449,16457,16468],{},[50,16418,16419,16420,386,16422,386,16425,386,16428,386,16431,386,16434,386,16437,386,16440,386,16443,386,16446],{},"整數類型: ",[19,16421,12196],{},[19,16423,16424],{},"int8",[19,16426,16427],{},"int16",[19,16429,16430],{},"int32",[19,16432,16433],{},"int64",[19,16435,16436],{},"uint",[19,16438,16439],{},"uint8",[19,16441,16442],{},"uint16",[19,16444,16445],{},"uint32",[19,16447,16448],{},"uint64",[50,16450,16451,16452,386,16454],{},"浮點數類型: ",[19,16453,12538],{},[19,16455,16456],{},"float64",[50,16458,16459,16460,386,16462,386,16465],{},"字符類型: ",[19,16461,12528],{},[19,16463,16464],{},"rune",[19,16466,16467],{},"byte",[50,16469,16470,16471],{},"布林類型: ",[19,16472,12533],{},[72,16474,16475],{"id":16475},"整數型態",[1995,16477,16478,16548],{},[50,16479,16480,16482,16483],{},[19,16481,12196],{}," ： 是帶有符號的整數，可表示正數與負數\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",[3573,16484,16485,16497],{},[3576,16486,16487],{},[3579,16488,16489,16491,16494],{},[3582,16490,4090],{},[3582,16492,16493],{},"大小",[3582,16495,16496],{},"範圍",[3589,16498,16499,16509,16519,16529,16539],{},[3579,16500,16501,16503,16506],{},[3594,16502,16424],{},[3594,16504,16505],{},"8 bits",[3594,16507,16508],{},"-128 ~ 127",[3579,16510,16511,16513,16516],{},[3594,16512,16427],{},[3594,16514,16515],{},"16bits",[3594,16517,16518],{},"-2^15 ~ 2^15-1",[3579,16520,16521,16523,16526],{},[3594,16522,16430],{},[3594,16524,16525],{},"32bits",[3594,16527,16528],{},"-2^31 ~ 2^31-1",[3579,16530,16531,16533,16536],{},[3594,16532,16433],{},[3594,16534,16535],{},"64bits",[3594,16537,16538],{},"-2^63 ~ 2^63-1",[3579,16540,16541,16543,16546],{},[3594,16542,12196],{},[3594,16544,16545],{},"取決於平台",[3594,16547,16545],{},[50,16549,16550,16553,16554],{},[19,16551,16552],{},"unit","：是無符號的整數，只能表示正數\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",[3573,16555,16556,16566],{},[3576,16557,16558],{},[3579,16559,16560,16562,16564],{},[3582,16561,4090],{},[3582,16563,16493],{},[3582,16565,16496],{},[3589,16567,16568,16578,16588,16598,16608],{},[3579,16569,16570,16573,16575],{},[3594,16571,16572],{},"unit8",[3594,16574,16505],{},[3594,16576,16577],{},"0 ~ 255",[3579,16579,16580,16583,16585],{},[3594,16581,16582],{},"unit16",[3594,16584,16515],{},[3594,16586,16587],{},"0 ~ 2^16 - 1",[3579,16589,16590,16593,16595],{},[3594,16591,16592],{},"unit32",[3594,16594,16525],{},[3594,16596,16597],{},"0 ~ 2^31 -1",[3579,16599,16600,16603,16605],{},[3594,16601,16602],{},"unit64",[3594,16604,16535],{},[3594,16606,16607],{},"0~ 2^63 -1",[3579,16609,16610,16612,16614],{},[3594,16611,16552],{},[3594,16613,16545],{},[3594,16615,16545],{},[72,16617,16618],{"id":16618},"浮點數型態",[1995,16620,16621,16626],{},[50,16622,16623,16625],{},[19,16624,12538],{},"：在記憶體佔用 32 位元，並以單精度浮點數格式儲存",[50,16627,16628,16630],{},[19,16629,16456],{},"：在記憶體佔用 64 位元，並以倍精度浮點數格式儲存",[72,16632,16633],{"id":16633},"字串",[15,16635,16636,16637,16640],{},"在 Go lang 中，可以使用雙引號來宣告如 ",[19,16638,16639],{},"\"Hello World\""," 也可以使用反引號來宣告 `hello World`",[72,16642,16643],{"id":16643},"字元",[15,16645,16646,16647,4812,16649,16651],{},"在 Go lang 中，以 ",[19,16648,16467],{},[19,16650,16464],{}," 來表示字元的變數型態",[47,16653,16654,16662],{},[50,16655,16656,16658,16659,16661],{},[19,16657,16467],{},"：是 ",[19,16660,16572],{}," 的別名，用來表示一個 8 bits 無符號正整數。它常用來表示 ASCII 碼或 UTF-8 編碼的字元。",[50,16663,16664,16658,16666,16668,16669,16672],{},[19,16665,16464],{},[19,16667,16430],{}," 的別名，用來表示一個 ",[19,16670,16671],{},"Unicode"," 碼點。它常用來表示 UTF-32 編碼的字元。",[72,16674,16675],{"id":16675},"布林值",[15,16677,16678,16679,3056,16681],{},"Go lang 是以 bool 來宣告，其實為 ",[19,16680,12556],{},[19,16682,16683],{},"false",[11,16685,16686],{"id":16686},"型態轉換",[15,16688,16689,16690,4812,16692,16694],{},"由於 Go lang 是強型別語言，所以它不允許表達式中混合不同型態的變數。例如，我們不同直接將 ",[19,16691,16424],{},[19,16693,12538],{}," 進行相加。要解決此問題，我們必需將變數型態，改成同一種變數型態，才能進行運算。",[80,16696,16698],{"className":11818,"code":16697,"language":11820,"meta":85,"style":85},"package main\n\nimport \"fmt\"\n\nfunc main() {\n\n    var x int = 10\n    \n    var y float32 = 3.1412\n    \n    var z float32 = float32(x) + y\n    \n    fmt.Println(x, y, z)\n}\n",[19,16699,16700,16706,16710,16720,16724,16732,16736,16748,16752,16764,16768,16787,16791,16800],{"__ignoreMap":85},[89,16701,16702,16704],{"class":91,"line":92},[89,16703,11890],{"class":241},[89,16705,11893],{"class":102},[89,16707,16708],{"class":91,"line":99},[89,16709,121],{"emptyLinePlaceholder":120},[89,16711,16712,16714,16716,16718],{"class":91,"line":117},[89,16713,11898],{"class":241},[89,16715,11901],{"class":106},[89,16717,11904],{"class":102},[89,16719,11907],{"class":106},[89,16721,16722],{"class":91,"line":124},[89,16723,121],{"emptyLinePlaceholder":120},[89,16725,16726,16728,16730],{"class":91,"line":130},[89,16727,11827],{"class":241},[89,16729,11914],{"class":102},[89,16731,5806],{"class":306},[89,16733,16734],{"class":91,"line":142},[89,16735,121],{"emptyLinePlaceholder":120},[89,16737,16738,16740,16742,16744,16746],{"class":91,"line":147},[89,16739,12350],{"class":241},[89,16741,12205],{"class":306},[89,16743,12196],{"class":241},[89,16745,5582],{"class":241},[89,16747,13679],{"class":110},[89,16749,16750],{"class":91,"line":153},[89,16751,12399],{"class":306},[89,16753,16754,16756,16758,16760,16762],{"class":91,"line":166},[89,16755,12350],{"class":241},[89,16757,12210],{"class":306},[89,16759,12538],{"class":241},[89,16761,5582],{"class":241},[89,16763,16343],{"class":110},[89,16765,16766],{"class":91,"line":171},[89,16767,12399],{"class":306},[89,16769,16770,16772,16774,16776,16778,16780,16783,16785],{"class":91,"line":177},[89,16771,12350],{"class":241},[89,16773,13538],{"class":306},[89,16775,12538],{"class":241},[89,16777,5582],{"class":241},[89,16779,16135],{"class":241},[89,16781,16782],{"class":306},"(x) ",[89,16784,6783],{"class":241},[89,16786,13549],{"class":306},[89,16788,16789],{"class":91,"line":469},[89,16790,12399],{"class":306},[89,16792,16793,16795,16797],{"class":91,"line":489},[89,16794,12151],{"class":306},[89,16796,12154],{"class":102},[89,16798,16799],{"class":306},"(x, y, z)\n",[89,16801,16802],{"class":91,"line":509},[89,16803,831],{"class":306},[15,16805,16806],{},[2510,16807,7474],{},[80,16809,16811],{"className":82,"code":16810,"language":84,"meta":85,"style":85},"10 3.1412 13.1412\n",[19,16812,16813],{"__ignoreMap":85},[89,16814,16815,16817,16820],{"class":91,"line":92},[89,16816,504],{"class":102},[89,16818,16819],{"class":110}," 3.1412",[89,16821,16822],{"class":110}," 13.1412\n",[1728,16824,16825],{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}",{"title":85,"searchDepth":99,"depth":99,"links":16827},[16828,16829,16836],{"id":16303,"depth":99,"text":16303},{"id":16413,"depth":99,"text":16414,"children":16830},[16831,16832,16833,16834,16835],{"id":16475,"depth":117,"text":16475},{"id":16618,"depth":117,"text":16618},{"id":16633,"depth":117,"text":16633},{"id":16643,"depth":117,"text":16643},{"id":16675,"depth":117,"text":16675},{"id":16686,"depth":99,"text":16686},{},"\u002Farticles\u002F2023-03-01-go-lang-variable","2023-03-01 21:09:00",{"title":16294,"description":85},"articles\u002F2023-03-01-go-lang-variable","Go語言變數的使用",[11820],"DB-nKle0k_0j3qTQYeUi6BcZelDX2AsafhQIlZhDKi4",{"id":16846,"title":16847,"body":16848,"category":1748,"description":85,"extension":1749,"image":12678,"meta":17050,"navigation":120,"path":17051,"pubDate":17052,"seo":17053,"status":120,"stem":17054,"summary":17055,"tags":17056,"__hash__":17057},"content\u002Farticles\u002F2023-02-27-hello-world.md","《Go 學習筆記2》不免俗的 Ｈello World",{"type":8,"value":16849,"toc":17042},[16850,16854,16857,16870,16873,16880,16893,16896,16899,16958,16996,16999,17013,17016,17025,17027,17039],[862,16851,16852],{},[15,16853,11809],{},[11,16855,16856],{"id":16856},"建立專案目錄",[80,16858,16860],{"className":82,"code":16859,"language":84,"meta":85,"style":85},"mkdir go-test\n",[19,16861,16862],{"__ignoreMap":85},[89,16863,16864,16867],{"class":91,"line":92},[89,16865,16866],{"class":102},"mkdir",[89,16868,16869],{"class":106}," go-test\n",[11,16871,16872],{"id":16872},"建立程式檔",[15,16874,16875,16876,16879],{},"Go lang 的程式檔，會以 ",[19,16877,16878],{},"*.go"," 為副檔名",[80,16881,16883],{"className":82,"code":16882,"language":84,"meta":85,"style":85},"touch hello.go\n",[19,16884,16885],{"__ignoreMap":85},[89,16886,16887,16890],{"class":91,"line":92},[89,16888,16889],{"class":102},"touch",[89,16891,16892],{"class":106}," hello.go\n",[11,16894,16895],{"id":16895},"編輯程式碼",[15,16897,16898],{},"以文字編輯器或IDE開啟，輸入下列程式碼",[80,16900,16902],{"className":11818,"code":16901,"language":11820,"meta":85,"style":85},"\u002F**\n這是注解\n***\u002F\npackage main\nimport \"fmt\"\nfunc main() {\n    fmt.Println(\"Hello World\")\n}\n",[19,16903,16904,16908,16913,16918,16924,16934,16942,16954],{"__ignoreMap":85},[89,16905,16906],{"class":91,"line":92},[89,16907,10376],{"class":95},[89,16909,16910],{"class":91,"line":99},[89,16911,16912],{"class":95},"這是注解\n",[89,16914,16915],{"class":91,"line":117},[89,16916,16917],{"class":95},"***\u002F\n",[89,16919,16920,16922],{"class":91,"line":124},[89,16921,11890],{"class":241},[89,16923,11893],{"class":102},[89,16925,16926,16928,16930,16932],{"class":91,"line":130},[89,16927,11898],{"class":241},[89,16929,11901],{"class":106},[89,16931,11904],{"class":102},[89,16933,11907],{"class":106},[89,16935,16936,16938,16940],{"class":91,"line":142},[89,16937,11827],{"class":241},[89,16939,11914],{"class":102},[89,16941,5806],{"class":306},[89,16943,16944,16946,16948,16950,16952],{"class":91,"line":147},[89,16945,12151],{"class":306},[89,16947,12154],{"class":102},[89,16949,307],{"class":306},[89,16951,16639],{"class":106},[89,16953,392],{"class":306},[89,16955,16956],{"class":91,"line":153},[89,16957,831],{"class":306},[47,16959,16960,16966,16972,16979,16990],{},[50,16961,16962,16965],{},[19,16963,16964],{},"\u002F**\u002F","：為多行註解",[50,16967,16968,16971],{},[19,16969,16970],{},"\u002F\u002F"," ：為單行注解",[50,16973,16974,16975,16978],{},"package：是 Go lang 來定義 namespace 的方式，可以用來避免與第三方套件名稱衝突，若所開發為應用程式，則用 ",[19,16976,16977],{},"main","，若開發的為函式庫，則由開發者自行命名。",[50,16980,16981,16983,16984,16986,16987,16989],{},[19,16982,11898],{}," ：引入函式庫用，包含 Go lang 的標準函式庫或是第三方開發的函式庫，都可以用 ",[19,16985,11898],{}," 引入，而範例中 ",[19,16988,11904],{}," 為 Go lang 的基本輸入輸出的函式庫",[50,16991,16992,16995],{},[19,16993,16994],{},"func main","：為主程式進入點，程式執行時，會先執行該段程式",[11,16997,16998],{"id":16998},"進行編譯",[80,17000,17002],{"className":82,"code":17001,"language":84,"meta":85,"style":85},"go build hello.go\n",[19,17003,17004],{"__ignoreMap":85},[89,17005,17006,17008,17011],{"class":91,"line":92},[89,17007,11820],{"class":102},[89,17009,17010],{"class":106}," build",[89,17012,16892],{"class":106},[11,17014,17015],{"id":17015},"執行程式",[80,17017,17019],{"className":82,"code":17018,"language":84,"meta":85,"style":85},".\u002Fhello\n",[19,17020,17021],{"__ignoreMap":85},[89,17022,17023],{"class":91,"line":92},[89,17024,17018],{"class":102},[11,17026,7474],{"id":7474},[80,17028,17030],{"className":82,"code":17029,"language":84,"meta":85,"style":85},"Hello world\n",[19,17031,17032],{"__ignoreMap":85},[89,17033,17034,17036],{"class":91,"line":92},[89,17035,12024],{"class":102},[89,17037,17038],{"class":106}," world\n",[1728,17040,17041],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}",{"title":85,"searchDepth":99,"depth":99,"links":17043},[17044,17045,17046,17047,17048,17049],{"id":16856,"depth":99,"text":16856},{"id":16872,"depth":99,"text":16872},{"id":16895,"depth":99,"text":16895},{"id":16998,"depth":99,"text":16998},{"id":17015,"depth":99,"text":17015},{"id":7474,"depth":99,"text":7474},{},"\u002Farticles\u002F2023-02-27-hello-world","2023-02-27 22:28:00",{"title":16847,"description":85},"articles\u002F2023-02-27-hello-world","Go語言一些基本操作",[11820],"AGAAFRb7gZGddzu0isU-2bKBkb4OTw3OC0QkXbImczw",{"id":17059,"title":17060,"body":17061,"category":1748,"description":85,"extension":1749,"image":12678,"meta":17369,"navigation":120,"path":17370,"pubDate":17371,"seo":17372,"status":120,"stem":17373,"summary":17374,"tags":17375,"__hash__":17376},"content\u002Farticles\u002F2023-02-26-go-lang-setup.md","《Go 學習筆記1》開發環境建置",{"type":8,"value":17062,"toc":17361},[17063,17067,17070,17074,17080,17083,17089,17095,17098,17101,17105,17114,17128,17132,17141,17155,17159,17164,17168,17194,17203,17208,17249,17258,17276,17281,17318,17321,17324,17336,17340,17358],[862,17064,17065],{},[15,17066,11809],{},[15,17068,17069],{},"先從安裝開發環境",[11,17071,17073],{"id":17072},"go-語言官網","Go 語言官網",[15,17075,17076],{},[26,17077,17078],{"href":17078,"rel":17079},"https:\u002F\u002Fgo.dev\u002F",[30],[11,17081,17082],{"id":17082},"官網下載頁",[15,17084,17085],{},[26,17086,17087],{"href":17087,"rel":17088},"https:\u002F\u002Fgo.dev\u002Fdl\u002F",[30],[15,17090,17091],{},[2662,17092],{"alt":17093,"src":17094},"alt Go語言下載","\u002Farticles\u002F2023-02-26-go-lang-setup\u002FPasted-image-20230124103550.png",[15,17096,17097],{},"基本上 Windows 和 MacOS 只要下載相對應的的版本，然後依安裝精靈，一步一步安裝裝即可。",[15,17099,17100],{},"也可以用指令安裝",[11,17102,17104],{"id":17103},"windows-指令安裝","Windows 指令安裝",[15,17106,17107,17108,17113],{},"在 Windows 環境下，要透過指令安裝，可以用安裝 ",[26,17109,17112],{"href":17110,"rel":17111},"https:\u002F\u002Fchocolatey.org\u002F",[30],"chocolate"," 後，以下面指令安裝",[80,17115,17117],{"className":82,"code":17116,"language":84,"meta":85,"style":85},"choco install golang\n",[19,17118,17119],{"__ignoreMap":85},[89,17120,17121,17123,17125],{"class":91,"line":92},[89,17122,3248],{"class":102},[89,17124,107],{"class":106},[89,17126,17127],{"class":106}," golang\n",[11,17129,17131],{"id":17130},"macos-指令安裝","MacOS 指令安裝",[15,17133,17134,17135,17140],{},"在 MacOS 環境下，則可透過 ",[26,17136,17139],{"href":17137,"rel":17138},"https:\u002F\u002Fbrew.sh\u002Findex_zh-tw",[30],"Homebrew"," 這個套件管理工具，進行安裝，指令如下：",[80,17142,17144],{"className":82,"code":17143,"language":84,"meta":85,"style":85},"brew install go\n",[19,17145,17146],{"__ignoreMap":85},[89,17147,17148,17150,17152],{"class":91,"line":92},[89,17149,180],{"class":102},[89,17151,107],{"class":106},[89,17153,17154],{"class":106}," go\n",[11,17156,17158],{"id":17157},"linux-指令安裝","Linux 指令安裝",[15,17160,17161],{},[2510,17162,17163],{},"一般 Linux",[1995,17165,17166],{},[50,17167,9771],{},[80,17169,17171],{"className":82,"code":17170,"language":84,"meta":85,"style":85},"wget https:\u002F\u002Fdl.google.com\u002Fgo\u002Fgo\u003C版本號>linux-amd64.tar.gz\n",[19,17172,17173],{"__ignoreMap":85},[89,17174,17175,17178,17181,17183,17186,17189,17191],{"class":91,"line":92},[89,17176,17177],{"class":102},"wget",[89,17179,17180],{"class":106}," https:\u002F\u002Fdl.google.com\u002Fgo\u002Fgo",[89,17182,5149],{"class":241},[89,17184,17185],{"class":106},"版本",[89,17187,17188],{"class":306},"號",[89,17190,5889],{"class":241},[89,17192,17193],{"class":106},"linux-amd64.tar.gz\n",[47,17195,17196],{},[50,17197,17198,17199,17202],{},"版本號：可至 ",[26,17200,17082],{"href":17087,"rel":17201},[30]," 查詢可安裝的版本號",[1995,17204,17205],{"start":99},[50,17206,17207],{},"解壓縮",[80,17209,17211],{"className":82,"code":17210,"language":84,"meta":85,"style":85},"   sudo tar -xvf go\u003C版本號>linux-amd64.tar.gz\n   sudo mv go \u002Fusr\u002Flocal\n",[19,17212,17213,17237],{"__ignoreMap":85},[89,17214,17215,17218,17221,17224,17227,17229,17231,17233,17235],{"class":91,"line":92},[89,17216,17217],{"class":102},"   sudo",[89,17219,17220],{"class":106}," tar",[89,17222,17223],{"class":110}," -xvf",[89,17225,17226],{"class":106}," go",[89,17228,5149],{"class":241},[89,17230,17185],{"class":106},[89,17232,17188],{"class":306},[89,17234,5889],{"class":241},[89,17236,17193],{"class":106},[89,17238,17239,17241,17244,17246],{"class":91,"line":99},[89,17240,17217],{"class":102},[89,17242,17243],{"class":106}," mv",[89,17245,17226],{"class":106},[89,17247,17248],{"class":106}," \u002Fusr\u002Flocal\n",[1995,17250,17251],{"start":117},[50,17252,17253,17254,17257],{},"設定環境變數\n在 ",[19,17255,17256],{},"~\u002F.profile"," 最後一行加上",[80,17259,17261],{"className":82,"code":17260,"language":84,"meta":85,"style":85},"   export PATH=$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin\n",[19,17262,17263],{"__ignoreMap":85},[89,17264,17265,17268,17271,17273],{"class":91,"line":92},[89,17266,17267],{"class":241},"   export",[89,17269,17270],{"class":306}," PATH",[89,17272,313],{"class":241},[89,17274,17275],{"class":306},"$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin\n",[15,17277,17278],{},[2510,17279,17280],{},"Ubuntu 指令安裝",[80,17282,17284],{"className":82,"code":17283,"language":84,"meta":85,"style":85},"sudo add-apt-repository ppa:longsleep\u002Fgolang-backports\nsudo apt update\nsudo apt install golang-go\n",[19,17285,17286,17297,17307],{"__ignoreMap":85},[89,17287,17288,17291,17294],{"class":91,"line":92},[89,17289,17290],{"class":102},"sudo",[89,17292,17293],{"class":106}," add-apt-repository",[89,17295,17296],{"class":106}," ppa:longsleep\u002Fgolang-backports\n",[89,17298,17299,17301,17304],{"class":91,"line":99},[89,17300,17290],{"class":102},[89,17302,17303],{"class":106}," apt",[89,17305,17306],{"class":106}," update\n",[89,17308,17309,17311,17313,17315],{"class":91,"line":117},[89,17310,17290],{"class":102},[89,17312,17303],{"class":106},[89,17314,107],{"class":106},[89,17316,17317],{"class":106}," golang-go\n",[11,17319,17320],{"id":17320},"安裝環境測試",[15,17322,17323],{},"使用下列指令，即可知道安裝環境是否成功，亦可知曉安裝版本號",[80,17325,17327],{"className":82,"code":17326,"language":84,"meta":85,"style":85},"go version\n",[19,17328,17329],{"__ignoreMap":85},[89,17330,17331,17333],{"class":91,"line":92},[89,17332,11820],{"class":102},[89,17334,17335],{"class":106}," version\n",[15,17337,17338],{},[2510,17339,7474],{},[80,17341,17343],{"className":82,"code":17342,"language":84,"meta":85,"style":85},"go version go1.20.1 darwin\u002Farm64\n",[19,17344,17345],{"__ignoreMap":85},[89,17346,17347,17349,17352,17355],{"class":91,"line":92},[89,17348,11820],{"class":102},[89,17350,17351],{"class":106}," version",[89,17353,17354],{"class":106}," go1.20.1",[89,17356,17357],{"class":106}," darwin\u002Farm64\n",[1728,17359,17360],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}",{"title":85,"searchDepth":99,"depth":99,"links":17362},[17363,17364,17365,17366,17367,17368],{"id":17072,"depth":99,"text":17073},{"id":17082,"depth":99,"text":17082},{"id":17103,"depth":99,"text":17104},{"id":17130,"depth":99,"text":17131},{"id":17157,"depth":99,"text":17158},{"id":17320,"depth":99,"text":17320},{},"\u002Farticles\u002F2023-02-26-go-lang-setup","2023-02-26 22:07:00",{"title":17060,"description":85},"articles\u002F2023-02-26-go-lang-setup","Go語言開發環境建置",[11820],"1MsaGwXGPaKjHByWDr40lLNGtsFtegUMCMt7bttsgQ8",{"id":17378,"title":17379,"body":17380,"category":9682,"description":17747,"extension":1749,"image":17748,"meta":17749,"navigation":120,"path":17750,"pubDate":17751,"seo":17752,"status":120,"stem":17753,"summary":17754,"tags":17755,"__hash__":17757},"content\u002Farticles\u002F2023-01-17-docker-postgresql-import-export.md","Docker 裡的 Postgresql 的匯入與匯出",{"type":8,"value":17381,"toc":17743},[17382,17391,17394,17401,17408,17411,17485,17517,17520,17526,17532,17535,17604,17626,17633,17635,17710,17740],[15,17383,17384,17385,17390],{},"我們可以用 ",[26,17386,17389],{"href":17387,"rel":17388},"https:\u002F\u002Fhub.docker.com\u002F_\u002Fadminer",[30],"Adminer"," 這個資料庫管理工具，來進行匯入匯出，但檔案太大時，用 Adminer 就會顯得力不從心，而我們另外一個選擇，就是透過指令匯入匯出 SQL 檔。",[11,17392,17393],{"id":17393},"匯入",[15,17395,17396,17397,17400],{},"要將 SQL 檔案匯入到 Docker 內的 PostgreSQL 資料庫，您可以使用 ",[19,17398,17399],{},"docker exec","指令來執行 SQL 檔案。首先，確保您已經在 Docker 內運行 PostgreSQL 資料庫，並且已經知道資料庫的容器名稱。",[15,17402,17403,17404,17407],{},"而 Postgresql 要匯入 SQL 檔時，我們會使用 ",[19,17405,17406],{},"psql"," 這個指令",[15,17409,17410],{},"完整指令與參數如下：",[80,17412,17414],{"className":82,"code":17413,"language":84,"meta":85,"style":85},"docker exec -i \u003Ccontainer_name> psql -U \u003Cusername> -d \u003Cdatabase_name> -n \u003Cschema_name> \u003C \u003Csql_file>.sql\n",[19,17415,17416],{"__ignoreMap":85},[89,17417,17418,17420,17423,17425,17427,17430,17432,17434,17437,17440,17442,17445,17447,17449,17451,17453,17456,17458,17460,17462,17464,17467,17469,17471,17473,17475,17478,17480,17482],{"class":91,"line":92},[89,17419,8775],{"class":102},[89,17421,17422],{"class":106}," exec",[89,17424,4408],{"class":110},[89,17426,8623],{"class":241},[89,17428,17429],{"class":106},"container_nam",[89,17431,7284],{"class":306},[89,17433,5889],{"class":241},[89,17435,17436],{"class":106}," psql",[89,17438,17439],{"class":110}," -U",[89,17441,8623],{"class":241},[89,17443,17444],{"class":106},"usernam",[89,17446,7284],{"class":306},[89,17448,5889],{"class":241},[89,17450,9958],{"class":110},[89,17452,8623],{"class":241},[89,17454,17455],{"class":106},"database_nam",[89,17457,7284],{"class":306},[89,17459,5889],{"class":241},[89,17461,7759],{"class":110},[89,17463,8623],{"class":241},[89,17465,17466],{"class":106},"schema_nam",[89,17468,7284],{"class":306},[89,17470,5889],{"class":241},[89,17472,8623],{"class":241},[89,17474,8623],{"class":241},[89,17476,17477],{"class":106},"sql_fil",[89,17479,7284],{"class":306},[89,17481,5889],{"class":241},[89,17483,17484],{"class":106},".sql\n",[47,17486,17487,17493,17499,17505,17511],{},[50,17488,17489,17492],{},[19,17490,17491],{},"container_name","：PostgreSQL 容器的名稱",[50,17494,17495,17498],{},[19,17496,17497],{},"username","：資料庫中使用的使用者名稱",[50,17500,17501,17504],{},[19,17502,17503],{},"database_name","： 資料庫名稱",[50,17506,17507,17510],{},[19,17508,17509],{},"schema_name","：要匯入 SQL 檔案的 schema 名稱",[50,17512,17513,17516],{},[19,17514,17515],{},"sql_file","：SQL 檔案 路徑",[11,17518,17519],{"id":17519},"匯出",[15,17521,17522,17523,17525],{},"要將 Docker 裡 Postgresql 服務器中的資料匯出時，我們一樣要使用 ",[19,17524,17399],{}," 這個指令，一樣我們先確認 Docker 內的 Postgresql 資料庫是正常運作。",[15,17527,17528,17529,17407],{},"而 Postgresql 要匯出 SQL 檔時，我們會使用 ",[19,17530,17531],{},"pg_dump",[15,17533,17534],{},"完整指令如下：",[80,17536,17538],{"className":82,"code":17537,"language":84,"meta":85,"style":85},"docker exec -i \u003Ccontainer_name> pg_dump -U \u003Cusername> -d \u003Cusername> -n \u003Cschema_name> > \u003Csql_path>.sql\n",[19,17539,17540],{"__ignoreMap":85},[89,17541,17542,17544,17546,17548,17550,17552,17554,17556,17559,17561,17563,17565,17567,17569,17571,17573,17575,17577,17579,17581,17583,17585,17587,17589,17592,17594,17597,17600,17602],{"class":91,"line":92},[89,17543,8775],{"class":102},[89,17545,17422],{"class":106},[89,17547,4408],{"class":110},[89,17549,8623],{"class":241},[89,17551,17429],{"class":106},[89,17553,7284],{"class":306},[89,17555,5889],{"class":241},[89,17557,17558],{"class":106}," pg_dump",[89,17560,17439],{"class":110},[89,17562,8623],{"class":241},[89,17564,17444],{"class":106},[89,17566,7284],{"class":306},[89,17568,5889],{"class":241},[89,17570,9958],{"class":110},[89,17572,8623],{"class":241},[89,17574,17444],{"class":106},[89,17576,7284],{"class":306},[89,17578,5889],{"class":241},[89,17580,7759],{"class":110},[89,17582,8623],{"class":241},[89,17584,17466],{"class":106},[89,17586,7284],{"class":306},[89,17588,5889],{"class":241},[89,17590,17591],{"class":241}," >",[89,17593,8623],{"class":241},[89,17595,17596],{"class":106},"sql_pat",[89,17598,17599],{"class":306},"h",[89,17601,5889],{"class":241},[89,17603,17484],{"class":106},[47,17605,17606,17610,17614,17618,17622],{},[50,17607,17608,17492],{},[19,17609,17491],{},[50,17611,17612,17498],{},[19,17613,17497],{},[50,17615,17616,17504],{},[19,17617,17503],{},[50,17619,17620,17510],{},[19,17621,17509],{},[50,17623,17624,17516],{},[19,17625,17515],{},[15,17627,17628,17629,17632],{},"而我們也可以在匯出時，直接匯出 gzip 壓縮檔，只要我們加上 ",[19,17630,17631],{},"pipe line gzip"," 的指令即可",[15,17634,17534],{},[80,17636,17638],{"className":82,"code":17637,"language":84,"meta":85,"style":85},"docker exec -i \u003Ccontainer_name> pg_dump -U \u003Cusername> -d \u003Cusername> -n \u003Cschema_name> | gzip -9 > \u003Czip_path>.sql.gz\n",[19,17639,17640],{"__ignoreMap":85},[89,17641,17642,17644,17646,17648,17650,17652,17654,17656,17658,17660,17662,17664,17666,17668,17670,17672,17674,17676,17678,17680,17682,17684,17686,17688,17690,17693,17696,17698,17700,17703,17705,17707],{"class":91,"line":92},[89,17643,8775],{"class":102},[89,17645,17422],{"class":106},[89,17647,4408],{"class":110},[89,17649,8623],{"class":241},[89,17651,17429],{"class":106},[89,17653,7284],{"class":306},[89,17655,5889],{"class":241},[89,17657,17558],{"class":106},[89,17659,17439],{"class":110},[89,17661,8623],{"class":241},[89,17663,17444],{"class":106},[89,17665,7284],{"class":306},[89,17667,5889],{"class":241},[89,17669,9958],{"class":110},[89,17671,8623],{"class":241},[89,17673,17444],{"class":106},[89,17675,7284],{"class":306},[89,17677,5889],{"class":241},[89,17679,7759],{"class":110},[89,17681,8623],{"class":241},[89,17683,17466],{"class":106},[89,17685,7284],{"class":306},[89,17687,5889],{"class":241},[89,17689,242],{"class":241},[89,17691,17692],{"class":102}," gzip",[89,17694,17695],{"class":110}," -9",[89,17697,17591],{"class":241},[89,17699,8623],{"class":241},[89,17701,17702],{"class":106},"zip_pat",[89,17704,17599],{"class":306},[89,17706,5889],{"class":241},[89,17708,17709],{"class":106},".sql.gz\n",[47,17711,17712,17716,17720,17724,17728,17734],{},[50,17713,17714,17492],{},[19,17715,17491],{},[50,17717,17718,17498],{},[19,17719,17497],{},[50,17721,17722,17504],{},[19,17723,17503],{},[50,17725,17726,17510],{},[19,17727,17509],{},[50,17729,17730,17733],{},[19,17731,17732],{},"zip_path"," ：壓縮檔路徑",[50,17735,17736,17739],{},[19,17737,17738],{},"-9","：為壓縮等級，範圍為 0~9，其中 0 為不壓縮僅打包，9 為最高壓縮等級，這裡也可以不指定壓縮等級，它則會以預設 6 來進行壓縮",[1728,17741,17742],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":85,"searchDepth":99,"depth":99,"links":17744},[17745,17746],{"id":17393,"depth":99,"text":17393},{"id":17519,"depth":99,"text":17519},"我們可以用 Adminer 這個資料庫管理工具，來進行匯入匯出，但檔案太大時，用 Adminer 就會顯得力不從心，而我們另外一個選擇，就是透過指令匯入匯出 SQL 檔。","\u002Fimages\u002Farticles\u002F2023-01-17-docker-postgresql-import-export\u002Fcover.png",{},"\u002Farticles\u002F2023-01-17-docker-postgresql-import-export","2023-01-17 11:12:00",{"title":17379,"description":17747},"articles\u002F2023-01-17-docker-postgresql-import-export","在 Docker 的環境，如何匯入匯出 Postgresql",[17756,8776],"PostgreSQL","jNGUE7713QOJ1uS2wd7Q70oQzHSviRpYIk8u2R8U67Y",{"id":17759,"title":17760,"body":17761,"category":18172,"description":85,"extension":1749,"image":18173,"meta":18174,"navigation":120,"path":18175,"pubDate":18176,"seo":18177,"status":120,"stem":18178,"summary":18179,"tags":18180,"__hash__":18181},"content\u002Farticles\u002F2022-05-28-front-end-tool.md","2022 前端常用的套件與工具",{"type":8,"value":17762,"toc":18161},[17763,17766,17769,17772,17780,17783,17802,17812,17815,17901,17904,17918,17920,17923,17926,17931,17947,17952,17965,17970,18024,18027,18041,18047,18050,18053,18064,18067,18073,18077,18080,18086,18090,18093,18099,18103,18106,18123,18129,18132,18136,18139,18145,18149,18152,18158],[11,17764,17765],{"id":17765},"nvm",[15,17767,17768],{},"NVM 是 Node Version Manager 的縮寫，主要功能就可以快速切換 Node.js 版本。",[15,17770,17771],{},"使用場景：",[1995,17773,17774,17777],{},[50,17775,17776],{},"維護多個不同時期所開發專案",[50,17778,17779],{},"編譯老舊專案",[15,17781,17782],{},"Linux \u002F MacOS 安裝方式",[80,17784,17786],{"className":82,"code":17785,"language":84,"meta":85,"style":85},"curl -o- https:\u002F\u002Fraw.githubusercontent.com\u002Fnvm-sh\u002Fnvm\u002Fv0.39.1\u002Finstall.sh | bash\n",[19,17787,17788],{"__ignoreMap":85},[89,17789,17790,17792,17795,17798,17800],{"class":91,"line":92},[89,17791,2778],{"class":102},[89,17793,17794],{"class":110}," -o-",[89,17796,17797],{"class":106}," https:\u002F\u002Fraw.githubusercontent.com\u002Fnvm-sh\u002Fnvm\u002Fv0.39.1\u002Finstall.sh",[89,17799,242],{"class":241},[89,17801,2789],{"class":102},[15,17803,17804,17805,17808,17809],{},"在終端機設定檔 bash 環境下編輯 ",[19,17806,17807],{},"~\u002F.bashrc"," 或 zsh 環境下編輯 ",[19,17810,17811],{},"~\u002F.zshrc",[15,17813,17814],{},"在文件內加入以下設定：",[80,17816,17818],{"className":82,"code":17817,"language":84,"meta":85,"style":85},"export NVM_DIR=\"$([ -z \"${XDG_CONFIG_HOME-}\" ] && printf %s \"${HOME}\u002F.nvm\" || printf %s \"${XDG_CONFIG_HOME}\u002Fnvm\")\"\n[ -s \"$NVM_DIR\u002Fnvm.sh\" ] && \\. \"$NVM_DIR\u002Fnvm.sh\" # This loads nvm\n",[19,17819,17820,17870],{"__ignoreMap":85},[89,17821,17822,17825,17828,17830,17833,17836,17839,17842,17845,17847,17850,17853,17856,17859,17862,17864,17867],{"class":91,"line":92},[89,17823,17824],{"class":241},"export",[89,17826,17827],{"class":306}," NVM_DIR",[89,17829,313],{"class":241},[89,17831,17832],{"class":106},"\"$([ ",[89,17834,17835],{"class":241},"-z",[89,17837,17838],{"class":106}," \"${",[89,17840,17841],{"class":306},"XDG_CONFIG_HOME-",[89,17843,17844],{"class":106},"}\" ] && ",[89,17846,10215],{"class":110},[89,17848,17849],{"class":106}," %s \"${",[89,17851,17852],{"class":306},"HOME",[89,17854,17855],{"class":106},"}\u002F.nvm\" ",[89,17857,17858],{"class":241},"||",[89,17860,17861],{"class":110}," printf",[89,17863,17849],{"class":106},[89,17865,17866],{"class":306},"XDG_CONFIG_HOME",[89,17868,17869],{"class":106},"}\u002Fnvm\")\"\n",[89,17871,17872,17875,17878,17880,17883,17886,17889,17892,17894,17896,17898],{"class":91,"line":99},[89,17873,17874],{"class":306},"[ ",[89,17876,17877],{"class":241},"-s",[89,17879,11901],{"class":106},[89,17881,17882],{"class":306},"$NVM_DIR",[89,17884,17885],{"class":106},"\u002Fnvm.sh\"",[89,17887,17888],{"class":306}," ] && ",[89,17890,17891],{"class":102},"\\.",[89,17893,11901],{"class":106},[89,17895,17882],{"class":306},[89,17897,17885],{"class":106},[89,17899,17900],{"class":95}," # This loads nvm\n",[15,17902,17903],{},"然後執行下面指令",[47,17905,17906,17912],{},[50,17907,17908,17909],{},"bash：",[19,17910,17911],{},"source ~\u002F.bashrc",[50,17913,17914,17915],{},"zsh: ",[19,17916,17917],{},"source ~\u002F.zshrc",[11,17919,3370],{"id":3370},[15,17921,17922],{},"是 Facebook 所開發的前端工具，是 Node.js 的套件管理，算是 npm 的替代品，優點是速度較快。",[15,17924,17925],{},"安裝方式：",[15,17927,17928],{},[2510,17929,17930],{},"使用 npm 安裝",[80,17932,17934],{"className":82,"code":17933,"language":84,"meta":85,"style":85},"npm install -g yarn\n",[19,17935,17936],{"__ignoreMap":85},[89,17937,17938,17940,17942,17944],{"class":91,"line":92},[89,17939,3285],{"class":102},[89,17941,107],{"class":106},[89,17943,3290],{"class":110},[89,17945,17946],{"class":106}," yarn\n",[15,17948,17949],{},[2510,17950,17951],{},"MacOS安裝",[80,17953,17955],{"className":82,"code":17954,"language":84,"meta":85,"style":85},"brew install yarn\n",[19,17956,17957],{"__ignoreMap":85},[89,17958,17959,17961,17963],{"class":91,"line":92},[89,17960,180],{"class":102},[89,17962,107],{"class":106},[89,17964,17946],{"class":106},[15,17966,17967],{},[2510,17968,17969],{},"Ubuntu安裝",[80,17971,17973],{"className":82,"code":17972,"language":84,"meta":85,"style":85},"curl -sS https:\u002F\u002Fdl.yarnpkg.com\u002Fdebian\u002Fpubkey.gpg | sudo apt-key add -  \n\nsudo apt-get update && sudo apt-get install yarn \n",[19,17974,17975,17999,18003],{"__ignoreMap":85},[89,17976,17977,17979,17982,17985,17987,17990,17993,17995,17997],{"class":91,"line":92},[89,17978,2778],{"class":102},[89,17980,17981],{"class":110}," -sS",[89,17983,17984],{"class":106}," https:\u002F\u002Fdl.yarnpkg.com\u002Fdebian\u002Fpubkey.gpg",[89,17986,242],{"class":241},[89,17988,17989],{"class":102}," sudo",[89,17991,17992],{"class":106}," apt-key",[89,17994,136],{"class":106},[89,17996,4565],{"class":106},[89,17998,2046],{"class":306},[89,18000,18001],{"class":91,"line":99},[89,18002,121],{"emptyLinePlaceholder":120},[89,18004,18005,18007,18010,18013,18016,18018,18020,18022],{"class":91,"line":117},[89,18006,17290],{"class":102},[89,18008,18009],{"class":106}," apt-get",[89,18011,18012],{"class":106}," update",[89,18014,18015],{"class":306}," && ",[89,18017,17290],{"class":102},[89,18019,18009],{"class":106},[89,18021,107],{"class":106},[89,18023,17946],{"class":106},[11,18025,9705],{"id":18026},"nuxtjs",[15,18028,18029,18030,1702,18033,18036,18037,18040],{},"是一個混合式 Vue 框架，支援 ",[2510,18031,18032],{},"服務器渲染(SSR)",[2510,18034,18035],{},"生成靜態頁面","或是",[2510,18038,18039],{},"單頁應用程式(SPA)","，並優化了SEO，也支援 TypeScript。",[15,18042,8703,18043],{},[26,18044,18045],{"href":18045,"rel":18046},"https:\u002F\u002Fnuxtjs.org\u002F",[30],[11,18048,18049],{"id":18049},"tailwindcss",[15,18051,18052],{},"是一個近期相當流行的 Utility Framework，也是我近期最用的 UI 構建工具，其特色包含：",[1995,18054,18055,18058,18061],{},[50,18056,18057],{},"快速上手",[50,18059,18060],{},"快速建置",[50,18062,18063],{},"高度客製化",[15,18065,18066],{},"因為以上特色，真得讓人一用就愛上了。",[15,18068,8703,18069],{},[26,18070,18071],{"href":18071,"rel":18072},"https:\u002F\u002Ftailwindcss.com\u002F",[30],[11,18074,18076],{"id":18075},"bootstrap","Bootstrap",[15,18078,18079],{},"相當知名且老牌的 UI component Framework，可以快速透過各種組件的組合建立 Web App，不過其實近期的專案，我已很少用到 Bootstrap 了。",[15,18081,8703,18082],{},[26,18083,18084],{"href":18084,"rel":18085},"https:\u002F\u002Fgetbootstrap.com\u002F",[30],[11,18087,18089],{"id":18088},"element-ui","element UI",[15,18091,18092],{},"這是我也滿喜歡的一個 UI component Framework，相對於 Bootstrap 它的組件更加豐富，特別適合拿來做管理介面。",[15,18094,8703,18095],{},[26,18096,18097],{"href":18097,"rel":18098},"https:\u002F\u002Felement.eleme.io\u002F",[30],[11,18100,18102],{"id":18101},"momentjs","Moment.js",[15,18104,18105],{},"是一個專門處理日期與時間的Library，功能包含了：",[1995,18107,18108,18111,18114,18117,18120],{},[50,18109,18110],{},"日期時間格式化",[50,18112,18113],{},"日期時間相減運算",[50,18115,18116],{},"相對時間時間",[50,18118,18119],{},"時區轉換",[50,18121,18122],{},"支持多語系",[15,18124,8703,18125],{},[26,18126,18127],{"href":18127,"rel":18128},"https:\u002F\u002Fmomentjs.com\u002F",[30],[15,18130,18131],{},"對於日期時間的處理，Moment.js 幾乎都可以滿足",[11,18133,18135],{"id":18134},"lodash","Lodash",[15,18137,18138],{},"在用 javascript 做資料處理，Lodash 可以幫我們省去很多時間。",[15,18140,8703,18141],{},[26,18142,18143],{"href":18143,"rel":18144},"https:\u002F\u002Flodash.com\u002F",[30],[11,18146,18148],{"id":18147},"apache-echarts","Apache ECharts",[15,18150,18151],{},"這是一個開源的繪圖工具，當做數據分析時，需要圖表統計時，ECharts 是不錯的選擇",[15,18153,8703,18154],{},[26,18155,18156],{"href":18156,"rel":18157},"https:\u002F\u002Fecharts.apache.org\u002F",[30],[1728,18159,18160],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":85,"searchDepth":99,"depth":99,"links":18162},[18163,18164,18165,18166,18167,18168,18169,18170,18171],{"id":17765,"depth":99,"text":17765},{"id":3370,"depth":99,"text":3370},{"id":18026,"depth":99,"text":9705},{"id":18049,"depth":99,"text":18049},{"id":18075,"depth":99,"text":18076},{"id":18088,"depth":99,"text":18089},{"id":18101,"depth":99,"text":18102},{"id":18134,"depth":99,"text":18135},{"id":18147,"depth":99,"text":18148},"frontend","\u002Fimages\u002Farticles\u002F2022-06-03-frontend-tool\u002Fcover.png",{},"\u002Farticles\u002F2022-05-28-front-end-tool","2022-05-28 11:00:00",{"title":17760,"description":85},"articles\u002F2022-05-28-front-end-tool","這裡收集了我開發前端時，常用的套件與工具",[5569,5127,5387],"aULNoAsXNxW4_qR3-D3eYMi5LPuZ1DlIjYcmbq496Kw",{"id":18183,"title":18184,"body":18185,"category":3116,"description":85,"extension":1749,"image":18293,"meta":18294,"navigation":120,"path":18295,"pubDate":18296,"seo":18297,"status":120,"stem":18298,"summary":18299,"tags":18300,"__hash__":18301},"content\u002Farticles\u002F2022-04-27-develop-tool.md","開發環境工具介紹-環境篇",{"type":8,"value":18186,"toc":18284},[18187,18189,18192,18198,18202,18205,18212,18216,18219,18225,18227,18230,18236,18239,18242,18249,18251,18254,18261,18265,18276],[11,18188,8776],{"id":8775},[15,18190,18191],{},"有別於傳統虛擬機以作業系統為中心，Docker 則是以應用程式為中心，在達成虛擬化，並不需要完整載入完整的 Guest OS，而只要啟用應用層級程式及相關函式，因此其優勢，不需完整安裝 Guest OS 節省硬碟資源，另外啟用速度快，也是其最大優勢。",[15,18193,8703,18194],{},[26,18195,18197],{"href":8784,"rel":18196},[30],"Home - Docker",[11,18199,18201],{"id":18200},"laradock","Laradock",[15,18203,18204],{},"這應該在 Docker 上最完整的 PHP 開發環境。支持各版本 PHP 切換，支援主流資料庫，如 MySQL、Postgres、MariaDB及各種常用伺服器服務。",[15,18206,18207,18208],{},"官網： ",[26,18209,18210],{"href":18210,"rel":18211},"https:\u002F\u002Flaradock.io\u002F",[30],[11,18213,18215],{"id":18214},"visual-studio-code","Visual Studio Code",[15,18217,18218],{},"微軟開發的開源文字編器，相當受社群歡迎，支援 Windows、MacOS、Linux 三大主流作業系統。另外有各種插件可使用，功能不輸需要付費的IDE。",[15,18220,8703,18221],{},[26,18222,18224],{"href":8706,"rel":18223},[30],"Visual Studio Code - Code Editing. Redefined",[11,18226,8737],{"id":8736},[15,18228,18229],{},"相當知名的 Rest API 測試工具，支援各種API認證、常用的 http method，及常用 Http 的 Authorizing",[15,18231,8703,18232],{},[26,18233,18235],{"href":8745,"rel":18234},[30],"Postman API Platform | Sign Up for Free",[11,18237,18238],{"id":7792},"Git",[15,18240,18241],{},"是一個免費且開源的版控軟體，是目前最主流的版控軟體，支援MacOS、Ｗindows、Linux多平台",[15,18243,8703,18244],{},[26,18245,18248],{"href":18246,"rel":18247},"https:\u002F\u002Fgit-scm.com\u002F",[30],"Git (git-scm.com)",[11,18250,8750],{"id":8749},[15,18252,18253],{},"Git 知名的原始碼代管服務平台，所發行 Git GUI 免費軟體，目前提供 Windows 和 MacOS，介面相當友善， 對 Git 的功能支援的相當完整，很適合 Git 初心者使用。",[15,18255,8703,18256],{},[26,18257,18260],{"href":18258,"rel":18259},"https:\u002F\u002Fdesktop.github.com\u002F",[30],"GitHub Desktop | Simple collaboration from your desktop",[11,18262,18264],{"id":18263},"zsh-command-line-oh-my-zsh","zsh Command Line + oh my zsh",[15,18266,18267,18268,4812,18270,18272,18273,18275],{},"開發網站時常要用到 Command Line，雖然 ",[19,18269,3125],{},[19,18271,4811],{}," 都支援 ",[19,18274,84],{},"，但更喜歡 zsh + oh my zsh 各種插件，針對 git 優化，指令提醒功能，甚致可以顯示CPU、記憶體使用量等潮到爆的功能，你也可自訂佈景，讓你的 Command Line 呈現簡約風格。",[15,18277,18278,18279],{},"官綱：",[26,18280,18283],{"href":18281,"rel":18282},"https:\u002F\u002Fohmyz.sh\u002F",[30],"Oh My zsh官網",{"title":85,"searchDepth":99,"depth":99,"links":18285},[18286,18287,18288,18289,18290,18291,18292],{"id":8775,"depth":99,"text":8776},{"id":18200,"depth":99,"text":18201},{"id":18214,"depth":99,"text":18215},{"id":8736,"depth":99,"text":8737},{"id":7792,"depth":99,"text":18238},{"id":8749,"depth":99,"text":8750},{"id":18263,"depth":99,"text":18264},"\u002Fimages\u002Farticles\u002F2022-04-27-develop-tool\u002Fcover.png",{},"\u002Farticles\u002F2022-04-27-develop-tool","2022-04-27 12:00:00",{"title":18184,"description":85},"articles\u002F2022-04-27-develop-tool","記錄自已在網站開發時，常用的工具",[3116],"vI9Ah-vhtRDUUlZPJuEb9VQPYrnvz4BqrjLqFerjxAY",{"id":18303,"title":18304,"body":18305,"category":3116,"description":85,"extension":1749,"image":18664,"meta":18665,"navigation":120,"path":18666,"pubDate":18667,"seo":18668,"status":120,"stem":18669,"summary":18670,"tags":18671,"__hash__":18672},"content\u002Farticles\u002F2022-04-10-mac-os-tool.md","大推！MacOS 上好用軟體集",{"type":8,"value":18306,"toc":18646},[18307,18311,18327,18333,18335,18357,18360,18370,18375,18377,18384,18410,18417,18420,18436,18438,18441,18458,18461,18467,18474,18478,18481,18487,18489,18495,18501,18503,18513,18518,18520,18523,18528,18532,18535,18541,18547,18549,18565,18567,18570,18575,18577,18580,18585,18589,18592,18595,18600,18604,18607,18612,18614,18617,18622,18624,18627,18632,18634,18637,18643],[11,18308,18310],{"id":18309},"homebrew","HomeBrew",[15,18312,18313,18314,18317,18318,18321,18322,18317,18325],{},"MacOS 上的套件管理，類似 ",[2510,18315,18316],{},"Ubuntu"," 上的 ",[19,18319,18320],{},"apt"," 或是 ",[2510,18323,18324],{},"CentOS",[19,18326,156],{},[15,18328,8703,18329],{},[26,18330,18331],{"href":18331,"rel":18332},"https:\u002F\u002Fbrew.sh",[30],[15,18334,17925],{},[80,18336,18338],{"className":82,"code":18337,"language":84,"meta":85,"style":85},"\u002Fbin\u002Fbash -c \"$(curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FHomebrew\u002Finstall\u002FHEAD\u002Finstall.sh)\"\n",[19,18339,18340],{"__ignoreMap":85},[89,18341,18342,18345,18347,18350,18352,18354],{"class":91,"line":92},[89,18343,18344],{"class":102},"\u002Fbin\u002Fbash",[89,18346,4578],{"class":110},[89,18348,18349],{"class":106}," \"$(",[89,18351,2778],{"class":102},[89,18353,2781],{"class":110},[89,18355,18356],{"class":106}," https:\u002F\u002Fraw.githubusercontent.com\u002FHomebrew\u002Finstall\u002FHEAD\u002Finstall.sh)\"\n",[11,18358,18359],{"id":8710},"iTerm2",[15,18361,18362,18363,18365,18366,18369],{},"雖然MacOS有內建terminal，但 ",[19,18364,18359],{},"更加強大，再加上 ",[19,18367,18368],{},"zsh","，真得是開發者必裝軟體",[15,18371,8703,18372],{},[26,18373,8719],{"href":8719,"rel":18374},[30],[11,18376,9008],{"id":9007},[15,18378,18379,18380,18383],{},"好用且",[2510,18381,18382],{},"免費開源","的硬體監測軟體，可即時監測以下硬體資訊",[1995,18385,18386,18389,18392,18395,18398,18401,18404,18407],{},[50,18387,18388],{},"CPU",[50,18390,18391],{},"RAM",[50,18393,18394],{},"GPU",[50,18396,18397],{},"DISK",[50,18399,18400],{},"溫度",[50,18402,18403],{},"網路使用狀況",[50,18405,18406],{},"電池",[50,18408,18409],{},"藍芽",[15,18411,18412,18413],{},"下載位置： ",[26,18414,18415],{"href":18415,"rel":18416},"https:\u002F\u002Fgithub.com\u002Fexelban\u002Fstats\u002Freleases",[30],[15,18418,18419],{},"HomeBrew 安裝",[80,18421,18423],{"className":82,"code":18422,"language":84,"meta":85,"style":85},"brew install --cask stats\n",[19,18424,18425],{"__ignoreMap":85},[89,18426,18427,18429,18431,18434],{"class":91,"line":92},[89,18428,180],{"class":102},[89,18430,107],{"class":106},[89,18432,18433],{"class":110}," --cask",[89,18435,1903],{"class":106},[11,18437,9060],{"id":9059},[15,18439,18440],{},"是 MacOS 上相當好的螢幕截圖，功能如下：",[1995,18442,18443,18446,18449,18452,18455],{},[50,18444,18445],{},"區域截圖",[50,18447,18448],{},"視窗截圖",[50,18450,18451],{},"捲動截圖 (截圖網頁時，超好用 👍)",[50,18453,18454],{},"截圖標示 (可標示矩形、圓形、直線、鉛筆、馬賽克、文字、序號、高亮區塊等)",[50,18456,18457],{},"釘選螢幕 (可在截圖後，將圖片釘在螢幕上)",[15,18459,18460],{},"另外也可付費解鎖更完整的功能",[15,18462,18207,18463],{},[26,18464,18465],{"href":18465,"rel":18466},"http:\u002F\u002Fxnipapp.com\u002F",[30],[15,18468,18469,18470],{},"App Store：",[26,18471,18472],{"href":18472,"rel":18473},"https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fxnip\u002Fid1221250572?mt=12",[30],[11,18475,18477],{"id":18476},"couleurs","Couleurs",[15,18479,18480],{},"這是一款簡單免費的螢幕選色器，操作上相當直覺。",[15,18482,18207,18483],{},[26,18484,18485],{"href":18485,"rel":18486},"https:\u002F\u002Fcouleursapp.com\u002F",[30],[11,18488,9073],{"id":9072},[15,18490,18491,18492,18494],{},"Apple 觸控板真得很好用，但當你改用滑鼠時，就會讓你感到非常悲劇，那悲催的卡頓感，真得讓人很崩潰，而 ",[2510,18493,9073],{}," 就可以改善，滑鼠在MacOS上的使用體驗。",[15,18496,8703,18497],{},[26,18498,18499],{"href":18499,"rel":18500},"https:\u002F\u002Fmos.caldis.me\u002F",[30],[11,18502,2713],{"id":8995},[15,18504,18505,18506,18509,18510,18512],{},"MacOS 在軟體解除安裝，一般是進到 ",[2510,18507,18508],{},"應用程式"," 目錄程式中，直接刪除軟體即可，但必竟每個軟體設計都不同，常常刪除不乾淨，而 ",[19,18511,2713],{}," 就可以很好的解決此問題。",[15,18514,8703,18515],{},[26,18516,9003],{"href":9003,"rel":18517},[30],[11,18519,8932],{"id":8931},[15,18521,18522],{},"MacOS上強大好用的影音播放器，支援大部分的影音格式播放，不用在額外安裝各種編碼器，這個播放器一個搞定。",[15,18524,8703,18525],{},[26,18526,8940],{"href":8940,"rel":18527},[30],[11,18529,18531],{"id":18530},"hidden-bar","Hidden Bar",[15,18533,18534],{},"當裝愈來愈多常駐軟體，就會發現上方系統列的ICON愈來愈多，而這個軟體可以暫時隱藏ICON，要用到時可隨時展開",[15,18536,18412,18537],{},[26,18538,18539],{"href":18539,"rel":18540},"https:\u002F\u002Fgithub.com\u002Fdwarvesf\u002Fhidden\u002Freleases",[30],[15,18542,18469,18543],{},[26,18544,18545],{"href":18545,"rel":18546},"https:\u002F\u002Fapps.apple.com\u002Ftw\u002Fapp\u002Fhidden-bar\u002F",[30],[15,18548,18419],{},[80,18550,18552],{"className":82,"code":18551,"language":84,"meta":85,"style":85},"brew install --cask hiddenbar\n",[19,18553,18554],{"__ignoreMap":85},[89,18555,18556,18558,18560,18562],{"class":91,"line":92},[89,18557,180],{"class":102},[89,18559,107],{"class":106},[89,18561,18433],{"class":110},[89,18563,18564],{"class":106}," hiddenbar\n",[11,18566,18215],{"id":18214},[15,18568,18569],{},"目前在程式開發上，站長使用的程式碼編輯器，擁有各類插件，可以加快開發速度。",[15,18571,8703,18572],{},[26,18573,8706],{"href":8706,"rel":18574},[30],[11,18576,8763],{"id":8762},[15,18578,18579],{},"雖雖 vscode 很強大，但有時讓人覺得有點肥大，若只是臨時要編輯文字檔，我會用這款輕量編輯器",[15,18581,8703,18582],{},[26,18583,8771],{"href":8771,"rel":18584},[30],[11,18586,18588],{"id":18587},"keka-壓縮軟體","KeKa 壓縮軟體",[15,18590,18591],{},"這是 MacOS 我用過最好用的壓縮軟體，支援多種壓縮格式，密碼保護，分片壓縮等功能，其中最棒是可「排除 MacOS 資源檔」檔的功能。",[15,18593,18594],{},"在以往直接在 MacOS 打包壓縮的檔案，在 Windows 環境下打開，總會多出一些讓使用者迷惑的檔案，而這個功能就會幫忙先排除這檔案。",[15,18596,8703,18597],{},[26,18598,8962],{"href":8962,"rel":18599},[30],[11,18601,18603],{"id":18602},"shottr","Shottr",[15,18605,18606],{},"另一款螢幕截圖軟體，除了一般截圖功能、馬賽克、OCR、釘圖、螢幕選色器 等功能。",[15,18608,8703,18609],{},[26,18610,9055],{"href":9055,"rel":18611},[30],[11,18613,9099],{"id":9098},[15,18615,18616],{},"MacOS 對於外接螢幕，相當不友善，無法用熱健去控制外接螢幕的亮度和音量，而 BetterDisplay 則可以解決這些問題。",[15,18618,8703,18619],{},[26,18620,9107],{"href":9107,"rel":18621},[30],[11,18623,8724],{"id":8723},[15,18625,18626],{},"支援 M1 晶片的虛擬機，除了以接近本機的速度在Apple Silicon上運行ARM64操作系統，在英特爾 Mac 上，x86\u002Fx64 作業系統可以虛擬化。",[15,18628,9267,18629],{},[26,18630,8732],{"href":8732,"rel":18631},[30],[11,18633,9021],{"id":9020},[15,18635,18636],{},"一款能大幅提升你工作效率的 Mac 軟體，可以取代 Spotlight，且功能更加狂大。",[15,18638,9267,18639],{},[26,18640,18641],{"href":18641,"rel":18642},"https:\u002F\u002Fwww.raycast.com\u002F",[30],[1728,18644,18645],{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":85,"searchDepth":99,"depth":99,"links":18647},[18648,18649,18650,18651,18652,18653,18654,18655,18656,18657,18658,18659,18660,18661,18662,18663],{"id":18309,"depth":99,"text":18310},{"id":8710,"depth":99,"text":18359},{"id":9007,"depth":99,"text":9008},{"id":9059,"depth":99,"text":9060},{"id":18476,"depth":99,"text":18477},{"id":9072,"depth":99,"text":9073},{"id":8995,"depth":99,"text":2713},{"id":8931,"depth":99,"text":8932},{"id":18530,"depth":99,"text":18531},{"id":18214,"depth":99,"text":18215},{"id":8762,"depth":99,"text":8763},{"id":18587,"depth":99,"text":18588},{"id":18602,"depth":99,"text":18603},{"id":9098,"depth":99,"text":9099},{"id":8723,"depth":99,"text":8724},{"id":9020,"depth":99,"text":9021},"\u002Fimages\u002Farticles\u002F2022-04-10-mas-os-tool\u002Fcover.png",{},"\u002Farticles\u002F2022-04-10-mac-os-tool","2022-04-10 12:00:00",{"title":18304,"description":85},"articles\u002F2022-04-10-mac-os-tool","這裡收集了，站長在 MacOS 上常用的軟體",[3125,3116],"LdwPGKbfWnAayVtGNscPJXvm97oroNn4Ipb5HjBSj7E",{"id":18674,"title":18675,"body":18676,"category":1748,"description":85,"extension":1749,"image":19125,"meta":19126,"navigation":120,"path":19127,"pubDate":19128,"seo":19129,"status":120,"stem":19130,"summary":19131,"tags":19132,"__hash__":19133},"content\u002Farticles\u002F2022-03-26-php-zip.md","PHP 產生壓縮檔",{"type":8,"value":18677,"toc":19120},[18678,18681,18689,18695,18721,18724,18729,18790,18796,18799,18813,18818,18835,18838,18846,18851,18868,18870,18883,18888,18905,18907,18921,18926,18943,18945,18953,18958,18975,18977,18985,18990,19007,19009,19023,19028,19044,19047,19051,19101,19105,19118],[11,18679,18680],{"id":18680},"需求",[47,18682,18683,18686],{},[50,18684,18685],{},"php5.2 以上版本",[50,18687,18688],{},"安裝 zip 庫",[15,18690,18691,18692,18694],{},"以 ",[19,18693,18316],{}," 為例：",[80,18696,18698],{"className":82,"code":18697,"language":84,"meta":85,"style":85},"sudo apt update\nsudo apt install -y php7.4-zip\n",[19,18699,18700,18708],{"__ignoreMap":85},[89,18701,18702,18704,18706],{"class":91,"line":92},[89,18703,17290],{"class":102},[89,18705,17303],{"class":106},[89,18707,17306],{"class":106},[89,18709,18710,18712,18714,18716,18718],{"class":91,"line":99},[89,18711,17290],{"class":102},[89,18713,17303],{"class":106},[89,18715,107],{"class":106},[89,18717,111],{"class":110},[89,18719,18720],{"class":106}," php7.4-zip\n",[11,18722,18723],{"id":18723},"壓縮範例程式",[15,18725,18726],{},[2510,18727,18728],{},"產生壓縮檔",[80,18730,18732],{"className":290,"code":18731,"language":235,"meta":85,"style":85},"\u003C?php\n\u002F\u002Fnew ZipArchive 物件\n$zip = new ZipArchive;\n\n$zip->open('new.zip', ZipArchive::CREATE);\n\n",[19,18733,18734,18741,18746,18760,18764],{"__ignoreMap":85},[89,18735,18736,18738],{"class":91,"line":92},[89,18737,298],{"class":241},[89,18739,18740],{"class":110},"php\n",[89,18742,18743],{"class":91,"line":99},[89,18744,18745],{"class":95},"\u002F\u002Fnew ZipArchive 物件\n",[89,18747,18748,18751,18753,18755,18758],{"class":91,"line":117},[89,18749,18750],{"class":306},"$zip ",[89,18752,313],{"class":241},[89,18754,333],{"class":241},[89,18756,18757],{"class":110}," ZipArchive",[89,18759,552],{"class":306},[89,18761,18762],{"class":91,"line":124},[89,18763,121],{"emptyLinePlaceholder":120},[89,18765,18766,18769,18771,18774,18776,18779,18781,18784,18786,18788],{"class":91,"line":130},[89,18767,18768],{"class":306},"$zip",[89,18770,375],{"class":241},[89,18772,18773],{"class":102},"open",[89,18775,307],{"class":306},[89,18777,18778],{"class":106},"'new.zip'",[89,18780,386],{"class":306},[89,18782,18783],{"class":110},"ZipArchive",[89,18785,10228],{"class":241},[89,18787,9438],{"class":110},[89,18789,319],{"class":306},[15,18791,8327,18792,18795],{},[19,18793,18794],{},"$zip->open()"," 第一參數為要產壓縮檔路徑",[15,18797,18798],{},"第二參數為產生檔案的模式",[1995,18800,18801,18807],{},[50,18802,18803,18806],{},[19,18804,18805],{},"ZipArchive::CREATE","：產生新檔案",[50,18808,18809,18812],{},[19,18810,18811],{},"ZipArchive::OVERWRITE",": 若壓縮檔存在，則覆蓋檔案",[15,18814,18815],{},[2510,18816,18817],{},"加入一個空資料夾",[80,18819,18821],{"className":290,"code":18820,"language":235,"meta":85,"style":85},"$zip->addEmptyDir($dirname);\n",[19,18822,18823],{"__ignoreMap":85},[89,18824,18825,18827,18829,18832],{"class":91,"line":92},[89,18826,18768],{"class":306},[89,18828,375],{"class":241},[89,18830,18831],{"class":102},"addEmptyDir",[89,18833,18834],{"class":306},"($dirname);\n",[15,18836,18837],{},"參數說明",[1995,18839,18840],{},[50,18841,18842,18845],{},[19,18843,18844],{},"$dirname"," 資料夾名稱",[15,18847,18848],{},[2510,18849,18850],{},"將檔案加入壓縮檔",[80,18852,18854],{"className":290,"code":18853,"language":235,"meta":85,"style":85},"$zip->addaddFile($filePath, $newFileName);\n",[19,18855,18856],{"__ignoreMap":85},[89,18857,18858,18860,18862,18865],{"class":91,"line":92},[89,18859,18768],{"class":306},[89,18861,375],{"class":241},[89,18863,18864],{"class":102},"addaddFile",[89,18866,18867],{"class":306},"($filePath, $newFileName);\n",[15,18869,18837],{},[1995,18871,18872,18877],{},[50,18873,18874,18876],{},[19,18875,540],{}," 為檔案路徑",[50,18878,18879,18882],{},[19,18880,18881],{},"$newFileName"," 重新命名 (選填)",[15,18884,18885],{},[2510,18886,18887],{},"將字串加入文字檔並壓縮",[80,18889,18891],{"className":290,"code":18890,"language":235,"meta":85,"style":85},"$zip->addFromString($filename, $content);\n",[19,18892,18893],{"__ignoreMap":85},[89,18894,18895,18897,18899,18902],{"class":91,"line":92},[89,18896,18768],{"class":306},[89,18898,375],{"class":241},[89,18900,18901],{"class":102},"addFromString",[89,18903,18904],{"class":306},"($filename, $content);\n",[15,18906,18837],{},[1995,18908,18909,18915],{},[50,18910,18911,18914],{},[19,18912,18913],{},"$filename"," 檔案名稱",[50,18916,18917,18920],{},[19,18918,18919],{},"$content"," 文字內容",[15,18922,18923],{},[2510,18924,18925],{},"依索引刪除檔案",[80,18927,18929],{"className":290,"code":18928,"language":235,"meta":85,"style":85},"$zip->deleteIndex($index);\n",[19,18930,18931],{"__ignoreMap":85},[89,18932,18933,18935,18937,18940],{"class":91,"line":92},[89,18934,18768],{"class":306},[89,18936,375],{"class":241},[89,18938,18939],{"class":102},"deleteIndex",[89,18941,18942],{"class":306},"($index);\n",[15,18944,18837],{},[1995,18946,18947],{},[50,18948,18949,18952],{},[19,18950,18951],{},"$index"," 刪除索引的檔案",[15,18954,18955],{},[2510,18956,18957],{},"依檔名刪除檔案",[80,18959,18961],{"className":290,"code":18960,"language":235,"meta":85,"style":85},"$zip->deleteName($name);\n",[19,18962,18963],{"__ignoreMap":85},[89,18964,18965,18967,18969,18972],{"class":91,"line":92},[89,18966,18768],{"class":306},[89,18968,375],{"class":241},[89,18970,18971],{"class":102},"deleteName",[89,18973,18974],{"class":306},"($name);\n",[15,18976,18837],{},[1995,18978,18979],{},[50,18980,18981,18984],{},[19,18982,18983],{},"$name"," 刪除檔案名稱",[15,18986,18987],{},[2510,18988,18989],{},"更改檔名",[80,18991,18993],{"className":290,"code":18992,"language":235,"meta":85,"style":85},"$zip->renameName($oldName, $newName);\n",[19,18994,18995],{"__ignoreMap":85},[89,18996,18997,18999,19001,19004],{"class":91,"line":92},[89,18998,18768],{"class":306},[89,19000,375],{"class":241},[89,19002,19003],{"class":102},"renameName",[89,19005,19006],{"class":306},"($oldName, $newName);\n",[15,19008,18837],{},[1995,19010,19011,19017],{},[50,19012,19013,19016],{},[19,19014,19015],{},"$oldName"," 原本檔名",[50,19018,19019,19022],{},[19,19020,19021],{},"$newName"," 新檔名",[15,19024,19025],{},[2510,19026,19027],{},"關閉壓縮檔",[80,19029,19031],{"className":290,"code":19030,"language":235,"meta":85,"style":85},"$zip->close();\n",[19,19032,19033],{"__ignoreMap":85},[89,19034,19035,19037,19039,19042],{"class":91,"line":92},[89,19036,18768],{"class":306},[89,19038,375],{"class":241},[89,19040,19041],{"class":102},"close",[89,19043,523],{"class":306},[11,19045,19046],{"id":19046},"解壓縮程式",[15,19048,19049],{},[2510,19050,15314],{},[80,19052,19054],{"className":290,"code":19053,"language":235,"meta":85,"style":85},"$zip = new ZipArchive;\n$zip->open($zipFile);\n$zip->extractTo($filePath);\n$zip->close();\n",[19,19055,19056,19068,19079,19091],{"__ignoreMap":85},[89,19057,19058,19060,19062,19064,19066],{"class":91,"line":92},[89,19059,18750],{"class":306},[89,19061,313],{"class":241},[89,19063,333],{"class":241},[89,19065,18757],{"class":110},[89,19067,552],{"class":306},[89,19069,19070,19072,19074,19076],{"class":91,"line":99},[89,19071,18768],{"class":306},[89,19073,375],{"class":241},[89,19075,18773],{"class":102},[89,19077,19078],{"class":306},"($zipFile);\n",[89,19080,19081,19083,19085,19088],{"class":91,"line":117},[89,19082,18768],{"class":306},[89,19084,375],{"class":241},[89,19086,19087],{"class":102},"extractTo",[89,19089,19090],{"class":306},"($filePath);\n",[89,19092,19093,19095,19097,19099],{"class":91,"line":124},[89,19094,18768],{"class":306},[89,19096,375],{"class":241},[89,19098,19041],{"class":102},[89,19100,523],{"class":306},[15,19102,19103],{},[2510,19104,18837],{},[1995,19106,19107,19113],{},[50,19108,19109,19112],{},[19,19110,19111],{},"$zipFile"," 壓縮檔位置",[50,19114,19115,19117],{},[19,19116,540],{}," 解壓縮檔路徑",[1728,19119,8458],{},{"title":85,"searchDepth":99,"depth":99,"links":19121},[19122,19123,19124],{"id":18680,"depth":99,"text":18680},{"id":18723,"depth":99,"text":18723},{"id":19046,"depth":99,"text":19046},"\u002Fimages\u002Farticles\u002F2022-03-26-php-zip\u002Fcover.png",{},"\u002Farticles\u002F2022-03-26-php-zip","2022-03-26 11:00:00",{"title":18675,"description":85},"articles\u002F2022-03-26-php-zip","在某些需求，如要讓使用者下載多個檔案時，我們可以打包成一個檔案供用戶下載，或是檔案太大，可以壓縮檔案已減少頻寛。",[235],"axPiVBtvCJExqY5-9kjtwpxNVXxvivHDhw3IsOl0YXs",[19135],{"title":6,"pubDate":1753,"path":1752,"summary":1756,"tags":19136,"image":1750,"category":1748},[235,1758,1759],1787493627680]