[{"data":1,"prerenderedAt":17473},["ShallowReactive",2],{"search":3,"tag-圖片處理":17470},[4,94,713,968,1413,2644,3062,3247,6008,6809,6996,7686,8010,8062,8461,10033,10123,11015,13863,14624,15177,15390,15709,16090,16514,16634,17006],{"id":5,"title":6,"body":7,"category":81,"description":82,"extension":83,"image":84,"meta":85,"navigation":86,"path":87,"pubDate":88,"seo":89,"status":86,"stem":90,"summary":91,"tags":92,"__hash__":93},"content\u002Farticles\u002F2026-08-16-2026-new-theme.md","2026 新版型",{"type":8,"value":9,"toc":77},"minimark",[10,14,36,54,57,68],[11,12,13],"h1",{"id":13},"更新內容",[15,16,17,18,22,23,25,26,29,30,32,33,35],"p",{},"這幾年 AI 能力飛越式進步，而 ",[19,20,21],"code",{},"vibe coding"," 更是成熱門話題，自己的工作，也開始導入 ",[19,24,21],{}," ，最近心血來潮，想著自己的部落格的技術堆疊，也許久沒有更新了，還停留在 2022 年的 ",[19,27,28],{},"nuxt.js"," 2 建構，而如今 ",[19,31,28],{}," 已然更新至第 4 版了，所以不如用 ",[19,34,21],{}," 來重建自己的部落格。",[15,37,38,39,42,43,45,46,49,50,53],{},"這次主要使用 ",[19,40,41],{},"opencode"," 來進行開發，使用了 ",[19,44,28],{}," 4、",[19,47,48],{},"nuxt\u002Fcontent"," v3 和 ",[19,51,52],{},"nuxt\u002Fui"," 等套件來建立這個部落格。",[11,55,56],{"id":56},"感想",[15,58,38,59,61,62,64,65,67],{},[19,60,21],{}," 旳方式進行開發，整個開發體驗想當不錯，或許開發部落格網站，對於 AI 模型的要求並不高，只用了 ",[19,63,41],{}," 官方提供的免費模型，就完成了大部份的功能，也且開發時間，記得舊部格程式前後，也差不多也花了一個多月的空閒時間手刻，不過這次用 ",[19,66,21],{}," 整體花的時間，約十多天的天數，就完成大部份的功能。",[15,69,70,71,73,74,76],{},"看來 ",[19,72,21],{}," 也成為未來開發系統的主流，後續我也會分享自己 ",[19,75,21],{}," 的經驗。",{"title":78,"searchDepth":79,"depth":79,"links":80},"",2,[],"站務","這幾年 AI 能力飛越式進步，而 vibe coding 更是成熱門話題，自己的工作，也開始導入 vibe coding ，最近心血來潮，想著自己的部落格的技術堆疊，也許久沒有更新了，還停留在 2022 年的 nuxt.js 2 建構，而如今 nuxt.js 已然更新至第 4 版了，所以不如用 vibe coding 來重建自己的部落格。","md","\u002Fimages\u002Farticles\u002F2026-08-16-2026-new-theme\u002Fcover.jpg",{},true,"\u002Farticles\u002F2026-08-16-2026-new-theme","2026-08-16 15:54:00",{"title":6,"description":82},"articles\u002F2026-08-16-2026-new-theme","部落格從 2022 年的 Nuxt 2 升級至 Nuxt 4 與 Nuxt Content v3，全程以 vibe coding 進行，使用 opencode 與免費模型完成大部分功能，開發時間從一個多月縮短至十多天，記錄這次難得的重建體驗。",[81],"kfi3xMmARhktM-Gn0dE78ZILmke6mSELMjRhOJ857nE",{"id":95,"title":96,"body":97,"category":700,"description":78,"extension":83,"image":701,"meta":702,"navigation":86,"path":703,"pubDate":704,"seo":705,"status":86,"stem":706,"summary":707,"tags":708,"__hash__":712},"content\u002Farticles\u002F2026-06-29-opencode-state.md","使用 OpenCode stats 指令掌握 AI 開發成本：完整參數與實戰範例",{"type":8,"value":98,"toc":678},[99,108,111,127,133,136,142,145,165,168,170,173,178,194,197,219,222,224,231,237,255,258,275,277,283,289,336,339,347,349,355,361,402,405,413,415,421,427,449,452,473,480,482,485,488,492,495,520,523,534,537,539,543,546,565,568,576,579,581,585,588,608,611,619,622,630,632,636,642,657,668,674],[100,101,103,104,107],"h2",{"id":102},"為什麼要看-opencode-stats","為什麼要看 ",[19,105,106],{},"opencode stats","？",[15,109,110],{},"當我們開始大量使用 AI 做開發（Code Review、產生程式碼、寫文件、跑資料分析…），往往會有幾個共同的疑問：",[112,113,114,118,121,124],"ul",{},[115,116,117],"li",{},"最近到底用了多少 Token？",[115,119,120],{},"哪些模型最燒錢？",[115,122,123],{},"哪些工具（像 bash、webfetch 這類）被呼叫得最頻繁？",[115,125,126],{},"某個專案是不是特別花錢？",[15,128,129,130,132],{},"如果手上沒有清楚的統計數據，很難優化「模型選擇」與「使用習慣」。這時候，OpenCode 的 ",[19,131,106],{}," 就派上用場了。",[134,135],"hr",{},[100,137,139,141],{"id":138},"opencode-stats-基本用法",[19,140,106],{}," 基本用法",[15,143,144],{},"最基本的指令非常單純：",[146,147,151],"pre",{"className":148,"code":149,"language":150,"meta":78,"style":78},"language-bash shiki shiki-themes github-light github-dark github-dark","opencode stats  \n","bash",[19,152,153],{"__ignoreMap":78},[154,155,158,161],"span",{"class":156,"line":157},"line",1,[154,159,41],{"class":160},"shcOC",[154,162,164],{"class":163},"sfrk1"," stats\n",[15,166,167],{},"不帶任何參數時，它會顯示「所有時間、所有專案」的整體 Token 用量與費用統計，適合當作一個總體健康檢查（Health Check）：最近 AI 用得多不多、成本有沒有暴衝。",[134,169],{},[100,171,172],{"id":172},"常用參數與行為說明",[15,174,175,177],{},[19,176,106],{}," 支援一組 flags，可以自由組合：",[146,179,181],{"className":148,"code":180,"language":150,"meta":78,"style":78},"opencode stats [flags]  \n",[19,182,183],{"__ignoreMap":78},[154,184,185,187,190],{"class":156,"line":157},[154,186,41],{"class":160},[154,188,189],{"class":163}," stats",[154,191,193],{"class":192},"slsVL"," [flags]\n",[15,195,196],{},"常用的有這幾個：",[112,198,199,204,209,214],{},[115,200,201],{},[19,202,203],{},"--days N",[115,205,206],{},[19,207,208],{},"--tools [N]",[115,210,211],{},[19,212,213],{},"--models [N]",[115,215,216],{},[19,217,218],{},"--project P",[15,220,221],{},"下面逐一說明它們的用途與使用情境。",[134,223],{},[225,226,228,230],"h3",{"id":227},"days-n限制查詢時間範圍",[19,229,203],{},"：限制查詢時間範圍",[15,232,233,236],{},[19,234,235],{},"--days"," 用來控制「要看最近幾天」的用量。例如，只想看最近一週：",[146,238,240],{"className":148,"code":239,"language":150,"meta":78,"style":78},"opencode stats --days 7  \n",[19,241,242],{"__ignoreMap":78},[154,243,244,246,248,252],{"class":156,"line":157},[154,245,41],{"class":160},[154,247,189],{"class":163},[154,249,251],{"class":250},"suiK_"," --days",[154,253,254],{"class":250}," 7\n",[15,256,257],{},"這在兩種情境特別好用：",[259,260,261,268],"ol",{},[115,262,263,264,267],{},"每月或每週例行檢查：例如每到月底看一次 ",[19,265,266],{},"--days 30","，檢查這個月 AI 成本。",[115,269,270,271,274],{},"某次實驗或專案密集期：例如你在最近兩週大量嘗試新模型，就可以用 ",[19,272,273],{},"--days 14"," 來看這段期間的影響。",[134,276],{},[225,278,280,282],{"id":279},"tools-n觀察工具使用熱度",[19,281,208],{},"：觀察工具使用熱度",[15,284,285,288],{},[19,286,287],{},"--tools"," 會列出各個工具（例如 bash、webfetch…）的使用統計。若不帶數字，會顯示全部工具；帶數字則只顯示前 N 名。你可以：",[146,290,292],{"className":148,"code":291,"language":150,"meta":78,"style":78},"# 顯示所有工具用量  \nopencode stats --tools  \n\n# 只顯示使用量前 5 名的工具  \nopencode stats --tools 5  \n",[19,293,294,300,312,318,324],{"__ignoreMap":78},[154,295,296],{"class":156,"line":157},[154,297,299],{"class":298},"sCsY4","# 顯示所有工具用量  \n",[154,301,302,304,306,309],{"class":156,"line":79},[154,303,41],{"class":160},[154,305,189],{"class":163},[154,307,308],{"class":250}," --tools",[154,310,311],{"class":192},"  \n",[154,313,315],{"class":156,"line":314},3,[154,316,317],{"emptyLinePlaceholder":86},"\n",[154,319,321],{"class":156,"line":320},4,[154,322,323],{"class":298},"# 只顯示使用量前 5 名的工具  \n",[154,325,327,329,331,333],{"class":156,"line":326},5,[154,328,41],{"class":160},[154,330,189],{"class":163},[154,332,308],{"class":250},[154,334,335],{"class":250}," 5\n",[15,337,338],{},"這有幾個實際用途：",[112,340,341,344],{},[115,342,343],{},"了解「AI 在幫你做什麼」：是更多在跑 shell 指令、還是瘋狂打 API？",[115,345,346],{},"找出可能的最佳化點：某個工具用量特別高，可能代表流程可以再調整，或有機會改成一次性的腳本／排程。",[134,348],{},[225,350,352,354],{"id":351},"models-n檢視模型用量與費用明細",[19,353,213],{},"：檢視模型用量與費用明細",[15,356,357,360],{},[19,358,359],{},"--models"," 則是針對各個模型（provider\u002Fmodel，例如某家雲廠商的特定模型）的 Token 與費用明細。若不帶數字，會列出所有模型明細；帶數字則只顯示前 N 名。你可以：",[146,362,364],{"className":148,"code":363,"language":150,"meta":78,"style":78},"# 顯示所有模型詳細用量  \nopencode stats --models  \n\n# 只顯示用量前 3 名的模型  \nopencode stats --models 3  \n",[19,365,366,371,382,386,391],{"__ignoreMap":78},[154,367,368],{"class":156,"line":157},[154,369,370],{"class":298},"# 顯示所有模型詳細用量  \n",[154,372,373,375,377,380],{"class":156,"line":79},[154,374,41],{"class":160},[154,376,189],{"class":163},[154,378,379],{"class":250}," --models",[154,381,311],{"class":192},[154,383,384],{"class":156,"line":314},[154,385,317],{"emptyLinePlaceholder":86},[154,387,388],{"class":156,"line":320},[154,389,390],{"class":298},"# 只顯示用量前 3 名的模型  \n",[154,392,393,395,397,399],{"class":156,"line":326},[154,394,41],{"class":160},[154,396,189],{"class":163},[154,398,379],{"class":250},[154,400,401],{"class":250}," 3\n",[15,403,404],{},"這對於成本控管特別關鍵：",[112,406,407,410],{},[115,408,409],{},"找出哪幾個模型是主力：你日常最常依賴哪些模型。",[115,411,412],{},"監控高單價模型：如果某些高價模型意外成為 Top 3，就需要檢查是否有誤用或參數設計不佳的地方。",[134,414],{},[225,416,418,420],{"id":417},"project-p聚焦在特定專案",[19,419,218],{},"：聚焦在特定專案",[15,422,423,426],{},[19,424,425],{},"--project"," 用來對某個專案做切片統計：",[146,428,430],{"className":148,"code":429,"language":150,"meta":78,"style":78},"# 只看名為 \"project-name\" 的專案  \nopencode stats --project project-name  \n",[19,431,432,437],{"__ignoreMap":78},[154,433,434],{"class":156,"line":157},[154,435,436],{"class":298},"# 只看名為 \"project-name\" 的專案  \n",[154,438,439,441,443,446],{"class":156,"line":79},[154,440,41],{"class":160},[154,442,189],{"class":163},[154,444,445],{"class":250}," --project",[154,447,448],{"class":163}," project-name\n",[15,450,451],{},"如果你已經在專案資料夾裡，還可以傳入空字串表示「當前專案」：",[146,453,455],{"className":148,"code":454,"language":150,"meta":78,"style":78},"# 只看目前所在資料夾這個專案的統計  \nopencode stats --project \"\"  \n",[19,456,457,462],{"__ignoreMap":78},[154,458,459],{"class":156,"line":157},[154,460,461],{"class":298},"# 只看目前所在資料夾這個專案的統計  \n",[154,463,464,466,468,470],{"class":156,"line":79},[154,465,41],{"class":160},[154,467,189],{"class":163},[154,469,445],{"class":250},[154,471,472],{"class":163}," \"\"\n",[15,474,475,476,479],{},"這在你只想分析單一 repo 時特別好用。請注意，若你並不在專案資料夾裡，",[19,477,478],{},"--project \"\""," 可能不會取得預期結果。",[134,481],{},[100,483,484],{"id":484},"實戰組合範例",[15,486,487],{},"前面介紹完各個參數，我習慣在實作時搭配成幾個常用的查詢模板。",[225,489,491],{"id":490},"_1-最近-30-天目前專案的模型-top-5","1. 最近 30 天、目前專案的模型 Top 5",[15,493,494],{},"當你在某個專案上大量使用 AI 之後，很適合來一個月度回顧：",[146,496,498],{"className":148,"code":497,"language":150,"meta":78,"style":78},"opencode stats --days 30 --project \"\" --models 5  \n",[19,499,500],{"__ignoreMap":78},[154,501,502,504,506,508,511,513,516,518],{"class":156,"line":157},[154,503,41],{"class":160},[154,505,189],{"class":163},[154,507,251],{"class":250},[154,509,510],{"class":250}," 30",[154,512,445],{"class":250},[154,514,515],{"class":163}," \"\"",[154,517,379],{"class":250},[154,519,335],{"class":250},[15,521,522],{},"這條指令會告訴你：",[112,524,525,528,531],{},[115,526,527],{},"最近 30 天，這個專案用了哪些模型？",[115,529,530],{},"哪些模型是前五名？用量大概占比多少？",[115,532,533],{},"有沒有哪個模型使用量超出你原先的預期？",[15,535,536],{},"如果你發現某個昂貴的模型排進 Top 5，而且還不是關鍵需求，就可以考慮換成 CP 值更高的選擇。",[134,538],{},[225,540,542],{"id":541},"_2-最近-14-天全工作區工具使用總覽","2. 最近 14 天、全工作區工具使用總覽",[15,544,545],{},"如果你想從「工作型態」的角度切入，而不是模型角度，可以這樣看工具用量：",[146,547,549],{"className":148,"code":548,"language":150,"meta":78,"style":78},"opencode stats --days 14 --tools  \n",[19,550,551],{"__ignoreMap":78},[154,552,553,555,557,559,562],{"class":156,"line":157},[154,554,41],{"class":160},[154,556,189],{"class":163},[154,558,251],{"class":250},[154,560,561],{"class":250}," 14",[154,563,564],{"class":250}," --tools\n",[15,566,567],{},"透過這個視角，你可以觀察：",[112,569,570,573],{},[115,571,572],{},"AI 比較常幫你做 I\u002FO（例如 webfetch），還是純文字推理？",[115,574,575],{},"是否大量使用某些 Shell 工具（例如 bash），代表你已經開始把 DevOps 類型的任務交給 AI？",[15,577,578],{},"這有助於你調整自己的工作習慣，例如將重複性的 CLI 操作逐步交給 AI 自動化。",[134,580],{},[225,582,584],{"id":583},"_3-單一專案的完整成本分析模型-工具","3. 單一專案的完整成本分析（模型 + 工具）",[15,586,587],{},"當你想為某個專案做一次「完整的 AI 成本盤點」時，可以把模型與工具一起開：",[146,589,591],{"className":148,"code":590,"language":150,"meta":78,"style":78},"opencode stats --project project-name --models --tools  \n",[19,592,593],{"__ignoreMap":78},[154,594,595,597,599,601,604,606],{"class":156,"line":157},[154,596,41],{"class":160},[154,598,189],{"class":163},[154,600,445],{"class":250},[154,602,603],{"class":163}," project-name",[154,605,379],{"class":250},[154,607,564],{"class":250},[15,609,610],{},"用這種方式，你可以同時看到：",[112,612,613,616],{},[115,614,615],{},"這個專案用了哪些模型、各自的 Token 與費用。",[115,617,618],{},"AI 在這個專案裡最常被拿來搭配哪些工具。",[15,620,621],{},"從這些數據出發，你可以進一步調整：",[112,623,624,627],{},[115,625,626],{},"Default 模型（讓 Plan \u002F Build 走更便宜或更強大的路線）。",[115,628,629],{},"工作流程設計（例如是否將某些重度工具操作改成批次執行，而不是在對話中頻繁觸發）。",[134,631],{},[100,633,635],{"id":634},"結語用數據讓-ai-助手更划算","結語：用數據讓 AI 助手更「划算」",[15,637,638,639,641],{},"引入 AI 助手到日常開發流程，不只是為了「變快」或「變輕鬆」，更重要的是能長期、可持續地使用。",[19,640,106],{}," 提供的，就是一個將「感覺」轉成「數字」的入口。",[15,643,644,645,647,648,650,651,653,654,656],{},"透過 ",[19,646,235],{}," 控制時間範圍、",[19,649,425],{}," 聚焦特定專案，再搭配 ",[19,652,359],{}," 與 ",[19,655,287],{}," 做細部分析，你可以：",[112,658,659,662,665],{},[115,660,661],{},"找出真正的主力模型與工具。",[115,663,664],{},"及早發現成本異常的使用模式。",[115,666,667],{},"有依據地調整預設模型與工作流程設計。",[15,669,670,671,673],{},"如果你已經習慣用 OpenCode 協助開發，建議把幾條常用的 ",[19,672,106],{}," 查詢，加到自己的工作流程（甚至包成 script 或 alias），讓「看 AI 成本」和「看 CI\u002FCD 狀態」、「看監控儀表板」一樣自然，成為開發日常的一部分。",[675,676,677],"style",{},"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":78,"searchDepth":79,"depth":79,"links":679},[680,682,684,694,699],{"id":102,"depth":79,"text":681},"為什麼要看 opencode stats？",{"id":138,"depth":79,"text":683},"opencode stats 基本用法",{"id":172,"depth":79,"text":172,"children":685},[686,688,690,692],{"id":227,"depth":314,"text":687},"--days N：限制查詢時間範圍",{"id":279,"depth":314,"text":689},"--tools [N]：觀察工具使用熱度",{"id":351,"depth":314,"text":691},"--models [N]：檢視模型用量與費用明細",{"id":417,"depth":314,"text":693},"--project P：聚焦在特定專案",{"id":484,"depth":79,"text":484,"children":695},[696,697,698],{"id":490,"depth":314,"text":491},{"id":541,"depth":314,"text":542},{"id":583,"depth":314,"text":584},{"id":634,"depth":79,"text":635},"ai","\u002Fimages\u002Farticles\u002F2026-06-29-opencode-state\u002Fcover.png",{},"\u002Farticles\u002F2026-06-29-opencode-state","2026-06-29 15:02:00",{"title":96,"description":78},"articles\u002F2026-06-29-opencode-state","當 AI 助手真正進入開發流程後，**量化模型與工具的使用情況、掌握實際成本**就變得非常重要 OpenCode 提供的 `opencode stats` 指令，可以幫你快速統計各模型、各工具、各專案的 Token 用量與花費。從「感覺好像很常用」進化到「有數字、有依據」的資源管理。本文整理 `opencode stats` 的常見參數與組合用法，並分享幾個實務上常用的查詢範例。",[709,41,710,711],"AI","開源","開發工具","yQw3h2bKYW2VAUAF2zAXSLe_JOHylI9yq7K7oL9oWVM",{"id":714,"title":715,"body":716,"category":700,"description":78,"extension":83,"image":959,"meta":960,"navigation":86,"path":961,"pubDate":962,"seo":963,"status":86,"stem":964,"summary":965,"tags":966,"__hash__":967},"content\u002Farticles\u002F2026-05-15-opencode-context7-mcp.md","告別 AI 幻覺！用 Context7 MCP 讓 Opencode 即時讀取最新官方文件",{"type":8,"value":717,"toc":952},[718,722,733,736,740,743,775,779,787,790,804,823,829,832,920,923,936,943,946,949],[100,719,721],{"id":720},"何為-mcp","何為  MCP",[15,723,724,725,732],{},"全名為 Model Context Protocol（模型上下文協定），它是一種讓 AI 可以「連接外部工具、資料、服務」的標準協定。由 ",[726,727,731],"a",{"href":728,"rel":729},"https:\u002F\u002Fwww.anthropic.com?utm_source=chatgpt.com",[730],"nofollow","Anthropic"," 在 2024 年提出。",[15,734,735],{},"簡單的說讓AI模型與外部工具互通的協定， 摡念就像是不同設備間，可以用 USB 這個通訊協定來互傳資料",[100,737,739],{"id":738},"mcp-可以做什麼","MCP 可以做什麼？",[15,741,742],{},"它能讓AI模型做以下事情，甚致更多，只要應用服務商提供 MCP 接口，就可以讓 AI 模型操作各種服務",[112,744,745,748,751,754,757,760,763,766,769,772],{},[115,746,747],{},"讀檔案",[115,749,750],{},"查資料庫",[115,752,753],{},"操作 GitHub",[115,755,756],{},"控制 Docker",[115,758,759],{},"查官方文件",[115,761,762],{},"執行 Shell",[115,764,765],{},"發 Slack",[115,767,768],{},"查 Notion",[115,770,771],{},"存取 PostgreSQL",[115,773,774],{},"操作 Browser",[100,776,778],{"id":777},"何謂-context7","何謂 Context7",[15,780,781,782,786],{},"Context7 是 MCP 中很出名的應用服務，它可以讓 AI 模型在 coding 時，可以即時讀取",[783,784,785],"strong",{},"最新版本的官方文件","，讓 AI 模型在進行回答或 Vibe Coding 時，可以即時查詢官方文件，來回答問題，而非僅靠訓練記憶，更可大幅減少 AI 幻覺。",[15,788,789],{},"如可在opencode 中設定 Context7 MCP",[259,791,792,801],{},[115,793,794,795,800],{},"在 ",[726,796,799],{"href":797,"rel":798},"https:\u002F\u002Fcontext7.com\u002F",[730],"Context 7 官網"," 註冊帳號",[115,802,803],{},"在命令列執行以下指令：",[146,805,807],{"className":148,"code":806,"language":150,"meta":78,"style":78},"npx ctx7 setup --opencode\n",[19,808,809],{"__ignoreMap":78},[154,810,811,814,817,820],{"class":156,"line":157},[154,812,813],{"class":160},"npx",[154,815,816],{"class":163}," ctx7",[154,818,819],{"class":163}," setup",[154,821,822],{"class":250}," --opencode\n",[15,824,825,826],{},"此指令將會幫你取得 Context7 API key，建議先入 ",[726,827,799],{"href":797,"rel":828},[730],[15,830,831],{},"安裝成功會出現以下訊息：",[146,833,835],{"className":148,"code":834,"language":150,"meta":78,"style":78},"✔ 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,836,837,850,854,859,882,887,898,904,914],{"__ignoreMap":78},[154,838,839,842,845,847],{"class":156,"line":157},[154,840,841],{"class":160},"✔",[154,843,844],{"class":163}," Context7",[154,846,819],{"class":163},[154,848,849],{"class":163}," complete\n",[154,851,852],{"class":156,"line":79},[154,853,317],{"emptyLinePlaceholder":86},[154,855,856],{"class":156,"line":314},[154,857,858],{"class":160},"  OpenCode\n",[154,860,861,864,867,870,873,876,879],{"class":156,"line":320},[154,862,863],{"class":160},"    +",[154,865,866],{"class":163}," MCP",[154,868,869],{"class":163}," server",[154,871,872],{"class":163}," configured",[154,874,875],{"class":163}," with",[154,877,878],{"class":163}," API",[154,880,881],{"class":163}," Key\n",[154,883,884],{"class":156,"line":326},[154,885,886],{"class":160},"      \u002FUsers\u002Fuser\u002F.config\u002Fopencode\u002Fopencode.json\n",[154,888,890,892,895],{"class":156,"line":889},6,[154,891,863],{"class":160},[154,893,894],{"class":163}," Rule",[154,896,897],{"class":163}," installed\n",[154,899,901],{"class":156,"line":900},7,[154,902,903],{"class":160},"      \u002FUsers\u002Fuser\u002F.config\u002Fopencode\u002FAGENTS.md\n",[154,905,907,909,912],{"class":156,"line":906},8,[154,908,863],{"class":160},[154,910,911],{"class":163}," Skill",[154,913,897],{"class":163},[154,915,917],{"class":156,"line":916},9,[154,918,919],{"class":160},"      \u002FUsers\u002Fuser\u002F.agents\u002Fskills\u002Fcontext7-mcp\u002FSKILL.md\n",[100,921,922],{"id":922},"驗證安裝",[15,924,794,925,927,928,931,932,935],{},[19,926,41],{}," 命令列中，輪入 ",[19,929,930],{},"\u002Fmcps"," 在列表中看見 ",[19,933,934],{},"context7 connected"," 資訊表示安裝成功",[15,937,938],{},[939,940],"img",{"alt":941,"src":942},"Opencode MCP List","\u002Fimages\u002Farticles\u002F2026-05-15-opencode-context7-mcp\u002Fopencode-mcp.png",[100,944,945],{"id":945},"結論",[15,947,948],{},"MCP 協定的出現讓 AI 從單純的「知識庫」轉變為能操作工具的「代理人」。而 Context7 則解決了 AI 最令人頭痛的「過時資訊」問題。將其設定在 Opencode 中後，AI 能夠在即時對接官方文件的基礎上進行編碼，讓開發體驗更加流暢且可靠。",[675,950,951],{},"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":78,"searchDepth":79,"depth":79,"links":953},[954,955,956,957,958],{"id":720,"depth":79,"text":721},{"id":738,"depth":79,"text":739},{"id":777,"depth":79,"text":778},{"id":922,"depth":79,"text":922},{"id":945,"depth":79,"text":945},"\u002Fimages\u002Farticles\u002F2026-05-15-opencode-context7-mcp\u002Fcover.png",{},"\u002Farticles\u002F2026-05-15-opencode-context7-mcp","2026-05-15 14:44:00",{"title":715,"description":78},"articles\u002F2026-05-15-opencode-context7-mcp","Context7 這款 MCP 應用，它能讓 Opencode 在編碼時即時讀取最新版本的官方文件，而非僅依賴過時的訓練記憶，從而大幅減少 AI 幻覺並提升回答的準確性。",[709,41,710,711],"MD4aLm9bpk4W1cPswPYYPpPu2SWjkYB6cY0MKJo50aY",{"id":969,"title":970,"body":971,"category":1401,"description":78,"extension":83,"image":1402,"meta":1403,"navigation":86,"path":1404,"pubDate":1405,"seo":1406,"status":86,"stem":1407,"summary":1408,"tags":1409,"__hash__":1412},"content\u002Farticles\u002F2026-02-27-mole-tutorial.md","Mole 使用教學：macOS 深度清理與優化神器",{"type":8,"value":972,"toc":1378},[973,977,1001,1004,1014,1016,1020,1023,1027,1043,1046,1049,1072,1079,1081,1084,1092,1095,1113,1149,1156,1162,1174,1177,1184,1190,1198,1210,1217,1220,1238,1250,1257,1260,1278,1290,1297,1314,1326,1328,1331,1365,1367,1370,1373,1375],[100,974,976],{"id":975},"什麼是-mole","什麼是 Mole？",[15,978,979,984,985,988,989,992,993,996,997,1000],{},[726,980,983],{"href":981,"rel":982},"https:\u002F\u002Fgithub.com\u002Ftw93\u002FMole",[730],"Mole"," 是一個為 macOS 設計的開源全能工具箱。它的目標是取代多個付費或分散的工具，將 ",[783,986,987],{},"CleanMyMac","（清理）、",[783,990,991],{},"AppCleaner","（解除安裝）、",[783,994,995],{},"DaisyDisk","（磁碟分析）以及 ",[783,998,999],{},"iStat Menus","（實時監控）的核心功能整合進一個單一的二進位檔案中。",[15,1002,1003],{},"Mole 採用終端機介面（TUI），操作流暢且反應迅速，非常適合喜愛簡潔、高效工作的開發者與進階使用者。",[15,1005,1006,1009,1010],{},[783,1007,1008],{},"專案網址","：",[726,1011,1013],{"href":981,"rel":1012},[730],"tw93\u002FMole",[134,1015],{},[100,1017,1019],{"id":1018},"安裝-mole","安裝 Mole",[15,1021,1022],{},"安裝 Mole 極其簡單，你可以選擇透過 Homebrew（推薦）或是官方腳本。",[225,1024,1026],{"id":1025},"使用-homebrew","使用 Homebrew",[146,1028,1030],{"className":148,"code":1029,"language":150,"meta":78,"style":78},"brew install mole\n",[19,1031,1032],{"__ignoreMap":78},[154,1033,1034,1037,1040],{"class":156,"line":157},[154,1035,1036],{"class":160},"brew",[154,1038,1039],{"class":163}," install",[154,1041,1042],{"class":163}," mole\n",[225,1044,1045],{"id":1045},"使用官方腳本",[15,1047,1048],{},"如果你沒有安裝 Homebrew，也可以直接執行安裝腳本：",[146,1050,1052],{"className":148,"code":1051,"language":150,"meta":78,"style":78},"curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Ftw93\u002Fmole\u002Fmain\u002Finstall.sh | bash\n",[19,1053,1054],{"__ignoreMap":78},[154,1055,1056,1059,1062,1065,1069],{"class":156,"line":157},[154,1057,1058],{"class":160},"curl",[154,1060,1061],{"class":250}," -fsSL",[154,1063,1064],{"class":163}," https:\u002F\u002Fraw.githubusercontent.com\u002Ftw93\u002Fmole\u002Fmain\u002Finstall.sh",[154,1066,1068],{"class":1067},"so5gQ"," |",[154,1070,1071],{"class":160}," bash\n",[15,1073,1074,1075,1078],{},"安裝完成後，在終端機輸入 ",[19,1076,1077],{},"mo"," 即可啟動互動式選單，或直接加上子命令執行特定功能。",[134,1080],{},[100,1082,1083],{"id":1083},"核心功能詳解",[225,1085,1087,1088,1091],{"id":1086},"_1-深度系統清理-mo-clean","1. 深度系統清理 (",[19,1089,1090],{},"mo clean",")",[15,1093,1094],{},"這是 Mole 最常用的功能。它會掃描系統中的各種快取、日誌與垃圾檔案，並提供視覺化的清理建議。",[112,1096,1097,1103],{},[115,1098,1099,1102],{},[783,1100,1101],{},"掃描範疇","：應用程式快取、瀏覽器快取（Chrome, Safari, Firefox）、開發者工具（Xcode, Node.js）、系統日誌、垃圾桶等。",[115,1104,1105,1108,1109,1112],{},[783,1106,1107],{},"預覽模式","：建議先執行 ",[19,1110,1111],{},"mo clean --dry-run"," 來查看預計清理的內容與風險等級。",[146,1114,1116],{"className":148,"code":1115,"language":150,"meta":78,"style":78},"# 執行深度清理\nmo clean\n\n# 僅查看預覽，不實際刪除\nmo clean --dry-run\n",[19,1117,1118,1123,1130,1134,1139],{"__ignoreMap":78},[154,1119,1120],{"class":156,"line":157},[154,1121,1122],{"class":298},"# 執行深度清理\n",[154,1124,1125,1127],{"class":156,"line":79},[154,1126,1077],{"class":160},[154,1128,1129],{"class":163}," clean\n",[154,1131,1132],{"class":156,"line":314},[154,1133,317],{"emptyLinePlaceholder":86},[154,1135,1136],{"class":156,"line":320},[154,1137,1138],{"class":298},"# 僅查看預覽，不實際刪除\n",[154,1140,1141,1143,1146],{"class":156,"line":326},[154,1142,1077],{"class":160},[154,1144,1145],{"class":163}," clean",[154,1147,1148],{"class":250}," --dry-run\n",[225,1150,1152,1153,1091],{"id":1151},"_2-智慧解除安裝-mo-uninstall","2. 智慧解除安裝 (",[19,1154,1155],{},"mo uninstall",[15,1157,1158,1159,1161],{},"普通的刪除應用程式往往會留下許多「殘骸」。",[19,1160,1155],{}," 會搜尋並清理所有相關的偏好設定、支援檔案、Launch Agents 以及隱藏的殘留物。",[146,1163,1165],{"className":148,"code":1164,"language":150,"meta":78,"style":78},"mo uninstall\n",[19,1166,1167],{"__ignoreMap":78},[154,1168,1169,1171],{"class":156,"line":157},[154,1170,1077],{"class":160},[154,1172,1173],{"class":163}," uninstall\n",[15,1175,1176],{},"執行後會彈出清單，讓你選擇想要徹底移除的應用程式。",[225,1178,1180,1181,1091],{"id":1179},"_3-系統優化-mo-optimize","3. 系統優化 (",[19,1182,1183],{},"mo optimize",[15,1185,1186,1187,1189],{},"當你感覺電腦變慢或網路異常時，",[19,1188,1183],{}," 可以幫助你快速重整系統狀態。",[112,1191,1192],{},[115,1193,1194,1197],{},[783,1195,1196],{},"功能包括","：重建系統資料庫、重置網路服務、重啟 Finder 與 Dock、清理診斷紀錄、重建 Spotlight 索引等。",[146,1199,1201],{"className":148,"code":1200,"language":150,"meta":78,"style":78},"mo optimize\n",[19,1202,1203],{"__ignoreMap":78},[154,1204,1205,1207],{"class":156,"line":157},[154,1206,1077],{"class":160},[154,1208,1209],{"class":163}," optimize\n",[225,1211,1213,1214,1091],{"id":1212},"_4-磁碟空間分析-mo-analyze","4. 磁碟空間分析 (",[19,1215,1216],{},"mo analyze",[15,1218,1219],{},"類似於 DaisyDisk，這個功能會以視覺化條狀圖顯示各個目錄的空間佔用情況，並讓你輕鬆找出隱藏的大檔案。",[112,1221,1222,1228],{},[115,1223,1224,1227],{},[783,1225,1226],{},"導覽方式","：支援方向鍵與 Vim 鍵位（h\u002Fj\u002Fk\u002Fl）。",[115,1229,1230,1233,1234,1237],{},[783,1231,1232],{},"外部磁碟","：預設跳過外部磁碟以加快速度，若要分析外接硬碟可指定路徑：",[19,1235,1236],{},"mo analyze \u002FVolumes","。",[146,1239,1241],{"className":148,"code":1240,"language":150,"meta":78,"style":78},"mo analyze\n",[19,1242,1243],{"__ignoreMap":78},[154,1244,1245,1247],{"class":156,"line":157},[154,1246,1077],{"class":160},[154,1248,1249],{"class":163}," analyze\n",[225,1251,1253,1254,1091],{"id":1252},"_5-實時系統狀態-mo-status","5. 實時系統狀態 (",[19,1255,1256],{},"mo status",[15,1258,1259],{},"這是一個精美的實時儀表板，提供 CPU、GPU、記憶體、磁碟 I\u002FO、網路流量以及硬體健康度（如電池循環、溫度、風扇轉速）的完整資訊。",[112,1261,1262,1268],{},[115,1263,1264,1267],{},[783,1265,1266],{},"Health Score","：根據系統壓力自動計算的健康分數。",[115,1269,1270,1273,1274,1277],{},[783,1271,1272],{},"小彩蛋","：在狀態頁面按下 ",[19,1275,1276],{},"k"," 可以召喚「太空貓」陪你工作。",[146,1279,1281],{"className":148,"code":1280,"language":150,"meta":78,"style":78},"mo status\n",[19,1282,1283],{"__ignoreMap":78},[154,1284,1285,1287],{"class":156,"line":157},[154,1286,1077],{"class":160},[154,1288,1289],{"class":163}," status\n",[225,1291,1293,1294,1091],{"id":1292},"_6-專案快取清理-mo-purge","6. 專案快取清理 (",[19,1295,1296],{},"mo purge",[15,1298,1299,1300,1303,1304,1303,1307,1310,1311,1313],{},"對於開發者來說，硬碟空間常被無數專案的 ",[19,1301,1302],{},"node_modules","、",[19,1305,1306],{},"target",[19,1308,1309],{},"build"," 等資料夾吞噬。",[19,1312,1296],{}," 能自動找出並清理這些舊專案的構建產物。",[146,1315,1317],{"className":148,"code":1316,"language":150,"meta":78,"style":78},"mo purge\n",[19,1318,1319],{"__ignoreMap":78},[154,1320,1321,1323],{"class":156,"line":157},[154,1322,1077],{"class":160},[154,1324,1325],{"class":163}," purge\n",[134,1327],{},[100,1329,1330],{"id":1330},"使用技巧與安全性",[112,1332,1333,1345,1355],{},[115,1334,1335,1338,1339,1341,1342,1344],{},[783,1336,1337],{},"安全第一","：Mole 刪除的檔案通常是永久性的。請務必仔細檢查清理清單，特別是在執行 ",[19,1340,1090],{}," 或 ",[19,1343,1296],{}," 時。",[115,1346,1347,1350,1351,1354],{},[783,1348,1349],{},"白名單功能","：如果你希望保護特定的快取不被清理，可以使用 ",[19,1352,1353],{},"mo clean --whitelist"," 進行設定。",[115,1356,1357,1360,1361,1364],{},[783,1358,1359],{},"日誌追蹤","：所有的檔案操作都會記錄在 ",[19,1362,1363],{},"~\u002F.config\u002Fmole\u002Foperations.log","，方便事後追蹤。",[134,1366],{},[100,1368,1369],{"id":1369},"總結",[15,1371,1372],{},"Mole 不僅是一個清理工具，更是一個讓 Mac 保持最佳狀態的隨身護理師。它開源、輕量且極致快速的原生體驗，使其成為 macOS 平台上非常具有競爭力的開源方案。如果你還在為磁碟空間不足或系統卡頓煩惱，不妨現在就安裝 Mole 體驗一下！",[134,1374],{},[675,1376,1377],{},"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":78,"searchDepth":79,"depth":79,"links":1379},[1380,1381,1385,1399,1400],{"id":975,"depth":79,"text":976},{"id":1018,"depth":79,"text":1019,"children":1382},[1383,1384],{"id":1025,"depth":314,"text":1026},{"id":1045,"depth":314,"text":1045},{"id":1083,"depth":79,"text":1083,"children":1386},[1387,1389,1391,1393,1395,1397],{"id":1086,"depth":314,"text":1388},"1. 深度系統清理 (mo clean)",{"id":1151,"depth":314,"text":1390},"2. 智慧解除安裝 (mo uninstall)",{"id":1179,"depth":314,"text":1392},"3. 系統優化 (mo optimize)",{"id":1212,"depth":314,"text":1394},"4. 磁碟空間分析 (mo analyze)",{"id":1252,"depth":314,"text":1396},"5. 實時系統狀態 (mo status)",{"id":1292,"depth":314,"text":1398},"6. 專案快取清理 (mo purge)",{"id":1330,"depth":79,"text":1330},{"id":1369,"depth":79,"text":1369},"software","\u002Fimages\u002Farticles\u002F2026-02-27-mole-tutorial\u002Fcover.png",{},"\u002Farticles\u002F2026-02-27-mole-tutorial","2026-02-27 14:15:00",{"title":970,"description":78},"articles\u002F2026-02-27-mole-tutorial","Mole 是一個開源的全能 macOS 優化工具，結合了 CleanMyMac、AppCleaner、DaisyDisk 和 iStat Menus 的核心功能。本文將帶你一步步掌握 Mole 的各項強大功能，讓你的 Mac 恢復往日的流暢與潔淨。",[1410,1411,710],"MacOS","系統優化","mziUNXsCHKI6FoJ52Gvu-RdbPJ5he5GSmjS74gVH9ME",{"id":1414,"title":1415,"body":1416,"category":700,"description":78,"extension":83,"image":2635,"meta":2636,"navigation":86,"path":2637,"pubDate":2638,"seo":2639,"status":86,"stem":2640,"summary":2641,"tags":2642,"__hash__":2643},"content\u002Farticles\u002F2026-02-24-opencode.md","OpenCode 完全指南：開源 AI 程式碼助手讓開發效率飆升",{"type":8,"value":1417,"toc":2597},[1418,1422,1425,1429,1461,1463,1467,1470,1474,1477,1495,1498,1512,1516,1519,1579,1582,1666,1668,1672,1675,1679,1682,1706,1710,1713,1715,1718,1721,1739,1742,1751,1758,1760,1764,1767,1774,1782,1785,1788,1791,1809,1812,1815,1821,1824,1831,1837,1840,1842,1846,1849,1853,1860,2053,2057,2060,2364,2368,2377,2435,2439,2446,2460,2516,2519,2521,2524,2527,2530,2533,2536,2539,2542,2545,2548,2552,2555,2559,2562,2564,2567,2570,2572,2575,2581,2583,2585,2588,2594],[100,1419,1421],{"id":1420},"什麼是-opencode","什麼是 OpenCode？",[15,1423,1424],{},"OpenCode 是一個開源的 AI 程式碼助手，致力於讓開發者能夠在終端機、IDE 或桌面環境中更高效地撰寫程式碼。由 Anomaly 團隊開發，目前在 GitHub 上已累積超過 10 萬顆星標，擁有超過 700 位貢獻者，每月服務超過 250 萬名開發者。",[225,1426,1428],{"id":1427},"opencode-的核心特點","OpenCode 的核心特點",[112,1430,1431,1437,1443,1449,1455],{},[115,1432,1433,1436],{},[783,1434,1435],{},"LSP 自動啟用","：自動載入正確的 LSP（Language Server Protocol）服務",[115,1438,1439,1442],{},[783,1440,1441],{},"多工作階段","：可同時在同一專案上啟動多個代理程式",[115,1444,1445,1448],{},[783,1446,1447],{},"分享連結","：可分享工作階段連結供他人參考或除錯",[115,1450,1451,1454],{},[783,1452,1453],{},"廣泛模型支援","：支援 75 種以上的 LLM 提供者，包括 Claude、GPT、Gemini 等",[115,1456,1457,1460],{},[783,1458,1459],{},"隱私優先","：不儲存任何程式碼或上下文資料，確保隱私安全",[134,1462],{},[100,1464,1466],{"id":1465},"安裝-opencode","安裝 OpenCode",[15,1468,1469],{},"OpenCode 支援多種安裝方式，以下是各平台的安裝方法：",[225,1471,1473],{"id":1472},"linux-和-macos","Linux 和 macOS",[15,1475,1476],{},"使用官方安裝腳本是最簡單的方式：",[146,1478,1480],{"className":148,"code":1479,"language":150,"meta":78,"style":78},"curl -fsSL https:\u002F\u002Fopencode.ai\u002Finstall | bash\n",[19,1481,1482],{"__ignoreMap":78},[154,1483,1484,1486,1488,1491,1493],{"class":156,"line":157},[154,1485,1058],{"class":160},[154,1487,1061],{"class":250},[154,1489,1490],{"class":163}," https:\u002F\u002Fopencode.ai\u002Finstall",[154,1492,1068],{"class":1067},[154,1494,1071],{"class":160},[15,1496,1497],{},"或者使用 Homebrew：",[146,1499,1501],{"className":148,"code":1500,"language":150,"meta":78,"style":78},"brew install anomalyco\u002Ftap\u002Fopencode\n",[19,1502,1503],{"__ignoreMap":78},[154,1504,1505,1507,1509],{"class":156,"line":157},[154,1506,1036],{"class":160},[154,1508,1039],{"class":163},[154,1510,1511],{"class":163}," anomalyco\u002Ftap\u002Fopencode\n",[225,1513,1515],{"id":1514},"windows","Windows",[15,1517,1518],{},"在 Windows 上建議使用 WSL（Windows Subsystem for Linux）以獲得最佳體驗：",[146,1520,1522],{"className":148,"code":1521,"language":150,"meta":78,"style":78},"# 使用 Chocolatey\nchoco install opencode\n\n# 使用 Scoop\nscoop install opencode\n\n# 使用 NPM\nnpm install -g opencode-ai\n",[19,1523,1524,1529,1539,1543,1548,1557,1561,1566],{"__ignoreMap":78},[154,1525,1526],{"class":156,"line":157},[154,1527,1528],{"class":298},"# 使用 Chocolatey\n",[154,1530,1531,1534,1536],{"class":156,"line":79},[154,1532,1533],{"class":160},"choco",[154,1535,1039],{"class":163},[154,1537,1538],{"class":163}," opencode\n",[154,1540,1541],{"class":156,"line":314},[154,1542,317],{"emptyLinePlaceholder":86},[154,1544,1545],{"class":156,"line":320},[154,1546,1547],{"class":298},"# 使用 Scoop\n",[154,1549,1550,1553,1555],{"class":156,"line":326},[154,1551,1552],{"class":160},"scoop",[154,1554,1039],{"class":163},[154,1556,1538],{"class":163},[154,1558,1559],{"class":156,"line":889},[154,1560,317],{"emptyLinePlaceholder":86},[154,1562,1563],{"class":156,"line":900},[154,1564,1565],{"class":298},"# 使用 NPM\n",[154,1567,1568,1571,1573,1576],{"class":156,"line":906},[154,1569,1570],{"class":160},"npm",[154,1572,1039],{"class":163},[154,1574,1575],{"class":250}," -g",[154,1577,1578],{"class":163}," opencode-ai\n",[225,1580,1581],{"id":1581},"使用套件管理器",[146,1583,1585],{"className":148,"code":1584,"language":150,"meta":78,"style":78},"# 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,1586,1587,1592,1602,1606,1611,1622,1626,1631,1642,1646,1652],{"__ignoreMap":78},[154,1588,1589],{"class":156,"line":157},[154,1590,1591],{"class":298},"# Node.js (npm)\n",[154,1593,1594,1596,1598,1600],{"class":156,"line":79},[154,1595,1570],{"class":160},[154,1597,1039],{"class":163},[154,1599,1575],{"class":250},[154,1601,1578],{"class":163},[154,1603,1604],{"class":156,"line":314},[154,1605,317],{"emptyLinePlaceholder":86},[154,1607,1608],{"class":156,"line":320},[154,1609,1610],{"class":298},"# Bun\n",[154,1612,1613,1616,1618,1620],{"class":156,"line":326},[154,1614,1615],{"class":160},"bun",[154,1617,1039],{"class":163},[154,1619,1575],{"class":250},[154,1621,1578],{"class":163},[154,1623,1624],{"class":156,"line":889},[154,1625,317],{"emptyLinePlaceholder":86},[154,1627,1628],{"class":156,"line":900},[154,1629,1630],{"class":298},"# pnpm\n",[154,1632,1633,1636,1638,1640],{"class":156,"line":906},[154,1634,1635],{"class":160},"pnpm",[154,1637,1039],{"class":163},[154,1639,1575],{"class":250},[154,1641,1578],{"class":163},[154,1643,1644],{"class":156,"line":916},[154,1645,317],{"emptyLinePlaceholder":86},[154,1647,1649],{"class":156,"line":1648},10,[154,1650,1651],{"class":298},"# Yarn\n",[154,1653,1655,1658,1661,1664],{"class":156,"line":1654},11,[154,1656,1657],{"class":160},"yarn",[154,1659,1660],{"class":163}," global",[154,1662,1663],{"class":163}," add",[154,1665,1578],{"class":163},[134,1667],{},[100,1669,1671],{"id":1670},"配置-opencode","配置 OpenCode",[15,1673,1674],{},"安裝完成後，需要配置 LLM 提供者才能開始使用。",[225,1676,1678],{"id":1677},"連接-opencode-zen推薦","連接 OpenCode Zen（推薦）",[15,1680,1681],{},"OpenCode Zen 是經過團隊測試和驗證的優化模型集合，無需擔心模型品質不一致的問題。",[259,1683,1684,1691,1700,1703],{},[115,1685,1686,1687,1690],{},"在終端機中輸入 ",[19,1688,1689],{},"\u002Fconnect"," 命令",[115,1692,1693,1694,1699],{},"選擇 opencode 並前往 ",[726,1695,1698],{"href":1696,"rel":1697},"https:\u002F\u002Fopencode.ai\u002Fauth",[730],"opencode.ai\u002Fauth"," 進行驗證",[115,1701,1702],{},"登入後新增付款資訊並複製 API 金鑰",[115,1704,1705],{},"將 API 金鑰貼上即可完成配置",[225,1707,1709],{"id":1708},"其他-llm-提供者","其他 LLM 提供者",[15,1711,1712],{},"如果你想使用其他 LLM 提供者（如 Claude、GPT、Gemini 等），也可以手動配置各提供者的 API 金鑰。",[134,1714],{},[100,1716,1717],{"id":1717},"初始化專案",[15,1719,1720],{},"配置完成後，即可開始使用 OpenCode：",[146,1722,1724],{"className":148,"code":1723,"language":150,"meta":78,"style":78},"cd \u002Fpath\u002Fto\u002Fyour\u002Fproject\nopencode\n",[19,1725,1726,1734],{"__ignoreMap":78},[154,1727,1728,1731],{"class":156,"line":157},[154,1729,1730],{"class":250},"cd",[154,1732,1733],{"class":163}," \u002Fpath\u002Fto\u002Fyour\u002Fproject\n",[154,1735,1736],{"class":156,"line":79},[154,1737,1738],{"class":160},"opencode\n",[15,1740,1741],{},"初始化專案：",[146,1743,1745],{"className":148,"code":1744,"language":150,"meta":78,"style":78},"\u002Finit\n",[19,1746,1747],{"__ignoreMap":78},[154,1748,1749],{"class":156,"line":157},[154,1750,1744],{"class":160},[15,1752,1753,1754,1757],{},"這會讓 OpenCode 分析你的專案並在專案根目錄建立 ",[19,1755,1756],{},"AGENTS.md"," 檔案。建議將此檔案提交至 Git，這能幫助 OpenCode 理解專案結構和編碼規範。",[134,1759],{},[100,1761,1763],{"id":1762},"opencode-實際應用","OpenCode 實際應用",[225,1765,1766],{"id":1766},"提問與解答",[15,1768,1769,1770,1773],{},"你可以讓 OpenCode 幫你解釋程式碼。使用 ",[19,1771,1772],{},"@"," 鍵可模糊搜尋專案中的檔案：",[146,1775,1780],{"className":1776,"code":1778,"language":1779},[1777],"language-text","How is authentication handled in @packages\u002Ffunctions\u002Fsrc\u002Fapi\u002Findex.ts\n","text",[19,1781,1778],{"__ignoreMap":78},[15,1783,1784],{},"這對於了解他人撰寫的程式碼特別有幫助。",[225,1786,1787],{"id":1787},"新增功能",[15,1789,1790],{},"OpenCode 的「規劃模式」是其強大功能之一。在這個模式下，OpenCode 不會直接修改程式碼，而是會提出實作計畫供你審視。",[259,1792,1793,1800,1803,1806],{},[115,1794,1795,1796,1799],{},"按下 ",[783,1797,1798],{},"Tab"," 鍵切換到規劃模式（畫面右下角會顯示指示器）",[115,1801,1802],{},"描述你想要的功能",[115,1804,1805],{},"檢視計畫並提供回饋或補充細節",[115,1807,1808],{},"確認計畫後，再切換回「建置模式」讓 OpenCode 執行修改",[225,1810,1811],{"id":1811},"程式碼修改",[15,1813,1814],{},"對於較簡單的修改，你可以直接要求 OpenCode 進行修改：",[146,1816,1819],{"className":1817,"code":1818,"language":1779},[1777],"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,1820,1818],{"__ignoreMap":78},[225,1822,1823],{"id":1823},"復原變更",[15,1825,1826,1827,1830],{},"如果修改結果不滿意，可以使用 ",[19,1828,1829],{},"\u002Fundo"," 命令復原：",[146,1832,1835],{"className":1833,"code":1834,"language":1779},[1777],"\u002Fundo\n",[19,1836,1834],{"__ignoreMap":78},[15,1838,1839],{},"OpenCode 會恢復變更並顯示你原本的訊息，讓你可以調整提示後再試一次。",[134,1841],{},[100,1843,1845],{"id":1844},"opencode-常用指令","OpenCode 常用指令",[15,1847,1848],{},"OpenCode 提供了豐富的指令來提升開發效率。這些指令可分為 TUI 指令和 CLI 指令兩種類型。",[225,1850,1852],{"id":1851},"tui-指令","TUI 指令",[15,1854,1855,1856,1859],{},"在 OpenCode 終端機介面中，輸入 ",[19,1857,1858],{},"\u002F"," 後跟指令名稱即可執行。以下是常用的 TUI 指令：",[1861,1862,1863,1876],"table",{},[1864,1865,1866],"thead",{},[1867,1868,1869,1873],"tr",{},[1870,1871,1872],"th",{},"指令",[1870,1874,1875],{},"說明",[1877,1878,1879,1893,1906,1915,1925,1935,1945,1961,1971,1981,1990,2003,2013,2023,2033,2043],"tbody",{},[1867,1880,1881,1887],{},[1882,1883,1884],"td",{},[19,1885,1886],{},"\u002Finit",[1882,1888,1889,1890,1892],{},"建立或更新 ",[19,1891,1756],{}," 檔案，分析專案結構並建立開發規範文件",[1867,1894,1895,1900],{},[1882,1896,1897],{},[19,1898,1899],{},"\u002Fnew",[1882,1901,1902,1903],{},"開始新的工作階段，別名：",[19,1904,1905],{},"\u002Fclear",[1867,1907,1908,1912],{},[1882,1909,1910],{},[19,1911,1829],{},[1882,1913,1914],{},"復原對話中的最後一條訊息，包括所有檔案變更",[1867,1916,1917,1922],{},[1882,1918,1919],{},[19,1920,1921],{},"\u002Fredo",[1882,1923,1924],{},"重做之前復原的訊息",[1867,1926,1927,1932],{},[1882,1928,1929],{},[19,1930,1931],{},"\u002Fshare",[1882,1933,1934],{},"分享當前工作階段，建立可分享的連結",[1867,1936,1937,1942],{},[1882,1938,1939],{},[19,1940,1941],{},"\u002Funshare",[1882,1943,1944],{},"取消分享當前工作階段",[1867,1946,1947,1952],{},[1882,1948,1949],{},[19,1950,1951],{},"\u002Fsessions",[1882,1953,1954,1955,1303,1958],{},"列出工作階段並在工作階段之間切換，別名：",[19,1956,1957],{},"\u002Fresume",[19,1959,1960],{},"\u002Fcontinue",[1867,1962,1963,1968],{},[1882,1964,1965],{},[19,1966,1967],{},"\u002Fmodels",[1882,1969,1970],{},"列出所有可用的模型",[1867,1972,1973,1978],{},[1882,1974,1975],{},[19,1976,1977],{},"\u002Fthemes",[1882,1979,1980],{},"列出可用的主題",[1867,1982,1983,1987],{},[1882,1984,1985],{},[19,1986,1689],{},[1882,1988,1989],{},"將 LLM 提供者新增到 OpenCode",[1867,1991,1992,1997],{},[1882,1993,1994],{},[19,1995,1996],{},"\u002Fcompact",[1882,1998,1999,2000],{},"壓縮當前工作階段，別名：",[19,2001,2002],{},"\u002Fsummarize",[1867,2004,2005,2010],{},[1882,2006,2007],{},[19,2008,2009],{},"\u002Fdetails",[1882,2011,2012],{},"切換工具執行詳情的顯示",[1867,2014,2015,2020],{},[1882,2016,2017],{},[19,2018,2019],{},"\u002Feditor",[1882,2021,2022],{},"開啟外部編輯器來撰寫訊息",[1867,2024,2025,2030],{},[1882,2026,2027],{},[19,2028,2029],{},"\u002Fexport",[1882,2031,2032],{},"將當前對話匯出為 Markdown",[1867,2034,2035,2040],{},[1882,2036,2037],{},[19,2038,2039],{},"\u002Fthinking",[1882,2041,2042],{},"切換思考\u002F推理區塊的可見性",[1867,2044,2045,2050],{},[1882,2046,2047],{},[19,2048,2049],{},"\u002Fhelp",[1882,2051,2052],{},"顯示說明對話框",[225,2054,2056],{"id":2055},"cli-指令","CLI 指令",[15,2058,2059],{},"除了 TUI 指令，OpenCode 還提供強大的命令列工具。以下是常用的 CLI 指令：",[146,2061,2063],{"className":148,"code":2062,"language":150,"meta":78,"style":78},"# 啟動 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,2064,2065,2070,2077,2087,2097,2101,2106,2116,2128,2140,2144,2149,2163,2176,2181,2187,2200,2212,2225,2230,2236,2249,2260,2271,2276,2282,2292,2306,2311,2317,2331,2342,2353],{"__ignoreMap":78},[154,2066,2067],{"class":156,"line":157},[154,2068,2069],{"class":298},"# 啟動 OpenCode\n",[154,2071,2072,2074],{"class":156,"line":79},[154,2073,41],{"class":160},[154,2075,2076],{"class":298},"                          # 啟動 TUI\n",[154,2078,2079,2081,2084],{"class":156,"line":314},[154,2080,41],{"class":160},[154,2082,2083],{"class":163}," \u002Fpath\u002Fto\u002Fproject",[154,2085,2086],{"class":298},"         # 指定專案目錄啟動\n",[154,2088,2089,2091,2094],{"class":156,"line":320},[154,2090,41],{"class":160},[154,2092,2093],{"class":250}," --continue",[154,2095,2096],{"class":298},"               # 繼續上一個工作階段\n",[154,2098,2099],{"class":156,"line":326},[154,2100,317],{"emptyLinePlaceholder":86},[154,2102,2103],{"class":156,"line":889},[154,2104,2105],{"class":298},"# 模型管理\n",[154,2107,2108,2110,2113],{"class":156,"line":900},[154,2109,41],{"class":160},[154,2111,2112],{"class":163}," models",[154,2114,2115],{"class":298},"                   # 列出所有可用模型\n",[154,2117,2118,2120,2122,2125],{"class":156,"line":906},[154,2119,41],{"class":160},[154,2121,2112],{"class":163},[154,2123,2124],{"class":163}," anthropic",[154,2126,2127],{"class":298},"         # 列出特定提供者的模型\n",[154,2129,2130,2132,2134,2137],{"class":156,"line":916},[154,2131,41],{"class":160},[154,2133,2112],{"class":163},[154,2135,2136],{"class":250}," --refresh",[154,2138,2139],{"class":298},"         # 重新整理模型快取\n",[154,2141,2142],{"class":156,"line":1648},[154,2143,317],{"emptyLinePlaceholder":86},[154,2145,2146],{"class":156,"line":1654},[154,2147,2148],{"class":298},"# 代理管理\n",[154,2150,2152,2154,2157,2160],{"class":156,"line":2151},12,[154,2153,41],{"class":160},[154,2155,2156],{"class":163}," agent",[154,2158,2159],{"class":163}," create",[154,2161,2162],{"class":298},"             # 建立新代理\n",[154,2164,2166,2168,2170,2173],{"class":156,"line":2165},13,[154,2167,41],{"class":160},[154,2169,2156],{"class":163},[154,2171,2172],{"class":163}," list",[154,2174,2175],{"class":298},"               # 列出所有代理\n",[154,2177,2179],{"class":156,"line":2178},14,[154,2180,317],{"emptyLinePlaceholder":86},[154,2182,2184],{"class":156,"line":2183},15,[154,2185,2186],{"class":298},"# MCP 伺服器管理\n",[154,2188,2190,2192,2195,2197],{"class":156,"line":2189},16,[154,2191,41],{"class":160},[154,2193,2194],{"class":163}," mcp",[154,2196,1663],{"class":163},[154,2198,2199],{"class":298},"                  # 新增 MCP 伺服器\n",[154,2201,2203,2205,2207,2209],{"class":156,"line":2202},17,[154,2204,41],{"class":160},[154,2206,2194],{"class":163},[154,2208,2172],{"class":163},[154,2210,2211],{"class":298},"                 # 列出所有 MCP 伺服器\n",[154,2213,2215,2217,2219,2222],{"class":156,"line":2214},18,[154,2216,41],{"class":160},[154,2218,2194],{"class":163},[154,2220,2221],{"class":163}," auth",[154,2223,2224],{"class":298},"                 # 對 MCP 伺服器進行認證\n",[154,2226,2228],{"class":156,"line":2227},19,[154,2229,317],{"emptyLinePlaceholder":86},[154,2231,2233],{"class":156,"line":2232},20,[154,2234,2235],{"class":298},"# 工作階段管理\n",[154,2237,2239,2241,2244,2246],{"class":156,"line":2238},21,[154,2240,41],{"class":160},[154,2242,2243],{"class":163}," session",[154,2245,2172],{"class":163},[154,2247,2248],{"class":298},"             # 列出所有工作階段\n",[154,2250,2252,2254,2257],{"class":156,"line":2251},22,[154,2253,41],{"class":160},[154,2255,2256],{"class":163}," export",[154,2258,2259],{"class":298},"                   # 匯出工作階段資料\n",[154,2261,2263,2265,2268],{"class":156,"line":2262},23,[154,2264,41],{"class":160},[154,2266,2267],{"class":163}," import",[154,2269,2270],{"class":298},"                   # 匯入工作階段資料\n",[154,2272,2274],{"class":156,"line":2273},24,[154,2275,317],{"emptyLinePlaceholder":86},[154,2277,2279],{"class":156,"line":2278},25,[154,2280,2281],{"class":298},"# 統計資訊\n",[154,2283,2285,2287,2289],{"class":156,"line":2284},26,[154,2286,41],{"class":160},[154,2288,189],{"class":163},[154,2290,2291],{"class":298},"                    # 顯示 Token 用量和費用統計\n",[154,2293,2295,2297,2299,2301,2303],{"class":156,"line":2294},27,[154,2296,41],{"class":160},[154,2298,189],{"class":163},[154,2300,251],{"class":250},[154,2302,510],{"class":250},[154,2304,2305],{"class":298},"          # 顯示最近 30 天的統計\n",[154,2307,2309],{"class":156,"line":2308},28,[154,2310,317],{"emptyLinePlaceholder":86},[154,2312,2314],{"class":156,"line":2313},29,[154,2315,2316],{"class":298},"# 其他實用指令\n",[154,2318,2320,2322,2325,2328],{"class":156,"line":2319},30,[154,2321,41],{"class":160},[154,2323,2324],{"class":163}," run",[154,2326,2327],{"class":163}," \"提示詞\"",[154,2329,2330],{"class":298},"             # 非互動模式執行\n",[154,2332,2334,2336,2339],{"class":156,"line":2333},31,[154,2335,41],{"class":160},[154,2337,2338],{"class":163}," serve",[154,2340,2341],{"class":298},"                    # 啟動 API 伺服器\n",[154,2343,2345,2347,2350],{"class":156,"line":2344},32,[154,2346,41],{"class":160},[154,2348,2349],{"class":163}," web",[154,2351,2352],{"class":298},"                      # 啟動 Web 介面\n",[154,2354,2356,2358,2361],{"class":156,"line":2355},33,[154,2357,41],{"class":160},[154,2359,2360],{"class":163}," upgrade",[154,2362,2363],{"class":298},"                  # 更新 OpenCode\n",[225,2365,2367],{"id":2366},"代理agents","代理（Agents）",[15,2369,2370,2371,2373,2374,2376],{},"OpenCode 內建了多種代理類型，可透過 ",[783,2372,1798],{}," 鍵切換或使用 ",[19,2375,1772],{}," 提及呼叫：",[1861,2378,2379,2391],{},[1864,2380,2381],{},[1867,2382,2383,2386,2389],{},[1870,2384,2385],{},"代理",[1870,2387,2388],{},"類型",[1870,2390,1875],{},[1877,2392,2393,2404,2414,2425],{},[1867,2394,2395,2398,2401],{},[1882,2396,2397],{},"Build",[1882,2399,2400],{},"主代理",[1882,2402,2403],{},"預設代理，啟用所有工具",[1867,2405,2406,2409,2411],{},[1882,2407,2408],{},"Plan",[1882,2410,2400],{},[1882,2412,2413],{},"規劃和分析代理，無法修改檔案",[1867,2415,2416,2419,2422],{},[1882,2417,2418],{},"General",[1882,2420,2421],{},"子代理",[1882,2423,2424],{},"通用研究代理，完整工具存取",[1867,2426,2427,2430,2432],{},[1882,2428,2429],{},"Explore",[1882,2431,2421],{},[1882,2433,2434],{},"快速唯讀代理，用於探索程式碼庫",[225,2436,2438],{"id":2437},"技能skills","技能（Skills）",[15,2440,2441,2442,2445],{},"技能是可重複使用的行為定義，透過 ",[19,2443,2444],{},"SKILL.md"," 檔案設定。技能檔案放置位置：",[112,2447,2448,2454],{},[115,2449,2450,2451],{},"專案：",[19,2452,2453],{},".opencode\u002Fskills\u002F\u003Cname>\u002FSKILL.md",[115,2455,2456,2457],{},"全域：",[19,2458,2459],{},"~\u002F.config\u002Fopencode\u002Fskills\u002F\u003Cname>\u002FSKILL.md",[146,2461,2465],{"className":2462,"code":2463,"language":2464,"meta":78,"style":78},"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,2466,2467,2472,2477,2482,2486,2491,2496,2501,2506,2511],{"__ignoreMap":78},[154,2468,2469],{"class":156,"line":157},[154,2470,2471],{},"---\n",[154,2473,2474],{"class":156,"line":79},[154,2475,2476],{},"name: git-release\n",[154,2478,2479],{"class":156,"line":314},[154,2480,2481],{},"description: Create consistent releases and changelogs\n",[154,2483,2484],{"class":156,"line":320},[154,2485,2471],{},[154,2487,2488],{"class":156,"line":326},[154,2489,2490],{},"## What I do\n",[154,2492,2493],{"class":156,"line":889},[154,2494,2495],{},"- Draft release notes from merged PRs\n",[154,2497,2498],{"class":156,"line":900},[154,2499,2500],{},"- Propose a version bump\n",[154,2502,2503],{"class":156,"line":906},[154,2504,2505],{},"- Provide a copy-pasteable git command\n",[154,2507,2508],{"class":156,"line":916},[154,2509,2510],{},"## When to use me\n",[154,2512,2513],{"class":156,"line":1648},[154,2514,2515],{},"Use this when you are preparing a tagged release.\n",[15,2517,2518],{},"透過靈活運用這些指令和快捷鍵，可以大幅提升使用 OpenCode 的開發效率。",[134,2520],{},[100,2522,2523],{"id":2523},"進階功能",[225,2525,2526],{"id":2526},"主題自訂",[15,2528,2529],{},"OpenCode 支援多種主題，你可以根據喜好進行設定。",[225,2531,2532],{"id":2532},"快捷鍵自訂",[15,2534,2535],{},"自訂鍵位綁定以符合個人工作流程。",[225,2537,2538],{"id":2538},"程式碼格式化",[15,2540,2541],{},"配置程式碼格式化工具，確保程式碼風格一致。",[225,2543,2544],{"id":2544},"自訂命令",[15,2546,2547],{},"建立重複使用的自訂命令，提高工作效率。",[225,2549,2551],{"id":2550},"整合-github-copilot","整合 GitHub Copilot",[15,2553,2554],{},"登入 GitHub 即可使用現有的 Copilot 帳戶。",[225,2556,2558],{"id":2557},"整合-ide","整合 IDE",[15,2560,2561],{},"OpenCode 提供 IDE 擴充功能，讓你可在喜愛的編輯器中使用。",[134,2563],{},[100,2565,2566],{"id":2566},"圖片支援",[15,2568,2569],{},"OpenCode 支援圖片分析功能。你可以將圖片拖曳到終端機中，OpenCode 會掃描圖片並將其加入提示中。這對於設計 UI 時參考範例圖片特別有用。",[134,2571],{},[100,2573,2574],{"id":2574},"分享功能",[15,2576,2577,2578,2580],{},"使用 ",[19,2579,1931],{}," 命令可建立當前對話的分享連結，讓團隊成員能夠參考你的工作階段或協助除錯。",[134,2582],{},[100,2584,1369],{"id":1369},[15,2586,2587],{},"OpenCode 作為一個開源的 AI 程式碼助手，提供了豐富的功能來提升開發效率。從自動化的 LSP 支援到多模型整合，再到強大的規劃和復原機制，OpenCode 為開發者提供了一個靈活且強大的 AI 輔助工具。",[15,2589,2590,2591,2593],{},"對於團隊開發而言，將 ",[19,2592,1756],{}," 提交至版本控制系統，能確保所有成員都能獲得一致的 AI 輔助體驗。而其隱私優先的設計理念，更讓企業和重視資料安全的開發者能夠放心使用。",[675,2595,2596],{},"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":78,"searchDepth":79,"depth":79,"links":2598},[2599,2602,2607,2611,2612,2618,2624,2632,2633,2634],{"id":1420,"depth":79,"text":1421,"children":2600},[2601],{"id":1427,"depth":314,"text":1428},{"id":1465,"depth":79,"text":1466,"children":2603},[2604,2605,2606],{"id":1472,"depth":314,"text":1473},{"id":1514,"depth":314,"text":1515},{"id":1581,"depth":314,"text":1581},{"id":1670,"depth":79,"text":1671,"children":2608},[2609,2610],{"id":1677,"depth":314,"text":1678},{"id":1708,"depth":314,"text":1709},{"id":1717,"depth":79,"text":1717},{"id":1762,"depth":79,"text":1763,"children":2613},[2614,2615,2616,2617],{"id":1766,"depth":314,"text":1766},{"id":1787,"depth":314,"text":1787},{"id":1811,"depth":314,"text":1811},{"id":1823,"depth":314,"text":1823},{"id":1844,"depth":79,"text":1845,"children":2619},[2620,2621,2622,2623],{"id":1851,"depth":314,"text":1852},{"id":2055,"depth":314,"text":2056},{"id":2366,"depth":314,"text":2367},{"id":2437,"depth":314,"text":2438},{"id":2523,"depth":79,"text":2523,"children":2625},[2626,2627,2628,2629,2630,2631],{"id":2526,"depth":314,"text":2526},{"id":2532,"depth":314,"text":2532},{"id":2538,"depth":314,"text":2538},{"id":2544,"depth":314,"text":2544},{"id":2550,"depth":314,"text":2551},{"id":2557,"depth":314,"text":2558},{"id":2566,"depth":79,"text":2566},{"id":2574,"depth":79,"text":2574},{"id":1369,"depth":79,"text":1369},"\u002Fimages\u002Farticles\u002F2026-02-24-opencode\u002Fcover.png",{},"\u002Farticles\u002F2026-02-24-opencode","2026-02-24 12:00:00",{"title":1415,"description":78},"articles\u002F2026-02-24-opencode","OpenCode 是一個開源的 AI 程式碼助手，支援終端機、桌面應用程式和 IDE 擴充功能。本文將帶你深入了解 OpenCode 的安裝、配置和各項強大功能，讓你體驗 AI 輔助開發的便利性。",[41,709,711,710],"hCbyfY05rfnLeV9qp9nMDhmuIDOO6nXzSa_pGswgHzA",{"id":2645,"title":2646,"body":2647,"category":1401,"description":78,"extension":83,"image":3052,"meta":3053,"navigation":86,"path":3054,"pubDate":3055,"seo":3056,"status":86,"stem":3057,"summary":3058,"tags":3059,"__hash__":3061},"content\u002Farticles\u002F2025-11-16-ffmpeg-getting-started.md","FFmpeg 新手入門：從安裝到常用指令實戰",{"type":8,"value":2648,"toc":3044},[2649,2652,2655,2658,2661,2675,2678,2691,2694,2697,2715,2718,2746,2760,2763,2779,2782,2798,2801,2826,2845,2848,2851,2885,2909,2912,2915,2952,2972,2975,3025,3030,3032,3041],[100,2650,2651],{"id":2651},"簡介",[15,2653,2654],{},"FFmpeg 是一套以命令列為主的開源多媒體處理工具，支援幾乎所有常見的音訊與影像格式（編碼\u002F封裝）。\n對開發者、系統工程師與內容創作者而言，FFmpeg 是自動化轉檔、批次處理、串流轉封裝與影音後製流程中不可或缺的工具。\n本文以實務為導向，示範安裝步驟與常用命令（轉檔、壓縮、截圖、合併、裁切等），並說明常見選項與應用場景，協助你快速在專案或腳本中整合 FFmpeg。",[100,2656,2657],{"id":2657},"安裝",[15,2659,2660],{},"一、在 MacOS 安裝 ffmpeg",[146,2662,2664],{"className":148,"code":2663,"language":150,"meta":78,"style":78},"brew install ffmpeg\n",[19,2665,2666],{"__ignoreMap":78},[154,2667,2668,2670,2672],{"class":156,"line":157},[154,2669,1036],{"class":160},[154,2671,1039],{"class":163},[154,2673,2674],{"class":163}," ffmpeg\n",[15,2676,2677],{},"二、在終端機輸入以下指令，可取得 ffmpeg 版本號和相關設定資訊",[146,2679,2681],{"className":148,"code":2680,"language":150,"meta":78,"style":78},"ffmpeg -version\n",[19,2682,2683],{"__ignoreMap":78},[154,2684,2685,2688],{"class":156,"line":157},[154,2686,2687],{"class":160},"ffmpeg",[154,2689,2690],{"class":250}," -version\n",[100,2692,2693],{"id":2693},"轉檔",[15,2695,2696],{},"一、基本轉檔",[146,2698,2700],{"className":148,"code":2699,"language":150,"meta":78,"style":78},"ffmpeg -i input.mov output.mp4\n",[19,2701,2702],{"__ignoreMap":78},[154,2703,2704,2706,2709,2712],{"class":156,"line":157},[154,2705,2687],{"class":160},[154,2707,2708],{"class":250}," -i",[154,2710,2711],{"class":163}," input.mov",[154,2713,2714],{"class":163}," output.mp4\n",[15,2716,2717],{},"二、更換影片和音訊的編碼",[146,2719,2721],{"className":148,"code":2720,"language":150,"meta":78,"style":78},"ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4\n",[19,2722,2723],{"__ignoreMap":78},[154,2724,2725,2727,2729,2732,2735,2738,2741,2744],{"class":156,"line":157},[154,2726,2687],{"class":160},[154,2728,2708],{"class":250},[154,2730,2731],{"class":163}," input.mp4",[154,2733,2734],{"class":250}," -c:v",[154,2736,2737],{"class":163}," libx264",[154,2739,2740],{"class":250}," -c:a",[154,2742,2743],{"class":163}," aac",[154,2745,2714],{"class":163},[112,2747,2748,2754],{},[115,2749,2750,2753],{},[19,2751,2752],{},"-c:v libx264","：指定使用 H.264 編碼器進行影片編碼。",[115,2755,2756,2759],{},[19,2757,2758],{},"-c:a aac","： 指定使用 AAC 編碼器進行音頻編碼。",[15,2761,2762],{},"三、影片轉成序列圖片檔",[146,2764,2766],{"className":148,"code":2765,"language":150,"meta":78,"style":78},"ffmpeg -i input.mp4 video\u002Foutput_%04d.png\n",[19,2767,2768],{"__ignoreMap":78},[154,2769,2770,2772,2774,2776],{"class":156,"line":157},[154,2771,2687],{"class":160},[154,2773,2708],{"class":250},[154,2775,2731],{"class":163},[154,2777,2778],{"class":163}," video\u002Foutput_%04d.png\n",[15,2780,2781],{},"四、影片轉成音訊檔",[146,2783,2785],{"className":148,"code":2784,"language":150,"meta":78,"style":78},"ffmpeg -i input.mp4 music\u002Foutput.mp3\n",[19,2786,2787],{"__ignoreMap":78},[154,2788,2789,2791,2793,2795],{"class":156,"line":157},[154,2790,2687],{"class":160},[154,2792,2708],{"class":250},[154,2794,2731],{"class":163},[154,2796,2797],{"class":163}," music\u002Foutput.mp3\n",[15,2799,2800],{},"五、序列圖片轉成影片檔",[146,2802,2804],{"className":148,"code":2803,"language":150,"meta":78,"style":78},"ffmpeg -framerate 30 -i video\u002Foutput_%04d.png -c:v libx264 output.mp4\n",[19,2805,2806],{"__ignoreMap":78},[154,2807,2808,2810,2813,2815,2817,2820,2822,2824],{"class":156,"line":157},[154,2809,2687],{"class":160},[154,2811,2812],{"class":250}," -framerate",[154,2814,510],{"class":250},[154,2816,2708],{"class":250},[154,2818,2819],{"class":163}," video\u002Foutput_%04d.png",[154,2821,2734],{"class":250},[154,2823,2737],{"class":163},[154,2825,2714],{"class":163},[112,2827,2828,2834,2840],{},[115,2829,2830,2833],{},[19,2831,2832],{},"framerate","：影格率（fps）",[115,2835,2836,2839],{},[19,2837,2838],{},"-i","：輸入",[115,2841,2842,2844],{},[19,2843,2752],{},"：使用 H264 編碼",[100,2846,2847],{"id":2847},"剪裁",[15,2849,2850],{},"一、時間裁切（截取片段）",[146,2852,2854],{"className":148,"code":2853,"language":150,"meta":78,"style":78},"ffmpeg -ss - -i input.mp4 -t 10 -c copy output_trim.mp4\n",[19,2855,2856],{"__ignoreMap":78},[154,2857,2858,2860,2863,2866,2868,2870,2873,2876,2879,2882],{"class":156,"line":157},[154,2859,2687],{"class":160},[154,2861,2862],{"class":250}," -ss",[154,2864,2865],{"class":163}," -",[154,2867,2708],{"class":250},[154,2869,2731],{"class":163},[154,2871,2872],{"class":250}," -t",[154,2874,2875],{"class":250}," 10",[154,2877,2878],{"class":250}," -c",[154,2880,2881],{"class":163}," copy",[154,2883,2884],{"class":163}," output_trim.mp4\n",[112,2886,2887,2893,2897,2903],{},[115,2888,2889,2892],{},[19,2890,2891],{},"-ss","： 開始時間",[115,2894,2895,2839],{},[19,2896,2838],{},[115,2898,2899,2902],{},[19,2900,2901],{},"-t","：截取時間(秒)",[115,2904,2905,2908],{},[19,2906,2907],{},"-c copy","：不進行重新編碼-",[100,2910,2911],{"id":2911},"合併",[15,2913,2914],{},"一、合併影片檔和聲音檔",[146,2916,2918],{"className":148,"code":2917,"language":150,"meta":78,"style":78},"ffmpeg -i input.mp4 -i audio.wav -c:v copy -c:a aac -b:a 192k -shortest output.mp4\n",[19,2919,2920],{"__ignoreMap":78},[154,2921,2922,2924,2926,2928,2930,2933,2935,2937,2939,2941,2944,2947,2950],{"class":156,"line":157},[154,2923,2687],{"class":160},[154,2925,2708],{"class":250},[154,2927,2731],{"class":163},[154,2929,2708],{"class":250},[154,2931,2932],{"class":163}," audio.wav",[154,2934,2734],{"class":250},[154,2936,2881],{"class":163},[154,2938,2740],{"class":250},[154,2940,2743],{"class":163},[154,2942,2943],{"class":250}," -b:a",[154,2945,2946],{"class":163}," 192k",[154,2948,2949],{"class":250}," -shortest",[154,2951,2714],{"class":163},[112,2953,2954,2960,2966],{},[115,2955,2956,2959],{},[19,2957,2958],{},"-c:v copy","：複製原影片，不重新編碼（保留畫質、速度快）",[115,2961,2962,2965],{},[19,2963,2964],{},"-c:a aac -b:a 192k","： 把音訊編成 AAC，192 kbps 常見且相容性好。",[115,2967,2968,2971],{},[19,2969,2970],{},"-shortest","：以較短的軌為準，避免多出黑畫面或靜音尾巴",[15,2973,2974],{},"二、合併圖片",[112,2976,2977,2989],{},[115,2978,2979,2980,2983],{},"建立影像清單 ",[19,2981,2982],{},"filelist.txt",[146,2984,2987],{"className":2985,"code":2986,"language":1779,"meta":78},[1777],"file 'part1.mp4'\nfile 'part2.mp4'\nfile 'part3.mp4'\n",[19,2988,2986],{"__ignoreMap":78},[115,2990,2991,2992],{},"串連輸出",[146,2993,2995],{"className":148,"code":2994,"language":150,"meta":78,"style":78},"ffmpeg -f concat -safe 0 -i filelist.txt -c copy output_concat.mp4\n",[19,2996,2997],{"__ignoreMap":78},[154,2998,2999,3001,3004,3007,3010,3013,3015,3018,3020,3022],{"class":156,"line":157},[154,3000,2687],{"class":160},[154,3002,3003],{"class":250}," -f",[154,3005,3006],{"class":163}," concat",[154,3008,3009],{"class":250}," -safe",[154,3011,3012],{"class":250}," 0",[154,3014,2708],{"class":250},[154,3016,3017],{"class":163}," filelist.txt",[154,3019,2878],{"class":250},[154,3021,2881],{"class":163},[154,3023,3024],{"class":163}," output_concat.mp4\n",[15,3026,3027],{},[783,3028,3029],{},"注意：所有影片片段編碼參數需相同，否則會有導致音畫不同步，或是合併失敗",[100,3031,945],{"id":945},[15,3033,3034,3035,3040],{},"總結來說，FFmpeg 是一個功能強大的影音處理工具，只是功能對一般人來說複雜，而本文整理常用的使用情境，期望讓使用快速上手，若要更詳細的功能使用，可以參考",[726,3036,3039],{"href":3037,"rel":3038},"https:\u002F\u002Fffmpeg.org\u002Fffmpeg.html",[730],"官方文件","，希望這份指南能幫助你更好地利用 FFmpeg，打造更完美的影音作品！",[675,3042,3043],{},"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":78,"searchDepth":79,"depth":79,"links":3045},[3046,3047,3048,3049,3050,3051],{"id":2651,"depth":79,"text":2651},{"id":2657,"depth":79,"text":2657},{"id":2693,"depth":79,"text":2693},{"id":2847,"depth":79,"text":2847},{"id":2911,"depth":79,"text":2911},{"id":945,"depth":79,"text":945},"\u002Fimages\u002Farticles\u002F2025-11-16-ffmpeg-getting-started\u002Fcover.png",{},"\u002Farticles\u002F2025-11-16-ffmpeg-getting-started","2025-11-16 16:54:00",{"title":2646,"description":78},"articles\u002F2025-11-16-ffmpeg-getting-started","FFmpeg 是一個跨平台的開源多媒體工具組，用來處理音樂與影片。",[3060,1401,710],"video","ZdvGeair61zT3Br9J0Csx2v78hP1q2MfzpRednjS9zw",{"id":3063,"title":3064,"body":3065,"category":700,"description":78,"extension":83,"image":3237,"meta":3238,"navigation":86,"path":3239,"pubDate":3240,"seo":3241,"status":86,"stem":3242,"summary":3243,"tags":3244,"__hash__":3246},"content\u002Farticles\u002F2025-08-05-ai-upscayl.md","告別模糊！用 Upscayl 輕鬆放大照片，讓細節更清晰",{"type":8,"value":3066,"toc":3229},[3067,3071,3074,3077,3133,3136,3142,3145,3151,3202,3205,3219,3221,3224],[100,3068,3070],{"id":3069},"什麼是-upscayl","什麼是 Upscayl？",[15,3072,3073],{},"Upscayl 是一款免費、開源的圖像放大（upscaling）工具，利用 AI（人工智慧）技術，尤其是 圖像超解析度（Super-Resolution）模型，將低解析度的圖片放大為高解析度，同時盡可能保留或重建細節，讓圖片變得更清晰、更銳利。",[100,3075,3076],{"id":3076},"主要特色",[112,3078,3079,3101,3115,3121,3127],{},[115,3080,3081,3084,3085,1303,3088,1303,3091,1303,3094,1303,3097,3100],{},[783,3082,3083],{},"多個AI模型可選擇","： ",[19,3086,3087],{},"Upscayl",[19,3089,3090],{},"Upscayl lite",[19,3092,3093],{},"Remacri",[19,3095,3096],{},"Ultramax",[19,3098,3099],{},"Ultrasharp"," 等可以選擇",[115,3102,3103,3106,3107,1303,3109,3112,3113],{},[783,3104,3105],{},"跨平台","：支援 ",[19,3108,1515],{},[19,3110,3111],{},"Linux"," 和 ",[19,3114,1410],{},[115,3116,3117,3120],{},[783,3118,3119],{},"開援授權","：採用 MIT 授權",[115,3122,3123,3126],{},[783,3124,3125],{},"支援批次處理","：可以處理多張圖片",[115,3128,3129,3132],{},[783,3130,3131],{},"操作簡單","：使用介面非常友善，新手小白輕易上手",[100,3134,3135],{"id":3135},"下載網址",[15,3137,3138],{},[726,3139,3140],{"href":3140,"rel":3141},"https:\u002F\u002Fupscayl.github.io\u002F",[730],[100,3143,3144],{"id":3144},"操作介紹",[15,3146,3147],{},[939,3148],{"alt":3149,"src":3150},"操作介面","\u002Fimages\u002Farticles\u002F2025-08-05-ai-upscayl\u002FUpscayl-01.png",[259,3152,3153,3159,3165,3174,3180,3186,3192],{},[115,3154,3155,3158],{},[783,3156,3157],{},"選擇批次處理","：可選擇單張圖片放大，或批次放大",[115,3160,3161,3164],{},[783,3162,3163],{},"選舉圖片","：若單張放大時，則選擇圖片，若選擇批次放大，則選擇目錄",[115,3166,3167,3170,3171],{},[783,3168,3169],{},"選擇放大模型","：可以依自已需求，選擇放大模型 ",[939,3172],{"alt":3169,"src":3173},"\u002Fimages\u002Farticles\u002F2025-08-05-ai-upscayl\u002FUpscayl-02.png",[115,3175,3176,3179],{},[783,3177,3178],{},"雙次放大","：進行兩次放大",[115,3181,3182,3185],{},[783,3183,3184],{},"放大比例","：可選擇放大倍率",[115,3187,3188,3191],{},[783,3189,3190],{},"選擇輸出位置","：可選擇輸出目錄",[115,3193,3194,3197,3198],{},[783,3195,3196],{},"開始處理","：開始放大 ",[939,3199],{"alt":3200,"src":3201},"放大後可瀏覽結果","\u002Fimages\u002Farticles\u002F2025-08-05-ai-upscayl\u002FUpscayl-03.png",[100,3203,3204],{"id":3204},"使用情境",[112,3206,3207,3210,3213,3216],{},[115,3208,3209],{},"放大老照片或低清圖片",[115,3211,3212],{},"為插圖、漫畫、像素風圖片增強清晰度",[115,3214,3215],{},"為網路下載的壓縮圖片進行畫質修復",[115,3217,3218],{},"用於 2D 遊戲素材的升級",[100,3220,945],{"id":945},[15,3222,3223],{},"Upscayl 是一款結合人工智慧與開源精神的圖像放大工具，讓使用者即使沒有專業技術背景，也能輕鬆將模糊、低解析度的圖片轉換為更清晰、可用的高解析版本。無論是修復舊照片、強化插圖，還是優化網路圖片，Upscayl 都提供了一種快速且免費的解決方案，是創作者與設計師不可或缺的好幫手。",[15,3225,3226],{},[783,3227,3228],{},"注意！Upscayl 提供部份模型是無法使用於商用",{"title":78,"searchDepth":79,"depth":79,"links":3230},[3231,3232,3233,3234,3235,3236],{"id":3069,"depth":79,"text":3070},{"id":3076,"depth":79,"text":3076},{"id":3135,"depth":79,"text":3135},{"id":3144,"depth":79,"text":3144},{"id":3204,"depth":79,"text":3204},{"id":945,"depth":79,"text":945},"\u002Fimages\u002Farticles\u002F2025-08-05-ai-upscayl\u002Fcover.png",{},"\u002Farticles\u002F2025-08-05-ai-upscayl","2025-08-05 20:38:00",{"title":3064,"description":78},"articles\u002F2025-08-05-ai-upscayl","Upscayl 是一個基於開源人工智慧的免費圖片放大軟體，可以有效地提升低解析度的圖片品質。它支援 Linux、Windows 和 macOS 平台，並能將照片放大到超越原始畫質的程度。",[709,3245,1401,710],"圖片處理","tRflg5x3IYHijIQy2fPVyq0DlJreuDRMFZP2NyCvLa0",{"id":3248,"title":3249,"body":3250,"category":700,"description":5998,"extension":83,"image":5999,"meta":6000,"navigation":86,"path":6001,"pubDate":6002,"seo":6003,"status":86,"stem":6004,"summary":6005,"tags":6006,"__hash__":6007},"content\u002Farticles\u002F2025-07-12-gemini-cli.md","Gemini CLI 教學：善用 AI 提升你的終端機開發效率",{"type":8,"value":3251,"toc":5985},[3252,3256,3271,3275,3278,3282,3320,3324,3328,3375,3379,3382,3387,3393,3399,3405,3411,3420,3423,3679,3684,3866,3871,5770,5773,5780,5786,5791,5797,5821,5827,5833,5837,5845,5851,5855,5867,5952,5958,5960,5963,5966,5982],[11,3253,3255],{"id":3254},"gemini-cli-教學將-gemini-的強大-ai-能力帶入你的終端機","Gemini CLI 教學：將 Gemini 的強大 AI 能力帶入你的終端機",[15,3257,3258,3259,3262,3263,3266,3267,3270],{},"Google 發最新的 AI 開發工具 ",[19,3260,3261],{},"Gemini CLI","，可以對標 Anthropic 的 ",[19,3264,3265],{},"Claude Code"," 和 OpenAI 的 ",[19,3268,3269],{},"Codex CLI","等 AI 開發工具，也讓使得 AI開發工具的竸爭進入白熱化。",[100,3272,3274],{"id":3273},"gemini-cli-是什麼","Gemini CLI 是什麼？",[15,3276,3277],{},"Gemini CLI 是一個開源的 AI 代理（AI Agent），它將 Google 的 Gemini 模型（特別是 Gemini 2.5 Pro）的能力直接整合到你的終端機環境中。這意味著你可以在不離開終端機的情況下，利用 AI 來協助你完成各種開發工作。",[225,3279,3281],{"id":3280},"主要特色與優勢","主要特色與優勢：",[112,3283,3284,3290,3296,3302,3308,3314],{},[115,3285,3286,3289],{},[783,3287,3288],{},"無縫整合 Gemini 模型："," 直接在終端機中使用 Gemini 2.5 Pro 的強大功能，包括其高達 100 萬詞元的長脈絡（context window）。",[115,3291,3292,3295],{},[783,3293,3294],{},"開源且高度擴充："," 採用 Apache 2.0 授權，原始碼公開透明，並支援 Model Context Protocol (MCP) 等擴充功能，讓你可以自訂和擴展其能力。",[115,3297,3298,3301],{},[783,3299,3300],{},"多功能性："," 不僅限於程式碼生成，還能協助檔案操作、指令執行、動態故障排除、內容生成、問題解決、深入研究和任務管理。",[115,3303,3304,3307],{},[783,3305,3306],{},"個人開發者免費額度："," 使用個人 Google 帳戶即可免費使用 Gemini CLI，提供業界領先的免費使用額度（每分鐘 60 次，每日最多 1,000 次模型執行）。",[115,3309,3310,3313],{},[783,3311,3312],{},"AI-First Coding 概念："," 鼓勵開發者以 AI 為優先，將 AI 視為協作夥伴，透過清晰的提示詞引導 AI 完成任務，並審核其產出。",[115,3315,3316,3319],{},[783,3317,3318],{},"與 Gemini Code Assist 整合："," 與 Google 的 AI 程式碼編寫輔助工具 Gemini Code Assist 採用相同核心技術，提供更一致的 AI 開發體驗。",[100,3321,3323],{"id":3322},"開始使用-gemini-cli","開始使用 Gemini CLI",[225,3325,3327],{"id":3326},"安裝步驟","安裝步驟：",[259,3329,3330,3343,3365],{},[115,3331,3332,3335,3336,3339,3340,1237],{},[783,3333,3334],{},"安裝 Node.js："," 確保你的系統已安裝 Node.js 版本 ",[19,3337,3338],{},"18"," 或以上，建議使用版本 ",[19,3341,3342],{},"20",[115,3344,3345,3348,3349],{},[783,3346,3347],{},"安裝 Gemini CLI："," 在終端機中執行以下指令進行全域安裝：\n",[146,3350,3352],{"className":148,"code":3351,"language":150,"meta":78,"style":78},"npm install -g @google\u002Fgemini-cli\n",[19,3353,3354],{"__ignoreMap":78},[154,3355,3356,3358,3360,3362],{"class":156,"line":157},[154,3357,1570],{"class":160},[154,3359,1039],{"class":163},[154,3361,1575],{"class":250},[154,3363,3364],{"class":163}," @google\u002Fgemini-cli\n",[115,3366,3367,3370,3371,3374],{},[783,3368,3369],{},"初步設定："," 執行 ",[19,3372,3373],{},"gemini"," 指令，依照提示完成初步設定，例如選擇你偏好的 Theme 和進行身份驗證（通常是登入你的 Google 帳戶）。",[225,3376,3378],{"id":3377},"快速入門","快速入門：",[15,3380,3381],{},"讓我們透過一個簡單的範例來體驗 Gemini CLI 的強大之處。假設我們想生成一個計算費式數列的 Python 程式碼，並將其儲存並執行。",[15,3383,3384],{},[783,3385,3386],{},"Prompt：",[146,3388,3391],{"className":3389,"code":3390,"language":1779},[1777],"使用html5開發一個飛機射擊遊戲，需有計分系統，每擊敗普通怪物得5分，擊敗Boss級怪物得100分，專案目錄：`~\u002Fwww\u002FAircraft-shooting`\n",[19,3392,3390],{"__ignoreMap":78},[15,3394,3395,3396,3398],{},"在執行過程中，",[19,3397,3261],{}," 會使用詢問互動方式，來協助使用者完成專案",[15,3400,3401,3402,3404],{},"建立檔案產與寫入檔案時，",[19,3403,3261],{}," 會讓使用者確認",[15,3406,3407],{},[939,3408],{"alt":3409,"src":3410},"Gemini CLI詢問使用者是否建立檔案","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-01.png",[15,3412,3413,3414,3416,3417,3419],{},"確認後 ",[19,3415,3261],{}," 會開始建立相關程式，以此為例，",[19,3418,3261],{}," 建了以下程式",[15,3421,3422],{},"1 index.html",[146,3424,3428],{"className":3425,"code":3426,"language":3427,"meta":78,"style":78},"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,3429,3430,3445,3463,3472,3490,3514,3528,3553,3562,3571,3583,3621,3642,3663,3671],{"__ignoreMap":78},[154,3431,3432,3435,3439,3442],{"class":156,"line":157},[154,3433,3434],{"class":192},"\u003C!",[154,3436,3438],{"class":3437},"sByVh","DOCTYPE",[154,3440,3441],{"class":160}," html",[154,3443,3444],{"class":192},">\n",[154,3446,3447,3450,3452,3455,3458,3461],{"class":156,"line":79},[154,3448,3449],{"class":192},"\u003C",[154,3451,3427],{"class":3437},[154,3453,3454],{"class":160}," lang",[154,3456,3457],{"class":192},"=",[154,3459,3460],{"class":163},"\"en\"",[154,3462,3444],{"class":192},[154,3464,3465,3467,3470],{"class":156,"line":314},[154,3466,3449],{"class":192},[154,3468,3469],{"class":3437},"head",[154,3471,3444],{"class":192},[154,3473,3474,3477,3480,3483,3485,3488],{"class":156,"line":320},[154,3475,3476],{"class":192},"    \u003C",[154,3478,3479],{"class":3437},"meta",[154,3481,3482],{"class":160}," charset",[154,3484,3457],{"class":192},[154,3486,3487],{"class":163},"\"UTF-8\"",[154,3489,3444],{"class":192},[154,3491,3492,3494,3496,3499,3501,3504,3507,3509,3512],{"class":156,"line":326},[154,3493,3476],{"class":192},[154,3495,3479],{"class":3437},[154,3497,3498],{"class":160}," name",[154,3500,3457],{"class":192},[154,3502,3503],{"class":163},"\"viewport\"",[154,3505,3506],{"class":160}," content",[154,3508,3457],{"class":192},[154,3510,3511],{"class":163},"\"width=device-width, initial-scale=1.0\"",[154,3513,3444],{"class":192},[154,3515,3516,3518,3521,3524,3526],{"class":156,"line":889},[154,3517,3476],{"class":192},[154,3519,3520],{"class":3437},"title",[154,3522,3523],{"class":192},">Aircraft Shooting Game\u003C\u002F",[154,3525,3520],{"class":3437},[154,3527,3444],{"class":192},[154,3529,3530,3532,3535,3538,3540,3543,3546,3548,3551],{"class":156,"line":900},[154,3531,3476],{"class":192},[154,3533,3534],{"class":3437},"link",[154,3536,3537],{"class":160}," rel",[154,3539,3457],{"class":192},[154,3541,3542],{"class":163},"\"stylesheet\"",[154,3544,3545],{"class":160}," href",[154,3547,3457],{"class":192},[154,3549,3550],{"class":163},"\"style.css\"",[154,3552,3444],{"class":192},[154,3554,3555,3558,3560],{"class":156,"line":906},[154,3556,3557],{"class":192},"\u003C\u002F",[154,3559,3469],{"class":3437},[154,3561,3444],{"class":192},[154,3563,3564,3566,3569],{"class":156,"line":916},[154,3565,3449],{"class":192},[154,3567,3568],{"class":3437},"body",[154,3570,3444],{"class":192},[154,3572,3573,3575,3577,3579,3581],{"class":156,"line":1648},[154,3574,3476],{"class":192},[154,3576,11],{"class":3437},[154,3578,3523],{"class":192},[154,3580,11],{"class":3437},[154,3582,3444],{"class":192},[154,3584,3585,3587,3590,3593,3595,3598,3601,3603,3606,3609,3611,3614,3617,3619],{"class":156,"line":1654},[154,3586,3476],{"class":192},[154,3588,3589],{"class":3437},"canvas",[154,3591,3592],{"class":160}," id",[154,3594,3457],{"class":192},[154,3596,3597],{"class":163},"\"gameCanvas\"",[154,3599,3600],{"class":160}," width",[154,3602,3457],{"class":192},[154,3604,3605],{"class":163},"\"800\"",[154,3607,3608],{"class":160}," height",[154,3610,3457],{"class":192},[154,3612,3613],{"class":163},"\"600\"",[154,3615,3616],{"class":192},">\u003C\u002F",[154,3618,3589],{"class":3437},[154,3620,3444],{"class":192},[154,3622,3623,3625,3628,3630,3632,3635,3638,3640],{"class":156,"line":2151},[154,3624,3476],{"class":192},[154,3626,3627],{"class":3437},"div",[154,3629,3592],{"class":160},[154,3631,3457],{"class":192},[154,3633,3634],{"class":163},"\"score\"",[154,3636,3637],{"class":192},">Score: 0\u003C\u002F",[154,3639,3627],{"class":3437},[154,3641,3444],{"class":192},[154,3643,3644,3646,3649,3652,3654,3657,3659,3661],{"class":156,"line":2165},[154,3645,3476],{"class":192},[154,3647,3648],{"class":3437},"script",[154,3650,3651],{"class":160}," src",[154,3653,3457],{"class":192},[154,3655,3656],{"class":163},"\"game.js\"",[154,3658,3616],{"class":192},[154,3660,3648],{"class":3437},[154,3662,3444],{"class":192},[154,3664,3665,3667,3669],{"class":156,"line":2178},[154,3666,3557],{"class":192},[154,3668,3568],{"class":3437},[154,3670,3444],{"class":192},[154,3672,3673,3675,3677],{"class":156,"line":2183},[154,3674,3557],{"class":192},[154,3676,3427],{"class":3437},[154,3678,3444],{"class":192},[259,3680,3681],{"start":79},[115,3682,3683],{},"style.css",[146,3685,3689],{"className":3686,"code":3687,"language":3688,"meta":78,"style":78},"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,3690,3691,3698,3712,3724,3736,3748,3760,3772,3777,3781,3787,3808,3819,3823,3827,3834,3848,3862],{"__ignoreMap":78},[154,3692,3693,3695],{"class":156,"line":157},[154,3694,3568],{"class":3437},[154,3696,3697],{"class":192}," {\n",[154,3699,3700,3703,3706,3709],{"class":156,"line":79},[154,3701,3702],{"class":250},"    font-family",[154,3704,3705],{"class":192},": ",[154,3707,3708],{"class":250},"sans-serif",[154,3710,3711],{"class":192},";\n",[154,3713,3714,3717,3719,3722],{"class":156,"line":314},[154,3715,3716],{"class":250},"    display",[154,3718,3705],{"class":192},[154,3720,3721],{"class":250},"flex",[154,3723,3711],{"class":192},[154,3725,3726,3729,3731,3734],{"class":156,"line":320},[154,3727,3728],{"class":250},"    flex-direction",[154,3730,3705],{"class":192},[154,3732,3733],{"class":250},"column",[154,3735,3711],{"class":192},[154,3737,3738,3741,3743,3746],{"class":156,"line":326},[154,3739,3740],{"class":250},"    align-items",[154,3742,3705],{"class":192},[154,3744,3745],{"class":250},"center",[154,3747,3711],{"class":192},[154,3749,3750,3753,3755,3758],{"class":156,"line":889},[154,3751,3752],{"class":250},"    margin",[154,3754,3705],{"class":192},[154,3756,3757],{"class":250},"0",[154,3759,3711],{"class":192},[154,3761,3762,3765,3767,3770],{"class":156,"line":900},[154,3763,3764],{"class":250},"    background-color",[154,3766,3705],{"class":192},[154,3768,3769],{"class":250},"#f0f0f0",[154,3771,3711],{"class":192},[154,3773,3774],{"class":156,"line":906},[154,3775,3776],{"class":192},"}\n",[154,3778,3779],{"class":156,"line":916},[154,3780,317],{"emptyLinePlaceholder":86},[154,3782,3783,3785],{"class":156,"line":1648},[154,3784,3589],{"class":3437},[154,3786,3697],{"class":192},[154,3788,3789,3792,3794,3797,3800,3803,3806],{"class":156,"line":1654},[154,3790,3791],{"class":250},"    border",[154,3793,3705],{"class":192},[154,3795,3796],{"class":250},"1",[154,3798,3799],{"class":1067},"px",[154,3801,3802],{"class":250}," solid",[154,3804,3805],{"class":250}," black",[154,3807,3711],{"class":192},[154,3809,3810,3812,3814,3817],{"class":156,"line":2151},[154,3811,3764],{"class":250},[154,3813,3705],{"class":192},[154,3815,3816],{"class":250},"#fff",[154,3818,3711],{"class":192},[154,3820,3821],{"class":156,"line":2165},[154,3822,3776],{"class":192},[154,3824,3825],{"class":156,"line":2178},[154,3826,317],{"emptyLinePlaceholder":86},[154,3828,3829,3832],{"class":156,"line":2183},[154,3830,3831],{"class":160},"#score",[154,3833,3697],{"class":192},[154,3835,3836,3839,3841,3844,3846],{"class":156,"line":2189},[154,3837,3838],{"class":250},"    margin-top",[154,3840,3705],{"class":192},[154,3842,3843],{"class":250},"10",[154,3845,3799],{"class":1067},[154,3847,3711],{"class":192},[154,3849,3850,3853,3855,3858,3860],{"class":156,"line":2202},[154,3851,3852],{"class":250},"    font-size",[154,3854,3705],{"class":192},[154,3856,3857],{"class":250},"24",[154,3859,3799],{"class":1067},[154,3861,3711],{"class":192},[154,3863,3864],{"class":156,"line":2214},[154,3865,3776],{"class":192},[259,3867,3868],{"start":314},[115,3869,3870],{},"game.js",[146,3872,3876],{"className":3873,"code":3874,"language":3875,"meta":78,"style":78},"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,3877,3878,3904,3926,3946,3950,3964,3976,3980,3990,4025,4038,4050,4062,4074,4086,4100,4105,4109,4117,4130,4161,4165,4169,4176,4204,4219,4224,4254,4267,4271,4275,4279,4283,4292,4324,4335,4346,4357,4368,4379,4391,4396,4401,4408,4419,4444,4449,4454,4461,4474,4479,4484,4489,4499,4540,4551,4562,4573,4584,4595,4606,4619,4624,4629,4636,4647,4672,4677,4682,4689,4702,4707,4712,4717,4769,4782,4794,4799,4810,4841,4866,4887,4911,4935,4962,4977,4996,5001,5006,5021,5032,5051,5056,5061,5080,5103,5120,5138,5153,5158,5163,5173,5193,5198,5210,5220,5225,5253,5263,5272,5277,5291,5307,5312,5317,5341,5356,5370,5385,5404,5410,5416,5422,5427,5448,5458,5467,5472,5485,5499,5504,5509,5521,5534,5545,5550,5555,5560,5569,5574,5579,5605,5618,5635,5689,5694,5700,5705,5727,5738,5743,5748,5762],{"__ignoreMap":78},[154,3879,3880,3883,3886,3889,3892,3895,3898,3901],{"class":156,"line":157},[154,3881,3882],{"class":1067},"const",[154,3884,3885],{"class":250}," canvas",[154,3887,3888],{"class":1067}," =",[154,3890,3891],{"class":192}," document.",[154,3893,3894],{"class":160},"getElementById",[154,3896,3897],{"class":192},"(",[154,3899,3900],{"class":163},"'gameCanvas'",[154,3902,3903],{"class":192},");\n",[154,3905,3906,3908,3911,3913,3916,3919,3921,3924],{"class":156,"line":79},[154,3907,3882],{"class":1067},[154,3909,3910],{"class":250}," ctx",[154,3912,3888],{"class":1067},[154,3914,3915],{"class":192}," canvas.",[154,3917,3918],{"class":160},"getContext",[154,3920,3897],{"class":192},[154,3922,3923],{"class":163},"'2d'",[154,3925,3903],{"class":192},[154,3927,3928,3930,3933,3935,3937,3939,3941,3944],{"class":156,"line":314},[154,3929,3882],{"class":1067},[154,3931,3932],{"class":250}," scoreElement",[154,3934,3888],{"class":1067},[154,3936,3891],{"class":192},[154,3938,3894],{"class":160},[154,3940,3897],{"class":192},[154,3942,3943],{"class":163},"'score'",[154,3945,3903],{"class":192},[154,3947,3948],{"class":156,"line":320},[154,3949,317],{"emptyLinePlaceholder":86},[154,3951,3952,3955,3958,3960,3962],{"class":156,"line":326},[154,3953,3954],{"class":1067},"let",[154,3956,3957],{"class":192}," score ",[154,3959,3457],{"class":1067},[154,3961,3012],{"class":250},[154,3963,3711],{"class":192},[154,3965,3966,3968,3971,3973],{"class":156,"line":889},[154,3967,3954],{"class":1067},[154,3969,3970],{"class":192}," keys ",[154,3972,3457],{"class":1067},[154,3974,3975],{"class":192}," {};\n",[154,3977,3978],{"class":156,"line":900},[154,3979,317],{"emptyLinePlaceholder":86},[154,3981,3982,3985,3988],{"class":156,"line":906},[154,3983,3984],{"class":1067},"class",[154,3986,3987],{"class":160}," Player",[154,3989,3697],{"class":192},[154,3991,3992,3995,3997,4001,4004,4007,4009,4012,4014,4017,4019,4022],{"class":156,"line":916},[154,3993,3994],{"class":1067},"    constructor",[154,3996,3897],{"class":192},[154,3998,4000],{"class":3999},"sQHwn","x",[154,4002,4003],{"class":192},", ",[154,4005,4006],{"class":3999},"y",[154,4008,4003],{"class":192},[154,4010,4011],{"class":3999},"width",[154,4013,4003],{"class":192},[154,4015,4016],{"class":3999},"height",[154,4018,4003],{"class":192},[154,4020,4021],{"class":3999},"color",[154,4023,4024],{"class":192},") {\n",[154,4026,4027,4030,4033,4035],{"class":156,"line":1648},[154,4028,4029],{"class":250},"        this",[154,4031,4032],{"class":192},".x ",[154,4034,3457],{"class":1067},[154,4036,4037],{"class":192}," x;\n",[154,4039,4040,4042,4045,4047],{"class":156,"line":1654},[154,4041,4029],{"class":250},[154,4043,4044],{"class":192},".y ",[154,4046,3457],{"class":1067},[154,4048,4049],{"class":192}," y;\n",[154,4051,4052,4054,4057,4059],{"class":156,"line":2151},[154,4053,4029],{"class":250},[154,4055,4056],{"class":192},".width ",[154,4058,3457],{"class":1067},[154,4060,4061],{"class":192}," width;\n",[154,4063,4064,4066,4069,4071],{"class":156,"line":2165},[154,4065,4029],{"class":250},[154,4067,4068],{"class":192},".height ",[154,4070,3457],{"class":1067},[154,4072,4073],{"class":192}," height;\n",[154,4075,4076,4078,4081,4083],{"class":156,"line":2178},[154,4077,4029],{"class":250},[154,4079,4080],{"class":192},".color ",[154,4082,3457],{"class":1067},[154,4084,4085],{"class":192}," color;\n",[154,4087,4088,4090,4093,4095,4098],{"class":156,"line":2183},[154,4089,4029],{"class":250},[154,4091,4092],{"class":192},".speed ",[154,4094,3457],{"class":1067},[154,4096,4097],{"class":250}," 5",[154,4099,3711],{"class":192},[154,4101,4102],{"class":156,"line":2189},[154,4103,4104],{"class":192},"    }\n",[154,4106,4107],{"class":156,"line":2202},[154,4108,317],{"emptyLinePlaceholder":86},[154,4110,4111,4114],{"class":156,"line":2214},[154,4112,4113],{"class":160},"    draw",[154,4115,4116],{"class":192},"() {\n",[154,4118,4119,4122,4124,4127],{"class":156,"line":2227},[154,4120,4121],{"class":192},"        ctx.fillStyle ",[154,4123,3457],{"class":1067},[154,4125,4126],{"class":250}," this",[154,4128,4129],{"class":192},".color;\n",[154,4131,4132,4135,4138,4140,4143,4146,4148,4151,4153,4156,4158],{"class":156,"line":2232},[154,4133,4134],{"class":192},"        ctx.",[154,4136,4137],{"class":160},"fillRect",[154,4139,3897],{"class":192},[154,4141,4142],{"class":250},"this",[154,4144,4145],{"class":192},".x, ",[154,4147,4142],{"class":250},[154,4149,4150],{"class":192},".y, ",[154,4152,4142],{"class":250},[154,4154,4155],{"class":192},".width, ",[154,4157,4142],{"class":250},[154,4159,4160],{"class":192},".height);\n",[154,4162,4163],{"class":156,"line":2238},[154,4164,4104],{"class":192},[154,4166,4167],{"class":156,"line":2251},[154,4168,317],{"emptyLinePlaceholder":86},[154,4170,4171,4174],{"class":156,"line":2262},[154,4172,4173],{"class":160},"    update",[154,4175,4116],{"class":192},[154,4177,4178,4181,4184,4187,4190,4193,4195,4197,4200,4202],{"class":156,"line":2273},[154,4179,4180],{"class":1067},"        if",[154,4182,4183],{"class":192}," (keys[",[154,4185,4186],{"class":163},"'ArrowLeft'",[154,4188,4189],{"class":192},"] ",[154,4191,4192],{"class":1067},"&&",[154,4194,4126],{"class":250},[154,4196,4032],{"class":192},[154,4198,4199],{"class":1067},">",[154,4201,3012],{"class":250},[154,4203,4024],{"class":192},[154,4205,4206,4209,4211,4214,4216],{"class":156,"line":2278},[154,4207,4208],{"class":250},"            this",[154,4210,4032],{"class":192},[154,4212,4213],{"class":1067},"-=",[154,4215,4126],{"class":250},[154,4217,4218],{"class":192},".speed;\n",[154,4220,4221],{"class":156,"line":2284},[154,4222,4223],{"class":192},"        }\n",[154,4225,4226,4228,4230,4233,4235,4237,4239,4241,4243,4246,4249,4251],{"class":156,"line":2294},[154,4227,4180],{"class":1067},[154,4229,4183],{"class":192},[154,4231,4232],{"class":163},"'ArrowRight'",[154,4234,4189],{"class":192},[154,4236,4192],{"class":1067},[154,4238,4126],{"class":250},[154,4240,4032],{"class":192},[154,4242,3449],{"class":1067},[154,4244,4245],{"class":192}," canvas.width ",[154,4247,4248],{"class":1067},"-",[154,4250,4126],{"class":250},[154,4252,4253],{"class":192},".width) {\n",[154,4255,4256,4258,4260,4263,4265],{"class":156,"line":2308},[154,4257,4208],{"class":250},[154,4259,4032],{"class":192},[154,4261,4262],{"class":1067},"+=",[154,4264,4126],{"class":250},[154,4266,4218],{"class":192},[154,4268,4269],{"class":156,"line":2313},[154,4270,4223],{"class":192},[154,4272,4273],{"class":156,"line":2319},[154,4274,4104],{"class":192},[154,4276,4277],{"class":156,"line":2333},[154,4278,3776],{"class":192},[154,4280,4281],{"class":156,"line":2344},[154,4282,317],{"emptyLinePlaceholder":86},[154,4284,4285,4287,4290],{"class":156,"line":2355},[154,4286,3984],{"class":1067},[154,4288,4289],{"class":160}," Bullet",[154,4291,3697],{"class":192},[154,4293,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313,4315,4317,4319,4322],{"class":156,"line":4294},34,[154,4296,3994],{"class":1067},[154,4298,3897],{"class":192},[154,4300,4000],{"class":3999},[154,4302,4003],{"class":192},[154,4304,4006],{"class":3999},[154,4306,4003],{"class":192},[154,4308,4011],{"class":3999},[154,4310,4003],{"class":192},[154,4312,4016],{"class":3999},[154,4314,4003],{"class":192},[154,4316,4021],{"class":3999},[154,4318,4003],{"class":192},[154,4320,4321],{"class":3999},"speed",[154,4323,4024],{"class":192},[154,4325,4327,4329,4331,4333],{"class":156,"line":4326},35,[154,4328,4029],{"class":250},[154,4330,4032],{"class":192},[154,4332,3457],{"class":1067},[154,4334,4037],{"class":192},[154,4336,4338,4340,4342,4344],{"class":156,"line":4337},36,[154,4339,4029],{"class":250},[154,4341,4044],{"class":192},[154,4343,3457],{"class":1067},[154,4345,4049],{"class":192},[154,4347,4349,4351,4353,4355],{"class":156,"line":4348},37,[154,4350,4029],{"class":250},[154,4352,4056],{"class":192},[154,4354,3457],{"class":1067},[154,4356,4061],{"class":192},[154,4358,4360,4362,4364,4366],{"class":156,"line":4359},38,[154,4361,4029],{"class":250},[154,4363,4068],{"class":192},[154,4365,3457],{"class":1067},[154,4367,4073],{"class":192},[154,4369,4371,4373,4375,4377],{"class":156,"line":4370},39,[154,4372,4029],{"class":250},[154,4374,4080],{"class":192},[154,4376,3457],{"class":1067},[154,4378,4085],{"class":192},[154,4380,4382,4384,4386,4388],{"class":156,"line":4381},40,[154,4383,4029],{"class":250},[154,4385,4092],{"class":192},[154,4387,3457],{"class":1067},[154,4389,4390],{"class":192}," speed;\n",[154,4392,4394],{"class":156,"line":4393},41,[154,4395,4104],{"class":192},[154,4397,4399],{"class":156,"line":4398},42,[154,4400,317],{"emptyLinePlaceholder":86},[154,4402,4404,4406],{"class":156,"line":4403},43,[154,4405,4113],{"class":160},[154,4407,4116],{"class":192},[154,4409,4411,4413,4415,4417],{"class":156,"line":4410},44,[154,4412,4121],{"class":192},[154,4414,3457],{"class":1067},[154,4416,4126],{"class":250},[154,4418,4129],{"class":192},[154,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442],{"class":156,"line":4421},45,[154,4423,4134],{"class":192},[154,4425,4137],{"class":160},[154,4427,3897],{"class":192},[154,4429,4142],{"class":250},[154,4431,4145],{"class":192},[154,4433,4142],{"class":250},[154,4435,4150],{"class":192},[154,4437,4142],{"class":250},[154,4439,4155],{"class":192},[154,4441,4142],{"class":250},[154,4443,4160],{"class":192},[154,4445,4447],{"class":156,"line":4446},46,[154,4448,4104],{"class":192},[154,4450,4452],{"class":156,"line":4451},47,[154,4453,317],{"emptyLinePlaceholder":86},[154,4455,4457,4459],{"class":156,"line":4456},48,[154,4458,4173],{"class":160},[154,4460,4116],{"class":192},[154,4462,4464,4466,4468,4470,4472],{"class":156,"line":4463},49,[154,4465,4029],{"class":250},[154,4467,4044],{"class":192},[154,4469,4213],{"class":1067},[154,4471,4126],{"class":250},[154,4473,4218],{"class":192},[154,4475,4477],{"class":156,"line":4476},50,[154,4478,4104],{"class":192},[154,4480,4482],{"class":156,"line":4481},51,[154,4483,3776],{"class":192},[154,4485,4487],{"class":156,"line":4486},52,[154,4488,317],{"emptyLinePlaceholder":86},[154,4490,4492,4494,4497],{"class":156,"line":4491},53,[154,4493,3984],{"class":1067},[154,4495,4496],{"class":160}," Enemy",[154,4498,3697],{"class":192},[154,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4533,4535,4538],{"class":156,"line":4501},54,[154,4503,3994],{"class":1067},[154,4505,3897],{"class":192},[154,4507,4000],{"class":3999},[154,4509,4003],{"class":192},[154,4511,4006],{"class":3999},[154,4513,4003],{"class":192},[154,4515,4011],{"class":3999},[154,4517,4003],{"class":192},[154,4519,4016],{"class":3999},[154,4521,4003],{"class":192},[154,4523,4021],{"class":3999},[154,4525,4003],{"class":192},[154,4527,4321],{"class":3999},[154,4529,4003],{"class":192},[154,4531,4532],{"class":3999},"isBoss",[154,4534,3888],{"class":1067},[154,4536,4537],{"class":250}," false",[154,4539,4024],{"class":192},[154,4541,4543,4545,4547,4549],{"class":156,"line":4542},55,[154,4544,4029],{"class":250},[154,4546,4032],{"class":192},[154,4548,3457],{"class":1067},[154,4550,4037],{"class":192},[154,4552,4554,4556,4558,4560],{"class":156,"line":4553},56,[154,4555,4029],{"class":250},[154,4557,4044],{"class":192},[154,4559,3457],{"class":1067},[154,4561,4049],{"class":192},[154,4563,4565,4567,4569,4571],{"class":156,"line":4564},57,[154,4566,4029],{"class":250},[154,4568,4056],{"class":192},[154,4570,3457],{"class":1067},[154,4572,4061],{"class":192},[154,4574,4576,4578,4580,4582],{"class":156,"line":4575},58,[154,4577,4029],{"class":250},[154,4579,4068],{"class":192},[154,4581,3457],{"class":1067},[154,4583,4073],{"class":192},[154,4585,4587,4589,4591,4593],{"class":156,"line":4586},59,[154,4588,4029],{"class":250},[154,4590,4080],{"class":192},[154,4592,3457],{"class":1067},[154,4594,4085],{"class":192},[154,4596,4598,4600,4602,4604],{"class":156,"line":4597},60,[154,4599,4029],{"class":250},[154,4601,4092],{"class":192},[154,4603,3457],{"class":1067},[154,4605,4390],{"class":192},[154,4607,4609,4611,4614,4616],{"class":156,"line":4608},61,[154,4610,4029],{"class":250},[154,4612,4613],{"class":192},".isBoss ",[154,4615,3457],{"class":1067},[154,4617,4618],{"class":192}," isBoss;\n",[154,4620,4622],{"class":156,"line":4621},62,[154,4623,4104],{"class":192},[154,4625,4627],{"class":156,"line":4626},63,[154,4628,317],{"emptyLinePlaceholder":86},[154,4630,4632,4634],{"class":156,"line":4631},64,[154,4633,4113],{"class":160},[154,4635,4116],{"class":192},[154,4637,4639,4641,4643,4645],{"class":156,"line":4638},65,[154,4640,4121],{"class":192},[154,4642,3457],{"class":1067},[154,4644,4126],{"class":250},[154,4646,4129],{"class":192},[154,4648,4650,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670],{"class":156,"line":4649},66,[154,4651,4134],{"class":192},[154,4653,4137],{"class":160},[154,4655,3897],{"class":192},[154,4657,4142],{"class":250},[154,4659,4145],{"class":192},[154,4661,4142],{"class":250},[154,4663,4150],{"class":192},[154,4665,4142],{"class":250},[154,4667,4155],{"class":192},[154,4669,4142],{"class":250},[154,4671,4160],{"class":192},[154,4673,4675],{"class":156,"line":4674},67,[154,4676,4104],{"class":192},[154,4678,4680],{"class":156,"line":4679},68,[154,4681,317],{"emptyLinePlaceholder":86},[154,4683,4685,4687],{"class":156,"line":4684},69,[154,4686,4173],{"class":160},[154,4688,4116],{"class":192},[154,4690,4692,4694,4696,4698,4700],{"class":156,"line":4691},70,[154,4693,4029],{"class":250},[154,4695,4044],{"class":192},[154,4697,4262],{"class":1067},[154,4699,4126],{"class":250},[154,4701,4218],{"class":192},[154,4703,4705],{"class":156,"line":4704},71,[154,4706,4104],{"class":192},[154,4708,4710],{"class":156,"line":4709},72,[154,4711,3776],{"class":192},[154,4713,4715],{"class":156,"line":4714},73,[154,4716,317],{"emptyLinePlaceholder":86},[154,4718,4720,4722,4725,4727,4730,4732,4735,4737,4740,4742,4745,4748,4750,4753,4755,4758,4760,4762,4764,4767],{"class":156,"line":4719},74,[154,4721,3882],{"class":1067},[154,4723,4724],{"class":250}," player",[154,4726,3888],{"class":1067},[154,4728,4729],{"class":1067}," new",[154,4731,3987],{"class":160},[154,4733,4734],{"class":192},"(canvas.width ",[154,4736,1858],{"class":1067},[154,4738,4739],{"class":250}," 2",[154,4741,2865],{"class":1067},[154,4743,4744],{"class":250}," 25",[154,4746,4747],{"class":192},", canvas.height ",[154,4749,4248],{"class":1067},[154,4751,4752],{"class":250}," 60",[154,4754,4003],{"class":192},[154,4756,4757],{"class":250},"50",[154,4759,4003],{"class":192},[154,4761,4757],{"class":250},[154,4763,4003],{"class":192},[154,4765,4766],{"class":163},"'blue'",[154,4768,3903],{"class":192},[154,4770,4772,4774,4777,4779],{"class":156,"line":4771},75,[154,4773,3882],{"class":1067},[154,4775,4776],{"class":250}," bullets",[154,4778,3888],{"class":1067},[154,4780,4781],{"class":192}," [];\n",[154,4783,4785,4787,4790,4792],{"class":156,"line":4784},76,[154,4786,3882],{"class":1067},[154,4788,4789],{"class":250}," enemies",[154,4791,3888],{"class":1067},[154,4793,4781],{"class":192},[154,4795,4797],{"class":156,"line":4796},77,[154,4798,317],{"emptyLinePlaceholder":86},[154,4800,4802,4805,4808],{"class":156,"line":4801},78,[154,4803,4804],{"class":1067},"function",[154,4806,4807],{"class":160}," spawnEnemy",[154,4809,4116],{"class":192},[154,4811,4813,4816,4819,4821,4824,4827,4830,4832,4835,4838],{"class":156,"line":4812},79,[154,4814,4815],{"class":1067},"    const",[154,4817,4818],{"class":250}," isBoss",[154,4820,3888],{"class":1067},[154,4822,4823],{"class":192}," Math.",[154,4825,4826],{"class":160},"random",[154,4828,4829],{"class":192},"() ",[154,4831,3449],{"class":1067},[154,4833,4834],{"class":250}," 0.1",[154,4836,4837],{"class":192},"; ",[154,4839,4840],{"class":298},"\u002F\u002F 10% chance of being a boss\n",[154,4842,4844,4846,4848,4850,4853,4856,4859,4862,4864],{"class":156,"line":4843},80,[154,4845,4815],{"class":1067},[154,4847,3600],{"class":250},[154,4849,3888],{"class":1067},[154,4851,4852],{"class":192}," isBoss ",[154,4854,4855],{"class":1067},"?",[154,4857,4858],{"class":250}," 100",[154,4860,4861],{"class":1067}," :",[154,4863,510],{"class":250},[154,4865,3711],{"class":192},[154,4867,4869,4871,4873,4875,4877,4879,4881,4883,4885],{"class":156,"line":4868},81,[154,4870,4815],{"class":1067},[154,4872,3608],{"class":250},[154,4874,3888],{"class":1067},[154,4876,4852],{"class":192},[154,4878,4855],{"class":1067},[154,4880,4858],{"class":250},[154,4882,4861],{"class":1067},[154,4884,510],{"class":250},[154,4886,3711],{"class":192},[154,4888,4890,4892,4895,4897,4899,4901,4904,4906,4909],{"class":156,"line":4889},82,[154,4891,4815],{"class":1067},[154,4893,4894],{"class":250}," color",[154,4896,3888],{"class":1067},[154,4898,4852],{"class":192},[154,4900,4855],{"class":1067},[154,4902,4903],{"class":163}," 'red'",[154,4905,4861],{"class":1067},[154,4907,4908],{"class":163}," 'green'",[154,4910,3711],{"class":192},[154,4912,4914,4916,4919,4921,4923,4925,4928,4930,4933],{"class":156,"line":4913},83,[154,4915,4815],{"class":1067},[154,4917,4918],{"class":250}," speed",[154,4920,3888],{"class":1067},[154,4922,4852],{"class":192},[154,4924,4855],{"class":1067},[154,4926,4927],{"class":250}," 1",[154,4929,4861],{"class":1067},[154,4931,4932],{"class":250}," 0.5",[154,4934,3711],{"class":192},[154,4936,4938,4940,4943,4945,4947,4949,4951,4954,4957,4959],{"class":156,"line":4937},84,[154,4939,4815],{"class":1067},[154,4941,4942],{"class":250}," x",[154,4944,3888],{"class":1067},[154,4946,4823],{"class":192},[154,4948,4826],{"class":160},[154,4950,4829],{"class":192},[154,4952,4953],{"class":1067},"*",[154,4955,4956],{"class":192}," (canvas.width ",[154,4958,4248],{"class":1067},[154,4960,4961],{"class":192}," width);\n",[154,4963,4965,4967,4970,4972,4974],{"class":156,"line":4964},85,[154,4966,4815],{"class":1067},[154,4968,4969],{"class":250}," y",[154,4971,3888],{"class":1067},[154,4973,2865],{"class":1067},[154,4975,4976],{"class":192},"height;\n",[154,4978,4980,4983,4986,4988,4991,4993],{"class":156,"line":4979},86,[154,4981,4982],{"class":192},"    enemies.",[154,4984,4985],{"class":160},"push",[154,4987,3897],{"class":192},[154,4989,4990],{"class":1067},"new",[154,4992,4496],{"class":160},[154,4994,4995],{"class":192},"(x, y, width, height, color, speed, isBoss));\n",[154,4997,4999],{"class":156,"line":4998},87,[154,5000,3776],{"class":192},[154,5002,5004],{"class":156,"line":5003},88,[154,5005,317],{"emptyLinePlaceholder":86},[154,5007,5009,5011,5014,5016,5019],{"class":156,"line":5008},89,[154,5010,4804],{"class":1067},[154,5012,5013],{"class":160}," updateScore",[154,5015,3897],{"class":192},[154,5017,5018],{"class":3999},"points",[154,5020,4024],{"class":192},[154,5022,5024,5027,5029],{"class":156,"line":5023},90,[154,5025,5026],{"class":192},"    score ",[154,5028,4262],{"class":1067},[154,5030,5031],{"class":192}," points;\n",[154,5033,5035,5038,5040,5043,5046,5049],{"class":156,"line":5034},91,[154,5036,5037],{"class":192},"    scoreElement.textContent ",[154,5039,3457],{"class":1067},[154,5041,5042],{"class":163}," `Score: ${",[154,5044,5045],{"class":192},"score",[154,5047,5048],{"class":163},"}`",[154,5050,3711],{"class":192},[154,5052,5054],{"class":156,"line":5053},92,[154,5055,3776],{"class":192},[154,5057,5059],{"class":156,"line":5058},93,[154,5060,317],{"emptyLinePlaceholder":86},[154,5062,5064,5066,5069,5071,5073,5075,5078],{"class":156,"line":5063},94,[154,5065,4804],{"class":1067},[154,5067,5068],{"class":160}," collision",[154,5070,3897],{"class":192},[154,5072,726],{"class":3999},[154,5074,4003],{"class":192},[154,5076,5077],{"class":3999},"b",[154,5079,4024],{"class":192},[154,5081,5083,5086,5089,5091,5094,5097,5100],{"class":156,"line":5082},95,[154,5084,5085],{"class":1067},"    return",[154,5087,5088],{"class":192}," a.x ",[154,5090,3449],{"class":1067},[154,5092,5093],{"class":192}," b.x ",[154,5095,5096],{"class":1067},"+",[154,5098,5099],{"class":192}," b.width ",[154,5101,5102],{"class":1067},"&&\n",[154,5104,5106,5109,5111,5114,5116,5118],{"class":156,"line":5105},96,[154,5107,5108],{"class":192},"           a.x ",[154,5110,5096],{"class":1067},[154,5112,5113],{"class":192}," a.width ",[154,5115,4199],{"class":1067},[154,5117,5093],{"class":192},[154,5119,5102],{"class":1067},[154,5121,5123,5126,5128,5131,5133,5136],{"class":156,"line":5122},97,[154,5124,5125],{"class":192},"           a.y ",[154,5127,3449],{"class":1067},[154,5129,5130],{"class":192}," b.y ",[154,5132,5096],{"class":1067},[154,5134,5135],{"class":192}," b.height ",[154,5137,5102],{"class":1067},[154,5139,5141,5143,5145,5148,5150],{"class":156,"line":5140},98,[154,5142,5125],{"class":192},[154,5144,5096],{"class":1067},[154,5146,5147],{"class":192}," a.height ",[154,5149,4199],{"class":1067},[154,5151,5152],{"class":192}," b.y;\n",[154,5154,5156],{"class":156,"line":5155},99,[154,5157,3776],{"class":192},[154,5159,5161],{"class":156,"line":5160},100,[154,5162,317],{"emptyLinePlaceholder":86},[154,5164,5166,5168,5171],{"class":156,"line":5165},101,[154,5167,4804],{"class":1067},[154,5169,5170],{"class":160}," gameLoop",[154,5172,4116],{"class":192},[154,5174,5176,5179,5182,5184,5186,5188,5190],{"class":156,"line":5175},102,[154,5177,5178],{"class":192},"    ctx.",[154,5180,5181],{"class":160},"clearRect",[154,5183,3897],{"class":192},[154,5185,3757],{"class":250},[154,5187,4003],{"class":192},[154,5189,3757],{"class":250},[154,5191,5192],{"class":192},", canvas.width, canvas.height);\n",[154,5194,5196],{"class":156,"line":5195},103,[154,5197,317],{"emptyLinePlaceholder":86},[154,5199,5201,5204,5207],{"class":156,"line":5200},104,[154,5202,5203],{"class":192},"    player.",[154,5205,5206],{"class":160},"update",[154,5208,5209],{"class":192},"();\n",[154,5211,5213,5215,5218],{"class":156,"line":5212},105,[154,5214,5203],{"class":192},[154,5216,5217],{"class":160},"draw",[154,5219,5209],{"class":192},[154,5221,5223],{"class":156,"line":5222},106,[154,5224,317],{"emptyLinePlaceholder":86},[154,5226,5228,5231,5234,5237,5240,5242,5245,5248,5251],{"class":156,"line":5227},107,[154,5229,5230],{"class":192},"    bullets.",[154,5232,5233],{"class":160},"forEach",[154,5235,5236],{"class":192},"((",[154,5238,5239],{"class":3999},"bullet",[154,5241,4003],{"class":192},[154,5243,5244],{"class":3999},"bulletIndex",[154,5246,5247],{"class":192},") ",[154,5249,5250],{"class":1067},"=>",[154,5252,3697],{"class":192},[154,5254,5256,5259,5261],{"class":156,"line":5255},108,[154,5257,5258],{"class":192},"        bullet.",[154,5260,5206],{"class":160},[154,5262,5209],{"class":192},[154,5264,5266,5268,5270],{"class":156,"line":5265},109,[154,5267,5258],{"class":192},[154,5269,5217],{"class":160},[154,5271,5209],{"class":192},[154,5273,5275],{"class":156,"line":5274},110,[154,5276,317],{"emptyLinePlaceholder":86},[154,5278,5280,5282,5285,5287,5289],{"class":156,"line":5279},111,[154,5281,4180],{"class":1067},[154,5283,5284],{"class":192}," (bullet.y ",[154,5286,3449],{"class":1067},[154,5288,3012],{"class":250},[154,5290,4024],{"class":192},[154,5292,5294,5297,5300,5303,5305],{"class":156,"line":5293},112,[154,5295,5296],{"class":192},"            bullets.",[154,5298,5299],{"class":160},"splice",[154,5301,5302],{"class":192},"(bulletIndex, ",[154,5304,3796],{"class":250},[154,5306,3903],{"class":192},[154,5308,5310],{"class":156,"line":5309},113,[154,5311,4223],{"class":192},[154,5313,5315],{"class":156,"line":5314},114,[154,5316,317],{"emptyLinePlaceholder":86},[154,5318,5320,5323,5325,5327,5330,5332,5335,5337,5339],{"class":156,"line":5319},115,[154,5321,5322],{"class":192},"        enemies.",[154,5324,5233],{"class":160},[154,5326,5236],{"class":192},[154,5328,5329],{"class":3999},"enemy",[154,5331,4003],{"class":192},[154,5333,5334],{"class":3999},"enemyIndex",[154,5336,5247],{"class":192},[154,5338,5250],{"class":1067},[154,5340,3697],{"class":192},[154,5342,5344,5347,5350,5353],{"class":156,"line":5343},116,[154,5345,5346],{"class":1067},"            if",[154,5348,5349],{"class":192}," (",[154,5351,5352],{"class":160},"collision",[154,5354,5355],{"class":192},"(bullet, enemy)) {\n",[154,5357,5359,5362,5364,5366,5368],{"class":156,"line":5358},117,[154,5360,5361],{"class":192},"                bullets.",[154,5363,5299],{"class":160},[154,5365,5302],{"class":192},[154,5367,3796],{"class":250},[154,5369,3903],{"class":192},[154,5371,5373,5376,5378,5381,5383],{"class":156,"line":5372},118,[154,5374,5375],{"class":192},"                enemies.",[154,5377,5299],{"class":160},[154,5379,5380],{"class":192},"(enemyIndex, ",[154,5382,3796],{"class":250},[154,5384,3903],{"class":192},[154,5386,5388,5391,5394,5396,5398,5400,5402],{"class":156,"line":5387},119,[154,5389,5390],{"class":160},"                updateScore",[154,5392,5393],{"class":192},"(enemy.isBoss ",[154,5395,4855],{"class":1067},[154,5397,4858],{"class":250},[154,5399,4861],{"class":1067},[154,5401,4097],{"class":250},[154,5403,3903],{"class":192},[154,5405,5407],{"class":156,"line":5406},120,[154,5408,5409],{"class":192},"            }\n",[154,5411,5413],{"class":156,"line":5412},121,[154,5414,5415],{"class":192},"        });\n",[154,5417,5419],{"class":156,"line":5418},122,[154,5420,5421],{"class":192},"    });\n",[154,5423,5425],{"class":156,"line":5424},123,[154,5426,317],{"emptyLinePlaceholder":86},[154,5428,5430,5432,5434,5436,5438,5440,5442,5444,5446],{"class":156,"line":5429},124,[154,5431,4982],{"class":192},[154,5433,5233],{"class":160},[154,5435,5236],{"class":192},[154,5437,5329],{"class":3999},[154,5439,4003],{"class":192},[154,5441,5334],{"class":3999},[154,5443,5247],{"class":192},[154,5445,5250],{"class":1067},[154,5447,3697],{"class":192},[154,5449,5451,5454,5456],{"class":156,"line":5450},125,[154,5452,5453],{"class":192},"        enemy.",[154,5455,5206],{"class":160},[154,5457,5209],{"class":192},[154,5459,5461,5463,5465],{"class":156,"line":5460},126,[154,5462,5453],{"class":192},[154,5464,5217],{"class":160},[154,5466,5209],{"class":192},[154,5468,5470],{"class":156,"line":5469},127,[154,5471,317],{"emptyLinePlaceholder":86},[154,5473,5475,5477,5480,5482],{"class":156,"line":5474},128,[154,5476,4180],{"class":1067},[154,5478,5479],{"class":192}," (enemy.y ",[154,5481,4199],{"class":1067},[154,5483,5484],{"class":192}," canvas.height) {\n",[154,5486,5488,5491,5493,5495,5497],{"class":156,"line":5487},129,[154,5489,5490],{"class":192},"            enemies.",[154,5492,5299],{"class":160},[154,5494,5380],{"class":192},[154,5496,3796],{"class":250},[154,5498,3903],{"class":192},[154,5500,5502],{"class":156,"line":5501},130,[154,5503,4223],{"class":192},[154,5505,5507],{"class":156,"line":5506},131,[154,5508,317],{"emptyLinePlaceholder":86},[154,5510,5512,5514,5516,5518],{"class":156,"line":5511},132,[154,5513,4180],{"class":1067},[154,5515,5349],{"class":192},[154,5517,5352],{"class":160},[154,5519,5520],{"class":192},"(player, enemy)) {\n",[154,5522,5524,5527,5529,5532],{"class":156,"line":5523},133,[154,5525,5526],{"class":160},"            alert",[154,5528,3897],{"class":192},[154,5530,5531],{"class":163},"'Game Over!'",[154,5533,3903],{"class":192},[154,5535,5537,5540,5543],{"class":156,"line":5536},134,[154,5538,5539],{"class":192},"            document.location.",[154,5541,5542],{"class":160},"reload",[154,5544,5209],{"class":192},[154,5546,5548],{"class":156,"line":5547},135,[154,5549,4223],{"class":192},[154,5551,5553],{"class":156,"line":5552},136,[154,5554,5421],{"class":192},[154,5556,5558],{"class":156,"line":5557},137,[154,5559,317],{"emptyLinePlaceholder":86},[154,5561,5563,5566],{"class":156,"line":5562},138,[154,5564,5565],{"class":160},"    requestAnimationFrame",[154,5567,5568],{"class":192},"(gameLoop);\n",[154,5570,5572],{"class":156,"line":5571},139,[154,5573,3776],{"class":192},[154,5575,5577],{"class":156,"line":5576},140,[154,5578,317],{"emptyLinePlaceholder":86},[154,5580,5582,5585,5588,5590,5593,5596,5599,5601,5603],{"class":156,"line":5581},141,[154,5583,5584],{"class":192},"window.",[154,5586,5587],{"class":160},"addEventListener",[154,5589,3897],{"class":192},[154,5591,5592],{"class":163},"'keydown'",[154,5594,5595],{"class":192},", (",[154,5597,5598],{"class":3999},"e",[154,5600,5247],{"class":192},[154,5602,5250],{"class":1067},[154,5604,3697],{"class":192},[154,5606,5608,5611,5613,5616],{"class":156,"line":5607},142,[154,5609,5610],{"class":192},"    keys[e.key] ",[154,5612,3457],{"class":1067},[154,5614,5615],{"class":250}," true",[154,5617,3711],{"class":192},[154,5619,5621,5624,5627,5630,5633],{"class":156,"line":5620},143,[154,5622,5623],{"class":1067},"    if",[154,5625,5626],{"class":192}," (e.key ",[154,5628,5629],{"class":1067},"===",[154,5631,5632],{"class":163}," ' '",[154,5634,4024],{"class":192},[154,5636,5638,5641,5643,5645,5647,5649,5652,5654,5657,5659,5661,5663,5666,5669,5672,5674,5676,5678,5681,5683,5686],{"class":156,"line":5637},144,[154,5639,5640],{"class":192},"        bullets.",[154,5642,4985],{"class":160},[154,5644,3897],{"class":192},[154,5646,4990],{"class":1067},[154,5648,4289],{"class":160},[154,5650,5651],{"class":192},"(player.x ",[154,5653,5096],{"class":1067},[154,5655,5656],{"class":192}," player.width ",[154,5658,1858],{"class":1067},[154,5660,4739],{"class":250},[154,5662,2865],{"class":1067},[154,5664,5665],{"class":250}," 2.5",[154,5667,5668],{"class":192},", player.y, ",[154,5670,5671],{"class":250},"5",[154,5673,4003],{"class":192},[154,5675,3843],{"class":250},[154,5677,4003],{"class":192},[154,5679,5680],{"class":163},"'black'",[154,5682,4003],{"class":192},[154,5684,5685],{"class":250},"7",[154,5687,5688],{"class":192},"));\n",[154,5690,5692],{"class":156,"line":5691},145,[154,5693,4104],{"class":192},[154,5695,5697],{"class":156,"line":5696},146,[154,5698,5699],{"class":192},"});\n",[154,5701,5703],{"class":156,"line":5702},147,[154,5704,317],{"emptyLinePlaceholder":86},[154,5706,5708,5710,5712,5714,5717,5719,5721,5723,5725],{"class":156,"line":5707},148,[154,5709,5584],{"class":192},[154,5711,5587],{"class":160},[154,5713,3897],{"class":192},[154,5715,5716],{"class":163},"'keyup'",[154,5718,5595],{"class":192},[154,5720,5598],{"class":3999},[154,5722,5247],{"class":192},[154,5724,5250],{"class":1067},[154,5726,3697],{"class":192},[154,5728,5730,5732,5734,5736],{"class":156,"line":5729},149,[154,5731,5610],{"class":192},[154,5733,3457],{"class":1067},[154,5735,4537],{"class":250},[154,5737,3711],{"class":192},[154,5739,5741],{"class":156,"line":5740},150,[154,5742,5699],{"class":192},[154,5744,5746],{"class":156,"line":5745},151,[154,5747,317],{"emptyLinePlaceholder":86},[154,5749,5751,5754,5757,5760],{"class":156,"line":5750},152,[154,5752,5753],{"class":160},"setInterval",[154,5755,5756],{"class":192},"(spawnEnemy, ",[154,5758,5759],{"class":250},"2000",[154,5761,3903],{"class":192},[154,5763,5765,5768],{"class":156,"line":5764},153,[154,5766,5767],{"class":160},"gameLoop",[154,5769,5209],{"class":192},[15,5771,5772],{},"4 遊戲玩法",[15,5774,5775,5776,5779],{},"遊戲建立完成，",[19,5777,5778],{},"Gemnini CLI"," 也會提示遊戲玩法",[15,5781,5782],{},[939,5783],{"alt":5784,"src":5785},"Gemini CLI遊戲玩法","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-03.png",[259,5787,5788],{"start":326},[115,5789,5790],{},"執行結果",[15,5792,5793],{},[939,5794],{"alt":5795,"src":5796},"Gemini CLI執行結果","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-04.png",[259,5798,5799,5818],{"start":889},[115,5800,5801,5802,5805,5806,5808,5809],{},"更改風格",[5803,5804],"br",{},"如果你覺得畫面太陽春，你他可以請 ",[19,5807,3261],{}," 幫你優化",[146,5810,5812],{"className":148,"code":5811,"language":150,"meta":78,"style":78},"請將遊戲畫面風格換成2000年街機風格\n",[19,5813,5814],{"__ignoreMap":78},[154,5815,5816],{"class":156,"line":157},[154,5817,5811],{"class":160},[115,5819,5820],{},"修改過後的結果",[15,5822,5823],{},[939,5824],{"alt":5825,"src":5826},"Gemini CLI修改過後的結果","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-05.png",[15,5828,5829,5830,5832],{},"以上是 ",[19,5831,5778],{}," 簡易使用範例",[225,5834,5836],{"id":5835},"gemini-cli-的相關指令","Gemini CLI 的相關指令",[15,5838,5839,5841,5842,5844],{},[19,5840,5778],{}," 內建了一個常用指令，詳細可用 ",[19,5843,2049],{}," 進行指令查詢",[15,5846,5847],{},[939,5848],{"alt":5849,"src":5850},"Gemini CLi help","\u002Fimages\u002Farticles\u002F2025-07-12-gemini-cli\u002Fgemini-cli-help.png",[225,5852,5854],{"id":5853},"記憶功態-memory","記憶功態 (Memory)",[15,5856,5857,5858,5860,5861,5863,5864,5866],{},"若你要處理比較複雜的問題，由於 LLM 對於長文處理，有時會有失憶的問題，或當我們重啟 ",[19,5859,3261],{},"，",[19,5862,3261],{}," 忘記之前互動的要求，因此 ",[19,5865,3261],{}," 有了記憶功能，而使用方式如下：",[112,5868,5869,5912,5933],{},[115,5870,5871,5872,5875,5876,5879,5880,5897,5899,5900,5902,5903,5905,5906,5908,5909,5911],{},"以",[19,5873,5874],{},"markdown","格式，建立 ",[19,5877,5878],{},"GEMINI.md","，你可以將之記錄",[112,5881,5882,5885,5888,5891,5894],{},[115,5883,5884],{},"環境設定",[115,5886,5887],{},"工作需求",[115,5889,5890],{},"工作項目",[115,5892,5893],{},"使用相關 MCP 指令",[115,5895,5896],{},"程式碼風格",[5803,5898],{},"當你在某個目錄下啟動 ",[19,5901,3261],{}," 代理模式時，它會分層搜尋 ",[19,5904,5878],{}," 檔案：從當前工作目錄開始，向上搜尋到專案根目錄，甚至到你的主目錄。它也會搜尋子目錄中的 ",[19,5907,5878],{}," 檔案。所有找到的 ",[19,5910,5878],{}," 檔案的內容會被合併，作為「指令上下文」提供給 Gemini 模型。",[115,5913,5914,5915,794,5917,5919,5920],{},"更新記憶內容",[5803,5916],{},[19,5918,3261],{}," 下達指令：",[146,5921,5923],{"className":148,"code":5922,"language":150,"meta":78,"style":78},"\u002Fmemory refresh\n",[19,5924,5925],{"__ignoreMap":78},[154,5926,5927,5930],{"class":156,"line":157},[154,5928,5929],{"class":160},"\u002Fmemory",[154,5931,5932],{"class":163}," refresh\n",[115,5934,5935,5936,794,5938,5919,5940],{},"顯示記憶內容：",[5803,5937],{},[19,5939,3261],{},[146,5941,5943],{"className":148,"code":5942,"language":150,"meta":78,"style":78},"\u002Fmemory show\n",[19,5944,5945],{"__ignoreMap":78},[154,5946,5947,5949],{"class":156,"line":157},[154,5948,5929],{"class":160},[154,5950,5951],{"class":163}," show\n",[15,5953,5954,5955,5957],{},"如此 ",[19,5956,3261],{}," 在執行專案開發時，更能依據我的需求，完成我們的任務。",[100,5959,945],{"id":945},[15,5961,5962],{},"Gemini CLI 是一個功能強大且易於使用的工具，它將先進的 AI 能力帶入了開發者最熟悉的終端機環境。透過清晰的提示詞和適當的審核，你可以大幅提升開發效率，加速專案進程。立即安裝 Gemini CLI，體驗用AI開發的魅力吧，而目前提供的免費額度可以完成一些簡單的小專案，若要完成更大的專案，當然就需要考慮付費。",[100,5964,5965],{"id":5965},"相關網站",[112,5967,5968,5975],{},[115,5969,5970,5971],{},"Gemini CLI Github: ",[726,5972,5973],{"href":5973,"rel":5974},"https:\u002F\u002Fgithub.com\u002Fgoogle-gemini\u002Fgemini-cli",[730],[115,5976,5977,5978],{},"Google 官方部落格資訊: ",[726,5979,5980],{"href":5980,"rel":5981},"https:\u002F\u002Fblog.google\u002Fintl\u002Fzh-tw\u002Fproducts\u002Fcloud\u002Fgemini-cli-your-open-source-ai-agent\u002F",[730],[675,5983,5984],{},"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":78,"searchDepth":79,"depth":79,"links":5986},[5987,5990,5996,5997],{"id":3273,"depth":79,"text":3274,"children":5988},[5989],{"id":3280,"depth":314,"text":3281},{"id":3322,"depth":79,"text":3323,"children":5991},[5992,5993,5994,5995],{"id":3326,"depth":314,"text":3327},{"id":3377,"depth":314,"text":3378},{"id":5835,"depth":314,"text":5836},{"id":5853,"depth":314,"text":5854},{"id":945,"depth":79,"text":945},{"id":5965,"depth":79,"text":5965},"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":3249,"description":5998},"articles\u002F2025-07-12-gemini-cli","本文將帶你了解 Gemini CLI，一個能將 Gemini 強大 AI 能力整合至終端機的開源工具。學習如何安裝、使用 Gemini CLI 進行程式碼生成、任務自動化，並體驗 AI-First Coding 的開發模式。",[709,711,710],"06YY6CfnzHfs2KDK962SeuY3nvJMZ0lWwdR0AfkGsr8",{"id":6009,"title":6010,"body":6011,"category":700,"description":78,"extension":83,"image":6800,"meta":6801,"navigation":86,"path":6802,"pubDate":6803,"seo":6804,"status":86,"stem":6805,"summary":6806,"tags":6807,"__hash__":6808},"content\u002Farticles\u002F2025-03-17-open-manus.md","使用 OpenManus 在本地端玩轉 AI Agent",{"type":8,"value":6012,"toc":6776},[6013,6015,6018,6021,6045,6047,6053,6057,6061,6095,6099,6122,6125,6143,6147,6151,6171,6174,6192,6195,6235,6238,6256,6259,6262,6278,6281,6641,6653,6665,6668,6679,6692,6695,6698,6711,6714,6751,6754,6757,6764,6766,6773],[100,6014,2651],{"id":2651},[15,6016,6017],{},"OpenManus 是一個開源的通用型 AI Agent，是 Manus 的替代方案，無需等待昂貴的激活碼即可使用。以下是 OpenManus 的使用教學，希望能幫助你快速上手：",[100,6019,6020],{"id":6020},"環境需求",[112,6022,6023,6035],{},[115,6024,6025,1009,6028,6030,6031,6030,6033],{},[783,6026,6027],{},"作業系統",[19,6029,3111],{}," \u002F ",[19,6032,1515],{},[19,6034,1410],{},[115,6036,6037,6040,6041,6044],{},[783,6038,6039],{},"Python","：版本 ",[19,6042,6043],{},"3.10"," 以上",[100,6046,1008],{"id":1008},[15,6048,6049],{},[726,6050,6051],{"href":6051,"rel":6052},"https:\u002F\u002Fgithub.com\u002Fmannaandpoem\u002FOpenManus",[730],[100,6054,6056],{"id":6055},"使用-conda-安裝","使用 Conda 安裝",[225,6058,6060],{"id":6059},"建立新的-conda-環境","建立新的 Conda 環境",[146,6062,6064],{"className":148,"code":6063,"language":150,"meta":78,"style":78},"conda create -n open_manus python=3.12\nconda activate open_manus\n",[19,6065,6066,6085],{"__ignoreMap":78},[154,6067,6068,6071,6073,6076,6079,6082],{"class":156,"line":157},[154,6069,6070],{"class":160},"conda",[154,6072,2159],{"class":163},[154,6074,6075],{"class":250}," -n",[154,6077,6078],{"class":163}," open_manus",[154,6080,6081],{"class":163}," python=",[154,6083,6084],{"class":250},"3.12\n",[154,6086,6087,6089,6092],{"class":156,"line":79},[154,6088,6070],{"class":160},[154,6090,6091],{"class":163}," activate",[154,6093,6094],{"class":163}," open_manus\n",[225,6096,6098],{"id":6097},"clone-儲存庫","Clone 儲存庫",[146,6100,6102],{"className":148,"code":6101,"language":150,"meta":78,"style":78},"git clone https:\u002F\u002Fgithub.com\u002Fmannaandpoem\u002FOpenManus.git\ncd OpenManus\n",[19,6103,6104,6115],{"__ignoreMap":78},[154,6105,6106,6109,6112],{"class":156,"line":157},[154,6107,6108],{"class":160},"git",[154,6110,6111],{"class":163}," clone",[154,6113,6114],{"class":163}," https:\u002F\u002Fgithub.com\u002Fmannaandpoem\u002FOpenManus.git\n",[154,6116,6117,6119],{"class":156,"line":79},[154,6118,1730],{"class":250},[154,6120,6121],{"class":163}," OpenManus\n",[225,6123,6124],{"id":6124},"安裝相依套件",[146,6126,6128],{"className":148,"code":6127,"language":150,"meta":78,"style":78},"pip install -r requirements.txt\n",[19,6129,6130],{"__ignoreMap":78},[154,6131,6132,6135,6137,6140],{"class":156,"line":157},[154,6133,6134],{"class":160},"pip",[154,6136,1039],{"class":163},[154,6138,6139],{"class":250}," -r",[154,6141,6142],{"class":163}," requirements.txt\n",[100,6144,6146],{"id":6145},"使用-uv-安裝","使用 uv 安裝",[225,6148,6150],{"id":6149},"安裝-uv-環境","安裝 uv 環境",[146,6152,6154],{"className":148,"code":6153,"language":150,"meta":78,"style":78},"curl -LsSf https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh | sh\n",[19,6155,6156],{"__ignoreMap":78},[154,6157,6158,6160,6163,6166,6168],{"class":156,"line":157},[154,6159,1058],{"class":160},[154,6161,6162],{"class":250}," -LsSf",[154,6164,6165],{"class":163}," https:\u002F\u002Fastral.sh\u002Fuv\u002Finstall.sh",[154,6167,1068],{"class":1067},[154,6169,6170],{"class":160}," sh\n",[225,6172,6098],{"id":6173},"clone-儲存庫-1",[146,6175,6176],{"className":148,"code":6101,"language":150,"meta":78,"style":78},[19,6177,6178,6186],{"__ignoreMap":78},[154,6179,6180,6182,6184],{"class":156,"line":157},[154,6181,6108],{"class":160},[154,6183,6111],{"class":163},[154,6185,6114],{"class":163},[154,6187,6188,6190],{"class":156,"line":79},[154,6189,1730],{"class":250},[154,6191,6121],{"class":163},[225,6193,6194],{"id":6194},"建立新的虛擬環境並啟動它",[146,6196,6198],{"className":148,"code":6197,"language":150,"meta":78,"style":78},"uv venv --python 3.12\nsource .venv\u002Fbin\u002Factivate  # On Unix\u002FmacOS\n# Or on Windows:\n# .venv\\Scripts\\activate\n",[19,6199,6200,6214,6225,6230],{"__ignoreMap":78},[154,6201,6202,6205,6208,6211],{"class":156,"line":157},[154,6203,6204],{"class":160},"uv",[154,6206,6207],{"class":163}," venv",[154,6209,6210],{"class":250}," --python",[154,6212,6213],{"class":250}," 3.12\n",[154,6215,6216,6219,6222],{"class":156,"line":79},[154,6217,6218],{"class":250},"source",[154,6220,6221],{"class":163}," .venv\u002Fbin\u002Factivate",[154,6223,6224],{"class":298},"  # On Unix\u002FmacOS\n",[154,6226,6227],{"class":156,"line":314},[154,6228,6229],{"class":298},"# Or on Windows:\n",[154,6231,6232],{"class":156,"line":320},[154,6233,6234],{"class":298},"# .venv\\Scripts\\activate\n",[225,6236,6124],{"id":6237},"安裝相依套件-1",[146,6239,6241],{"className":148,"code":6240,"language":150,"meta":78,"style":78},"uv pip install -r requirements.txt\n",[19,6242,6243],{"__ignoreMap":78},[154,6244,6245,6247,6250,6252,6254],{"class":156,"line":157},[154,6246,6204],{"class":160},[154,6248,6249],{"class":163}," pip",[154,6251,1039],{"class":163},[154,6253,6139],{"class":250},[154,6255,6142],{"class":163},[100,6257,6258],{"id":6258},"設定",[225,6260,6261],{"id":6261},"建立設定檔",[146,6263,6265],{"className":148,"code":6264,"language":150,"meta":78,"style":78},"cp config\u002Fconfig.example.toml config\u002Fconfig.toml\n",[19,6266,6267],{"__ignoreMap":78},[154,6268,6269,6272,6275],{"class":156,"line":157},[154,6270,6271],{"class":160},"cp",[154,6273,6274],{"class":163}," config\u002Fconfig.example.toml",[154,6276,6277],{"class":163}," config\u002Fconfig.toml\n",[225,6279,6280],{"id":6280},"編輯設定檔",[146,6282,6284],{"className":148,"code":6283,"language":150,"meta":78,"style":78},"# [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,6285,6286,6291,6296,6301,6306,6311,6316,6321,6326,6330,6338,6348,6358,6368,6378,6388,6398,6402,6407,6412,6417,6422,6427,6432,6437,6441,6449,6458,6468,6477,6486,6495,6504,6508,6513,6518,6523,6528,6533,6538,6543,6548,6553,6558,6563,6568,6573,6578,6583,6587,6592,6597,6602,6607,6612,6616,6621,6626,6631],{"__ignoreMap":78},[154,6287,6288],{"class":156,"line":157},[154,6289,6290],{"class":298},"# [llm] #AZURE OPENAI:\n",[154,6292,6293],{"class":156,"line":79},[154,6294,6295],{"class":298},"# api_type= 'azure'\n",[154,6297,6298],{"class":156,"line":314},[154,6299,6300],{"class":298},"# model = \"YOUR_MODEL_NAME\" #\"gpt-4o-mini\"\n",[154,6302,6303],{"class":156,"line":320},[154,6304,6305],{"class":298},"# base_url = \"{YOUR_AZURE_ENDPOINT.rstrip('\u002F')}\u002Fopenai\u002Fdeployments\u002F{AZURE_DEPOLYMENT_ID}\"\n",[154,6307,6308],{"class":156,"line":326},[154,6309,6310],{"class":298},"# api_key = \"AZURE API KEY\"\n",[154,6312,6313],{"class":156,"line":889},[154,6314,6315],{"class":298},"# max_tokens = 8096\n",[154,6317,6318],{"class":156,"line":900},[154,6319,6320],{"class":298},"# temperature = 0.0\n",[154,6322,6323],{"class":156,"line":906},[154,6324,6325],{"class":298},"# api_version=\"AZURE API VERSION\" #\"2024-08-01-preview\"\n",[154,6327,6328],{"class":156,"line":916},[154,6329,317],{"emptyLinePlaceholder":86},[154,6331,6332,6335],{"class":156,"line":1648},[154,6333,6334],{"class":192}," [llm] ",[154,6336,6337],{"class":298},"#OLLAMA:\n",[154,6339,6340,6343,6345],{"class":156,"line":1654},[154,6341,6342],{"class":160}," api_type",[154,6344,3888],{"class":163},[154,6346,6347],{"class":163}," 'ollama'\n",[154,6349,6350,6353,6355],{"class":156,"line":2151},[154,6351,6352],{"class":160}," model",[154,6354,3888],{"class":163},[154,6356,6357],{"class":163}," \"llama3\"\n",[154,6359,6360,6363,6365],{"class":156,"line":2165},[154,6361,6362],{"class":160}," base_url",[154,6364,3888],{"class":163},[154,6366,6367],{"class":163}," \"http:\u002F\u002F127.0.0.1:11434\u002Fv1\"\n",[154,6369,6370,6373,6375],{"class":156,"line":2178},[154,6371,6372],{"class":160}," api_key",[154,6374,3888],{"class":163},[154,6376,6377],{"class":163}," \"ollama\"\n",[154,6379,6380,6383,6385],{"class":156,"line":2183},[154,6381,6382],{"class":160}," max_tokens",[154,6384,3888],{"class":163},[154,6386,6387],{"class":250}," 4096\n",[154,6389,6390,6393,6395],{"class":156,"line":2189},[154,6391,6392],{"class":160}," temperature",[154,6394,3888],{"class":163},[154,6396,6397],{"class":250}," 0.0\n",[154,6399,6400],{"class":156,"line":2202},[154,6401,317],{"emptyLinePlaceholder":86},[154,6403,6404],{"class":156,"line":2214},[154,6405,6406],{"class":298},"# Optional configuration for specific LLM models\n",[154,6408,6409],{"class":156,"line":2227},[154,6410,6411],{"class":298},"#[llm.vision]\n",[154,6413,6414],{"class":156,"line":2232},[154,6415,6416],{"class":298},"# model = \"claude-3-7-sonnet\"    # The vision model to use\n",[154,6418,6419],{"class":156,"line":2238},[154,6420,6421],{"class":298},"# base_url = \"https:\u002F\u002Fapi.openai.com\u002Fv1\"    # API endpoint URL for vision model\n",[154,6423,6424],{"class":156,"line":2251},[154,6425,6426],{"class":298},"# api_key = \"sk-...\"    # Your API key for vision model\n",[154,6428,6429],{"class":156,"line":2262},[154,6430,6431],{"class":298},"# max_tokens = 8192     # Maximum number of tokens in the response\n",[154,6433,6434],{"class":156,"line":2273},[154,6435,6436],{"class":298},"# temperature = 0.0     # Controls randomness for vision model\n",[154,6438,6439],{"class":156,"line":2278},[154,6440,317],{"emptyLinePlaceholder":86},[154,6442,6443,6446],{"class":156,"line":2284},[154,6444,6445],{"class":192},"[llm.vision] ",[154,6447,6448],{"class":298},"#OLLAMA VISION:\n",[154,6450,6451,6454,6456],{"class":156,"line":2294},[154,6452,6453],{"class":160},"api_type",[154,6455,3888],{"class":163},[154,6457,6347],{"class":163},[154,6459,6460,6463,6465],{"class":156,"line":2308},[154,6461,6462],{"class":160},"model",[154,6464,3888],{"class":163},[154,6466,6467],{"class":163}," \"llama3.2-vision:latest\"\n",[154,6469,6470,6473,6475],{"class":156,"line":2313},[154,6471,6472],{"class":160},"base_url",[154,6474,3888],{"class":163},[154,6476,6367],{"class":163},[154,6478,6479,6482,6484],{"class":156,"line":2319},[154,6480,6481],{"class":160},"api_key",[154,6483,3888],{"class":163},[154,6485,6377],{"class":163},[154,6487,6488,6491,6493],{"class":156,"line":2333},[154,6489,6490],{"class":160},"max_tokens",[154,6492,3888],{"class":163},[154,6494,6387],{"class":250},[154,6496,6497,6500,6502],{"class":156,"line":2344},[154,6498,6499],{"class":160},"temperature",[154,6501,3888],{"class":163},[154,6503,6397],{"class":250},[154,6505,6506],{"class":156,"line":2355},[154,6507,317],{"emptyLinePlaceholder":86},[154,6509,6510],{"class":156,"line":4294},[154,6511,6512],{"class":298},"# Optional configuration for specific browser configuration\n",[154,6514,6515],{"class":156,"line":4326},[154,6516,6517],{"class":298},"# [browser]\n",[154,6519,6520],{"class":156,"line":4337},[154,6521,6522],{"class":298},"# Whether to run browser in headless mode (default: false)\n",[154,6524,6525],{"class":156,"line":4348},[154,6526,6527],{"class":298},"#headless = false\n",[154,6529,6530],{"class":156,"line":4359},[154,6531,6532],{"class":298},"# Disable browser security features (default: true)\n",[154,6534,6535],{"class":156,"line":4370},[154,6536,6537],{"class":298},"#disable_security = true\n",[154,6539,6540],{"class":156,"line":4381},[154,6541,6542],{"class":298},"# Extra arguments to pass to the browser\n",[154,6544,6545],{"class":156,"line":4393},[154,6546,6547],{"class":298},"#extra_chromium_args = []\n",[154,6549,6550],{"class":156,"line":4398},[154,6551,6552],{"class":298},"# Path to a Chrome instance to use to connect to your normal browser\n",[154,6554,6555],{"class":156,"line":4403},[154,6556,6557],{"class":298},"# e.g. '\u002FApplications\u002FGoogle Chrome.app\u002FContents\u002FMacOS\u002FGoogle Chrome'\n",[154,6559,6560],{"class":156,"line":4410},[154,6561,6562],{"class":298},"#chrome_instance_path = \"\"\n",[154,6564,6565],{"class":156,"line":4421},[154,6566,6567],{"class":298},"# Connect to a browser instance via WebSocket\n",[154,6569,6570],{"class":156,"line":4446},[154,6571,6572],{"class":298},"#wss_url = \"\"\n",[154,6574,6575],{"class":156,"line":4451},[154,6576,6577],{"class":298},"# Connect to a browser instance via CDP\n",[154,6579,6580],{"class":156,"line":4456},[154,6581,6582],{"class":298},"#cdp_url = \"\"\n",[154,6584,6585],{"class":156,"line":4463},[154,6586,317],{"emptyLinePlaceholder":86},[154,6588,6589],{"class":156,"line":4476},[154,6590,6591],{"class":298},"# Optional configuration, Proxy settings for the browser\n",[154,6593,6594],{"class":156,"line":4481},[154,6595,6596],{"class":298},"# [browser.proxy]\n",[154,6598,6599],{"class":156,"line":4486},[154,6600,6601],{"class":298},"# server = \"http:\u002F\u002Fproxy-server:port\"\n",[154,6603,6604],{"class":156,"line":4491},[154,6605,6606],{"class":298},"# username = \"proxy-username\"\n",[154,6608,6609],{"class":156,"line":4501},[154,6610,6611],{"class":298},"# password = \"proxy-password\"\n",[154,6613,6614],{"class":156,"line":4542},[154,6615,317],{"emptyLinePlaceholder":86},[154,6617,6618],{"class":156,"line":4553},[154,6619,6620],{"class":298},"# Optional configuration, Search settings.\n",[154,6622,6623],{"class":156,"line":4564},[154,6624,6625],{"class":298},"# [search]\n",[154,6627,6628],{"class":156,"line":4575},[154,6629,6630],{"class":298},"# Search engine for agent to use. Default is \"Google\", can be set to \"Baidu\" or \"DuckDuckGo\".\n",[154,6632,6633,6636,6638],{"class":156,"line":4586},[154,6634,6635],{"class":160},"engine",[154,6637,3888],{"class":163},[154,6639,6640],{"class":163}," \"Google\"\n",[15,6642,6643,6644,6647,6648],{},"其中 ",[19,6645,6646],{},"[llm]"," 的 ollama model 並非所有 model 著支援，目前只支援 ",[726,6649,6652],{"href":6650,"rel":6651},"https:\u002F\u002Follama.com\u002Fsearch?c=tools",[730],"ollama tool 模型",[15,6654,6655,6656,6659,6660],{},"而 ",[19,6657,6658],{},"[llm.vision]"," 的 ollama model 則必需支援",[726,6661,6664],{"href":6662,"rel":6663},"https:\u002F\u002Follama.com\u002Fsearch?c=vision",[730],"視覺的模型",[100,6666,6667],{"id":6667},"瀏覽器安裝",[15,6669,6670,6671,6674,6675,6678],{},"在使用 ",[19,6672,6673],{},"OpenManus"," 時，有時需要使用網路爬蟲時，會要求你安裝 ",[19,6676,6677],{},"Chromium"," 瀏覽器，你可以事先透過下列指令進行安裝",[146,6680,6682],{"className":148,"code":6681,"language":150,"meta":78,"style":78},"playwright install\n",[19,6683,6684],{"__ignoreMap":78},[154,6685,6686,6689],{"class":156,"line":157},[154,6687,6688],{"class":160},"playwright",[154,6690,6691],{"class":163}," install\n",[100,6693,6694],{"id":6694},"啟用服務",[15,6696,6697],{},"上面安裝完成後，就可以啟用服務",[146,6699,6701],{"className":148,"code":6700,"language":150,"meta":78,"style":78},"python main.py\n",[19,6702,6703],{"__ignoreMap":78},[154,6704,6705,6708],{"class":156,"line":157},[154,6706,6707],{"class":160},"python",[154,6709,6710],{"class":163}," main.py\n",[100,6712,6713],{"id":6713},"啟用服務的畫面",[146,6715,6717],{"className":148,"code":6716,"language":150,"meta":78,"style":78},"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,6718,6719,6727,6740],{"__ignoreMap":78},[154,6720,6721,6724],{"class":156,"line":157},[154,6722,6723],{"class":160},"INFO",[154,6725,6726],{"class":192},"     [browser_use] BrowserUse logging setup complete with level info\n",[154,6728,6729,6731,6734,6737],{"class":156,"line":79},[154,6730,6723],{"class":160},[154,6732,6733],{"class":192},"     [root] Anonymized telemetry enabled. See https:\u002F\u002Fdocs.browser-use.com\u002Fdevelopment\u002Ftelemetry ",[154,6735,6736],{"class":1067},"for",[154,6738,6739],{"class":192}," more information.\n",[154,6741,6742,6745,6748],{"class":156,"line":314},[154,6743,6744],{"class":160},"Enter",[154,6746,6747],{"class":163}," your",[154,6749,6750],{"class":163}," prompt:\n",[15,6752,6753],{},"在終端機輸入你的需求提示詞",[15,6755,6756],{},"如：請從網路上搜尋 近期熱門的 LLM 大語言模型的介紹，並以繁體中文整理成一篇文章，以 markdown 格式輸出 \"LLM_大語言模型介紹.md\"",[15,6758,6759,6760,6763],{},"執行結果會儲存在 ",[19,6761,6762],{},"OpenManus\u002Fworkspace"," 資料夾",[100,6765,945],{"id":945},[15,6767,6768,6769,6772],{},"總而言之，OpenManus 提供了一個無需等待邀請碼、即可在本地端體驗 AI Agent 功能的開源方案。透過搭配 Ollama，使用者可以輕鬆地利用各種大型語言模型和視覺模型，執行從網路資訊蒐集到文章撰寫等多種任務。儘管目前 Ollama 對於 ",[19,6770,6771],{},"tool"," 模型和視覺模型的支援仍在發展中，OpenManus 仍然為對 AI Agent 技術感興趣的使用者提供了一個方便且彈性的實驗平台。隨著專案的持續發展和更多模型的支援，OpenManus 有望成為本地端 AI 應用的重要工具之一。",[675,6774,6775],{},"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":78,"searchDepth":79,"depth":79,"links":6777},[6778,6779,6780,6781,6786,6792,6796,6797,6798,6799],{"id":2651,"depth":79,"text":2651},{"id":6020,"depth":79,"text":6020},{"id":1008,"depth":79,"text":1008},{"id":6055,"depth":79,"text":6056,"children":6782},[6783,6784,6785],{"id":6059,"depth":314,"text":6060},{"id":6097,"depth":314,"text":6098},{"id":6124,"depth":314,"text":6124},{"id":6145,"depth":79,"text":6146,"children":6787},[6788,6789,6790,6791],{"id":6149,"depth":314,"text":6150},{"id":6173,"depth":314,"text":6098},{"id":6194,"depth":314,"text":6194},{"id":6237,"depth":314,"text":6124},{"id":6258,"depth":79,"text":6258,"children":6793},[6794,6795],{"id":6261,"depth":314,"text":6261},{"id":6280,"depth":314,"text":6280},{"id":6667,"depth":79,"text":6667},{"id":6694,"depth":79,"text":6694},{"id":6713,"depth":79,"text":6713},{"id":945,"depth":79,"text":945},"\u002Fimages\u002Farticles\u002F2025-03-17-open-manus\u002Fcover.png",{},"\u002Farticles\u002F2025-03-17-open-manus","2025-03-17 14:38:00",{"title":6010,"description":78},"articles\u002F2025-03-17-open-manus","最近的 Manus 爆紅的 AI 工具，但需要邀請碼，而 OpenManus 則是開源版，且可以在本地配合 ollama 使用",[709],"3Et6YOZPsuqir3pZgApsjYIZn_5nPPKlO4oaWvr2Sj0",{"id":6810,"title":6811,"body":6812,"category":6986,"description":78,"extension":83,"image":6987,"meta":6988,"navigation":86,"path":6989,"pubDate":6990,"seo":6991,"status":86,"stem":6992,"summary":6993,"tags":6994,"__hash__":6995},"content\u002Farticles\u002F2025-02-05-linux-nohup.md","nohup 指令：讓程式在登出後繼續執行的秘訣",{"type":8,"value":6813,"toc":6978},[6814,6821,6826,6829,6841,6855,6858,6868,6895,6909,6913,6919,6946,6964,6966,6969,6975],[100,6815,6817,6818,107],{"id":6816},"什麼是-nohup","什麼是 ",[19,6819,6820],{},"nohup",[15,6822,6823,6825],{},[19,6824,6820],{}," 是Linux系統中的一個命令，用於讓指定的程式在用戶登出或終端機連接斷開後繼續執行。它會忽略SIGHUP（掛起）信號，使程序能夠在背景下不受干擾地運行。",[100,6827,6828],{"id":6828},"基本語法",[146,6830,6832],{"className":148,"code":6831,"language":150,"meta":78,"style":78},"nohup [指令] &\n",[19,6833,6834],{"__ignoreMap":78},[154,6835,6836,6838],{"class":156,"line":157},[154,6837,6820],{"class":160},[154,6839,6840],{"class":192}," [指令] &\n",[112,6842,6843,6849],{},[115,6844,6845,6848],{},[19,6846,6847],{},"[指令]","：您希望在背景執行的命令。",[115,6850,6851,6854],{},[19,6852,6853],{},"&","：表示將命令放在後台執行",[100,6856,6857],{"id":6857},"使用範例",[15,6859,6860,6861,6864,6865,6867],{},"假設我們有一個簡單的Python腳本 ",[19,6862,6863],{},"my_script.py","，它會運行一個耗時的計算任務。我們可以使用 ",[19,6866,6820],{}," 命令來確保該任務即使在登出後仍能繼續執行：",[146,6869,6871],{"className":148,"code":6870,"language":150,"meta":78,"style":78},"nohup python my_script.py >> output.log 2>&1 &\n",[19,6872,6873],{"__ignoreMap":78},[154,6874,6875,6877,6880,6883,6886,6889,6892],{"class":156,"line":157},[154,6876,6820],{"class":160},[154,6878,6879],{"class":163}," python",[154,6881,6882],{"class":163}," my_script.py",[154,6884,6885],{"class":1067}," >>",[154,6887,6888],{"class":163}," output.log",[154,6890,6891],{"class":1067}," 2>&1",[154,6893,6894],{"class":192}," &\n",[112,6896,6897,6903],{},[115,6898,6899,6902],{},[19,6900,6901],{},">>"," output.log：將標準輸出重定向到output.log文件。",[115,6904,6905,6908],{},[19,6906,6907],{},"2>&1","：將錯誤輸出也重定向到stdout，這樣即使發生錯誤也能被記錄在output.log中。",[100,6910,6912],{"id":6911},"過濾-nohup-ignoring-input-訊息","過濾 nohup: ignoring input 訊息",[15,6914,6915,6916,6918],{},"當你使用 ",[19,6917,6820],{}," 執行命令時，它會輸出 nohup: ignoring input，這是因為 nohup 預設會忽略標準輸入 (stdin)，以確保命令不會因等待輸入而中斷。這條訊息通常會寫入 nohup.out 或你指定的 log 檔案。如果你不想讓這行訊息出現在 log 檔案中，可以使用以下方法：",[146,6920,6922],{"className":148,"code":6921,"language":150,"meta":78,"style":78},"nohup python my_script.py >> output.log 2>&1 \u003C \u002Fdev\u002Fnull &\n",[19,6923,6924],{"__ignoreMap":78},[154,6925,6926,6928,6930,6932,6934,6936,6938,6941,6944],{"class":156,"line":157},[154,6927,6820],{"class":160},[154,6929,6879],{"class":163},[154,6931,6882],{"class":163},[154,6933,6885],{"class":1067},[154,6935,6888],{"class":163},[154,6937,6891],{"class":1067},[154,6939,6940],{"class":1067}," \u003C",[154,6942,6943],{"class":163}," \u002Fdev\u002Fnull",[154,6945,6894],{"class":192},[112,6947,6948,6953,6958],{},[115,6949,6950,6952],{},[19,6951,6901],{}," 將標準輸出導向 output.log",[115,6954,6955,6957],{},[19,6956,6907],{}," 將錯誤輸出也重定向到stdout，這樣即使發生錯誤也能被記錄在output.log中。",[115,6959,6960,6963],{},[19,6961,6962],{},"\u003C \u002Fdev\u002Fnull"," 讓標準輸入 (stdin) 來自空設備，避免 nohup 顯示 ignoring input",[100,6965,945],{"id":945},[15,6967,6968],{},"掌握nohup指令對Linux使用者來說是非常有用的，特別是在需要長時間運行的任務中。利用這個簡單但強大的工具，您可以讓程序在后台無受干擾地執行，從而提高工作效率。",[15,6970,6971,6972,6974],{},"透過本文介紹的範例和技巧，相信您已經能夠自如地使用 ",[19,6973,6820],{}," 指令來管理您的Linux系統上的背景任務了！",[675,6976,6977],{},"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":78,"searchDepth":79,"depth":79,"links":6979},[6980,6982,6983,6984,6985],{"id":6816,"depth":79,"text":6981},"什麼是 nohup？",{"id":6828,"depth":79,"text":6828},{"id":6857,"depth":79,"text":6857},{"id":6911,"depth":79,"text":6912},{"id":945,"depth":79,"text":945},"dev_ops","\u002Fimages\u002Farticles\u002F2025-02-05-linux-nohup\u002Fcover.png",{},"\u002Farticles\u002F2025-02-05-linux-nohup","2025-02-05 14:30:00",{"title":6811,"description":78},"articles\u002F2025-02-05-linux-nohup","在Linux環境下進行長時間運行的任務時，我們常常希望即使用戶登出終端機或連線中斷，任務也能繼續執行。nohup指令正是為此而生！本文將介紹如何使用nohup來執行背景任務，並重定向其輸出，確保您的程序在離線後仍能順利運行。",[6986,3111],"CwukBZ_XTh1QBVKDTwDEghU7F3HeG06Wv0jF4kxOzVI",{"id":6997,"title":6998,"body":6999,"category":1401,"description":7003,"extension":83,"image":7677,"meta":7678,"navigation":86,"path":7679,"pubDate":7680,"seo":7681,"status":86,"stem":7682,"summary":7683,"tags":7684,"__hash__":7685},"content\u002Farticles\u002F2025-01-24-mac-os-app.md","MacOS：2025 我推的 Mac 好用 App",{"type":8,"value":7000,"toc":7617},[7001,7004,7006,7011,7015,7018,7025,7029,7032,7038,7042,7045,7051,7055,7058,7064,7068,7071,7077,7081,7084,7090,7094,7097,7103,7107,7110,7116,7120,7123,7129,7133,7136,7142,7146,7149,7155,7159,7162,7168,7171,7177,7181,7184,7190,7194,7197,7203,7207,7210,7216,7219,7225,7229,7232,7238,7241,7246,7250,7253,7259,7263,7268,7272,7275,7281,7284,7289,7293,7296,7302,7305,7310,7313,7316,7322,7326,7329,7335,7339,7342,7348,7352,7355,7361,7365,7368,7374,7378,7381,7387,7391,7394,7400,7404,7407,7413,7417,7420,7426,7430,7433,7439,7446,7450,7453,7459,7462,7467,7471,7474,7480,7483,7486,7492,7496,7499,7505,7509,7512,7518,7522,7525,7531,7535,7540,7543,7556,7562,7566,7569,7575,7579,7582,7589,7593,7596,7599,7605,7608,7611],[15,7002,7003],{},"農曆年假期將近，想要重新安裝我使用 MacOS ，在這邊整理一下目前自已常用的 Mac App。",[100,7005,711],{"id":711},[15,7007,7008],{},[939,7009],{"alt":711,"src":7010},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fdev-tool.png",[225,7012,7014],{"id":7013},"vscode","VSCode",[15,7016,7017],{},"一款輕量級但功能強大的源代碼編輯器，支援多種編程語言，並具有豐富的擴展生態系統。",[15,7019,7020,7021],{},"官網：",[726,7022,7023],{"href":7023,"rel":7024},"https:\u002F\u002Fcode.visualstudio.com\u002F",[730],[225,7026,7028],{"id":7027},"iterm2","Iterm2",[15,7030,7031],{},"一款功能強大的終端模擬器，提供分屏、標籤頁、熱鍵等多種功能，適合開發者使用。",[15,7033,7020,7034],{},[726,7035,7036],{"href":7036,"rel":7037},"https:\u002F\u002Fiterm2.com\u002F",[730],[225,7039,7041],{"id":7040},"utm","UTM",[15,7043,7044],{},"一款虛擬機應用程式，允許用戶在 macOS 上運行其他操作系統，如 Windows 和 Linux。",[15,7046,7020,7047],{},[726,7048,7049],{"href":7049,"rel":7050},"https:\u002F\u002Fmac.getutm.app\u002F",[730],[225,7052,7054],{"id":7053},"postman","Postman",[15,7056,7057],{},"API 開發和測試工具，方便發送 HTTP 請求、檢視回應。",[15,7059,7020,7060],{},[726,7061,7062],{"href":7062,"rel":7063},"https:\u002F\u002Fwww.postman.com\u002F",[730],[225,7065,7067],{"id":7066},"github-desktop","GitHub Desktop",[15,7069,7070],{},"GitHub 官方推出的桌面應用，提供圖形化界面，方便用戶管理 GitHub 上的代碼庫。",[15,7072,7020,7073],{},[726,7074,7075],{"href":7075,"rel":7076},"https:\u002F\u002Fgithub.com\u002Fapps\u002Fdesktop",[730],[225,7078,7080],{"id":7079},"textmate","TextMate",[15,7082,7083],{},"一款功能強大的文本編輯器，支援多種編程語言，具有語法高亮、代碼折疊等功能。",[15,7085,7020,7086],{},[726,7087,7088],{"href":7088,"rel":7089},"https:\u002F\u002Fmacromates.com\u002F",[730],[225,7091,7093],{"id":7092},"docker","Docker",[15,7095,7096],{},"一個開源的容器化平台，允許開發者打包應用及其依賴，實現跨平台運行。",[15,7098,7020,7099],{},[726,7100,7101],{"href":7101,"rel":7102},"https:\u002F\u002Fwww.docker.com\u002F",[730],[225,7104,7106],{"id":7105},"orbstack","Orbstack",[15,7108,7109],{},"一款輕量級的虛擬化工具，專為 macOS 設計，簡化容器和虛擬機的管理。",[15,7111,7020,7112],{},[726,7113,7114],{"href":7114,"rel":7115},"https:\u002F\u002Forbstack.dev\u002F",[730],[225,7117,7119],{"id":7118},"devtoys","DevToys",[15,7121,7122],{},"提供許多開發者常用的小工具，例如 JSON 格式化、編碼轉換等",[15,7124,7020,7125],{},[726,7126,7127],{"href":7127,"rel":7128},"https:\u002F\u002Fdevtoys.app\u002F",[730],[225,7130,7132],{"id":7131},"dbeaver","DBeaver",[15,7134,7135],{},"通用資料庫管理工具，支援多種資料庫系統，包含 MySQL、SQLite、PostgreSQL、MongoDB 等。",[15,7137,7020,7138],{},[726,7139,7140],{"href":7140,"rel":7141},"https:\u002F\u002Fdbeaver.io\u002F",[730],[225,7143,7145],{"id":7144},"pgadmin4","PgAdmin4",[15,7147,7148],{},"PostgreSQL 資料庫的管理工具。",[15,7150,7020,7151],{},[726,7152,7153],{"href":7153,"rel":7154},"https:\u002F\u002Fwww.pgadmin.org\u002F",[730],[225,7156,7158],{"id":7157},"frame0","Frame0",[15,7160,7161],{},"可以快速建置手繪風格 UI Prototype 的工具。",[15,7163,7020,7164],{},[726,7165,7166],{"href":7166,"rel":7167},"https:\u002F\u002Fframe0.app",[730],[100,7169,7170],{"id":7170},"網路工具",[15,7172,7173],{},[939,7174],{"alt":7175,"src":7176},"瀏覽器","\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fbrowser.png",[225,7178,7180],{"id":7179},"arc-browser","Arc Browser",[15,7182,7183],{},"rc 瀏覽器由 The Browser Company 開發，旨在重新定義網頁瀏覽體驗。它基於 Chromium 引擎，並使用 Swift 編寫，支援 Chrome 擴充功能，預設搜尋引擎為 Google。",[15,7185,7020,7186],{},[726,7187,7188],{"href":7188,"rel":7189},"https:\u002F\u002Farc.net\u002F",[730],[225,7191,7193],{"id":7192},"firefox","Firefox",[15,7195,7196],{},"Mozilla Firefox（簡稱 Firefox）是一款由 Mozilla 基金會及其子公司 Mozilla 公司開發的自由且開源的網頁瀏覽器。自 2004 年 11 月 9 日首次發布以來，Firefox 一直致力於提供快速、安全且注重隱私的瀏覽體驗",[15,7198,7020,7199],{},[726,7200,7201],{"href":7201,"rel":7202},"https:\u002F\u002Fwww.mozilla.org\u002Fzh-TW\u002Ffirefox\u002Fnew\u002F",[730],[225,7204,7206],{"id":7205},"neat-download-manager","Neat Download Manager",[15,7208,7209],{},"Neat Download Manager 是一款免費且輕量級的下載管理器，適用於 Windows 和 macOS 平台。\n該軟體支援多執行緒下載，能有效提升下載速度，並提供續傳、暫停等功能，方便管理下載任務。",[15,7211,7020,7212],{},[726,7213,7214],{"href":7214,"rel":7215},"https:\u002F\u002Fwww.neatdownloadmanager.com\u002Findex.php\u002Fen\u002F",[730],[100,7217,7218],{"id":7218},"筆記軟體",[15,7220,7221],{},[939,7222],{"alt":7223,"src":7224},"筆記","\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002FNotebook.png",[225,7226,7228],{"id":7227},"obsidian","Obsidian",[15,7230,7231],{},"Obsidian 是一款免費且開源的筆記軟體，支援 Markdown 語法，所有筆記以 .md 檔案形式儲存在指定的資料夾中，方便使用者將檔案匯入其他軟體。",[15,7233,7020,7234],{},[726,7235,7236],{"href":7236,"rel":7237},"https:\u002F\u002Fobsidian.md\u002F",[730],[100,7239,7240],{"id":7240},"媒體播放器",[15,7242,7243],{},[939,7244],{"alt":7240,"src":7245},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fmedia-player.png",[225,7247,7249],{"id":7248},"iina","IINA",[15,7251,7252],{},"IINA 是一款專為 macOS 設計的免費開源多媒體播放器，基於 mpv 引擎，使用 Swift 編寫，旨在提供現代化且直覺的使用體驗。",[15,7254,7020,7255],{},[726,7256,7257],{"href":7257,"rel":7258},"https:\u002F\u002Fiina.io\u002F",[730],[100,7260,7262],{"id":7261},"壓縮解壓","壓縮\u002F解壓",[15,7264,7265],{},[939,7266],{"alt":7262,"src":7267},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fzip.png",[225,7269,7271],{"id":7270},"keka","Keka",[15,7273,7274],{},"Keka 是一款專為 macOS 設計的免費開源壓縮與解壓縮軟體，支援多種壓縮格式，包括 7Z、ZIP、TAR、GZIP、BZIP2、XZ、LZIP、DMG、ISO、BROTLI、ZSTD、LRZIP、WIM 等。",[15,7276,7020,7277],{},[726,7278,7279],{"href":7279,"rel":7280},"https:\u002F\u002Fwww.keka.io\u002F",[730],[100,7282,7283],{"id":7283},"密碼管理",[15,7285,7286],{},[939,7287],{"alt":7283,"src":7288},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fpassword.png",[225,7290,7292],{"id":7291},"keepassxc","KeePassXC",[15,7294,7295],{},"KeePassXC 是一款免費且開源的密碼管理器，旨在安全地存儲和管理您的敏感資訊。它基於 KeePassX，並使用 Qt5 庫構建，支援 Windows、macOS 和 Linux 等多個平台。",[15,7297,7020,7298],{},[726,7299,7300],{"href":7300,"rel":7301},"https:\u002F\u002Fkeepassxc.org\u002F",[730],[100,7303,7304],{"id":7304},"系統管理",[15,7306,7307],{},[939,7308],{"alt":7304,"src":7309},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fsystem.png",[225,7311,991],{"id":7312},"appcleaner",[15,7314,7315],{},"AppCleaner 是一款免費且開源的 macOS 應用程式卸載工具，旨在徹底移除應用程式及其相關檔案，避免遺留不必要的設定或暫存檔案。",[15,7317,7020,7318],{},[726,7319,7320],{"href":7320,"rel":7321},"https:\u002F\u002Ffreemacsoft.net\u002Fappcleaner\u002F",[730],[225,7323,7325],{"id":7324},"stats","Stats",[15,7327,7328],{},"Stats 是一個免費的 macOS 應用程式，可以顯示系統資源使用情況，包括 CPU、記憶體和磁盤空間。它也提供了一些有用的工具來管理這些資源。",[15,7330,7020,7331],{},[726,7332,7333],{"href":7333,"rel":7334},"https:\u002F\u002Fgithub.com\u002Fexelban\u002Fstats",[730],[225,7336,7338],{"id":7337},"raycast","Raycast",[15,7340,7341],{},"Raycast 是一個 macOS 的應用程式，可以幫助你快速找到和操作文件和資料夾。它還提供了許多其他有用的功能，如搜索、排序和分類。",[15,7343,7020,7344],{},[726,7345,7346],{"href":7346,"rel":7347},"https:\u002F\u002Fraycast.app\u002F",[730],[225,7349,7351],{"id":7350},"aidente","AIDente",[15,7353,7354],{},"調整 MacBook 電池充電上限的工具，以延長電池壽命。",[15,7356,7020,7357],{},[726,7358,7359],{"href":7359,"rel":7360},"https:\u002F\u002Fapphousekitchen.com",[730],[225,7362,7364],{"id":7363},"shotter","Shotter",[15,7366,7367],{},"功能強大的螢幕截圖工具，支援滾動截圖、圖片編輯等",[15,7369,7020,7370],{},[726,7371,7372],{"href":7372,"rel":7373},"https:\u002F\u002Fshottr.cc\u002F",[730],[225,7375,7377],{"id":7376},"xnip","Xnip",[15,7379,7380],{},"另一款好用的截圖工具，提供多種截圖模式和編輯功能。",[15,7382,7020,7383],{},[726,7384,7385],{"href":7385,"rel":7386},"https:\u002F\u002Fxnipapp.com\u002F",[730],[225,7388,7390],{"id":7389},"mos","Mos",[15,7392,7393],{},"平滑滑鼠滾動的工具，提升使用體驗。",[15,7395,7020,7396],{},[726,7397,7398],{"href":7398,"rel":7399},"https:\u002F\u002Fmos.caldis.me",[730],[225,7401,7403],{"id":7402},"prettyclean","PrettyClean",[15,7405,7406],{},"清理系統垃圾檔案的工具",[15,7408,7020,7409],{},[726,7410,7411],{"href":7411,"rel":7412},"https:\u002F\u002Fwww.prettyclean.cc\u002Fen",[730],[225,7414,7416],{"id":7415},"betterdisplay","BetterDisplay",[15,7418,7419],{},"調整螢幕解析度、亮度、對比度等設定的工具",[15,7421,7020,7422],{},[726,7423,7424],{"href":7424,"rel":7425},"https:\u002F\u002Fgithub.com\u002Fwaydabber\u002FBetterDisplay",[730],[225,7427,7429],{"id":7428},"ntfstool","NTFSTool",[15,7431,7432],{},"在 macOS 上讀寫 NTFS 格式硬碟的工具",[15,7434,7020,7435],{},[726,7436,7437],{"href":7437,"rel":7438},"https:\u002F\u002Fntfstool.com",[730],[15,7440,7441,7442],{},"GitHub：",[726,7443,7444],{"href":7444,"rel":7445},"https:\u002F\u002Fgithub.com\u002Fntfstool\u002Fntfstool",[730],[225,7447,7449],{"id":7448},"landrop","LANDrop",[15,7451,7452],{},"在區域網路內傳輸檔案的工具，支援多種平台，包含 macOS、Windows、 Linux、Android 和 iOS。",[15,7454,7020,7455],{},[726,7456,7457],{"href":7457,"rel":7458},"https:\u002F\u002Flandrop.app",[730],[100,7460,7461],{"id":7461},"圖像處理",[15,7463,7464],{},[939,7465],{"alt":7461,"src":7466},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fpicture.png",[225,7468,7470],{"id":7469},"inkscape","Inkscape",[15,7472,7473],{},"開源的向量圖形編輯器，類似 Adobe Illustrator。",[15,7475,7020,7476],{},[726,7477,7478],{"href":7478,"rel":7479},"https:\u002F\u002Finkscape.org\u002F",[730],[225,7481,7482],{"id":7482},"krita",[15,7484,7485],{},"開源的繪圖軟體，適合數位繪畫和插圖創作，支援 PNG、JPEG 和 TIFF 等格式。",[15,7487,7020,7488],{},[726,7489,7490],{"href":7490,"rel":7491},"https:\u002F\u002Fkrita.org\u002Fzh-tw\u002F",[730],[225,7493,7495],{"id":7494},"photoscape-x","Photoscape X",[15,7497,7498],{},"免費的圖片編輯軟體，提供多種編輯工具和特效。",[15,7500,7020,7501],{},[726,7502,7503],{"href":7503,"rel":7504},"http:\u002F\u002Fx.photoscape.org",[730],[225,7506,7508],{"id":7507},"picture-view","Picture View",[15,7510,7511],{},"Picture View - 是一款輕巧快速的 macOS 圖片瀏覽應用程式。體積小巧，方便快速的檢視圖片，不產生緩存，適合作為預設看圖應用。多種看圖模式，操作方便快捷，支援查看EXIF訊息，支援防止系統休眠",[15,7513,7020,7514],{},[726,7515,7516],{"href":7516,"rel":7517},"https:\u002F\u002Fwl879.github.io\u002Fapps\u002Fpicview\u002Findex.html",[730],[225,7519,7521],{"id":7520},"itsycal","Itsycal",[15,7523,7524],{},"在選單列顯示小巧的日曆",[15,7526,7020,7527],{},[726,7528,7529],{"href":7529,"rel":7530},"https:\u002F\u002Fwww.mowglii.com\u002Fitsycal\u002F",[730],[100,7532,7534],{"id":7533},"ai工具","AI工具",[15,7536,7537],{},[939,7538],{"alt":7534,"src":7539},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002FAI.png",[225,7541,7542],{"id":7542},"ollama",[15,7544,7545,7546,1303,7549,1303,7552,7555],{},"在本地運行大型語言模型的工具，常見的開源模型如 ",[19,7547,7548],{},"LLama3",[19,7550,7551],{},"Phi4",[19,7553,7554],{},"gemma2","等。",[15,7557,7020,7558],{},[726,7559,7560],{"href":7560,"rel":7561},"https:\u002F\u002Follama.ai\u002F",[730],[225,7563,7565],{"id":7564},"chatbox-ai","Chatbox AI",[15,7567,7568],{},"Chatbox 是一款免費且開源的跨平台 AI 客戶端應用和智能助手，支援多種先進的 AI 模型和 API，旨在提升用戶的工作與學習效率。",[15,7570,7020,7571],{},[726,7572,7573],{"href":7573,"rel":7574},"https:\u002F\u002Fchatboxai.app\u002Fzh-TW",[730],[225,7576,7578],{"id":7577},"open-webui","Open WebUI",[15,7580,7581],{},"Open WebUI 是一款免費且開源的自託管 Web 使用者介面，旨在為大型語言模型（LLM）提供直觀且功能豐富的操作平台",[15,7583,7584,7585],{},"網址：",[726,7586,7587],{"href":7587,"rel":7588},"https:\u002F\u002Fopenwebui.com\u002F",[730],[225,7590,7592],{"id":7591},"pinokio","Pinokio",[15,7594,7595],{},"Pinokio 是一款免費且開源的 AI 應用管理工具，旨在簡化各種 AI 應用和模型的安裝與管理過程。",[15,7597,7598],{},"透過 Pinokio，用戶無需進行繁瑣的環境配置或使用終端命令，即可一鍵安裝和運行多種 AI 工具，如大型語言模型（LLM）、AI 繪畫、AI 語音、AI 視頻以及 AI 音樂等。",[15,7600,7584,7601],{},[726,7602,7603],{"href":7603,"rel":7604},"https:\u002F\u002Fpinokio.computer\u002F",[730],[225,7606,3087],{"id":7607},"upscayl",[15,7609,7610],{},"使用 AI 技術將圖像轉換為更清晰的版本，並添加更多的细節。Upscayl 是一個非常有用的工具，特別適合需要高質量圖像的人像。",[15,7612,7020,7613],{},[726,7614,7615],{"href":7615,"rel":7616},"https:\u002F\u002Fupscayl.org\u002F",[730],{"title":78,"searchDepth":79,"depth":79,"links":7618},[7619,7633,7638,7641,7644,7647,7650,7663,7670],{"id":711,"depth":79,"text":711,"children":7620},[7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631,7632],{"id":7013,"depth":314,"text":7014},{"id":7027,"depth":314,"text":7028},{"id":7040,"depth":314,"text":7041},{"id":7053,"depth":314,"text":7054},{"id":7066,"depth":314,"text":7067},{"id":7079,"depth":314,"text":7080},{"id":7092,"depth":314,"text":7093},{"id":7105,"depth":314,"text":7106},{"id":7118,"depth":314,"text":7119},{"id":7131,"depth":314,"text":7132},{"id":7144,"depth":314,"text":7145},{"id":7157,"depth":314,"text":7158},{"id":7170,"depth":79,"text":7170,"children":7634},[7635,7636,7637],{"id":7179,"depth":314,"text":7180},{"id":7192,"depth":314,"text":7193},{"id":7205,"depth":314,"text":7206},{"id":7218,"depth":79,"text":7218,"children":7639},[7640],{"id":7227,"depth":314,"text":7228},{"id":7240,"depth":79,"text":7240,"children":7642},[7643],{"id":7248,"depth":314,"text":7249},{"id":7261,"depth":79,"text":7262,"children":7645},[7646],{"id":7270,"depth":314,"text":7271},{"id":7283,"depth":79,"text":7283,"children":7648},[7649],{"id":7291,"depth":314,"text":7292},{"id":7304,"depth":79,"text":7304,"children":7651},[7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662],{"id":7312,"depth":314,"text":991},{"id":7324,"depth":314,"text":7325},{"id":7337,"depth":314,"text":7338},{"id":7350,"depth":314,"text":7351},{"id":7363,"depth":314,"text":7364},{"id":7376,"depth":314,"text":7377},{"id":7389,"depth":314,"text":7390},{"id":7402,"depth":314,"text":7403},{"id":7415,"depth":314,"text":7416},{"id":7428,"depth":314,"text":7429},{"id":7448,"depth":314,"text":7449},{"id":7461,"depth":79,"text":7461,"children":7664},[7665,7666,7667,7668,7669],{"id":7469,"depth":314,"text":7470},{"id":7482,"depth":314,"text":7482},{"id":7494,"depth":314,"text":7495},{"id":7507,"depth":314,"text":7508},{"id":7520,"depth":314,"text":7521},{"id":7533,"depth":79,"text":7534,"children":7671},[7672,7673,7674,7675,7676],{"id":7542,"depth":314,"text":7542},{"id":7564,"depth":314,"text":7565},{"id":7577,"depth":314,"text":7578},{"id":7591,"depth":314,"text":7592},{"id":7607,"depth":314,"text":3087},"\u002Fimages\u002Farticles\u002F2025-01-24-mac-os-app\u002Fcover.png",{},"\u002Farticles\u002F2025-01-24-mac-os-app","2025-01-24 18:30:00",{"title":6998,"description":7003},"articles\u002F2025-01-24-mac-os-app","整理目前自已常用 Mac App，包含開發工具、網路工具、筆記軟體、媒體播放器、壓縮\u002F解壓、密碼管理、系統管理、圖像處理及AI工具",[1410,1401],"N4MPdGJ1ZPhYGjQBN5k3ooU7PUeIDvfSyYFtfWfW1dY",{"id":7687,"title":7688,"body":7689,"category":7999,"description":78,"extension":83,"image":8000,"meta":8001,"navigation":86,"path":8002,"pubDate":8003,"seo":8004,"status":86,"stem":8005,"summary":8006,"tags":8007,"__hash__":8009},"content\u002Farticles\u002F2025-01-20-postgresql-materialzed-view.md","PostgreSQL 的高效查詢策略：利用 Materialized View 達成更快的回應速度",{"type":8,"value":7690,"toc":7985},[7691,7695,7705,7709,7712,7715,7741,7744,7804,7808,7822,7826,7829,7832,7852,7856,7863,7892,7895,7898,7919,7923,7930,7939,7943,7946,7977,7979,7982],[100,7692,7694],{"id":7693},"postgresql-view-檢視表-和-materialized-view-實體化檢視表","PostgreSQL VIEW (檢視表) 和 Materialized View (實體化檢視表)",[15,7696,7697,7698,3112,7701,7704],{},"PostgreSQL 提供了 ",[19,7699,7700],{},"VIEW",[19,7702,7703],{},"MATERIALIZED VIEW"," 兩種檢示表，分別用於查詢和儲存結果。",[225,7706,7708],{"id":7707},"view-檢視表","VIEW (檢視表)",[15,7710,7711],{},"是一種虛擬表，它會根據查詢語句來生成資料。當查詢時，PostgreSQL 會自動計算並返回結果集。",[15,7713,7714],{},"其優點如下：",[112,7716,7717,7723,7729,7735],{},[115,7718,7719,7722],{},[783,7720,7721],{},"簡化查詢","：將複雜查詢存為檢示表，可以簡化後續的查詢。",[115,7724,7725,7728],{},[783,7726,7727],{},"提高安全性","：檢視表可以避免直接對數據庫進行操作，提高了安全性，並可以限制用戶對數據資料的查詢權限。",[115,7730,7731,7734],{},[783,7732,7733],{},"可重用性","：檢視表可以被多次使用，而不需要重新計算。",[115,7736,7737,7740],{},[783,7738,7739],{},"節省空間","：不保存數據，節省空間。",[225,7742,7743],{"id":7743},"範例",[146,7745,7749],{"className":7746,"code":7747,"language":7748,"meta":78,"style":78},"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,7750,7751,7765,7788,7796],{"__ignoreMap":78},[154,7752,7753,7756,7759,7762],{"class":156,"line":157},[154,7754,7755],{"class":1067},"CREATE",[154,7757,7758],{"class":1067},"  VIEW",[154,7760,7761],{"class":160}," my_view",[154,7763,7764],{"class":1067}," AS\n",[154,7766,7767,7770,7773,7776,7778,7780,7782,7785],{"class":156,"line":79},[154,7768,7769],{"class":1067},"SELECT",[154,7771,7772],{"class":192}," column1, column2, ",[154,7774,7775],{"class":250},"COUNT",[154,7777,3897],{"class":192},[154,7779,4953],{"class":1067},[154,7781,5247],{"class":192},[154,7783,7784],{"class":1067},"AS",[154,7786,7787],{"class":192}," total_count\n",[154,7789,7790,7793],{"class":156,"line":314},[154,7791,7792],{"class":1067},"FROM",[154,7794,7795],{"class":192}," my_table\n",[154,7797,7798,7801],{"class":156,"line":320},[154,7799,7800],{"class":1067},"GROUP BY",[154,7802,7803],{"class":192}," column1, column2;\n",[225,7805,7807],{"id":7806},"view-的缺點","VIEW 的缺點",[112,7809,7810,7816],{},[115,7811,7812,7815],{},[783,7813,7814],{},"性能問題","：太複雜的檢示表查詢可能會影響性能。",[115,7817,7818,7821],{},[783,7819,7820],{},"無法建立索引","：檢視表本身不能直接建立索引，需要對原始數據進行索引。",[100,7823,7825],{"id":7824},"materialized-view-實體化檢視表","Materialized View (實體化檢視表)",[15,7827,7828],{},"Materialized View 是一種檢視表，它會在查詢時計算並儲存結果。這意味著當查詢 Materialized View 時，它會直接使用儲存的結果而不是重新計算。",[15,7830,7831],{},"其特點如下：",[112,7833,7834,7840,7846],{},[115,7835,7836,7839],{},[783,7837,7838],{},"資料存儲","：Materialized View 會在查詢時計算並儲存結果。這意味著當查詢 Materialized View 時，它會直接使用儲存的結果而不是重新計算。",[115,7841,7842,7845],{},[783,7843,7844],{},"性能優勢","：因為資料已經被計算好，所以查詢速度會更快，特別是複雜的查詢。",[115,7847,7848,7851],{},[783,7849,7850],{},"索引支持","：Materialized View 可以像普通表一樣建立索引，因此可以對檢視表進行高效的查詢操作。",[225,7853,7855],{"id":7854},"建立-materialized-view","建立 Materialized View",[15,7857,7858,7859,7862],{},"在 PostgreSQL 中，可以使用 ",[19,7860,7861],{},"CREATE MATERIALIZED VIEW"," 语句來建立 Materialized View。以下是一個簡單的示例：",[146,7864,7866],{"className":7746,"code":7865,"language":7748,"meta":78,"style":78},"CREATE MATERIALIZED VIEW my_materialized_view AS\nSELECT column1, column2, ...\nFROM my_table;\n",[19,7867,7868,7878,7885],{"__ignoreMap":78},[154,7869,7870,7872,7875],{"class":156,"line":157},[154,7871,7755],{"class":1067},[154,7873,7874],{"class":192}," MATERIALIZED VIEW my_materialized_view ",[154,7876,7877],{"class":1067},"AS\n",[154,7879,7880,7882],{"class":156,"line":79},[154,7881,7769],{"class":1067},[154,7883,7884],{"class":192}," column1, column2, ...\n",[154,7886,7887,7889],{"class":156,"line":314},[154,7888,7792],{"class":1067},[154,7890,7891],{"class":192}," my_table;\n",[225,7893,7894],{"id":7894},"建立索引",[15,7896,7897],{},"Materialized View 可以像普通表一樣建立索引，因此可以對檢視表進行高效的查詢操作。以下是一個示例：",[146,7899,7901],{"className":7746,"code":7900,"language":7748,"meta":78,"style":78},"CREATE INDEX idx_my_materialized_view_column1 ON my_materialized_view(column1);\n",[19,7902,7903],{"__ignoreMap":78},[154,7904,7905,7907,7910,7913,7916],{"class":156,"line":157},[154,7906,7755],{"class":1067},[154,7908,7909],{"class":1067}," INDEX",[154,7911,7912],{"class":160}," idx_my_materialized_view_column1",[154,7914,7915],{"class":1067}," ON",[154,7917,7918],{"class":192}," my_materialized_view(column1);\n",[225,7920,7922],{"id":7921},"更新-materialized-view","更新 Materialized View",[15,7924,7925,7926,7929],{},"Materialized View 會自動更新，當數據庫中的表發生更改時。你可以使用 ",[19,7927,7928],{},"REFRESH MATERIALIZED VIEW"," 语句來刷新 Materialized View：",[146,7931,7933],{"className":7746,"code":7932,"language":7748,"meta":78,"style":78},"REFRESH MATERIALIZED VIEW my_materialized_view;\n",[19,7934,7935],{"__ignoreMap":78},[154,7936,7937],{"class":156,"line":157},[154,7938,7932],{"class":192},[225,7940,7942],{"id":7941},"使用-materialized-view","使用 Materialized View",[15,7944,7945],{},"Materialized View 可以像普通表一樣使用，因此可以對檢視表進行高效的查詢操作。以下是一個示例：",[146,7947,7949],{"className":7746,"code":7948,"language":7748,"meta":78,"style":78},"SELECT * FROM my_materialized_view WHERE column1 = 'value';\n",[19,7950,7951],{"__ignoreMap":78},[154,7952,7953,7955,7958,7961,7964,7967,7970,7972,7975],{"class":156,"line":157},[154,7954,7769],{"class":1067},[154,7956,7957],{"class":1067}," *",[154,7959,7960],{"class":1067}," FROM",[154,7962,7963],{"class":192}," my_materialized_view ",[154,7965,7966],{"class":1067},"WHERE",[154,7968,7969],{"class":192}," column1 ",[154,7971,3457],{"class":1067},[154,7973,7974],{"class":163}," 'value'",[154,7976,3711],{"class":192},[100,7978,945],{"id":945},[15,7980,7981],{},"Materialized View 是一個非常有用的工具，它可以在數據庫中提供快速的查詢結果。通過使用索引和定期刷新，Materialized View 可以提高查詢性能，使應用程序更加高效。",[675,7983,7984],{},"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":78,"searchDepth":79,"depth":79,"links":7986},[7987,7992,7998],{"id":7693,"depth":79,"text":7694,"children":7988},[7989,7990,7991],{"id":7707,"depth":314,"text":7708},{"id":7743,"depth":314,"text":7743},{"id":7806,"depth":314,"text":7807},{"id":7824,"depth":79,"text":7825,"children":7993},[7994,7995,7996,7997],{"id":7854,"depth":314,"text":7855},{"id":7894,"depth":314,"text":7894},{"id":7921,"depth":314,"text":7922},{"id":7941,"depth":314,"text":7942},{"id":945,"depth":79,"text":945},"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":7688,"description":78},"articles\u002F2025-01-20-postgresql-materialzed-view","PostgreSQL Materialized View 是一種數據視圖，它會將查詢結果儲存到一個表中，以便在需要時快速訪問。",[8008],"Postgresql","OtEICcXMOXYLMC9l2mst1JtQEi3zUxzEx8O9Q062GcY",{"id":8011,"title":8012,"body":8013,"category":81,"description":78,"extension":83,"image":8053,"meta":8054,"navigation":86,"path":8055,"pubDate":8056,"seo":8057,"status":86,"stem":8058,"summary":8059,"tags":8060,"__hash__":8061},"content\u002Farticles\u002F2025-01-19-2025-new-theme.md","2025 新版型",{"type":8,"value":8014,"toc":8050},[8015,8017,8032,8041],[100,8016,13],{"id":13},[15,8018,8019,8020,8023,8024,8027,8028,8031],{},"年初時，我對自己的部落格進行了重新設計和結構化。這次重構依然採用了 ",[19,8021,8022],{},"Nuxt.js"," 和其 ",[19,8025,8026],{},"Nuxt\u002Fcontent"," 模組來管理文章內容，並利用 ",[19,8029,8030],{},"Tailwind CSS"," 進行樣式設定。",[15,8033,8034,8035,8037,8038,8040],{},"原本打算使用 ",[19,8036,8022],{}," V3 來完成此次更新，因為網站已經接近完成狀態。然而，在生成靜態頁面時遇到了一些問題，因此決定先以穩定的 ",[19,8039,8022],{}," V2 進行重構工作。",[15,8042,8043,8044,8046,8047,8049],{},"尽管如此，我仍將持續研究 ",[19,8045,8022],{}," V3 的相關功能，並期待將這些新特性引入到我的項目中。即使官方對 ",[19,8048,8022],{}," V2 還會提供安全更新，但許多令人興奮的新功能僅在 V3 中實現。",{"title":78,"searchDepth":79,"depth":79,"links":8051},[8052],{"id":13,"depth":79,"text":13},"\u002Fimages\u002Farticles\u002F2025-01-19-2025-new-theme\u002Fcover.png",{},"\u002Farticles\u002F2025-01-19-2025-new-theme","2025-01-19 22:48:30",{"title":8012,"description":78},"articles\u002F2025-01-19-2025-new-theme","替網站做了新版型，新版型回歸簡約風格",[81],"MsdGgluY9CLV2K69xHavUg9vNq1FVnQLpldIMwcohqI",{"id":8063,"title":8064,"body":8065,"category":700,"description":78,"extension":83,"image":8452,"meta":8453,"navigation":86,"path":8454,"pubDate":8455,"seo":8456,"status":86,"stem":8457,"summary":8458,"tags":8459,"__hash__":8460},"content\u002Farticles\u002F2024-06-07-ollama.md","用 ollama 來玩免費開源語言模型",{"type":8,"value":8066,"toc":8437},[8067,8069,8086,8089,8106,8110,8113,8117,8135,8139,8154,8157,8254,8258,8261,8294,8297,8336,8340,8355,8367,8410,8414,8426,8434],[100,8068,2651],{"id":2651},[15,8070,8071,8072,8075,8076,8075,8079,8075,8082,8085],{},"Ollama 是一個支持 ",[19,8073,8074],{},"Llama 3"," 、 ",[19,8077,8078],{},"Mistral",[19,8080,8081],{},"Gemma",[19,8083,8084],{},"Phi 3"," 等大型語言模型的框架，適用於 macOS、Windows、Linux 和 Docker。",[100,8087,8088],{"id":8088},"下載",[15,8090,8091,8092,8097,8098,8097,8102,1068],{},"下載位址：\n| ",[726,8093,8096],{"href":8094,"rel":8095},"https:\u002F\u002Follama.com\u002Fdownload\u002Fmac",[730],"MAC"," | ",[726,8099,3111],{"href":8100,"rel":8101},"https:\u002F\u002Follama.com\u002Fdownload\u002Flinux",[730],[726,8103,1515],{"href":8104,"rel":8105},"https:\u002F\u002Follama.com\u002Fdownload\u002Fwindows",[730],[225,8107,8109],{"id":8108},"windows-macos-安裝","Windows \u002F MacOS 安裝",[15,8111,8112],{},"依安裝精靈進行即可",[225,8114,8116],{"id":8115},"linux-在透過-curl-安裝","Linux 在透過 curl 安裝",[146,8118,8120],{"className":148,"code":8119,"language":150,"meta":78,"style":78},"curl -fsSL https:\u002F\u002Follama.com\u002Finstall.sh | sh\n",[19,8121,8122],{"__ignoreMap":78},[154,8123,8124,8126,8128,8131,8133],{"class":156,"line":157},[154,8125,1058],{"class":160},[154,8127,1061],{"class":250},[154,8129,8130],{"class":163}," https:\u002F\u002Follama.com\u002Finstall.sh",[154,8132,1068],{"class":1067},[154,8134,6170],{"class":160},[225,8136,8138],{"id":8137},"docker-安裝","Docker 安裝",[146,8140,8142],{"className":148,"code":8141,"language":150,"meta":78,"style":78},"docker pull ollama\u002Follama\n",[19,8143,8144],{"__ignoreMap":78},[154,8145,8146,8148,8151],{"class":156,"line":157},[154,8147,7092],{"class":160},[154,8149,8150],{"class":163}," pull",[154,8152,8153],{"class":163}," ollama\u002Follama\n",[100,8155,8156],{"id":8156},"快速開始",[259,8158,8159,8179,8200,8216,8237],{},[115,8160,8161,8162,8164,8165],{},"運行 ",[19,8163,8074],{}," 模型",[146,8166,8168],{"className":148,"code":8167,"language":150,"meta":78,"style":78},"ollama run llama3\n",[19,8169,8170],{"__ignoreMap":78},[154,8171,8172,8174,8176],{"class":156,"line":157},[154,8173,7542],{"class":160},[154,8175,2324],{"class":163},[154,8177,8178],{"class":163}," llama3\n",[115,8180,8181,8182,8194,8196],{},"查看所有支持的模型：",[146,8183,8185],{"className":148,"code":8184,"language":150,"meta":78,"style":78},"ollama list\n",[19,8186,8187],{"__ignoreMap":78},[154,8188,8189,8191],{"class":156,"line":157},[154,8190,7542],{"class":160},[154,8192,8193],{"class":163}," list\n",[5803,8195],{},[939,8197],{"alt":8198,"src":8199,"title":8198},"ollama list","\u002Fimages\u002Farticles\u002F2024-06-07-ollama\u002Follama-list.png",[115,8201,8202,8203],{},"拉取模型",[146,8204,8206],{"className":148,"code":8205,"language":150,"meta":78,"style":78},"ollama pull llama3\n",[19,8207,8208],{"__ignoreMap":78},[154,8209,8210,8212,8214],{"class":156,"line":157},[154,8211,7542],{"class":160},[154,8213,8150],{"class":163},[154,8215,8178],{"class":163},[115,8217,8218,8219],{},"複製模型",[146,8220,8222],{"className":148,"code":8221,"language":150,"meta":78,"style":78},"ollama cp llama3 my-model\n",[19,8223,8224],{"__ignoreMap":78},[154,8225,8226,8228,8231,8234],{"class":156,"line":157},[154,8227,7542],{"class":160},[154,8229,8230],{"class":163}," cp",[154,8232,8233],{"class":163}," llama3",[154,8235,8236],{"class":163}," my-model\n",[115,8238,8239,8240],{},"刪除模型",[146,8241,8243],{"className":148,"code":8242,"language":150,"meta":78,"style":78},"ollama rm llama3\n",[19,8244,8245],{"__ignoreMap":78},[154,8246,8247,8249,8252],{"class":156,"line":157},[154,8248,7542],{"class":160},[154,8250,8251],{"class":163}," rm",[154,8253,8178],{"class":163},[100,8255,8257],{"id":8256},"利用-rest-api","利用 REST API",[225,8259,8260],{"id":8260},"產生回應",[146,8262,8264],{"className":148,"code":8263,"language":150,"meta":78,"style":78},"curl http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate -d '{\n  \"model\": \"llama3\",\n  \"prompt\":\"Why is the sky blue?\"\n}'\n",[19,8265,8266,8279,8284,8289],{"__ignoreMap":78},[154,8267,8268,8270,8273,8276],{"class":156,"line":157},[154,8269,1058],{"class":160},[154,8271,8272],{"class":163}," http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fgenerate",[154,8274,8275],{"class":250}," -d",[154,8277,8278],{"class":163}," '{\n",[154,8280,8281],{"class":156,"line":79},[154,8282,8283],{"class":163},"  \"model\": \"llama3\",\n",[154,8285,8286],{"class":156,"line":314},[154,8287,8288],{"class":163},"  \"prompt\":\"Why is the sky blue?\"\n",[154,8290,8291],{"class":156,"line":320},[154,8292,8293],{"class":163},"}'\n",[225,8295,8296],{"id":8296},"使用一個模型聊天",[146,8298,8300],{"className":148,"code":8299,"language":150,"meta":78,"style":78},"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,8301,8302,8313,8317,8322,8327,8332],{"__ignoreMap":78},[154,8303,8304,8306,8309,8311],{"class":156,"line":157},[154,8305,1058],{"class":160},[154,8307,8308],{"class":163}," http:\u002F\u002Flocalhost:11434\u002Fapi\u002Fchat",[154,8310,8275],{"class":250},[154,8312,8278],{"class":163},[154,8314,8315],{"class":156,"line":79},[154,8316,8283],{"class":163},[154,8318,8319],{"class":156,"line":314},[154,8320,8321],{"class":163},"  \"messages\": [\n",[154,8323,8324],{"class":156,"line":320},[154,8325,8326],{"class":163},"    { \"role\": \"user\", \"content\": \"why is the sky blue?\" }\n",[154,8328,8329],{"class":156,"line":326},[154,8330,8331],{"class":163},"  ]\n",[154,8333,8334],{"class":156,"line":889},[154,8335,8293],{"class":163},[100,8337,8339],{"id":8338},"open-webui-圖型化介面","Open WebUI 圖型化介面",[15,8341,8342,8343,1237,8345,8347,8348,8351,8352,8354],{},"由於 ollama 是開源，所以有不少開源軟體，幫 ollama 製作圖型化介面。而目前站長推薦使用 ",[19,8344,7578],{},[19,8346,7578],{},"的操作介面和 ",[19,8349,8350],{},"chatGPT"," 很接近，是運行在 ",[19,8353,7092],{},"的環境下。",[15,8356,8357,8358,8360,8361,8363,8364,8366],{},"只要安裝好",[19,8359,7093],{},"的環境後和",[19,8362,7542],{},"的服務後，只要執行下列指令就可以開始玩",[19,8365,7542],{},"了",[146,8368,8370],{"className":148,"code":8369,"language":150,"meta":78,"style":78},"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,8371,8372],{"__ignoreMap":78},[154,8373,8374,8376,8378,8380,8383,8386,8389,8392,8395,8398,8401,8404,8407],{"class":156,"line":157},[154,8375,7092],{"class":160},[154,8377,2324],{"class":163},[154,8379,8275],{"class":250},[154,8381,8382],{"class":250}," -p",[154,8384,8385],{"class":163}," 3000:8080",[154,8387,8388],{"class":250}," --add-host=host.docker.internal:host-gateway",[154,8390,8391],{"class":250}," -v",[154,8393,8394],{"class":163}," open-webui:\u002Fapp\u002Fbackend\u002Fdata",[154,8396,8397],{"class":250}," --name",[154,8399,8400],{"class":163}," open-webui",[154,8402,8403],{"class":250}," --restart",[154,8405,8406],{"class":163}," always",[154,8408,8409],{"class":163}," ghcr.io\u002Fopen-webui\u002Fopen-webui:main\n",[100,8411,8413],{"id":8412},"使用-vscode-插件","使用 VScode 插件",[15,8415,8416,8417,8419,8420,8423,8424],{},"除了用 ",[19,8418,7578],{}," 之外，有在使用 ",[19,8421,8422],{},"VScode"," 編輯器，可以安裝下面插件，就可使用 ",[19,8425,7542],{},[15,8427,8428,8429],{},"插件網址： ",[726,8430,8433],{"href":8431,"rel":8432},"https:\u002F\u002Fwww.continue.dev\u002F",[730],"插件官網",[675,8435,8436],{},"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":78,"searchDepth":79,"depth":79,"links":8438},[8439,8440,8445,8446,8450,8451],{"id":2651,"depth":79,"text":2651},{"id":8088,"depth":79,"text":8088,"children":8441},[8442,8443,8444],{"id":8108,"depth":314,"text":8109},{"id":8115,"depth":314,"text":8116},{"id":8137,"depth":314,"text":8138},{"id":8156,"depth":79,"text":8156},{"id":8256,"depth":79,"text":8257,"children":8447},[8448,8449],{"id":8260,"depth":314,"text":8260},{"id":8296,"depth":314,"text":8296},{"id":8338,"depth":79,"text":8339},{"id":8412,"depth":79,"text":8413},"\u002Fimages\u002Farticles\u002F2024-06-07-ollama\u002Fcover.png",{},"\u002Farticles\u002F2024-06-07-ollama","2024-06-07 22:48:30",{"title":8064,"description":78},"articles\u002F2024-06-07-ollama","在 ChatGPT 問世後，大多數科技大廠都推出了自家的語言模型，而有不少開源模型出現。我們可以透過 OLLAMA 在自己的電腦中，建立私有的語言模型服務，並且能夠自由控制和定制模型的性能和功能。",[709,1401],"msNB0mNO6nmpAdDzC7_7HVLJFs6WFG8kMP_fzndMH6A",{"id":8462,"title":8463,"body":8464,"category":10023,"description":78,"extension":83,"image":10024,"meta":10025,"navigation":86,"path":10026,"pubDate":10027,"seo":10028,"status":86,"stem":10029,"summary":10030,"tags":10031,"__hash__":10032},"content\u002Farticles\u002F2023-10-04-php-carbon.md","【PHP】如何利用 nesbot\u002Fcarbon 處理日期和時間",{"type":8,"value":8465,"toc":10013},[8466,8468,8477,8492,8495,8554,8557,8565,8568,8672,8674,9498,9501,9550,9553,10010],[100,8467,2657],{"id":2657},[15,8469,2577,8470,8473,8474],{},[19,8471,8472],{},"composer"," 安裝 ",[19,8475,8476],{},"carbon",[146,8478,8480],{"className":148,"code":8479,"language":150,"meta":78,"style":78},"composer require nesbot\u002Fcarbon\n",[19,8481,8482],{"__ignoreMap":78},[154,8483,8484,8486,8489],{"class":156,"line":157},[154,8485,8472],{"class":160},[154,8487,8488],{"class":163}," require",[154,8490,8491],{"class":163}," nesbot\u002Fcarbon\n",[15,8493,8494],{},"簡易使用範例：",[146,8496,8500],{"className":8497,"code":8498,"language":8499,"meta":78,"style":78},"language-php shiki shiki-themes github-light github-dark github-dark","require 'vendor\u002Fautoload.php';\n\nuse Carbon\\Carbon;\n\nprintf(\"Now: %s\", Carbon::now());\n","php",[19,8501,8502,8512,8516,8526,8530],{"__ignoreMap":78},[154,8503,8504,8507,8510],{"class":156,"line":157},[154,8505,8506],{"class":1067},"require",[154,8508,8509],{"class":163}," 'vendor\u002Fautoload.php'",[154,8511,3711],{"class":192},[154,8513,8514],{"class":156,"line":79},[154,8515,317],{"emptyLinePlaceholder":86},[154,8517,8518,8521,8524],{"class":156,"line":314},[154,8519,8520],{"class":1067},"use",[154,8522,8523],{"class":250}," Carbon\\Carbon",[154,8525,3711],{"class":192},[154,8527,8528],{"class":156,"line":320},[154,8529,317],{"emptyLinePlaceholder":86},[154,8531,8532,8535,8537,8540,8542,8545,8548,8551],{"class":156,"line":326},[154,8533,8534],{"class":250},"printf",[154,8536,3897],{"class":192},[154,8538,8539],{"class":163},"\"Now: %s\"",[154,8541,4003],{"class":192},[154,8543,8544],{"class":250},"Carbon",[154,8546,8547],{"class":1067},"::",[154,8549,8550],{"class":160},"now",[154,8552,8553],{"class":192},"());\n",[100,8555,8556],{"id":8556},"日期格式化",[112,8558,8559],{},[115,8560,8561,8564],{},[19,8562,8563],{},"format($value)","：將日期時間進行格式化輸出，其中格式",[100,8566,8567],{"id":8567},"取得與調整時間",[112,8569,8570,8576,8582,8588,8594,8606,8617,8628,8639,8650,8661],{},[115,8571,8572,8575],{},[19,8573,8574],{},"now()","：獲得當前的日期與時間",[115,8577,8578,8581],{},[19,8579,8580],{},"today()","：獲得當天的日期",[115,8583,8584,8587],{},[19,8585,8586],{},"tomorrow()","：獲取明天的日期",[115,8589,8590,8593],{},[19,8591,8592],{},"yesterday()","：：獲取昨天的日期",[115,8595,8596,6030,8599,8602,8603],{},[19,8597,8598],{},"addYear($value)",[19,8600,8601],{},"subYear($value)","：將年份增加\u002F減少 ",[19,8604,8605],{},"$value",[115,8607,8608,6030,8611,8614,8615],{},[19,8609,8610],{},"addQuarter($value)",[19,8612,8613],{},"subQuarter($value)","：將季度增加\u002F減少 ",[19,8616,8605],{},[115,8618,8619,6030,8622,8625,8626],{},[19,8620,8621],{},"addMonth($value)",[19,8623,8624],{},"subMonth($value)","：將月份增加\u002F減少 ",[19,8627,8605],{},[115,8629,8630,6030,8633,8636,8637],{},[19,8631,8632],{},"addDay($value)",[19,8634,8635],{},"subDay($value)","：將天數增加\u002F減少 ",[19,8638,8605],{},[115,8640,8641,6030,8644,8647,8648],{},[19,8642,8643],{},"addHour($value)",[19,8645,8646],{},"subHour($value)","：將小時增加\u002F減少 ",[19,8649,8605],{},[115,8651,8652,6030,8655,8658,8659],{},[19,8653,8654],{},"addMinute($value)",[19,8656,8657],{},"subMinute($value)","：將分鐘增加\u002F減少 ",[19,8660,8605],{},[115,8662,8663,6030,8666,8669,8670],{},[19,8664,8665],{},"addSecond($value)",[19,8667,8668],{},"subSecond($value)","：將秒數增加\u002F減少 ",[19,8671,8605],{},[225,8673,7743],{"id":7743},[146,8675,8677],{"className":8497,"code":8676,"language":8499,"meta":78,"style":78},"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,8678,8679,8687,8691,8696,8701,8706,8720,8724,8729,8733,8737,8742,8746,8773,8777,8782,8786,8790,8795,8799,8803,8826,8830,8835,8839,8843,8848,8852,8856,8879,8883,8888,8892,8896,8901,8905,8909,8943,8952,8985,8989,8994,8998,9002,9007,9011,9015,9048,9056,9089,9093,9098,9102,9106,9111,9115,9148,9156,9189,9193,9198,9202,9206,9211,9215,9248,9256,9289,9293,9298,9302,9306,9311,9315,9348,9356,9389,9393,9398,9402,9406,9411,9415,9448,9456,9489,9493],{"__ignoreMap":78},[154,8680,8681,8683,8685],{"class":156,"line":157},[154,8682,8520],{"class":1067},[154,8684,8523],{"class":250},[154,8686,3711],{"class":192},[154,8688,8689],{"class":156,"line":79},[154,8690,317],{"emptyLinePlaceholder":86},[154,8692,8693],{"class":156,"line":314},[154,8694,8695],{"class":298},"\u002F**\n",[154,8697,8698],{"class":156,"line":320},[154,8699,8700],{"class":298}," * ：獲得當前的日期與時間\n",[154,8702,8703],{"class":156,"line":326},[154,8704,8705],{"class":298}," *\u002F\n",[154,8707,8708,8711,8714,8716,8718],{"class":156,"line":889},[154,8709,8710],{"class":250},"echo",[154,8712,8713],{"class":250}," Carbon",[154,8715,8547],{"class":1067},[154,8717,8550],{"class":160},[154,8719,5209],{"class":192},[154,8721,8722],{"class":156,"line":900},[154,8723,317],{"emptyLinePlaceholder":86},[154,8725,8726],{"class":156,"line":906},[154,8727,8728],{"class":298},"\u002F\u002F印出結果：2023-10-25 07:12:30\n",[154,8730,8731],{"class":156,"line":916},[154,8732,317],{"emptyLinePlaceholder":86},[154,8734,8735],{"class":156,"line":1648},[154,8736,8695],{"class":298},[154,8738,8739],{"class":156,"line":1654},[154,8740,8741],{"class":298}," * 獲得當天的日期\n",[154,8743,8744],{"class":156,"line":2151},[154,8745,8705],{"class":298},[154,8747,8748,8750,8752,8754,8757,8760,8763,8766,8768,8771],{"class":156,"line":2165},[154,8749,8710],{"class":250},[154,8751,8713],{"class":250},[154,8753,8547],{"class":1067},[154,8755,8756],{"class":160},"today",[154,8758,8759],{"class":192},"()",[154,8761,8762],{"class":1067},"->",[154,8764,8765],{"class":160},"format",[154,8767,3897],{"class":192},[154,8769,8770],{"class":163},"\"Y-m-d\"",[154,8772,3903],{"class":192},[154,8774,8775],{"class":156,"line":2178},[154,8776,317],{"emptyLinePlaceholder":86},[154,8778,8779],{"class":156,"line":2183},[154,8780,8781],{"class":298},"\u002F\u002F印出結果：2023-10-25\n",[154,8783,8784],{"class":156,"line":2189},[154,8785,317],{"emptyLinePlaceholder":86},[154,8787,8788],{"class":156,"line":2202},[154,8789,8695],{"class":298},[154,8791,8792],{"class":156,"line":2214},[154,8793,8794],{"class":298}," * 獲取明天的日期\n",[154,8796,8797],{"class":156,"line":2227},[154,8798,8705],{"class":298},[154,8800,8801],{"class":156,"line":2232},[154,8802,317],{"emptyLinePlaceholder":86},[154,8804,8805,8807,8809,8811,8814,8816,8818,8820,8822,8824],{"class":156,"line":2238},[154,8806,8710],{"class":250},[154,8808,8713],{"class":250},[154,8810,8547],{"class":1067},[154,8812,8813],{"class":160},"tomorrow",[154,8815,8759],{"class":192},[154,8817,8762],{"class":1067},[154,8819,8765],{"class":160},[154,8821,3897],{"class":192},[154,8823,8770],{"class":163},[154,8825,3903],{"class":192},[154,8827,8828],{"class":156,"line":2251},[154,8829,317],{"emptyLinePlaceholder":86},[154,8831,8832],{"class":156,"line":2262},[154,8833,8834],{"class":298},"\u002F\u002F印出結果：2023-10-26\n",[154,8836,8837],{"class":156,"line":2273},[154,8838,317],{"emptyLinePlaceholder":86},[154,8840,8841],{"class":156,"line":2278},[154,8842,8695],{"class":298},[154,8844,8845],{"class":156,"line":2284},[154,8846,8847],{"class":298}," * 獲取昨天的日期\n",[154,8849,8850],{"class":156,"line":2294},[154,8851,8705],{"class":298},[154,8853,8854],{"class":156,"line":2308},[154,8855,317],{"emptyLinePlaceholder":86},[154,8857,8858,8860,8862,8864,8867,8869,8871,8873,8875,8877],{"class":156,"line":2313},[154,8859,8710],{"class":250},[154,8861,8713],{"class":250},[154,8863,8547],{"class":1067},[154,8865,8866],{"class":160},"yesterday",[154,8868,8759],{"class":192},[154,8870,8762],{"class":1067},[154,8872,8765],{"class":160},[154,8874,3897],{"class":192},[154,8876,8770],{"class":163},[154,8878,3903],{"class":192},[154,8880,8881],{"class":156,"line":2319},[154,8882,317],{"emptyLinePlaceholder":86},[154,8884,8885],{"class":156,"line":2333},[154,8886,8887],{"class":298},"\u002F\u002F印出結果： 2023-10-24\n",[154,8889,8890],{"class":156,"line":2344},[154,8891,317],{"emptyLinePlaceholder":86},[154,8893,8894],{"class":156,"line":2355},[154,8895,8695],{"class":298},[154,8897,8898],{"class":156,"line":4294},[154,8899,8900],{"class":298}," * 將年份增加\u002F減少 `$value`\n",[154,8902,8903],{"class":156,"line":4326},[154,8904,8705],{"class":298},[154,8906,8907],{"class":156,"line":4337},[154,8908,317],{"emptyLinePlaceholder":86},[154,8910,8911,8913,8915,8917,8919,8921,8923,8926,8928,8930,8932,8934,8936,8938,8941],{"class":156,"line":4348},[154,8912,8710],{"class":250},[154,8914,8713],{"class":250},[154,8916,8547],{"class":1067},[154,8918,8550],{"class":160},[154,8920,8759],{"class":192},[154,8922,8762],{"class":1067},[154,8924,8925],{"class":160},"addYear",[154,8927,3897],{"class":192},[154,8929,3796],{"class":250},[154,8931,1091],{"class":192},[154,8933,8762],{"class":1067},[154,8935,8765],{"class":160},[154,8937,3897],{"class":192},[154,8939,8940],{"class":163},"\"Y-m-d H:i:s\"",[154,8942,3903],{"class":192},[154,8944,8945,8947,8950],{"class":156,"line":4359},[154,8946,8710],{"class":250},[154,8948,8949],{"class":163}," \" \u002F \"",[154,8951,3711],{"class":192},[154,8953,8954,8956,8958,8960,8962,8964,8966,8969,8971,8973,8975,8977,8979,8981,8983],{"class":156,"line":4370},[154,8955,8710],{"class":250},[154,8957,8713],{"class":250},[154,8959,8547],{"class":1067},[154,8961,8550],{"class":160},[154,8963,8759],{"class":192},[154,8965,8762],{"class":1067},[154,8967,8968],{"class":160},"subYear",[154,8970,3897],{"class":192},[154,8972,3796],{"class":250},[154,8974,1091],{"class":192},[154,8976,8762],{"class":1067},[154,8978,8765],{"class":160},[154,8980,3897],{"class":192},[154,8982,8940],{"class":163},[154,8984,3903],{"class":192},[154,8986,8987],{"class":156,"line":4381},[154,8988,317],{"emptyLinePlaceholder":86},[154,8990,8991],{"class":156,"line":4393},[154,8992,8993],{"class":298},"\u002F\u002F印出結果： 2024-10-25 07:30:52 \u002F 2022-10-25 07:30:52\n",[154,8995,8996],{"class":156,"line":4398},[154,8997,317],{"emptyLinePlaceholder":86},[154,8999,9000],{"class":156,"line":4403},[154,9001,8695],{"class":298},[154,9003,9004],{"class":156,"line":4410},[154,9005,9006],{"class":298}," * 將季度增加\u002F減少 `$value`\n",[154,9008,9009],{"class":156,"line":4421},[154,9010,8705],{"class":298},[154,9012,9013],{"class":156,"line":4446},[154,9014,317],{"emptyLinePlaceholder":86},[154,9016,9017,9019,9021,9023,9025,9027,9029,9032,9034,9036,9038,9040,9042,9044,9046],{"class":156,"line":4451},[154,9018,8710],{"class":250},[154,9020,8713],{"class":250},[154,9022,8547],{"class":1067},[154,9024,8550],{"class":160},[154,9026,8759],{"class":192},[154,9028,8762],{"class":1067},[154,9030,9031],{"class":160},"addQuarter",[154,9033,3897],{"class":192},[154,9035,3796],{"class":250},[154,9037,1091],{"class":192},[154,9039,8762],{"class":1067},[154,9041,8765],{"class":160},[154,9043,3897],{"class":192},[154,9045,8940],{"class":163},[154,9047,3903],{"class":192},[154,9049,9050,9052,9054],{"class":156,"line":4456},[154,9051,8710],{"class":250},[154,9053,8949],{"class":163},[154,9055,3711],{"class":192},[154,9057,9058,9060,9062,9064,9066,9068,9070,9073,9075,9077,9079,9081,9083,9085,9087],{"class":156,"line":4463},[154,9059,8710],{"class":250},[154,9061,8713],{"class":250},[154,9063,8547],{"class":1067},[154,9065,8550],{"class":160},[154,9067,8759],{"class":192},[154,9069,8762],{"class":1067},[154,9071,9072],{"class":160},"subQuarter",[154,9074,3897],{"class":192},[154,9076,3796],{"class":250},[154,9078,1091],{"class":192},[154,9080,8762],{"class":1067},[154,9082,8765],{"class":160},[154,9084,3897],{"class":192},[154,9086,8940],{"class":163},[154,9088,3903],{"class":192},[154,9090,9091],{"class":156,"line":4476},[154,9092,317],{"emptyLinePlaceholder":86},[154,9094,9095],{"class":156,"line":4481},[154,9096,9097],{"class":298},"\u002F\u002F印出結果：2024-01-25 07:31:57 \u002F 2023-07-25 07:31:57\n",[154,9099,9100],{"class":156,"line":4486},[154,9101,317],{"emptyLinePlaceholder":86},[154,9103,9104],{"class":156,"line":4491},[154,9105,8695],{"class":298},[154,9107,9108],{"class":156,"line":4501},[154,9109,9110],{"class":298}," * 將月份增加\u002F減少 `$value`\n",[154,9112,9113],{"class":156,"line":4542},[154,9114,8705],{"class":298},[154,9116,9117,9119,9121,9123,9125,9127,9129,9132,9134,9136,9138,9140,9142,9144,9146],{"class":156,"line":4553},[154,9118,8710],{"class":250},[154,9120,8713],{"class":250},[154,9122,8547],{"class":1067},[154,9124,8550],{"class":160},[154,9126,8759],{"class":192},[154,9128,8762],{"class":1067},[154,9130,9131],{"class":160},"subMonth",[154,9133,3897],{"class":192},[154,9135,3796],{"class":250},[154,9137,1091],{"class":192},[154,9139,8762],{"class":1067},[154,9141,8765],{"class":160},[154,9143,3897],{"class":192},[154,9145,8940],{"class":163},[154,9147,3903],{"class":192},[154,9149,9150,9152,9154],{"class":156,"line":4564},[154,9151,8710],{"class":250},[154,9153,8949],{"class":163},[154,9155,3711],{"class":192},[154,9157,9158,9160,9162,9164,9166,9168,9170,9173,9175,9177,9179,9181,9183,9185,9187],{"class":156,"line":4575},[154,9159,8710],{"class":250},[154,9161,8713],{"class":250},[154,9163,8547],{"class":1067},[154,9165,8550],{"class":160},[154,9167,8759],{"class":192},[154,9169,8762],{"class":1067},[154,9171,9172],{"class":160},"addMonth",[154,9174,3897],{"class":192},[154,9176,3796],{"class":250},[154,9178,1091],{"class":192},[154,9180,8762],{"class":1067},[154,9182,8765],{"class":160},[154,9184,3897],{"class":192},[154,9186,8940],{"class":163},[154,9188,3903],{"class":192},[154,9190,9191],{"class":156,"line":4586},[154,9192,317],{"emptyLinePlaceholder":86},[154,9194,9195],{"class":156,"line":4597},[154,9196,9197],{"class":298},"\u002F\u002F印出結果：2023-09-25 07:37:37 \u002F 2023-11-25 07:37:37\n",[154,9199,9200],{"class":156,"line":4608},[154,9201,317],{"emptyLinePlaceholder":86},[154,9203,9204],{"class":156,"line":4621},[154,9205,8695],{"class":298},[154,9207,9208],{"class":156,"line":4626},[154,9209,9210],{"class":298}," * 將天數增加\u002F減少 `$value`\n",[154,9212,9213],{"class":156,"line":4631},[154,9214,8705],{"class":298},[154,9216,9217,9219,9221,9223,9225,9227,9229,9232,9234,9236,9238,9240,9242,9244,9246],{"class":156,"line":4638},[154,9218,8710],{"class":250},[154,9220,8713],{"class":250},[154,9222,8547],{"class":1067},[154,9224,8550],{"class":160},[154,9226,8759],{"class":192},[154,9228,8762],{"class":1067},[154,9230,9231],{"class":160},"subDay",[154,9233,3897],{"class":192},[154,9235,3796],{"class":250},[154,9237,1091],{"class":192},[154,9239,8762],{"class":1067},[154,9241,8765],{"class":160},[154,9243,3897],{"class":192},[154,9245,8940],{"class":163},[154,9247,3903],{"class":192},[154,9249,9250,9252,9254],{"class":156,"line":4649},[154,9251,8710],{"class":250},[154,9253,8949],{"class":163},[154,9255,3711],{"class":192},[154,9257,9258,9260,9262,9264,9266,9268,9270,9273,9275,9277,9279,9281,9283,9285,9287],{"class":156,"line":4674},[154,9259,8710],{"class":250},[154,9261,8713],{"class":250},[154,9263,8547],{"class":1067},[154,9265,8550],{"class":160},[154,9267,8759],{"class":192},[154,9269,8762],{"class":1067},[154,9271,9272],{"class":160},"addDay",[154,9274,3897],{"class":192},[154,9276,3796],{"class":250},[154,9278,1091],{"class":192},[154,9280,8762],{"class":1067},[154,9282,8765],{"class":160},[154,9284,3897],{"class":192},[154,9286,8940],{"class":163},[154,9288,3903],{"class":192},[154,9290,9291],{"class":156,"line":4679},[154,9292,317],{"emptyLinePlaceholder":86},[154,9294,9295],{"class":156,"line":4684},[154,9296,9297],{"class":298},"\u002F\u002F印出結果：2023-10-24 07:38:45 \u002F 2023-10-26 07:38:45\n",[154,9299,9300],{"class":156,"line":4691},[154,9301,317],{"emptyLinePlaceholder":86},[154,9303,9304],{"class":156,"line":4704},[154,9305,8695],{"class":298},[154,9307,9308],{"class":156,"line":4709},[154,9309,9310],{"class":298}," * 將小時增加\u002F減少 `$value`\n",[154,9312,9313],{"class":156,"line":4714},[154,9314,8705],{"class":298},[154,9316,9317,9319,9321,9323,9325,9327,9329,9332,9334,9336,9338,9340,9342,9344,9346],{"class":156,"line":4719},[154,9318,8710],{"class":250},[154,9320,8713],{"class":250},[154,9322,8547],{"class":1067},[154,9324,8550],{"class":160},[154,9326,8759],{"class":192},[154,9328,8762],{"class":1067},[154,9330,9331],{"class":160},"subHour",[154,9333,3897],{"class":192},[154,9335,3796],{"class":250},[154,9337,1091],{"class":192},[154,9339,8762],{"class":1067},[154,9341,8765],{"class":160},[154,9343,3897],{"class":192},[154,9345,8940],{"class":163},[154,9347,3903],{"class":192},[154,9349,9350,9352,9354],{"class":156,"line":4771},[154,9351,8710],{"class":250},[154,9353,8949],{"class":163},[154,9355,3711],{"class":192},[154,9357,9358,9360,9362,9364,9366,9368,9370,9373,9375,9377,9379,9381,9383,9385,9387],{"class":156,"line":4784},[154,9359,8710],{"class":250},[154,9361,8713],{"class":250},[154,9363,8547],{"class":1067},[154,9365,8550],{"class":160},[154,9367,8759],{"class":192},[154,9369,8762],{"class":1067},[154,9371,9372],{"class":160},"addHour",[154,9374,3897],{"class":192},[154,9376,3796],{"class":250},[154,9378,1091],{"class":192},[154,9380,8762],{"class":1067},[154,9382,8765],{"class":160},[154,9384,3897],{"class":192},[154,9386,8940],{"class":163},[154,9388,3903],{"class":192},[154,9390,9391],{"class":156,"line":4796},[154,9392,317],{"emptyLinePlaceholder":86},[154,9394,9395],{"class":156,"line":4801},[154,9396,9397],{"class":298},"\u002F\u002F印出結果：2023-10-25 06:48:25 \u002F 2023-10-25 08:48:25\n",[154,9399,9400],{"class":156,"line":4812},[154,9401,317],{"emptyLinePlaceholder":86},[154,9403,9404],{"class":156,"line":4843},[154,9405,8695],{"class":298},[154,9407,9408],{"class":156,"line":4868},[154,9409,9410],{"class":298}," * 將秒數增加\u002F減少 `$value`\n",[154,9412,9413],{"class":156,"line":4889},[154,9414,8705],{"class":298},[154,9416,9417,9419,9421,9423,9425,9427,9429,9432,9434,9436,9438,9440,9442,9444,9446],{"class":156,"line":4913},[154,9418,8710],{"class":250},[154,9420,8713],{"class":250},[154,9422,8547],{"class":1067},[154,9424,8550],{"class":160},[154,9426,8759],{"class":192},[154,9428,8762],{"class":1067},[154,9430,9431],{"class":160},"subSecond",[154,9433,3897],{"class":192},[154,9435,3796],{"class":250},[154,9437,1091],{"class":192},[154,9439,8762],{"class":1067},[154,9441,8765],{"class":160},[154,9443,3897],{"class":192},[154,9445,8940],{"class":163},[154,9447,3903],{"class":192},[154,9449,9450,9452,9454],{"class":156,"line":4937},[154,9451,8710],{"class":250},[154,9453,8949],{"class":163},[154,9455,3711],{"class":192},[154,9457,9458,9460,9462,9464,9466,9468,9470,9473,9475,9477,9479,9481,9483,9485,9487],{"class":156,"line":4964},[154,9459,8710],{"class":250},[154,9461,8713],{"class":250},[154,9463,8547],{"class":1067},[154,9465,8550],{"class":160},[154,9467,8759],{"class":192},[154,9469,8762],{"class":1067},[154,9471,9472],{"class":160},"addSecond",[154,9474,3897],{"class":192},[154,9476,3796],{"class":250},[154,9478,1091],{"class":192},[154,9480,8762],{"class":1067},[154,9482,8765],{"class":160},[154,9484,3897],{"class":192},[154,9486,8940],{"class":163},[154,9488,3903],{"class":192},[154,9490,9491],{"class":156,"line":4979},[154,9492,317],{"emptyLinePlaceholder":86},[154,9494,9495],{"class":156,"line":4998},[154,9496,9497],{"class":298},"\u002F\u002F印出結果：2023-10-25 07:49:58 \u002F 2023-10-25 07:50:00\n",[100,9499,9500],{"id":9500},"比較時間",[112,9502,9503,9513,9521,9529,9537],{},[115,9504,9505,9508,9509,9512],{},[19,9506,9507],{},"eq($datetime)","：是否等於 ",[19,9510,9511],{},"$datetime","，回傳布林值",[115,9514,9515,9518,9519,9512],{},[19,9516,9517],{},"ne($datetime)","：是否不等於 ",[19,9520,9511],{},[115,9522,9523,9526,9527,9512],{},[19,9524,9525],{},"gt($datetime)","：是否大於 ",[19,9528,9511],{},[115,9530,9531,9534,9535,9512],{},[19,9532,9533],{},"lt($datetime)","：是否小於 ",[19,9536,9511],{},[115,9538,9539,9542,9543,1303,9546,9549],{},[19,9540,9541],{},"between($startTime, $endTime)","：是否介於 ",[19,9544,9545],{},"$startTime",[19,9547,9548],{},"$endTime"," 之間，回傳布林值",[225,9551,7743],{"id":9552},"範例-1",[146,9554,9556],{"className":8497,"code":9555,"language":8499,"meta":78,"style":78},"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,9557,9558,9566,9570,9574,9579,9583,9614,9619,9647,9652,9656,9660,9665,9669,9698,9702,9730,9734,9738,9742,9747,9751,9780,9784,9812,9816,9820,9824,9829,9833,9862,9866,9894,9898,9902,9906,9911,9915,9953,9958,10005],{"__ignoreMap":78},[154,9559,9560,9562,9564],{"class":156,"line":157},[154,9561,8520],{"class":1067},[154,9563,8523],{"class":250},[154,9565,3711],{"class":192},[154,9567,9568],{"class":156,"line":79},[154,9569,317],{"emptyLinePlaceholder":86},[154,9571,9572],{"class":156,"line":314},[154,9573,8695],{"class":298},[154,9575,9576],{"class":156,"line":320},[154,9577,9578],{"class":298}," * 比較兩個時間，是否相等\n",[154,9580,9581],{"class":156,"line":326},[154,9582,8705],{"class":298},[154,9584,9585,9588,9590,9592,9594,9596,9598,9600,9603,9605,9607,9609,9611],{"class":156,"line":889},[154,9586,9587],{"class":250},"var_dump",[154,9589,3897],{"class":192},[154,9591,8544],{"class":250},[154,9593,8547],{"class":1067},[154,9595,8756],{"class":160},[154,9597,8759],{"class":192},[154,9599,8762],{"class":1067},[154,9601,9602],{"class":160},"eq",[154,9604,3897],{"class":192},[154,9606,8544],{"class":250},[154,9608,8547],{"class":1067},[154,9610,8756],{"class":160},[154,9612,9613],{"class":192},"()));\n",[154,9615,9616],{"class":156,"line":900},[154,9617,9618],{"class":298},"\u002F\u002F印出結果：bool(true)\n",[154,9620,9621,9623,9625,9627,9629,9631,9633,9635,9637,9639,9641,9643,9645],{"class":156,"line":906},[154,9622,9587],{"class":250},[154,9624,3897],{"class":192},[154,9626,8544],{"class":250},[154,9628,8547],{"class":1067},[154,9630,8756],{"class":160},[154,9632,8759],{"class":192},[154,9634,8762],{"class":1067},[154,9636,9602],{"class":160},[154,9638,3897],{"class":192},[154,9640,8544],{"class":250},[154,9642,8547],{"class":1067},[154,9644,8550],{"class":160},[154,9646,9613],{"class":192},[154,9648,9649],{"class":156,"line":916},[154,9650,9651],{"class":298},"\u002F\u002F印出結果：bool(false)\n",[154,9653,9654],{"class":156,"line":1648},[154,9655,317],{"emptyLinePlaceholder":86},[154,9657,9658],{"class":156,"line":1654},[154,9659,8695],{"class":298},[154,9661,9662],{"class":156,"line":2151},[154,9663,9664],{"class":298}," * 比較兩個時間，是否不相等\n",[154,9666,9667],{"class":156,"line":2165},[154,9668,8705],{"class":298},[154,9670,9671,9673,9675,9677,9679,9681,9683,9685,9688,9690,9692,9694,9696],{"class":156,"line":2178},[154,9672,9587],{"class":250},[154,9674,3897],{"class":192},[154,9676,8544],{"class":250},[154,9678,8547],{"class":1067},[154,9680,8756],{"class":160},[154,9682,8759],{"class":192},[154,9684,8762],{"class":1067},[154,9686,9687],{"class":160},"ne",[154,9689,3897],{"class":192},[154,9691,8544],{"class":250},[154,9693,8547],{"class":1067},[154,9695,8756],{"class":160},[154,9697,9613],{"class":192},[154,9699,9700],{"class":156,"line":2183},[154,9701,9651],{"class":298},[154,9703,9704,9706,9708,9710,9712,9714,9716,9718,9720,9722,9724,9726,9728],{"class":156,"line":2189},[154,9705,9587],{"class":250},[154,9707,3897],{"class":192},[154,9709,8544],{"class":250},[154,9711,8547],{"class":1067},[154,9713,8756],{"class":160},[154,9715,8759],{"class":192},[154,9717,8762],{"class":1067},[154,9719,9687],{"class":160},[154,9721,3897],{"class":192},[154,9723,8544],{"class":250},[154,9725,8547],{"class":1067},[154,9727,8813],{"class":160},[154,9729,9613],{"class":192},[154,9731,9732],{"class":156,"line":2202},[154,9733,9618],{"class":298},[154,9735,9736],{"class":156,"line":2214},[154,9737,317],{"emptyLinePlaceholder":86},[154,9739,9740],{"class":156,"line":2227},[154,9741,8695],{"class":298},[154,9743,9744],{"class":156,"line":2232},[154,9745,9746],{"class":298}," * 比較兩個時間，是否大於\n",[154,9748,9749],{"class":156,"line":2238},[154,9750,8705],{"class":298},[154,9752,9753,9755,9757,9759,9761,9763,9765,9767,9770,9772,9774,9776,9778],{"class":156,"line":2251},[154,9754,9587],{"class":250},[154,9756,3897],{"class":192},[154,9758,8544],{"class":250},[154,9760,8547],{"class":1067},[154,9762,8813],{"class":160},[154,9764,8759],{"class":192},[154,9766,8762],{"class":1067},[154,9768,9769],{"class":160},"gt",[154,9771,3897],{"class":192},[154,9773,8544],{"class":250},[154,9775,8547],{"class":1067},[154,9777,8550],{"class":160},[154,9779,9613],{"class":192},[154,9781,9782],{"class":156,"line":2262},[154,9783,9618],{"class":298},[154,9785,9786,9788,9790,9792,9794,9796,9798,9800,9802,9804,9806,9808,9810],{"class":156,"line":2273},[154,9787,9587],{"class":250},[154,9789,3897],{"class":192},[154,9791,8544],{"class":250},[154,9793,8547],{"class":1067},[154,9795,8550],{"class":160},[154,9797,8759],{"class":192},[154,9799,8762],{"class":1067},[154,9801,9769],{"class":160},[154,9803,3897],{"class":192},[154,9805,8544],{"class":250},[154,9807,8547],{"class":1067},[154,9809,8813],{"class":160},[154,9811,9613],{"class":192},[154,9813,9814],{"class":156,"line":2278},[154,9815,9651],{"class":298},[154,9817,9818],{"class":156,"line":2284},[154,9819,317],{"emptyLinePlaceholder":86},[154,9821,9822],{"class":156,"line":2294},[154,9823,8695],{"class":298},[154,9825,9826],{"class":156,"line":2308},[154,9827,9828],{"class":298}," * 比較兩個時間，是否小於\n",[154,9830,9831],{"class":156,"line":2313},[154,9832,8705],{"class":298},[154,9834,9835,9837,9839,9841,9843,9845,9847,9849,9852,9854,9856,9858,9860],{"class":156,"line":2319},[154,9836,9587],{"class":250},[154,9838,3897],{"class":192},[154,9840,8544],{"class":250},[154,9842,8547],{"class":1067},[154,9844,8550],{"class":160},[154,9846,8759],{"class":192},[154,9848,8762],{"class":1067},[154,9850,9851],{"class":160},"lt",[154,9853,3897],{"class":192},[154,9855,8544],{"class":250},[154,9857,8547],{"class":1067},[154,9859,8813],{"class":160},[154,9861,9613],{"class":192},[154,9863,9864],{"class":156,"line":2333},[154,9865,9618],{"class":298},[154,9867,9868,9870,9872,9874,9876,9878,9880,9882,9884,9886,9888,9890,9892],{"class":156,"line":2344},[154,9869,9587],{"class":250},[154,9871,3897],{"class":192},[154,9873,8544],{"class":250},[154,9875,8547],{"class":1067},[154,9877,8813],{"class":160},[154,9879,8759],{"class":192},[154,9881,8762],{"class":1067},[154,9883,9851],{"class":160},[154,9885,3897],{"class":192},[154,9887,8544],{"class":250},[154,9889,8547],{"class":1067},[154,9891,8550],{"class":160},[154,9893,9613],{"class":192},[154,9895,9896],{"class":156,"line":2355},[154,9897,9651],{"class":298},[154,9899,9900],{"class":156,"line":4294},[154,9901,317],{"emptyLinePlaceholder":86},[154,9903,9904],{"class":156,"line":4326},[154,9905,8695],{"class":298},[154,9907,9908],{"class":156,"line":4337},[154,9909,9910],{"class":298}," * 是否介於 `$startTime`、`$endTime` 之間\n",[154,9912,9913],{"class":156,"line":4348},[154,9914,8705],{"class":298},[154,9916,9917,9919,9921,9923,9925,9927,9929,9931,9934,9936,9938,9940,9942,9945,9947,9949,9951],{"class":156,"line":4359},[154,9918,9587],{"class":250},[154,9920,3897],{"class":192},[154,9922,8544],{"class":250},[154,9924,8547],{"class":1067},[154,9926,8550],{"class":160},[154,9928,8759],{"class":192},[154,9930,8762],{"class":1067},[154,9932,9933],{"class":160},"between",[154,9935,3897],{"class":192},[154,9937,8544],{"class":250},[154,9939,8547],{"class":1067},[154,9941,8866],{"class":160},[154,9943,9944],{"class":192},"(), ",[154,9946,8544],{"class":250},[154,9948,8547],{"class":1067},[154,9950,8813],{"class":160},[154,9952,9613],{"class":192},[154,9954,9955],{"class":156,"line":4370},[154,9956,9957],{"class":298},"\u002F\u002F 印出結果：bool(true)\n",[154,9959,9960,9962,9964,9966,9968,9970,9972,9974,9976,9978,9981,9983,9985,9987,9989,9991,9993,9995,9997,9999,10001,10003],{"class":156,"line":4381},[154,9961,9587],{"class":250},[154,9963,3897],{"class":192},[154,9965,8544],{"class":250},[154,9967,8547],{"class":1067},[154,9969,8550],{"class":160},[154,9971,8759],{"class":192},[154,9973,8762],{"class":1067},[154,9975,9272],{"class":160},[154,9977,3897],{"class":192},[154,9979,9980],{"class":250},"2",[154,9982,1091],{"class":192},[154,9984,8762],{"class":1067},[154,9986,9933],{"class":160},[154,9988,3897],{"class":192},[154,9990,8544],{"class":250},[154,9992,8547],{"class":1067},[154,9994,8866],{"class":160},[154,9996,9944],{"class":192},[154,9998,8544],{"class":250},[154,10000,8547],{"class":1067},[154,10002,8813],{"class":160},[154,10004,9613],{"class":192},[154,10006,10007],{"class":156,"line":4393},[154,10008,10009],{"class":298},"\u002F\u002F 印出結果：bool(false)\n",[675,10011,10012],{},"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":78,"searchDepth":79,"depth":79,"links":10014},[10015,10016,10017,10020],{"id":2657,"depth":79,"text":2657},{"id":8556,"depth":79,"text":8556},{"id":8567,"depth":79,"text":8567,"children":10018},[10019],{"id":7743,"depth":314,"text":7743},{"id":9500,"depth":79,"text":9500,"children":10021},[10022],{"id":9552,"depth":314,"text":7743},"program","\u002Fimages\u002Farticles\u002F2023-10-04-php-carbon\u002Fcover.png",{},"\u002Farticles\u002F2023-10-04-php-carbon","2023-10-04 18:34:00",{"title":8463,"description":78},"articles\u002F2023-10-04-php-carbon","PHP語言在處理日期和時間時，Carbon 套件是一個非常有用的工具。Carbon 套件繼承了原生的 Datetime，並新增了許多語意化的行為，讓處理時間的難度降低許多。在這篇教學中，將會介紹 Carbon 套件的基本使用方法，以及如何在 PHP 中使用 Carbon 套件來處理日期和時間。",[8499],"Xh7cdroYoCQtQdwWDDM6GaqTsi98DBN_3I6O6Srqow4",{"id":10034,"title":10035,"body":10036,"category":10023,"description":78,"extension":83,"image":10114,"meta":10115,"navigation":86,"path":10116,"pubDate":10027,"seo":10117,"status":86,"stem":10118,"summary":10119,"tags":10120,"__hash__":10122},"content\u002Farticles\u002F2024-05-01-telegram-bot-get-chat-id.md","如何取得 Telegram Bot 所有的 Chat ID",{"type":8,"value":10037,"toc":10107},[10038,10042,10045,10049,10056,10061,10064,10068,10071,10075,10082,10086,10095],[100,10039,10041],{"id":10040},"步驟1-創建-telegram-bot-並獲取-api-token","步驟1: 創建 Telegram Bot 並獲取 API Token",[15,10043,10044],{},"首先,我們需要透過 Telegram 的 @BotFather 創建一個新的 Bot,並獲取該 Bot 的 API Token。API Token 是一個類似於 \"123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11\" 的字串,用於向 Telegram 的 API 服務器進行身份驗證。",[100,10046,10048],{"id":10047},"步驟2-使用-getupdates-方法獲取更新","步驟2: 使用 getUpdates 方法獲取更新",[15,10050,10051,10052],{},"接下來,我們可以在瀏覽器中訪問以下 URL,將 ",[10053,10054,10055],"token",{}," 替換為你的 API Token:",[15,10057,10058],{},[19,10059,10060],{},"https:\u002F\u002Fapi.telegram.org\u002Fbot\u003Ctoken>\u002FgetUpdates",[15,10062,10063],{},"這將返回一個 JSON 格式的數據,包含了最近的更新。",[100,10065,10067],{"id":10066},"步驟3-從更新中提取-chat-id","步驟3: 從更新中提取 Chat ID",[15,10069,10070],{},"在返回的 JSON 數據中,查找 \"result\" 數組。每個元素代表一個更新,其中包含 \"message\" 或 \"channel_post\" 對象。在這些對象中,可以找到 \"chat\" 對象,其 \"id\" 字段就是該會話的 Chat ID。\n對於私人會話,Chat ID 為正整數。對於群組,Chat ID 為負數,需要在前面加 \"-100\"。",[100,10072,10074],{"id":10073},"步驟4-儲存所有-chat-id","步驟4: 儲存所有 Chat ID",[15,10076,10077,10078,10081],{},"遍歷所有更新的 \"chat\" 對象,獲取並儲存所有的 Chat ID。需要注意的是,",[19,10079,10080],{},"getUpdates"," 只能獲取最近的更新,如果要獲取所有的 Chat ID,可能需要多次調用該方法。",[100,10083,10085],{"id":10084},"在-php-語言中如何快速取得","在 PHP 語言中，如何快速取得",[15,10087,10088,10089,10094],{},"可使用 ",[726,10090,10093],{"href":10091,"rel":10092},"https:\u002F\u002Fgithub.com\u002Fphp-telegram-bot\u002Fcore",[730],"php-telegram-bot\u002Fcore"," 這個套件處理。",[15,10096,10097,10098,10101,10102],{},"透過 Webhook 方式，使用 ",[19,10099,10100],{},"getupdates"," 函式來取得 chat id, 可參考 ",[726,10103,10106],{"href":10104,"rel":10105},"https:\u002F\u002Fgithub.com\u002Fphp-telegram-bot\u002Fcore?tab=readme-ov-file#getupdates-installation",[730],"官方教學",{"title":78,"searchDepth":79,"depth":79,"links":10108},[10109,10110,10111,10112,10113],{"id":10040,"depth":79,"text":10041},{"id":10047,"depth":79,"text":10048},{"id":10066,"depth":79,"text":10067},{"id":10073,"depth":79,"text":10074},{"id":10084,"depth":79,"text":10085},"\u002Fimages\u002Farticles\u002F2024-05-01-telegram-bot-get-chat-id\u002Fcover.png",{},"\u002Farticles\u002F2024-05-01-telegram-bot-get-chat-id",{"title":10035,"description":78},"articles\u002F2024-05-01-telegram-bot-get-chat-id","在開發 Telegram Bot 時,有時候我們需要獲取所有與 Bot 互動過的 Chat ID,無論是私人對話還是群組對話。取得這些 Chat ID 對於發送廣播消息或管理會話非常有用。本文將詳細介紹如何透過 Telegram Bot API 獲取所有的 Chat ID。",[10121,8499],"Telegram","NGatZI0ync1nfpUr5-l0cWDQlW30EzCC3zULFpvSyyw",{"id":10124,"title":10125,"body":10126,"category":10023,"description":78,"extension":83,"image":11006,"meta":11007,"navigation":86,"path":11008,"pubDate":11009,"seo":11010,"status":86,"stem":11011,"summary":11012,"tags":11013,"__hash__":11014},"content\u002Farticles\u002F2023-05-07-go-function.md","《Go 學習筆記6》函式",{"type":8,"value":10127,"toc":11002},[10128,10134,10137,10140,10201,10205,10337,10341,10362,10366,10414,10418,10547,10551,10560,10564,10569,10636,10640,10970,10974,10999],[10129,10130,10131],"blockquote",{},[15,10132,10133],{},"這是自學 Go lang 的筆記，若內容有誤，請留言區提醒，我會儘快改正，謝謝",[15,10135,10136],{},"在 Go 語中，為了可以重復使用某個程式碼片段，我們使用函式 (function) 來進實作。而在 Go 語言中，function 可以輸入多個參數值，也可以回傳多個參數值",[15,10138,10139],{},"##無 return 函式",[146,10141,10145],{"className":10142,"code":10143,"language":10144,"meta":78,"style":78},"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,10146,10147,10175,10180,10184,10188,10193],{"__ignoreMap":78},[154,10148,10149,10152,10155,10158,10161,10163,10166,10168,10170,10173],{"class":156,"line":157},[154,10150,10151],{"class":1067},"func",[154,10153,10154],{"class":192}," 函式名 (",[154,10156,10157],{"class":3999},"參數1",[154,10159,10160],{"class":160}," 變數型態",[154,10162,4003],{"class":192},[154,10164,10165],{"class":3999},"參數2",[154,10167,10160],{"class":160},[154,10169,4003],{"class":192},[154,10171,10172],{"class":1067},"...",[154,10174,4024],{"class":192},[154,10176,10177],{"class":156,"line":79},[154,10178,10179],{"class":298},"    \u002F\u002F執行程式片段\n",[154,10181,10182],{"class":156,"line":314},[154,10183,3776],{"class":192},[154,10185,10186],{"class":156,"line":320},[154,10187,317],{"emptyLinePlaceholder":86},[154,10189,10190],{"class":156,"line":326},[154,10191,10192],{"class":298},"\u002F\u002F呼叫方式\n",[154,10194,10195,10198],{"class":156,"line":889},[154,10196,10197],{"class":160},"函式名",[154,10199,10200],{"class":192},"(參數1, 參數2)\n",[15,10202,10203],{},[783,10204,7743],{},[146,10206,10208],{"className":10142,"code":10207,"language":10144,"meta":78,"style":78},"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,10209,10210,10218,10232,10241,10259,10263,10267,10292,10314,10333],{"__ignoreMap":78},[154,10211,10212,10215],{"class":156,"line":157},[154,10213,10214],{"class":1067},"package",[154,10216,10217],{"class":160}," main\n",[154,10219,10220,10223,10226,10229],{"class":156,"line":79},[154,10221,10222],{"class":1067},"import",[154,10224,10225],{"class":163}," \"",[154,10227,10228],{"class":160},"fmt",[154,10230,10231],{"class":163},"\"\n",[154,10233,10234,10236,10239],{"class":156,"line":314},[154,10235,10151],{"class":1067},[154,10237,10238],{"class":160}," main",[154,10240,4116],{"class":192},[154,10242,10243,10246,10248,10251,10253,10256],{"class":156,"line":320},[154,10244,10245],{"class":160},"    hello",[154,10247,3897],{"class":192},[154,10249,10250],{"class":163},"\"Allen\"",[154,10252,4003],{"class":192},[154,10254,10255],{"class":250},"23",[154,10257,10258],{"class":192},")\n",[154,10260,10261],{"class":156,"line":326},[154,10262,3776],{"class":192},[154,10264,10265],{"class":156,"line":889},[154,10266,317],{"emptyLinePlaceholder":86},[154,10268,10269,10271,10274,10276,10279,10282,10284,10287,10290],{"class":156,"line":900},[154,10270,10151],{"class":1067},[154,10272,10273],{"class":160}," hello",[154,10275,3897],{"class":192},[154,10277,10278],{"class":3999},"name",[154,10280,10281],{"class":1067}," string",[154,10283,4003],{"class":192},[154,10285,10286],{"class":3999},"age",[154,10288,10289],{"class":1067}," int8",[154,10291,4024],{"class":192},[154,10293,10294,10297,10300,10302,10305,10308,10311],{"class":156,"line":906},[154,10295,10296],{"class":192},"    fmt.",[154,10298,10299],{"class":160},"Printf",[154,10301,3897],{"class":192},[154,10303,10304],{"class":163},"\"Hello ",[154,10306,10307],{"class":250},"%s\\r\\n",[154,10309,10310],{"class":163},"\"",[154,10312,10313],{"class":192},", name)\n",[154,10315,10316,10318,10320,10322,10325,10328,10330],{"class":156,"line":916},[154,10317,10296],{"class":192},[154,10319,10299],{"class":160},[154,10321,3897],{"class":192},[154,10323,10324],{"class":163},"\"年紀 ",[154,10326,10327],{"class":250},"%d\\r\\n",[154,10329,10310],{"class":163},[154,10331,10332],{"class":192},", age)\n",[154,10334,10335],{"class":156,"line":1648},[154,10336,3776],{"class":192},[15,10338,10339],{},[783,10340,5790],{},[146,10342,10344],{"className":148,"code":10343,"language":150,"meta":78,"style":78},"Hello Allen\n年紀 23\n",[19,10345,10346,10354],{"__ignoreMap":78},[154,10347,10348,10351],{"class":156,"line":157},[154,10349,10350],{"class":160},"Hello",[154,10352,10353],{"class":163}," Allen\n",[154,10355,10356,10359],{"class":156,"line":79},[154,10357,10358],{"class":160},"年紀",[154,10360,10361],{"class":250}," 23\n",[100,10363,10365],{"id":10364},"return-函式","return 函式",[146,10367,10369],{"className":10142,"code":10368,"language":10144,"meta":78,"style":78},"func 函式名  (參數1 變數型態, 參數2 變數型態, ...) 回傳型態 {\n    \u002F\u002F執行程式片段\n    return 回傳值\n}\n",[19,10370,10371,10399,10403,10410],{"__ignoreMap":78},[154,10372,10373,10375,10378,10380,10382,10384,10386,10388,10390,10392,10394,10397],{"class":156,"line":157},[154,10374,10151],{"class":1067},[154,10376,10377],{"class":192}," 函式名  (",[154,10379,10157],{"class":3999},[154,10381,10160],{"class":160},[154,10383,4003],{"class":192},[154,10385,10165],{"class":3999},[154,10387,10160],{"class":160},[154,10389,4003],{"class":192},[154,10391,10172],{"class":1067},[154,10393,5247],{"class":192},[154,10395,10396],{"class":160},"回傳型態",[154,10398,3697],{"class":192},[154,10400,10401],{"class":156,"line":79},[154,10402,10179],{"class":298},[154,10404,10405,10407],{"class":156,"line":314},[154,10406,5085],{"class":1067},[154,10408,10409],{"class":192}," 回傳值\n",[154,10411,10412],{"class":156,"line":320},[154,10413,3776],{"class":192},[15,10415,10416],{},[783,10417,7743],{},[146,10419,10421],{"className":10142,"code":10420,"language":10144,"meta":78,"style":78},"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,10422,10423,10429,10439,10447,10474,10485,10489,10493,10526,10543],{"__ignoreMap":78},[154,10424,10425,10427],{"class":156,"line":157},[154,10426,10214],{"class":1067},[154,10428,10217],{"class":160},[154,10430,10431,10433,10435,10437],{"class":156,"line":79},[154,10432,10222],{"class":1067},[154,10434,10225],{"class":163},[154,10436,10228],{"class":160},[154,10438,10231],{"class":163},[154,10440,10441,10443,10445],{"class":156,"line":314},[154,10442,10151],{"class":1067},[154,10444,10238],{"class":160},[154,10446,4116],{"class":192},[154,10448,10449,10452,10455,10458,10460,10463,10465,10467,10469,10472],{"class":156,"line":320},[154,10450,10451],{"class":192},"    total ",[154,10453,10454],{"class":1067},":=",[154,10456,10457],{"class":160}," sum",[154,10459,3897],{"class":192},[154,10461,10462],{"class":250},"4",[154,10464,4003],{"class":192},[154,10466,9980],{"class":250},[154,10468,4003],{"class":192},[154,10470,10471],{"class":250},"3",[154,10473,10258],{"class":192},[154,10475,10476,10479,10482],{"class":156,"line":326},[154,10477,10478],{"class":192},"    fmt.",[154,10480,10481],{"class":160},"Println",[154,10483,10484],{"class":192},"(total)\n",[154,10486,10487],{"class":156,"line":889},[154,10488,3776],{"class":192},[154,10490,10491],{"class":156,"line":900},[154,10492,317],{"emptyLinePlaceholder":86},[154,10494,10495,10497,10499,10501,10503,10506,10508,10510,10512,10514,10517,10519,10521,10524],{"class":156,"line":906},[154,10496,10151],{"class":1067},[154,10498,10457],{"class":160},[154,10500,3897],{"class":192},[154,10502,4000],{"class":3999},[154,10504,10505],{"class":1067}," int",[154,10507,4003],{"class":192},[154,10509,4006],{"class":3999},[154,10511,10505],{"class":1067},[154,10513,4003],{"class":192},[154,10515,10516],{"class":3999},"z",[154,10518,10505],{"class":1067},[154,10520,5247],{"class":192},[154,10522,10523],{"class":1067},"int",[154,10525,3697],{"class":192},[154,10527,10528,10530,10533,10535,10538,10540],{"class":156,"line":916},[154,10529,5085],{"class":1067},[154,10531,10532],{"class":192}," x ",[154,10534,5096],{"class":1067},[154,10536,10537],{"class":192}," y ",[154,10539,5096],{"class":1067},[154,10541,10542],{"class":192}," z\n",[154,10544,10545],{"class":156,"line":1648},[154,10546,3776],{"class":192},[15,10548,10549],{},[783,10550,5790],{},[146,10552,10554],{"className":148,"code":10553,"language":150,"meta":78,"style":78},"9\n",[19,10555,10556],{"__ignoreMap":78},[154,10557,10558],{"class":156,"line":157},[154,10559,10553],{"class":160},[100,10561,10563],{"id":10562},"return-多個值","return 多個值",[15,10565,10566],{},[783,10567,10568],{},"格式",[146,10570,10572],{"className":10142,"code":10571,"language":10144,"meta":78,"style":78},"func 函式名  (參數1 變數型態, 參數2 變數型態, ...) (回傳型態1, 回傳型態2, 回傳型態3,...) {\n    \u002F\u002F執行程式片段1\n    return 回傳值1, 回傳值2, 回傳值3,...\n}\n",[19,10573,10574,10617,10622,10632],{"__ignoreMap":78},[154,10575,10576,10578,10580,10582,10584,10586,10588,10590,10592,10594,10597,10600,10602,10605,10607,10610,10613,10615],{"class":156,"line":157},[154,10577,10151],{"class":1067},[154,10579,10377],{"class":192},[154,10581,10157],{"class":3999},[154,10583,10160],{"class":160},[154,10585,4003],{"class":192},[154,10587,10165],{"class":3999},[154,10589,10160],{"class":160},[154,10591,4003],{"class":192},[154,10593,10172],{"class":1067},[154,10595,10596],{"class":192},") (",[154,10598,10599],{"class":160},"回傳型態1",[154,10601,4003],{"class":192},[154,10603,10604],{"class":160},"回傳型態2",[154,10606,4003],{"class":192},[154,10608,10609],{"class":160},"回傳型態3",[154,10611,10612],{"class":192},",",[154,10614,10172],{"class":1067},[154,10616,4024],{"class":192},[154,10618,10619],{"class":156,"line":79},[154,10620,10621],{"class":298},"    \u002F\u002F執行程式片段1\n",[154,10623,10624,10626,10629],{"class":156,"line":314},[154,10625,5085],{"class":1067},[154,10627,10628],{"class":192}," 回傳值1, 回傳值2, 回傳值3,",[154,10630,10631],{"class":1067},"...\n",[154,10633,10634],{"class":156,"line":320},[154,10635,3776],{"class":192},[15,10637,10638],{},[783,10639,7743],{},[146,10641,10643],{"className":10142,"code":10642,"language":10144,"meta":78,"style":78},"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,10644,10645,10651,10661,10665,10673,10684,10694,10704,10713,10722,10727,10740,10744,10757,10761,10778,10796,10815,10833,10837,10841,10845,10873,10895,10899,10903,10923,10936,10944,10954,10961,10966],{"__ignoreMap":78},[154,10646,10647,10649],{"class":156,"line":157},[154,10648,10214],{"class":1067},[154,10650,10217],{"class":160},[154,10652,10653,10655,10657,10659],{"class":156,"line":79},[154,10654,10222],{"class":1067},[154,10656,10225],{"class":163},[154,10658,10228],{"class":160},[154,10660,10231],{"class":163},[154,10662,10663],{"class":156,"line":314},[154,10664,317],{"emptyLinePlaceholder":86},[154,10666,10667,10669,10671],{"class":156,"line":320},[154,10668,10151],{"class":1067},[154,10670,10238],{"class":160},[154,10672,4116],{"class":192},[154,10674,10675,10678,10681],{"class":156,"line":326},[154,10676,10677],{"class":1067},"    var",[154,10679,10680],{"class":192}," name ",[154,10682,10683],{"class":1067},"string\n",[154,10685,10686,10688,10691],{"class":156,"line":889},[154,10687,10677],{"class":1067},[154,10689,10690],{"class":192}," sex ",[154,10692,10693],{"class":1067},"bool\n",[154,10695,10696,10698,10701],{"class":156,"line":900},[154,10697,10677],{"class":1067},[154,10699,10700],{"class":192}," height ",[154,10702,10703],{"class":1067},"float32\n",[154,10705,10706,10708,10711],{"class":156,"line":906},[154,10707,10677],{"class":1067},[154,10709,10710],{"class":192}," weight ",[154,10712,10703],{"class":1067},[154,10714,10715,10717,10720],{"class":156,"line":916},[154,10716,10677],{"class":1067},[154,10718,10719],{"class":192}," sexString ",[154,10721,10683],{"class":1067},[154,10723,10724],{"class":156,"line":1648},[154,10725,10726],{"class":192},"    \n",[154,10728,10729,10732,10734,10737],{"class":156,"line":1654},[154,10730,10731],{"class":192},"    name, sex, height, weight ",[154,10733,3457],{"class":1067},[154,10735,10736],{"class":160}," getPersonData",[154,10738,10739],{"class":192},"()\n",[154,10741,10742],{"class":156,"line":2151},[154,10743,317],{"emptyLinePlaceholder":86},[154,10745,10746,10749,10751,10754],{"class":156,"line":2165},[154,10747,10748],{"class":192},"    sexString ",[154,10750,3457],{"class":1067},[154,10752,10753],{"class":160}," getSexString",[154,10755,10756],{"class":192},"(sex)\n",[154,10758,10759],{"class":156,"line":2178},[154,10760,317],{"emptyLinePlaceholder":86},[154,10762,10763,10765,10767,10769,10772,10774,10776],{"class":156,"line":2183},[154,10764,10478],{"class":192},[154,10766,10299],{"class":160},[154,10768,3897],{"class":192},[154,10770,10771],{"class":163},"\"姓名：",[154,10773,10307],{"class":250},[154,10775,10310],{"class":163},[154,10777,10313],{"class":192},[154,10779,10780,10782,10784,10786,10789,10791,10793],{"class":156,"line":2189},[154,10781,10478],{"class":192},[154,10783,10299],{"class":160},[154,10785,3897],{"class":192},[154,10787,10788],{"class":163},"\"性別：",[154,10790,10307],{"class":250},[154,10792,10310],{"class":163},[154,10794,10795],{"class":192},", sexString)\n",[154,10797,10798,10800,10802,10804,10807,10810,10812],{"class":156,"line":2202},[154,10799,10478],{"class":192},[154,10801,10299],{"class":160},[154,10803,3897],{"class":192},[154,10805,10806],{"class":163},"\"身高：",[154,10808,10809],{"class":250},"%.2f\\r\\n",[154,10811,10310],{"class":163},[154,10813,10814],{"class":192},", height)\n",[154,10816,10817,10819,10821,10823,10826,10828,10830],{"class":156,"line":2214},[154,10818,10478],{"class":192},[154,10820,10299],{"class":160},[154,10822,3897],{"class":192},[154,10824,10825],{"class":163},"\"體重：",[154,10827,10809],{"class":250},[154,10829,10310],{"class":163},[154,10831,10832],{"class":192},", weight)\n",[154,10834,10835],{"class":156,"line":2227},[154,10836,3776],{"class":192},[154,10838,10839],{"class":156,"line":2232},[154,10840,317],{"emptyLinePlaceholder":86},[154,10842,10843],{"class":156,"line":2238},[154,10844,317],{"emptyLinePlaceholder":86},[154,10846,10847,10849,10851,10854,10857,10859,10862,10864,10867,10869,10871],{"class":156,"line":2251},[154,10848,10151],{"class":1067},[154,10850,10736],{"class":160},[154,10852,10853],{"class":192},"() (",[154,10855,10856],{"class":1067},"string",[154,10858,4003],{"class":192},[154,10860,10861],{"class":1067},"bool",[154,10863,4003],{"class":192},[154,10865,10866],{"class":1067},"float32",[154,10868,4003],{"class":192},[154,10870,10866],{"class":1067},[154,10872,4024],{"class":192},[154,10874,10875,10877,10880,10882,10885,10887,10890,10892],{"class":156,"line":2262},[154,10876,5085],{"class":1067},[154,10878,10879],{"class":163}," \"小明\"",[154,10881,4003],{"class":192},[154,10883,10884],{"class":250},"true",[154,10886,4003],{"class":192},[154,10888,10889],{"class":250},"175.0",[154,10891,4003],{"class":192},[154,10893,10894],{"class":250},"60.5\n",[154,10896,10897],{"class":156,"line":2273},[154,10898,3776],{"class":192},[154,10900,10901],{"class":156,"line":2278},[154,10902,317],{"emptyLinePlaceholder":86},[154,10904,10905,10907,10909,10911,10914,10917,10919,10921],{"class":156,"line":2284},[154,10906,10151],{"class":1067},[154,10908,10753],{"class":160},[154,10910,3897],{"class":192},[154,10912,10913],{"class":3999},"sex",[154,10915,10916],{"class":1067}," bool",[154,10918,5247],{"class":192},[154,10920,10856],{"class":1067},[154,10922,3697],{"class":192},[154,10924,10925,10927,10929,10932,10934],{"class":156,"line":2294},[154,10926,5623],{"class":1067},[154,10928,10690],{"class":192},[154,10930,10931],{"class":1067},"==",[154,10933,5615],{"class":250},[154,10935,3697],{"class":192},[154,10937,10938,10941],{"class":156,"line":2308},[154,10939,10940],{"class":1067},"        return",[154,10942,10943],{"class":163}," \"男\"\n",[154,10945,10946,10949,10952],{"class":156,"line":2313},[154,10947,10948],{"class":192},"    } ",[154,10950,10951],{"class":1067},"else",[154,10953,3697],{"class":192},[154,10955,10956,10958],{"class":156,"line":2319},[154,10957,10940],{"class":1067},[154,10959,10960],{"class":163}," \"女\"\n",[154,10962,10963],{"class":156,"line":2333},[154,10964,10965],{"class":192},"    }\n",[154,10967,10968],{"class":156,"line":2344},[154,10969,3776],{"class":192},[15,10971,10972],{},[783,10973,5790],{},[146,10975,10977],{"className":148,"code":10976,"language":150,"meta":78,"style":78},"姓名：小明\n性別：男\n身高：175.00\n體重：60.50\n",[19,10978,10979,10984,10989,10994],{"__ignoreMap":78},[154,10980,10981],{"class":156,"line":157},[154,10982,10983],{"class":160},"姓名：小明\n",[154,10985,10986],{"class":156,"line":79},[154,10987,10988],{"class":160},"性別：男\n",[154,10990,10991],{"class":156,"line":314},[154,10992,10993],{"class":160},"身高：175.00\n",[154,10995,10996],{"class":156,"line":320},[154,10997,10998],{"class":160},"體重：60.50\n",[675,11000,11001],{},"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":78,"searchDepth":79,"depth":79,"links":11003},[11004,11005],{"id":10364,"depth":79,"text":10365},{"id":10562,"depth":79,"text":10563},"\u002Fimages\u002Farticles\u002F2023-02-26-go-lang-setup\u002Fcover.png",{},"\u002Farticles\u002F2023-05-07-go-function","2023-04-07 22:34:00",{"title":10125,"description":78},"articles\u002F2023-05-07-go-function","這篇文章，會介紹 Go 語言中，function 的使用方式",[10144],"kPWUrG71WxLeaVN03IJAFQyE8rs9AzsGWm7HLFKYbUw",{"id":11016,"title":11017,"body":11018,"category":10023,"description":78,"extension":83,"image":11006,"meta":13855,"navigation":86,"path":13856,"pubDate":13857,"seo":13858,"status":86,"stem":13859,"summary":13860,"tags":13861,"__hash__":13862},"content\u002Farticles\u002F2023-03-28-flow control.md","《Go 學習筆記5》流程控制",{"type":8,"value":11019,"toc":13846},[11020,11024,11028,11032,11085,11089,11287,11291,11312,11315,11318,11322,11376,11380,11632,11636,11645,11649,11654,11675,11679,11757,11760,11935,11939,12879,12882,12885,13109,13113,13170,13173,13176,13476,13480,13592,13596,13605,13608,13615,13641,13646,13777,13781,13840,13843],[10129,11021,11022],{},[15,11023,10133],{},[100,11025,11027],{"id":11026},"if-判斷","if 判斷",[15,11029,11030],{},[783,11031,10568],{},[146,11033,11035],{"className":10142,"code":11034,"language":10144,"meta":78,"style":78},"if 條件1 {\n  \u002F\u002F若條件1成立，則執行此段程式\n} else if 條件2 {\n  \u002F\u002F若條件2成立，則執行此段程式\n} else {\n  \u002F\u002F若上述條件都位成立，則執行本段程式\n}\n",[19,11036,11037,11045,11050,11063,11068,11076,11081],{"__ignoreMap":78},[154,11038,11039,11042],{"class":156,"line":157},[154,11040,11041],{"class":1067},"if",[154,11043,11044],{"class":192}," 條件1 {\n",[154,11046,11047],{"class":156,"line":79},[154,11048,11049],{"class":298},"  \u002F\u002F若條件1成立，則執行此段程式\n",[154,11051,11052,11055,11057,11060],{"class":156,"line":314},[154,11053,11054],{"class":192},"} ",[154,11056,10951],{"class":1067},[154,11058,11059],{"class":1067}," if",[154,11061,11062],{"class":192}," 條件2 {\n",[154,11064,11065],{"class":156,"line":320},[154,11066,11067],{"class":298},"  \u002F\u002F若條件2成立，則執行此段程式\n",[154,11069,11070,11072,11074],{"class":156,"line":326},[154,11071,11054],{"class":192},[154,11073,10951],{"class":1067},[154,11075,3697],{"class":192},[154,11077,11078],{"class":156,"line":889},[154,11079,11080],{"class":298},"  \u002F\u002F若上述條件都位成立，則執行本段程式\n",[154,11082,11083],{"class":156,"line":900},[154,11084,3776],{"class":192},[15,11086,11087],{},[783,11088,7743],{},[146,11090,11092],{"className":10142,"code":11091,"language":10144,"meta":78,"style":78},"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,11093,11094,11100,11104,11114,11118,11126,11130,11139,11153,11167,11171,11185,11211,11227,11249,11257,11279,11283],{"__ignoreMap":78},[154,11095,11096,11098],{"class":156,"line":157},[154,11097,10214],{"class":1067},[154,11099,10217],{"class":160},[154,11101,11102],{"class":156,"line":79},[154,11103,317],{"emptyLinePlaceholder":86},[154,11105,11106,11108,11110,11112],{"class":156,"line":314},[154,11107,10222],{"class":1067},[154,11109,10225],{"class":163},[154,11111,10228],{"class":160},[154,11113,10231],{"class":163},[154,11115,11116],{"class":156,"line":320},[154,11117,317],{"emptyLinePlaceholder":86},[154,11119,11120,11122,11124],{"class":156,"line":326},[154,11121,10151],{"class":1067},[154,11123,10238],{"class":160},[154,11125,4116],{"class":192},[154,11127,11128],{"class":156,"line":889},[154,11129,317],{"emptyLinePlaceholder":86},[154,11131,11132,11134,11137],{"class":156,"line":900},[154,11133,10677],{"class":1067},[154,11135,11136],{"class":192}," grade ",[154,11138,10703],{"class":1067},[154,11140,11141,11143,11146,11148,11151],{"class":156,"line":906},[154,11142,10478],{"class":192},[154,11144,11145],{"class":160},"Print",[154,11147,3897],{"class":192},[154,11149,11150],{"class":163},"\"請輸入分數：\"",[154,11152,10258],{"class":192},[154,11154,11155,11157,11160,11162,11164],{"class":156,"line":916},[154,11156,10478],{"class":192},[154,11158,11159],{"class":160},"Scan",[154,11161,3897],{"class":192},[154,11163,6853],{"class":1067},[154,11165,11166],{"class":192},"grade)\n",[154,11168,11169],{"class":156,"line":1648},[154,11170,317],{"emptyLinePlaceholder":86},[154,11172,11173,11175,11177,11180,11183],{"class":156,"line":1654},[154,11174,5623],{"class":1067},[154,11176,11136],{"class":192},[154,11178,11179],{"class":1067},">=",[154,11181,11182],{"class":250}," 80",[154,11184,3697],{"class":192},[154,11186,11187,11190,11192,11194,11197,11200,11203,11206,11208],{"class":156,"line":2151},[154,11188,11189],{"class":192},"        fmt.",[154,11191,10299],{"class":160},[154,11193,3897],{"class":192},[154,11195,11196],{"class":163},"\"你的成績為：",[154,11198,11199],{"class":250},"%.2f",[154,11201,11202],{"class":163},"，成績不錯唷",[154,11204,11205],{"class":250},"\\r\\n",[154,11207,10310],{"class":163},[154,11209,11210],{"class":192},", grade)\n",[154,11212,11213,11215,11217,11219,11221,11223,11225],{"class":156,"line":2165},[154,11214,10948],{"class":192},[154,11216,10951],{"class":1067},[154,11218,11059],{"class":1067},[154,11220,11136],{"class":192},[154,11222,11179],{"class":1067},[154,11224,4752],{"class":250},[154,11226,3697],{"class":192},[154,11228,11229,11231,11233,11235,11238,11240,11243,11245,11247],{"class":156,"line":2178},[154,11230,11189],{"class":192},[154,11232,10299],{"class":160},[154,11234,3897],{"class":192},[154,11236,11237],{"class":163},"\"您的成積為 ",[154,11239,11199],{"class":250},[154,11241,11242],{"class":163}," ，恭喜你及格了",[154,11244,11205],{"class":250},[154,11246,10310],{"class":163},[154,11248,11210],{"class":192},[154,11250,11251,11253,11255],{"class":156,"line":2183},[154,11252,10948],{"class":192},[154,11254,10951],{"class":1067},[154,11256,3697],{"class":192},[154,11258,11259,11261,11263,11265,11268,11270,11273,11275,11277],{"class":156,"line":2189},[154,11260,11189],{"class":192},[154,11262,10299],{"class":160},[154,11264,3897],{"class":192},[154,11266,11267],{"class":163},"\"您的成績為 ",[154,11269,11199],{"class":250},[154,11271,11272],{"class":163}," ，不及格~再努力",[154,11274,11205],{"class":250},[154,11276,10310],{"class":163},[154,11278,11210],{"class":192},[154,11280,11281],{"class":156,"line":2202},[154,11282,4104],{"class":192},[154,11284,11285],{"class":156,"line":2214},[154,11286,3776],{"class":192},[15,11288,11289],{},[783,11290,5790],{},[146,11292,11294],{"className":148,"code":11293,"language":150,"meta":78,"style":78},"請輸入分數：59.99\n您的成績為 59.99 ，不及格~再努力\n",[19,11295,11296,11301],{"__ignoreMap":78},[154,11297,11298],{"class":156,"line":157},[154,11299,11300],{"class":160},"請輸入分數：59.99\n",[154,11302,11303,11306,11309],{"class":156,"line":79},[154,11304,11305],{"class":160},"您的成績為",[154,11307,11308],{"class":250}," 59.99",[154,11310,11311],{"class":163}," ，不及格~再努力\n",[100,11313,11314],{"id":11314},"switch",[15,11316,11317],{},"也是一個判斷語法，會依不用結執行該段程式",[15,11319,11320],{},[783,11321,10568],{},[146,11323,11325],{"className":10142,"code":11324,"language":10144,"meta":78,"style":78},"switch (判斷式) {\n    case value1:\n        \u002F\u002F程式片段1\n    case value2:\n        \u002F\u002F程式片段2\n    default:\n        \u002F\u002F若所有條件都不符合，則執行這個程式片段\n}\n    \n",[19,11326,11327,11334,11342,11347,11354,11359,11367,11372],{"__ignoreMap":78},[154,11328,11329,11331],{"class":156,"line":157},[154,11330,11314],{"class":1067},[154,11332,11333],{"class":192}," (判斷式) {\n",[154,11335,11336,11339],{"class":156,"line":79},[154,11337,11338],{"class":1067},"    case",[154,11340,11341],{"class":192}," value1:\n",[154,11343,11344],{"class":156,"line":314},[154,11345,11346],{"class":298},"        \u002F\u002F程式片段1\n",[154,11348,11349,11351],{"class":156,"line":320},[154,11350,11338],{"class":1067},[154,11352,11353],{"class":192}," value2:\n",[154,11355,11356],{"class":156,"line":326},[154,11357,11358],{"class":298},"        \u002F\u002F程式片段2\n",[154,11360,11361,11364],{"class":156,"line":889},[154,11362,11363],{"class":1067},"    default",[154,11365,11366],{"class":192},":\n",[154,11368,11369],{"class":156,"line":900},[154,11370,11371],{"class":298},"        \u002F\u002F若所有條件都不符合，則執行這個程式片段\n",[154,11373,11374],{"class":156,"line":906},[154,11375,3776],{"class":192},[15,11377,11378],{},[783,11379,7743],{},[146,11381,11383],{"className":10142,"code":11382,"language":10144,"meta":78,"style":78},"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,11384,11385,11391,11395,11402,11411,11420,11424,11428,11436,11451,11466,11474,11482,11495,11503,11516,11524,11537,11546,11559,11568,11581,11589,11602,11611,11624,11628],{"__ignoreMap":78},[154,11386,11387,11389],{"class":156,"line":157},[154,11388,10214],{"class":1067},[154,11390,10217],{"class":160},[154,11392,11393],{"class":156,"line":79},[154,11394,317],{"emptyLinePlaceholder":86},[154,11396,11397,11399],{"class":156,"line":314},[154,11398,10222],{"class":1067},[154,11400,11401],{"class":192}," (\n",[154,11403,11404,11407,11409],{"class":156,"line":320},[154,11405,11406],{"class":163},"    \"",[154,11408,10228],{"class":160},[154,11410,10231],{"class":163},[154,11412,11413,11415,11418],{"class":156,"line":326},[154,11414,11406],{"class":163},[154,11416,11417],{"class":160},"time",[154,11419,10231],{"class":163},[154,11421,11422],{"class":156,"line":889},[154,11423,10258],{"class":192},[154,11425,11426],{"class":156,"line":900},[154,11427,317],{"emptyLinePlaceholder":86},[154,11429,11430,11432,11434],{"class":156,"line":906},[154,11431,10151],{"class":1067},[154,11433,10238],{"class":160},[154,11435,4116],{"class":192},[154,11437,11438,11441,11443,11446,11449],{"class":156,"line":916},[154,11439,11440],{"class":192},"    now ",[154,11442,10454],{"class":1067},[154,11444,11445],{"class":192}," time.",[154,11447,11448],{"class":160},"Now",[154,11450,10739],{"class":192},[154,11452,11453,11456,11458,11461,11464],{"class":156,"line":1648},[154,11454,11455],{"class":192},"    week ",[154,11457,10454],{"class":1067},[154,11459,11460],{"class":192}," now.",[154,11462,11463],{"class":160},"Weekday",[154,11465,10739],{"class":192},[154,11467,11468,11471],{"class":156,"line":1654},[154,11469,11470],{"class":1067},"    switch",[154,11472,11473],{"class":192}," week {\n",[154,11475,11476,11478,11480],{"class":156,"line":2151},[154,11477,11338],{"class":1067},[154,11479,3012],{"class":250},[154,11481,11366],{"class":192},[154,11483,11484,11486,11488,11490,11493],{"class":156,"line":2165},[154,11485,11189],{"class":192},[154,11487,10481],{"class":160},[154,11489,3897],{"class":192},[154,11491,11492],{"class":163},"\"星期日\"",[154,11494,10258],{"class":192},[154,11496,11497,11499,11501],{"class":156,"line":2178},[154,11498,11338],{"class":1067},[154,11500,4927],{"class":250},[154,11502,11366],{"class":192},[154,11504,11505,11507,11509,11511,11514],{"class":156,"line":2183},[154,11506,11189],{"class":192},[154,11508,10481],{"class":160},[154,11510,3897],{"class":192},[154,11512,11513],{"class":163},"\"星期一\"",[154,11515,10258],{"class":192},[154,11517,11518,11520,11522],{"class":156,"line":2189},[154,11519,11338],{"class":1067},[154,11521,4739],{"class":250},[154,11523,11366],{"class":192},[154,11525,11526,11528,11530,11532,11535],{"class":156,"line":2202},[154,11527,11189],{"class":192},[154,11529,10481],{"class":160},[154,11531,3897],{"class":192},[154,11533,11534],{"class":163},"\"星期二\"",[154,11536,10258],{"class":192},[154,11538,11539,11541,11544],{"class":156,"line":2214},[154,11540,11338],{"class":1067},[154,11542,11543],{"class":250}," 3",[154,11545,11366],{"class":192},[154,11547,11548,11550,11552,11554,11557],{"class":156,"line":2227},[154,11549,11189],{"class":192},[154,11551,10481],{"class":160},[154,11553,3897],{"class":192},[154,11555,11556],{"class":163},"\"星期三\"",[154,11558,10258],{"class":192},[154,11560,11561,11563,11566],{"class":156,"line":2232},[154,11562,11338],{"class":1067},[154,11564,11565],{"class":250}," 4",[154,11567,11366],{"class":192},[154,11569,11570,11572,11574,11576,11579],{"class":156,"line":2238},[154,11571,11189],{"class":192},[154,11573,10481],{"class":160},[154,11575,3897],{"class":192},[154,11577,11578],{"class":163},"\"星期四\"",[154,11580,10258],{"class":192},[154,11582,11583,11585,11587],{"class":156,"line":2251},[154,11584,11338],{"class":1067},[154,11586,4097],{"class":250},[154,11588,11366],{"class":192},[154,11590,11591,11593,11595,11597,11600],{"class":156,"line":2262},[154,11592,11189],{"class":192},[154,11594,10481],{"class":160},[154,11596,3897],{"class":192},[154,11598,11599],{"class":163},"\"星期五\"",[154,11601,10258],{"class":192},[154,11603,11604,11606,11609],{"class":156,"line":2273},[154,11605,11338],{"class":1067},[154,11607,11608],{"class":250}," 6",[154,11610,11366],{"class":192},[154,11612,11613,11615,11617,11619,11622],{"class":156,"line":2278},[154,11614,11189],{"class":192},[154,11616,10481],{"class":160},[154,11618,3897],{"class":192},[154,11620,11621],{"class":163},"\"星期六\"",[154,11623,10258],{"class":192},[154,11625,11626],{"class":156,"line":2284},[154,11627,4104],{"class":192},[154,11629,11630],{"class":156,"line":2294},[154,11631,3776],{"class":192},[15,11633,11634],{},[783,11635,5790],{},[146,11637,11639],{"className":148,"code":11638,"language":150,"meta":78,"style":78},"星期二\n",[19,11640,11641],{"__ignoreMap":78},[154,11642,11643],{"class":156,"line":157},[154,11644,11638],{"class":160},[100,11646,11648],{"id":11647},"for-迴圈","for 迴圈",[15,11650,11651],{},[783,11652,11653],{},"基本格式",[146,11655,11657],{"className":10142,"code":11656,"language":10144,"meta":78,"style":78},"for 初始執行指令;布林判斷式;後執行指令 {\n    \u002F\u002F若布林判斷式為 true 則執行程式片段\n}\n",[19,11658,11659,11666,11671],{"__ignoreMap":78},[154,11660,11661,11663],{"class":156,"line":157},[154,11662,6736],{"class":1067},[154,11664,11665],{"class":192}," 初始執行指令;布林判斷式;後執行指令 {\n",[154,11667,11668],{"class":156,"line":79},[154,11669,11670],{"class":298},"    \u002F\u002F若布林判斷式為 true 則執行程式片段\n",[154,11672,11673],{"class":156,"line":314},[154,11674,3776],{"class":192},[15,11676,11677],{},[783,11678,7743],{},[146,11680,11682],{"className":10142,"code":11681,"language":10144,"meta":78,"style":78},"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,11683,11684,11690,11700,11708,11713,11740,11749,11753],{"__ignoreMap":78},[154,11685,11686,11688],{"class":156,"line":157},[154,11687,10214],{"class":1067},[154,11689,10217],{"class":160},[154,11691,11692,11694,11696,11698],{"class":156,"line":79},[154,11693,10222],{"class":1067},[154,11695,10225],{"class":163},[154,11697,10228],{"class":160},[154,11699,10231],{"class":163},[154,11701,11702,11704,11706],{"class":156,"line":314},[154,11703,10151],{"class":1067},[154,11705,10238],{"class":160},[154,11707,4116],{"class":192},[154,11709,11710],{"class":156,"line":320},[154,11711,11712],{"class":298},"    \u002F\u002F for 循環的基本形式\n",[154,11714,11715,11718,11721,11723,11725,11728,11730,11732,11735,11738],{"class":156,"line":326},[154,11716,11717],{"class":1067},"    for",[154,11719,11720],{"class":192}," i ",[154,11722,10454],{"class":1067},[154,11724,3012],{"class":250},[154,11726,11727],{"class":192},"; i ",[154,11729,3449],{"class":1067},[154,11731,4097],{"class":250},[154,11733,11734],{"class":192},"; i",[154,11736,11737],{"class":1067},"++",[154,11739,3697],{"class":192},[154,11741,11742,11744,11746],{"class":156,"line":889},[154,11743,11189],{"class":192},[154,11745,10481],{"class":160},[154,11747,11748],{"class":192},"(i)\n",[154,11750,11751],{"class":156,"line":900},[154,11752,4104],{"class":192},[154,11754,11755],{"class":156,"line":906},[154,11756,3776],{"class":192},[15,11758,11759],{},"九九乘法",[146,11761,11763],{"className":10142,"code":11762,"language":10144,"meta":78,"style":78},"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,11764,11765,11771,11781,11785,11793,11802,11810,11836,11861,11880,11910,11914,11927,11931],{"__ignoreMap":78},[154,11766,11767,11769],{"class":156,"line":157},[154,11768,10214],{"class":1067},[154,11770,10217],{"class":160},[154,11772,11773,11775,11777,11779],{"class":156,"line":79},[154,11774,10222],{"class":1067},[154,11776,10225],{"class":163},[154,11778,10228],{"class":160},[154,11780,10231],{"class":163},[154,11782,11783],{"class":156,"line":314},[154,11784,317],{"emptyLinePlaceholder":86},[154,11786,11787,11789,11791],{"class":156,"line":320},[154,11788,10151],{"class":1067},[154,11790,10238],{"class":160},[154,11792,4116],{"class":192},[154,11794,11795,11797,11799],{"class":156,"line":326},[154,11796,10677],{"class":1067},[154,11798,10532],{"class":192},[154,11800,11801],{"class":1067},"int\n",[154,11803,11804,11806,11808],{"class":156,"line":889},[154,11805,10677],{"class":1067},[154,11807,10537],{"class":192},[154,11809,11801],{"class":1067},[154,11811,11812,11814,11816,11818,11820,11823,11826,11829,11832,11834],{"class":156,"line":900},[154,11813,11717],{"class":1067},[154,11815,10532],{"class":192},[154,11817,3457],{"class":1067},[154,11819,4739],{"class":250},[154,11821,11822],{"class":192},"; x ",[154,11824,11825],{"class":1067},"\u003C=",[154,11827,11828],{"class":250}," 9",[154,11830,11831],{"class":192},"; x",[154,11833,11737],{"class":1067},[154,11835,3697],{"class":192},[154,11837,11838,11841,11843,11845,11847,11850,11852,11854,11857,11859],{"class":156,"line":906},[154,11839,11840],{"class":1067},"        for",[154,11842,10537],{"class":192},[154,11844,3457],{"class":1067},[154,11846,4927],{"class":250},[154,11848,11849],{"class":192},"; y ",[154,11851,11825],{"class":1067},[154,11853,11828],{"class":250},[154,11855,11856],{"class":192},"; y",[154,11858,11737],{"class":1067},[154,11860,3697],{"class":192},[154,11862,11863,11866,11869,11871,11873,11875,11877],{"class":156,"line":916},[154,11864,11865],{"class":1067},"            var",[154,11867,11868],{"class":192}," z ",[154,11870,10523],{"class":1067},[154,11872,3888],{"class":1067},[154,11874,10532],{"class":192},[154,11876,4953],{"class":1067},[154,11878,11879],{"class":192}," y\n",[154,11881,11882,11885,11887,11889,11891,11894,11897,11899,11902,11905,11907],{"class":156,"line":1648},[154,11883,11884],{"class":192},"            fmt.",[154,11886,10299],{"class":160},[154,11888,3897],{"class":192},[154,11890,10310],{"class":163},[154,11892,11893],{"class":250},"%d",[154,11895,11896],{"class":163}," X ",[154,11898,11893],{"class":250},[154,11900,11901],{"class":163}," = ",[154,11903,11904],{"class":250},"%d\\n",[154,11906,10310],{"class":163},[154,11908,11909],{"class":192},", x, y, z)\n",[154,11911,11912],{"class":156,"line":1654},[154,11913,4223],{"class":192},[154,11915,11916,11918,11920,11922,11925],{"class":156,"line":2151},[154,11917,11189],{"class":192},[154,11919,10481],{"class":160},[154,11921,3897],{"class":192},[154,11923,11924],{"class":163},"\"==============\"",[154,11926,10258],{"class":192},[154,11928,11929],{"class":156,"line":2165},[154,11930,4104],{"class":192},[154,11932,11933],{"class":156,"line":2178},[154,11934,3776],{"class":192},[15,11936,11937],{},[783,11938,5790],{},[146,11940,11942],{"className":148,"code":11941,"language":150,"meta":78,"style":78},"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,11943,11944,11958,11971,11984,11997,12010,12023,12037,12051,12064,12069,12081,12093,12106,12118,12131,12143,12156,12169,12182,12186,12198,12210,12222,12234,12247,12259,12272,12285,12298,12302,12314,12326,12338,12350,12363,12376,12389,12402,12415,12419,12432,12444,12456,12468,12480,12492,12505,12518,12531,12535,12547,12559,12571,12583,12595,12607,12620,12633,12646,12650,12663,12675,12687,12699,12711,12723,12735,12748,12761,12765,12778,12790,12802,12814,12826,12838,12850,12862,12875],{"__ignoreMap":78},[154,11945,11946,11948,11951,11953,11955],{"class":156,"line":157},[154,11947,9980],{"class":160},[154,11949,11950],{"class":163}," X",[154,11952,4927],{"class":250},[154,11954,3888],{"class":163},[154,11956,11957],{"class":250}," 2\n",[154,11959,11960,11962,11964,11966,11968],{"class":156,"line":79},[154,11961,9980],{"class":160},[154,11963,11950],{"class":163},[154,11965,4739],{"class":250},[154,11967,3888],{"class":163},[154,11969,11970],{"class":250}," 4\n",[154,11972,11973,11975,11977,11979,11981],{"class":156,"line":314},[154,11974,9980],{"class":160},[154,11976,11950],{"class":163},[154,11978,11543],{"class":250},[154,11980,3888],{"class":163},[154,11982,11983],{"class":250}," 6\n",[154,11985,11986,11988,11990,11992,11994],{"class":156,"line":320},[154,11987,9980],{"class":160},[154,11989,11950],{"class":163},[154,11991,11565],{"class":250},[154,11993,3888],{"class":163},[154,11995,11996],{"class":250}," 8\n",[154,11998,11999,12001,12003,12005,12007],{"class":156,"line":326},[154,12000,9980],{"class":160},[154,12002,11950],{"class":163},[154,12004,4097],{"class":250},[154,12006,3888],{"class":163},[154,12008,12009],{"class":250}," 10\n",[154,12011,12012,12014,12016,12018,12020],{"class":156,"line":889},[154,12013,9980],{"class":160},[154,12015,11950],{"class":163},[154,12017,11608],{"class":250},[154,12019,3888],{"class":163},[154,12021,12022],{"class":250}," 12\n",[154,12024,12025,12027,12029,12032,12034],{"class":156,"line":900},[154,12026,9980],{"class":160},[154,12028,11950],{"class":163},[154,12030,12031],{"class":250}," 7",[154,12033,3888],{"class":163},[154,12035,12036],{"class":250}," 14\n",[154,12038,12039,12041,12043,12046,12048],{"class":156,"line":906},[154,12040,9980],{"class":160},[154,12042,11950],{"class":163},[154,12044,12045],{"class":250}," 8",[154,12047,3888],{"class":163},[154,12049,12050],{"class":250}," 16\n",[154,12052,12053,12055,12057,12059,12061],{"class":156,"line":916},[154,12054,9980],{"class":160},[154,12056,11950],{"class":163},[154,12058,11828],{"class":250},[154,12060,3888],{"class":163},[154,12062,12063],{"class":250}," 18\n",[154,12065,12066],{"class":156,"line":1648},[154,12067,12068],{"class":163},"==============\n",[154,12070,12071,12073,12075,12077,12079],{"class":156,"line":1654},[154,12072,10471],{"class":160},[154,12074,11950],{"class":163},[154,12076,4927],{"class":250},[154,12078,3888],{"class":163},[154,12080,401],{"class":250},[154,12082,12083,12085,12087,12089,12091],{"class":156,"line":2151},[154,12084,10471],{"class":160},[154,12086,11950],{"class":163},[154,12088,4739],{"class":250},[154,12090,3888],{"class":163},[154,12092,11983],{"class":250},[154,12094,12095,12097,12099,12101,12103],{"class":156,"line":2165},[154,12096,10471],{"class":160},[154,12098,11950],{"class":163},[154,12100,11543],{"class":250},[154,12102,3888],{"class":163},[154,12104,12105],{"class":250}," 9\n",[154,12107,12108,12110,12112,12114,12116],{"class":156,"line":2178},[154,12109,10471],{"class":160},[154,12111,11950],{"class":163},[154,12113,11565],{"class":250},[154,12115,3888],{"class":163},[154,12117,12022],{"class":250},[154,12119,12120,12122,12124,12126,12128],{"class":156,"line":2183},[154,12121,10471],{"class":160},[154,12123,11950],{"class":163},[154,12125,4097],{"class":250},[154,12127,3888],{"class":163},[154,12129,12130],{"class":250}," 15\n",[154,12132,12133,12135,12137,12139,12141],{"class":156,"line":2189},[154,12134,10471],{"class":160},[154,12136,11950],{"class":163},[154,12138,11608],{"class":250},[154,12140,3888],{"class":163},[154,12142,12063],{"class":250},[154,12144,12145,12147,12149,12151,12153],{"class":156,"line":2202},[154,12146,10471],{"class":160},[154,12148,11950],{"class":163},[154,12150,12031],{"class":250},[154,12152,3888],{"class":163},[154,12154,12155],{"class":250}," 21\n",[154,12157,12158,12160,12162,12164,12166],{"class":156,"line":2214},[154,12159,10471],{"class":160},[154,12161,11950],{"class":163},[154,12163,12045],{"class":250},[154,12165,3888],{"class":163},[154,12167,12168],{"class":250}," 24\n",[154,12170,12171,12173,12175,12177,12179],{"class":156,"line":2227},[154,12172,10471],{"class":160},[154,12174,11950],{"class":163},[154,12176,11828],{"class":250},[154,12178,3888],{"class":163},[154,12180,12181],{"class":250}," 27\n",[154,12183,12184],{"class":156,"line":2232},[154,12185,12068],{"class":163},[154,12187,12188,12190,12192,12194,12196],{"class":156,"line":2238},[154,12189,10462],{"class":160},[154,12191,11950],{"class":163},[154,12193,4927],{"class":250},[154,12195,3888],{"class":163},[154,12197,11970],{"class":250},[154,12199,12200,12202,12204,12206,12208],{"class":156,"line":2251},[154,12201,10462],{"class":160},[154,12203,11950],{"class":163},[154,12205,4739],{"class":250},[154,12207,3888],{"class":163},[154,12209,11996],{"class":250},[154,12211,12212,12214,12216,12218,12220],{"class":156,"line":2262},[154,12213,10462],{"class":160},[154,12215,11950],{"class":163},[154,12217,11543],{"class":250},[154,12219,3888],{"class":163},[154,12221,12022],{"class":250},[154,12223,12224,12226,12228,12230,12232],{"class":156,"line":2273},[154,12225,10462],{"class":160},[154,12227,11950],{"class":163},[154,12229,11565],{"class":250},[154,12231,3888],{"class":163},[154,12233,12050],{"class":250},[154,12235,12236,12238,12240,12242,12244],{"class":156,"line":2278},[154,12237,10462],{"class":160},[154,12239,11950],{"class":163},[154,12241,4097],{"class":250},[154,12243,3888],{"class":163},[154,12245,12246],{"class":250}," 20\n",[154,12248,12249,12251,12253,12255,12257],{"class":156,"line":2284},[154,12250,10462],{"class":160},[154,12252,11950],{"class":163},[154,12254,11608],{"class":250},[154,12256,3888],{"class":163},[154,12258,12168],{"class":250},[154,12260,12261,12263,12265,12267,12269],{"class":156,"line":2294},[154,12262,10462],{"class":160},[154,12264,11950],{"class":163},[154,12266,12031],{"class":250},[154,12268,3888],{"class":163},[154,12270,12271],{"class":250}," 28\n",[154,12273,12274,12276,12278,12280,12282],{"class":156,"line":2308},[154,12275,10462],{"class":160},[154,12277,11950],{"class":163},[154,12279,12045],{"class":250},[154,12281,3888],{"class":163},[154,12283,12284],{"class":250}," 32\n",[154,12286,12287,12289,12291,12293,12295],{"class":156,"line":2313},[154,12288,10462],{"class":160},[154,12290,11950],{"class":163},[154,12292,11828],{"class":250},[154,12294,3888],{"class":163},[154,12296,12297],{"class":250}," 36\n",[154,12299,12300],{"class":156,"line":2319},[154,12301,12068],{"class":163},[154,12303,12304,12306,12308,12310,12312],{"class":156,"line":2333},[154,12305,5671],{"class":160},[154,12307,11950],{"class":163},[154,12309,4927],{"class":250},[154,12311,3888],{"class":163},[154,12313,335],{"class":250},[154,12315,12316,12318,12320,12322,12324],{"class":156,"line":2344},[154,12317,5671],{"class":160},[154,12319,11950],{"class":163},[154,12321,4739],{"class":250},[154,12323,3888],{"class":163},[154,12325,12009],{"class":250},[154,12327,12328,12330,12332,12334,12336],{"class":156,"line":2355},[154,12329,5671],{"class":160},[154,12331,11950],{"class":163},[154,12333,11543],{"class":250},[154,12335,3888],{"class":163},[154,12337,12130],{"class":250},[154,12339,12340,12342,12344,12346,12348],{"class":156,"line":4294},[154,12341,5671],{"class":160},[154,12343,11950],{"class":163},[154,12345,11565],{"class":250},[154,12347,3888],{"class":163},[154,12349,12246],{"class":250},[154,12351,12352,12354,12356,12358,12360],{"class":156,"line":4326},[154,12353,5671],{"class":160},[154,12355,11950],{"class":163},[154,12357,4097],{"class":250},[154,12359,3888],{"class":163},[154,12361,12362],{"class":250}," 25\n",[154,12364,12365,12367,12369,12371,12373],{"class":156,"line":4337},[154,12366,5671],{"class":160},[154,12368,11950],{"class":163},[154,12370,11608],{"class":250},[154,12372,3888],{"class":163},[154,12374,12375],{"class":250}," 30\n",[154,12377,12378,12380,12382,12384,12386],{"class":156,"line":4348},[154,12379,5671],{"class":160},[154,12381,11950],{"class":163},[154,12383,12031],{"class":250},[154,12385,3888],{"class":163},[154,12387,12388],{"class":250}," 35\n",[154,12390,12391,12393,12395,12397,12399],{"class":156,"line":4359},[154,12392,5671],{"class":160},[154,12394,11950],{"class":163},[154,12396,12045],{"class":250},[154,12398,3888],{"class":163},[154,12400,12401],{"class":250}," 40\n",[154,12403,12404,12406,12408,12410,12412],{"class":156,"line":4370},[154,12405,5671],{"class":160},[154,12407,11950],{"class":163},[154,12409,11828],{"class":250},[154,12411,3888],{"class":163},[154,12413,12414],{"class":250}," 45\n",[154,12416,12417],{"class":156,"line":4381},[154,12418,12068],{"class":163},[154,12420,12421,12424,12426,12428,12430],{"class":156,"line":4393},[154,12422,12423],{"class":160},"6",[154,12425,11950],{"class":163},[154,12427,4927],{"class":250},[154,12429,3888],{"class":163},[154,12431,11983],{"class":250},[154,12433,12434,12436,12438,12440,12442],{"class":156,"line":4398},[154,12435,12423],{"class":160},[154,12437,11950],{"class":163},[154,12439,4739],{"class":250},[154,12441,3888],{"class":163},[154,12443,12022],{"class":250},[154,12445,12446,12448,12450,12452,12454],{"class":156,"line":4403},[154,12447,12423],{"class":160},[154,12449,11950],{"class":163},[154,12451,11543],{"class":250},[154,12453,3888],{"class":163},[154,12455,12063],{"class":250},[154,12457,12458,12460,12462,12464,12466],{"class":156,"line":4410},[154,12459,12423],{"class":160},[154,12461,11950],{"class":163},[154,12463,11565],{"class":250},[154,12465,3888],{"class":163},[154,12467,12168],{"class":250},[154,12469,12470,12472,12474,12476,12478],{"class":156,"line":4421},[154,12471,12423],{"class":160},[154,12473,11950],{"class":163},[154,12475,4097],{"class":250},[154,12477,3888],{"class":163},[154,12479,12375],{"class":250},[154,12481,12482,12484,12486,12488,12490],{"class":156,"line":4446},[154,12483,12423],{"class":160},[154,12485,11950],{"class":163},[154,12487,11608],{"class":250},[154,12489,3888],{"class":163},[154,12491,12297],{"class":250},[154,12493,12494,12496,12498,12500,12502],{"class":156,"line":4451},[154,12495,12423],{"class":160},[154,12497,11950],{"class":163},[154,12499,12031],{"class":250},[154,12501,3888],{"class":163},[154,12503,12504],{"class":250}," 42\n",[154,12506,12507,12509,12511,12513,12515],{"class":156,"line":4456},[154,12508,12423],{"class":160},[154,12510,11950],{"class":163},[154,12512,12045],{"class":250},[154,12514,3888],{"class":163},[154,12516,12517],{"class":250}," 48\n",[154,12519,12520,12522,12524,12526,12528],{"class":156,"line":4463},[154,12521,12423],{"class":160},[154,12523,11950],{"class":163},[154,12525,11828],{"class":250},[154,12527,3888],{"class":163},[154,12529,12530],{"class":250}," 54\n",[154,12532,12533],{"class":156,"line":4476},[154,12534,12068],{"class":163},[154,12536,12537,12539,12541,12543,12545],{"class":156,"line":4481},[154,12538,5685],{"class":160},[154,12540,11950],{"class":163},[154,12542,4927],{"class":250},[154,12544,3888],{"class":163},[154,12546,254],{"class":250},[154,12548,12549,12551,12553,12555,12557],{"class":156,"line":4486},[154,12550,5685],{"class":160},[154,12552,11950],{"class":163},[154,12554,4739],{"class":250},[154,12556,3888],{"class":163},[154,12558,12036],{"class":250},[154,12560,12561,12563,12565,12567,12569],{"class":156,"line":4491},[154,12562,5685],{"class":160},[154,12564,11950],{"class":163},[154,12566,11543],{"class":250},[154,12568,3888],{"class":163},[154,12570,12155],{"class":250},[154,12572,12573,12575,12577,12579,12581],{"class":156,"line":4501},[154,12574,5685],{"class":160},[154,12576,11950],{"class":163},[154,12578,11565],{"class":250},[154,12580,3888],{"class":163},[154,12582,12271],{"class":250},[154,12584,12585,12587,12589,12591,12593],{"class":156,"line":4542},[154,12586,5685],{"class":160},[154,12588,11950],{"class":163},[154,12590,4097],{"class":250},[154,12592,3888],{"class":163},[154,12594,12388],{"class":250},[154,12596,12597,12599,12601,12603,12605],{"class":156,"line":4553},[154,12598,5685],{"class":160},[154,12600,11950],{"class":163},[154,12602,11608],{"class":250},[154,12604,3888],{"class":163},[154,12606,12504],{"class":250},[154,12608,12609,12611,12613,12615,12617],{"class":156,"line":4564},[154,12610,5685],{"class":160},[154,12612,11950],{"class":163},[154,12614,12031],{"class":250},[154,12616,3888],{"class":163},[154,12618,12619],{"class":250}," 49\n",[154,12621,12622,12624,12626,12628,12630],{"class":156,"line":4575},[154,12623,5685],{"class":160},[154,12625,11950],{"class":163},[154,12627,12045],{"class":250},[154,12629,3888],{"class":163},[154,12631,12632],{"class":250}," 56\n",[154,12634,12635,12637,12639,12641,12643],{"class":156,"line":4586},[154,12636,5685],{"class":160},[154,12638,11950],{"class":163},[154,12640,11828],{"class":250},[154,12642,3888],{"class":163},[154,12644,12645],{"class":250}," 63\n",[154,12647,12648],{"class":156,"line":4597},[154,12649,12068],{"class":163},[154,12651,12652,12655,12657,12659,12661],{"class":156,"line":4608},[154,12653,12654],{"class":160},"8",[154,12656,11950],{"class":163},[154,12658,4927],{"class":250},[154,12660,3888],{"class":163},[154,12662,11996],{"class":250},[154,12664,12665,12667,12669,12671,12673],{"class":156,"line":4621},[154,12666,12654],{"class":160},[154,12668,11950],{"class":163},[154,12670,4739],{"class":250},[154,12672,3888],{"class":163},[154,12674,12050],{"class":250},[154,12676,12677,12679,12681,12683,12685],{"class":156,"line":4626},[154,12678,12654],{"class":160},[154,12680,11950],{"class":163},[154,12682,11543],{"class":250},[154,12684,3888],{"class":163},[154,12686,12168],{"class":250},[154,12688,12689,12691,12693,12695,12697],{"class":156,"line":4631},[154,12690,12654],{"class":160},[154,12692,11950],{"class":163},[154,12694,11565],{"class":250},[154,12696,3888],{"class":163},[154,12698,12284],{"class":250},[154,12700,12701,12703,12705,12707,12709],{"class":156,"line":4638},[154,12702,12654],{"class":160},[154,12704,11950],{"class":163},[154,12706,4097],{"class":250},[154,12708,3888],{"class":163},[154,12710,12401],{"class":250},[154,12712,12713,12715,12717,12719,12721],{"class":156,"line":4649},[154,12714,12654],{"class":160},[154,12716,11950],{"class":163},[154,12718,11608],{"class":250},[154,12720,3888],{"class":163},[154,12722,12517],{"class":250},[154,12724,12725,12727,12729,12731,12733],{"class":156,"line":4674},[154,12726,12654],{"class":160},[154,12728,11950],{"class":163},[154,12730,12031],{"class":250},[154,12732,3888],{"class":163},[154,12734,12632],{"class":250},[154,12736,12737,12739,12741,12743,12745],{"class":156,"line":4679},[154,12738,12654],{"class":160},[154,12740,11950],{"class":163},[154,12742,12045],{"class":250},[154,12744,3888],{"class":163},[154,12746,12747],{"class":250}," 64\n",[154,12749,12750,12752,12754,12756,12758],{"class":156,"line":4684},[154,12751,12654],{"class":160},[154,12753,11950],{"class":163},[154,12755,11828],{"class":250},[154,12757,3888],{"class":163},[154,12759,12760],{"class":250}," 72\n",[154,12762,12763],{"class":156,"line":4691},[154,12764,12068],{"class":163},[154,12766,12767,12770,12772,12774,12776],{"class":156,"line":4704},[154,12768,12769],{"class":160},"9",[154,12771,11950],{"class":163},[154,12773,4927],{"class":250},[154,12775,3888],{"class":163},[154,12777,12105],{"class":250},[154,12779,12780,12782,12784,12786,12788],{"class":156,"line":4709},[154,12781,12769],{"class":160},[154,12783,11950],{"class":163},[154,12785,4739],{"class":250},[154,12787,3888],{"class":163},[154,12789,12063],{"class":250},[154,12791,12792,12794,12796,12798,12800],{"class":156,"line":4714},[154,12793,12769],{"class":160},[154,12795,11950],{"class":163},[154,12797,11543],{"class":250},[154,12799,3888],{"class":163},[154,12801,12181],{"class":250},[154,12803,12804,12806,12808,12810,12812],{"class":156,"line":4719},[154,12805,12769],{"class":160},[154,12807,11950],{"class":163},[154,12809,11565],{"class":250},[154,12811,3888],{"class":163},[154,12813,12297],{"class":250},[154,12815,12816,12818,12820,12822,12824],{"class":156,"line":4771},[154,12817,12769],{"class":160},[154,12819,11950],{"class":163},[154,12821,4097],{"class":250},[154,12823,3888],{"class":163},[154,12825,12414],{"class":250},[154,12827,12828,12830,12832,12834,12836],{"class":156,"line":4784},[154,12829,12769],{"class":160},[154,12831,11950],{"class":163},[154,12833,11608],{"class":250},[154,12835,3888],{"class":163},[154,12837,12530],{"class":250},[154,12839,12840,12842,12844,12846,12848],{"class":156,"line":4796},[154,12841,12769],{"class":160},[154,12843,11950],{"class":163},[154,12845,12031],{"class":250},[154,12847,3888],{"class":163},[154,12849,12645],{"class":250},[154,12851,12852,12854,12856,12858,12860],{"class":156,"line":4801},[154,12853,12769],{"class":160},[154,12855,11950],{"class":163},[154,12857,12045],{"class":250},[154,12859,3888],{"class":163},[154,12861,12760],{"class":250},[154,12863,12864,12866,12868,12870,12872],{"class":156,"line":4812},[154,12865,12769],{"class":160},[154,12867,11950],{"class":163},[154,12869,11828],{"class":250},[154,12871,3888],{"class":163},[154,12873,12874],{"class":250}," 81\n",[154,12876,12877],{"class":156,"line":4843},[154,12878,12068],{"class":163},[225,12880,12881],{"id":12881},"break",[15,12883,12884],{},"用於跳出整個迴圈，結束迴圈的執行",[146,12886,12888],{"className":10142,"code":12887,"language":10144,"meta":78,"style":78},"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,12889,12890,12896,12900,12906,12914,12923,12931,12935,12939,12947,12951,12960,12964,12988,12992,13019,13023,13038,13042,13062,13066,13079,13084,13088,13092,13101,13105],{"__ignoreMap":78},[154,12891,12892,12894],{"class":156,"line":157},[154,12893,10214],{"class":1067},[154,12895,10217],{"class":160},[154,12897,12898],{"class":156,"line":79},[154,12899,317],{"emptyLinePlaceholder":86},[154,12901,12902,12904],{"class":156,"line":314},[154,12903,10222],{"class":1067},[154,12905,11401],{"class":192},[154,12907,12908,12910,12912],{"class":156,"line":320},[154,12909,11406],{"class":163},[154,12911,10228],{"class":160},[154,12913,10231],{"class":163},[154,12915,12916,12918,12921],{"class":156,"line":326},[154,12917,11406],{"class":163},[154,12919,12920],{"class":160},"math\u002Frand",[154,12922,10231],{"class":163},[154,12924,12925,12927,12929],{"class":156,"line":889},[154,12926,11406],{"class":163},[154,12928,11417],{"class":160},[154,12930,10231],{"class":163},[154,12932,12933],{"class":156,"line":900},[154,12934,10258],{"class":192},[154,12936,12937],{"class":156,"line":906},[154,12938,317],{"emptyLinePlaceholder":86},[154,12940,12941,12943,12945],{"class":156,"line":916},[154,12942,10151],{"class":1067},[154,12944,10238],{"class":160},[154,12946,4116],{"class":192},[154,12948,12949],{"class":156,"line":1648},[154,12950,317],{"emptyLinePlaceholder":86},[154,12952,12953,12955,12958],{"class":156,"line":1654},[154,12954,10677],{"class":1067},[154,12956,12957],{"class":192}," index ",[154,12959,11801],{"class":1067},[154,12961,12962],{"class":156,"line":2151},[154,12963,317],{"emptyLinePlaceholder":86},[154,12965,12966,12968,12970,12972,12974,12977,12979,12981,12984,12986],{"class":156,"line":2165},[154,12967,11717],{"class":1067},[154,12969,12957],{"class":192},[154,12971,3457],{"class":1067},[154,12973,3012],{"class":250},[154,12975,12976],{"class":192},"; index ",[154,12978,3449],{"class":1067},[154,12980,2875],{"class":250},[154,12982,12983],{"class":192},"; index",[154,12985,11737],{"class":1067},[154,12987,3697],{"class":192},[154,12989,12990],{"class":156,"line":2178},[154,12991,317],{"emptyLinePlaceholder":86},[154,12993,12994,12997,12999,13002,13005,13008,13010,13013,13016],{"class":156,"line":2183},[154,12995,12996],{"class":192},"        seed ",[154,12998,10454],{"class":1067},[154,13000,13001],{"class":192}," rand.",[154,13003,13004],{"class":160},"NewSource",[154,13006,13007],{"class":192},"(time.",[154,13009,11448],{"class":160},[154,13011,13012],{"class":192},"().",[154,13014,13015],{"class":160},"UnixNano",[154,13017,13018],{"class":192},"())\n",[154,13020,13021],{"class":156,"line":2189},[154,13022,317],{"emptyLinePlaceholder":86},[154,13024,13025,13028,13030,13032,13035],{"class":156,"line":2202},[154,13026,13027],{"class":192},"        rNum ",[154,13029,10454],{"class":1067},[154,13031,13001],{"class":192},[154,13033,13034],{"class":160},"New",[154,13036,13037],{"class":192},"(seed)\n",[154,13039,13040],{"class":156,"line":2214},[154,13041,317],{"emptyLinePlaceholder":86},[154,13043,13044,13047,13049,13052,13055,13057,13060],{"class":156,"line":2227},[154,13045,13046],{"class":192},"        num ",[154,13048,10454],{"class":1067},[154,13050,13051],{"class":192}," rNum.",[154,13053,13054],{"class":160},"Intn",[154,13056,3897],{"class":192},[154,13058,13059],{"class":250},"100",[154,13061,10258],{"class":192},[154,13063,13064],{"class":156,"line":2232},[154,13065,317],{"emptyLinePlaceholder":86},[154,13067,13068,13070,13073,13075,13077],{"class":156,"line":2238},[154,13069,4180],{"class":1067},[154,13071,13072],{"class":192}," num ",[154,13074,4199],{"class":1067},[154,13076,4752],{"class":250},[154,13078,3697],{"class":192},[154,13080,13081],{"class":156,"line":2251},[154,13082,13083],{"class":1067},"            break\n",[154,13085,13086],{"class":156,"line":2262},[154,13087,4223],{"class":192},[154,13089,13090],{"class":156,"line":2273},[154,13091,317],{"emptyLinePlaceholder":86},[154,13093,13094,13096,13098],{"class":156,"line":2278},[154,13095,11189],{"class":192},[154,13097,10481],{"class":160},[154,13099,13100],{"class":192},"(index, num)\n",[154,13102,13103],{"class":156,"line":2284},[154,13104,4104],{"class":192},[154,13106,13107],{"class":156,"line":2294},[154,13108,3776],{"class":192},[15,13110,13111],{},[783,13112,5790],{},[146,13114,13116],{"className":148,"code":13115,"language":150,"meta":78,"style":78},"0 26\n1 19\n2 59\n3 45\n4 14\n5 25\n6 50\n7 14\n",[19,13117,13118,13125,13132,13139,13145,13151,13157,13164],{"__ignoreMap":78},[154,13119,13120,13122],{"class":156,"line":157},[154,13121,3757],{"class":160},[154,13123,13124],{"class":250}," 26\n",[154,13126,13127,13129],{"class":156,"line":79},[154,13128,3796],{"class":160},[154,13130,13131],{"class":250}," 19\n",[154,13133,13134,13136],{"class":156,"line":314},[154,13135,9980],{"class":160},[154,13137,13138],{"class":250}," 59\n",[154,13140,13141,13143],{"class":156,"line":320},[154,13142,10471],{"class":160},[154,13144,12414],{"class":250},[154,13146,13147,13149],{"class":156,"line":326},[154,13148,10462],{"class":160},[154,13150,12036],{"class":250},[154,13152,13153,13155],{"class":156,"line":889},[154,13154,5671],{"class":160},[154,13156,12362],{"class":250},[154,13158,13159,13161],{"class":156,"line":900},[154,13160,12423],{"class":160},[154,13162,13163],{"class":250}," 50\n",[154,13165,13166,13168],{"class":156,"line":906},[154,13167,5685],{"class":160},[154,13169,12036],{"class":250},[225,13171,13172],{"id":13172},"continue",[15,13174,13175],{},"用於跳過當前迴圈的剩餘部分，直接進入下一次迴圈的執行",[146,13177,13179],{"className":10142,"code":13178,"language":10144,"meta":78,"style":78},"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,13180,13181,13187,13191,13197,13205,13213,13221,13225,13229,13235,13251,13265,13279,13283,13287,13295,13303,13325,13345,13357,13373,13377,13389,13420,13425,13429,13433,13464,13468,13472],{"__ignoreMap":78},[154,13182,13183,13185],{"class":156,"line":157},[154,13184,10214],{"class":1067},[154,13186,10217],{"class":160},[154,13188,13189],{"class":156,"line":79},[154,13190,317],{"emptyLinePlaceholder":86},[154,13192,13193,13195],{"class":156,"line":314},[154,13194,10222],{"class":1067},[154,13196,11401],{"class":192},[154,13198,13199,13201,13203],{"class":156,"line":320},[154,13200,11406],{"class":163},[154,13202,10228],{"class":160},[154,13204,10231],{"class":163},[154,13206,13207,13209,13211],{"class":156,"line":326},[154,13208,11406],{"class":163},[154,13210,12920],{"class":160},[154,13212,10231],{"class":163},[154,13214,13215,13217,13219],{"class":156,"line":889},[154,13216,11406],{"class":163},[154,13218,11417],{"class":160},[154,13220,10231],{"class":163},[154,13222,13223],{"class":156,"line":900},[154,13224,10258],{"class":192},[154,13226,13227],{"class":156,"line":906},[154,13228,317],{"emptyLinePlaceholder":86},[154,13230,13231,13233],{"class":156,"line":916},[154,13232,3882],{"class":1067},[154,13234,11401],{"class":192},[154,13236,13237,13240,13243,13245,13248],{"class":156,"line":1648},[154,13238,13239],{"class":250},"    RED",[154,13241,13242],{"class":1067},"   =",[154,13244,10225],{"class":163},[154,13246,13247],{"class":250},"\\x1b",[154,13249,13250],{"class":163},"[31m\"\n",[154,13252,13253,13256,13258,13260,13262],{"class":156,"line":1654},[154,13254,13255],{"class":250},"    GREEN",[154,13257,3888],{"class":1067},[154,13259,10225],{"class":163},[154,13261,13247],{"class":250},[154,13263,13264],{"class":163},"[32m\"\n",[154,13266,13267,13270,13272,13274,13276],{"class":156,"line":2151},[154,13268,13269],{"class":250},"    RESET",[154,13271,3888],{"class":1067},[154,13273,10225],{"class":163},[154,13275,13247],{"class":250},[154,13277,13278],{"class":163},"[0m\"\n",[154,13280,13281],{"class":156,"line":2165},[154,13282,10258],{"class":192},[154,13284,13285],{"class":156,"line":2178},[154,13286,317],{"emptyLinePlaceholder":86},[154,13288,13289,13291,13293],{"class":156,"line":2183},[154,13290,10151],{"class":1067},[154,13292,10238],{"class":160},[154,13294,4116],{"class":192},[154,13296,13297,13299,13301],{"class":156,"line":2189},[154,13298,10677],{"class":1067},[154,13300,12957],{"class":192},[154,13302,11801],{"class":1067},[154,13304,13305,13307,13309,13311,13313,13315,13317,13319,13321,13323],{"class":156,"line":2202},[154,13306,11717],{"class":1067},[154,13308,12957],{"class":192},[154,13310,3457],{"class":1067},[154,13312,3012],{"class":250},[154,13314,12976],{"class":192},[154,13316,3449],{"class":1067},[154,13318,2875],{"class":250},[154,13320,12983],{"class":192},[154,13322,11737],{"class":1067},[154,13324,3697],{"class":192},[154,13326,13327,13329,13331,13333,13335,13337,13339,13341,13343],{"class":156,"line":2214},[154,13328,12996],{"class":192},[154,13330,10454],{"class":1067},[154,13332,13001],{"class":192},[154,13334,13004],{"class":160},[154,13336,13007],{"class":192},[154,13338,11448],{"class":160},[154,13340,13012],{"class":192},[154,13342,13015],{"class":160},[154,13344,13018],{"class":192},[154,13346,13347,13349,13351,13353,13355],{"class":156,"line":2227},[154,13348,13027],{"class":192},[154,13350,10454],{"class":1067},[154,13352,13001],{"class":192},[154,13354,13034],{"class":160},[154,13356,13037],{"class":192},[154,13358,13359,13361,13363,13365,13367,13369,13371],{"class":156,"line":2232},[154,13360,13046],{"class":192},[154,13362,10454],{"class":1067},[154,13364,13051],{"class":192},[154,13366,13054],{"class":160},[154,13368,3897],{"class":192},[154,13370,13059],{"class":250},[154,13372,10258],{"class":192},[154,13374,13375],{"class":156,"line":2238},[154,13376,317],{"emptyLinePlaceholder":86},[154,13378,13379,13381,13383,13385,13387],{"class":156,"line":2251},[154,13380,4180],{"class":1067},[154,13382,13072],{"class":192},[154,13384,3449],{"class":1067},[154,13386,4752],{"class":250},[154,13388,3697],{"class":192},[154,13390,13391,13393,13395,13397,13399,13401,13404,13406,13409,13412,13415,13417],{"class":156,"line":2262},[154,13392,11884],{"class":192},[154,13394,10299],{"class":160},[154,13396,3897],{"class":192},[154,13398,10310],{"class":163},[154,13400,11893],{"class":250},[154,13402,13403],{"class":163}," 號學生的分數為 ",[154,13405,11893],{"class":250},[154,13407,13408],{"class":250}," %s",[154,13410,13411],{"class":163},"不及格",[154,13413,13414],{"class":250},"%s\\n",[154,13416,10310],{"class":163},[154,13418,13419],{"class":192},", index, num, RED, RESET)\n",[154,13421,13422],{"class":156,"line":2273},[154,13423,13424],{"class":1067},"            continue\n",[154,13426,13427],{"class":156,"line":2278},[154,13428,4223],{"class":192},[154,13430,13431],{"class":156,"line":2284},[154,13432,317],{"emptyLinePlaceholder":86},[154,13434,13435,13437,13439,13441,13443,13445,13447,13449,13451,13454,13457,13459,13461],{"class":156,"line":2294},[154,13436,11189],{"class":192},[154,13438,10299],{"class":160},[154,13440,3897],{"class":192},[154,13442,10310],{"class":163},[154,13444,11893],{"class":250},[154,13446,13403],{"class":163},[154,13448,11893],{"class":250},[154,13450,5860],{"class":163},[154,13452,13453],{"class":250},"%s",[154,13455,13456],{"class":163},"恭喜級格了",[154,13458,13414],{"class":250},[154,13460,10310],{"class":163},[154,13462,13463],{"class":192},", index, num, GREEN, RESET)\n",[154,13465,13466],{"class":156,"line":2308},[154,13467,4104],{"class":192},[154,13469,13470],{"class":156,"line":2313},[154,13471,317],{"emptyLinePlaceholder":86},[154,13473,13474],{"class":156,"line":2319},[154,13475,3776],{"class":192},[15,13477,13478],{},[783,13479,5790],{},[146,13481,13483],{"className":148,"code":13482,"language":150,"meta":78,"style":78},"0 號學生的分數為 38 不及格\n1 號學生的分數為 26 不及格\n2 號學生的分數為 21 不及格\n3 號學生的分數為 37 不及格\n4 號學生的分數為 58 不及格\n5 號學生的分數為 40 不及格\n6 號學生的分數為 44 不及格\n7 號學生的分數為 64，恭喜級格了\n8 號學生的分數為 93，恭喜級格了\n9 號學生的分數為 0 不及格\n",[19,13484,13485,13498,13509,13520,13531,13542,13553,13564,13573,13582],{"__ignoreMap":78},[154,13486,13487,13489,13492,13495],{"class":156,"line":157},[154,13488,3757],{"class":160},[154,13490,13491],{"class":163}," 號學生的分數為",[154,13493,13494],{"class":250}," 38",[154,13496,13497],{"class":163}," 不及格\n",[154,13499,13500,13502,13504,13507],{"class":156,"line":79},[154,13501,3796],{"class":160},[154,13503,13491],{"class":163},[154,13505,13506],{"class":250}," 26",[154,13508,13497],{"class":163},[154,13510,13511,13513,13515,13518],{"class":156,"line":314},[154,13512,9980],{"class":160},[154,13514,13491],{"class":163},[154,13516,13517],{"class":250}," 21",[154,13519,13497],{"class":163},[154,13521,13522,13524,13526,13529],{"class":156,"line":320},[154,13523,10471],{"class":160},[154,13525,13491],{"class":163},[154,13527,13528],{"class":250}," 37",[154,13530,13497],{"class":163},[154,13532,13533,13535,13537,13540],{"class":156,"line":326},[154,13534,10462],{"class":160},[154,13536,13491],{"class":163},[154,13538,13539],{"class":250}," 58",[154,13541,13497],{"class":163},[154,13543,13544,13546,13548,13551],{"class":156,"line":889},[154,13545,5671],{"class":160},[154,13547,13491],{"class":163},[154,13549,13550],{"class":250}," 40",[154,13552,13497],{"class":163},[154,13554,13555,13557,13559,13562],{"class":156,"line":900},[154,13556,12423],{"class":160},[154,13558,13491],{"class":163},[154,13560,13561],{"class":250}," 44",[154,13563,13497],{"class":163},[154,13565,13566,13568,13570],{"class":156,"line":906},[154,13567,5685],{"class":160},[154,13569,13491],{"class":163},[154,13571,13572],{"class":163}," 64，恭喜級格了\n",[154,13574,13575,13577,13579],{"class":156,"line":916},[154,13576,12654],{"class":160},[154,13578,13491],{"class":163},[154,13580,13581],{"class":163}," 93，恭喜級格了\n",[154,13583,13584,13586,13588,13590],{"class":156,"line":1648},[154,13585,12769],{"class":160},[154,13587,13491],{"class":163},[154,13589,3012],{"class":250},[154,13591,13497],{"class":163},[15,13593,13594],{},[783,13595,1875],{},[15,13597,13598,13599,13601,13602,13604],{},"從上面範例結果，可以了解 ",[19,13600,12881],{}," 只是達成條件，就會跳開整個迴圈，而 ",[19,13603,13172],{},"，只會跳過此次迴圈。",[100,13606,13607],{"id":13607},"goto",[15,13609,13610,13612,13613],{},[19,13611,13607],{}," 程式執行時，無條件跳至某行執行，為確保程式邏輯清晰，程式碼易於維護，不建義使用 ",[19,13614,13607],{},[146,13616,13618],{"className":10142,"code":13617,"language":10144,"meta":78,"style":78},"go label\n\nlabel:\n  \u002F\u002F程式片段\n",[19,13619,13620,13627,13631,13636],{"__ignoreMap":78},[154,13621,13622,13624],{"class":156,"line":157},[154,13623,10144],{"class":1067},[154,13625,13626],{"class":192}," label\n",[154,13628,13629],{"class":156,"line":79},[154,13630,317],{"emptyLinePlaceholder":86},[154,13632,13633],{"class":156,"line":314},[154,13634,13635],{"class":192},"label:\n",[154,13637,13638],{"class":156,"line":320},[154,13639,13640],{"class":298},"  \u002F\u002F程式片段\n",[15,13642,13643],{},[783,13644,13645],{},"範例程式",[146,13647,13649],{"className":10142,"code":13648,"language":10144,"meta":78,"style":78},"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,13650,13651,13657,13661,13671,13675,13683,13687,13697,13703,13711,13719,13723,13735,13743,13747,13751,13755,13760,13773],{"__ignoreMap":78},[154,13652,13653,13655],{"class":156,"line":157},[154,13654,10214],{"class":1067},[154,13656,10217],{"class":160},[154,13658,13659],{"class":156,"line":79},[154,13660,317],{"emptyLinePlaceholder":86},[154,13662,13663,13665,13667,13669],{"class":156,"line":314},[154,13664,10222],{"class":1067},[154,13666,10225],{"class":163},[154,13668,10228],{"class":160},[154,13670,10231],{"class":163},[154,13672,13673],{"class":156,"line":320},[154,13674,317],{"emptyLinePlaceholder":86},[154,13676,13677,13679,13681],{"class":156,"line":326},[154,13678,10151],{"class":1067},[154,13680,10238],{"class":160},[154,13682,4116],{"class":192},[154,13684,13685],{"class":156,"line":889},[154,13686,317],{"emptyLinePlaceholder":86},[154,13688,13689,13692,13694],{"class":156,"line":900},[154,13690,13691],{"class":192},"    i ",[154,13693,10454],{"class":1067},[154,13695,13696],{"class":250}," 0\n",[154,13698,13699,13701],{"class":156,"line":906},[154,13700,11717],{"class":1067},[154,13702,3697],{"class":192},[154,13704,13705,13708],{"class":156,"line":916},[154,13706,13707],{"class":192},"        i",[154,13709,13710],{"class":1067},"++\n",[154,13712,13713,13715,13717],{"class":156,"line":1648},[154,13714,11189],{"class":192},[154,13716,10481],{"class":160},[154,13718,11748],{"class":192},[154,13720,13721],{"class":156,"line":1654},[154,13722,317],{"emptyLinePlaceholder":86},[154,13724,13725,13727,13729,13731,13733],{"class":156,"line":2151},[154,13726,4180],{"class":1067},[154,13728,11720],{"class":192},[154,13730,11179],{"class":1067},[154,13732,2875],{"class":250},[154,13734,3697],{"class":192},[154,13736,13737,13740],{"class":156,"line":2165},[154,13738,13739],{"class":1067},"            goto",[154,13741,13742],{"class":192}," Here\n",[154,13744,13745],{"class":156,"line":2178},[154,13746,4223],{"class":192},[154,13748,13749],{"class":156,"line":2183},[154,13750,4104],{"class":192},[154,13752,13753],{"class":156,"line":2189},[154,13754,317],{"emptyLinePlaceholder":86},[154,13756,13757],{"class":156,"line":2202},[154,13758,13759],{"class":192},"Here:\n",[154,13761,13762,13764,13766,13768,13771],{"class":156,"line":2214},[154,13763,10478],{"class":192},[154,13765,10481],{"class":160},[154,13767,3897],{"class":192},[154,13769,13770],{"class":163},"\"程式結束\"",[154,13772,10258],{"class":192},[154,13774,13775],{"class":156,"line":2227},[154,13776,3776],{"class":192},[15,13778,13779],{},[783,13780,5790],{},[146,13782,13784],{"className":148,"code":13783,"language":150,"meta":78,"style":78},"1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n和式結束\n",[19,13785,13786,13791,13796,13801,13806,13811,13816,13821,13826,13830,13835],{"__ignoreMap":78},[154,13787,13788],{"class":156,"line":157},[154,13789,13790],{"class":160},"1\n",[154,13792,13793],{"class":156,"line":79},[154,13794,13795],{"class":160},"2\n",[154,13797,13798],{"class":156,"line":314},[154,13799,13800],{"class":160},"3\n",[154,13802,13803],{"class":156,"line":320},[154,13804,13805],{"class":160},"4\n",[154,13807,13808],{"class":156,"line":326},[154,13809,13810],{"class":160},"5\n",[154,13812,13813],{"class":156,"line":889},[154,13814,13815],{"class":160},"6\n",[154,13817,13818],{"class":156,"line":900},[154,13819,13820],{"class":160},"7\n",[154,13822,13823],{"class":156,"line":906},[154,13824,13825],{"class":160},"8\n",[154,13827,13828],{"class":156,"line":916},[154,13829,10553],{"class":160},[154,13831,13832],{"class":156,"line":1648},[154,13833,13834],{"class":160},"10\n",[154,13836,13837],{"class":156,"line":1654},[154,13838,13839],{"class":160},"和式結束\n",[15,13841,13842],{},"以上是 go 語言中，常用的流程控制，若有遺漏或說明錯誤可以在下留言討論。",[675,13844,13845],{},"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":78,"searchDepth":79,"depth":79,"links":13847},[13848,13849,13850,13854],{"id":11026,"depth":79,"text":11027},{"id":11314,"depth":79,"text":11314},{"id":11647,"depth":79,"text":11648,"children":13851},[13852,13853],{"id":12881,"depth":314,"text":12881},{"id":13172,"depth":314,"text":13172},{"id":13607,"depth":79,"text":13607},{},"\u002Farticles\u002F2023-03-28-flow-control","2023-03-28 17:34:00",{"title":11017,"description":78},"articles\u002F2023-03-28-flow control","這篇文章，會介紹 Go 語言中，常用的流程控制，包含 if、switch、for 等流程控制",[10144],"PX_VcjowVs0VcmxH_B9vEPuEHEYzfHxwTQKLCqRsmjU",{"id":13864,"title":13865,"body":13866,"category":10023,"description":78,"extension":83,"image":11006,"meta":14616,"navigation":86,"path":14617,"pubDate":14618,"seo":14619,"status":86,"stem":14620,"summary":14621,"tags":14622,"__hash__":14623},"content\u002Farticles\u002F2023-03-07-go-print.md","《Go 學習筆記4》基本輸入輸出",{"type":8,"value":13867,"toc":14612},[13868,13872,13875,13895,13899,14130,14134,14187,14191,14225,14228,14242,14246,14544,14548,14609],[10129,13869,13870],{},[15,13871,10133],{},[100,13873,13874],{"id":13874},"輸出",[112,13876,13877,13883,13889],{},[115,13878,13879,13882],{},[19,13880,13881],{},"print(data, data, data)","：輸出資料但不換行",[115,13884,13885,13888],{},[19,13886,13887],{},"Println(data, data, data)","：輸出資料並換行",[115,13890,13891,13894],{},[19,13892,13893],{},"Printf(\"{format}\", data)","：依照格式輸出內容",[15,13896,13897],{},[783,13898,13645],{},[146,13900,13902],{"className":10142,"code":13901,"language":10144,"meta":78,"style":78},"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,13903,13904,13910,13914,13924,13928,13936,13940,13954,13958,13971,13975,13988,13992,14013,14017,14039,14043,14065,14069,14097,14101,14122,14126],{"__ignoreMap":78},[154,13905,13906,13908],{"class":156,"line":157},[154,13907,10214],{"class":1067},[154,13909,10217],{"class":160},[154,13911,13912],{"class":156,"line":79},[154,13913,317],{"emptyLinePlaceholder":86},[154,13915,13916,13918,13920,13922],{"class":156,"line":314},[154,13917,10222],{"class":1067},[154,13919,10225],{"class":163},[154,13921,10228],{"class":160},[154,13923,10231],{"class":163},[154,13925,13926],{"class":156,"line":320},[154,13927,317],{"emptyLinePlaceholder":86},[154,13929,13930,13932,13934],{"class":156,"line":326},[154,13931,10151],{"class":1067},[154,13933,10238],{"class":160},[154,13935,4116],{"class":192},[154,13937,13938],{"class":156,"line":889},[154,13939,317],{"emptyLinePlaceholder":86},[154,13941,13942,13945,13947,13949,13952],{"class":156,"line":900},[154,13943,13944],{"class":192},"  fmt.",[154,13946,11145],{"class":160},[154,13948,3897],{"class":192},[154,13950,13951],{"class":163},"\"我是一行字串\"",[154,13953,10258],{"class":192},[154,13955,13956],{"class":156,"line":906},[154,13957,317],{"emptyLinePlaceholder":86},[154,13959,13960,13962,13964,13966,13969],{"class":156,"line":916},[154,13961,13944],{"class":192},[154,13963,10481],{"class":160},[154,13965,3897],{"class":192},[154,13967,13968],{"class":163},"\"我會換行\"",[154,13970,10258],{"class":192},[154,13972,13973],{"class":156,"line":1648},[154,13974,317],{"emptyLinePlaceholder":86},[154,13976,13977,13979,13981,13983,13986],{"class":156,"line":1654},[154,13978,13944],{"class":192},[154,13980,10481],{"class":160},[154,13982,3897],{"class":192},[154,13984,13985],{"class":163},"\"你看見換行了嗎\"",[154,13987,10258],{"class":192},[154,13989,13990],{"class":156,"line":2151},[154,13991,317],{"emptyLinePlaceholder":86},[154,13993,13994,13996,13998,14000,14003,14005,14007,14009,14011],{"class":156,"line":2165},[154,13995,13944],{"class":192},[154,13997,10299],{"class":160},[154,13999,3897],{"class":192},[154,14001,14002],{"class":163},"\"這是一個整數： ",[154,14004,10327],{"class":250},[154,14006,10310],{"class":163},[154,14008,4003],{"class":192},[154,14010,5671],{"class":250},[154,14012,10258],{"class":192},[154,14014,14015],{"class":156,"line":2178},[154,14016,317],{"emptyLinePlaceholder":86},[154,14018,14019,14021,14023,14025,14028,14030,14032,14034,14037],{"class":156,"line":2183},[154,14020,13944],{"class":192},[154,14022,10299],{"class":160},[154,14024,3897],{"class":192},[154,14026,14027],{"class":163},"\"這是一浮點數： ",[154,14029,10809],{"class":250},[154,14031,10310],{"class":163},[154,14033,4003],{"class":192},[154,14035,14036],{"class":250},"0.344",[154,14038,10258],{"class":192},[154,14040,14041],{"class":156,"line":2189},[154,14042,317],{"emptyLinePlaceholder":86},[154,14044,14045,14047,14049,14051,14054,14057,14059,14061,14063],{"class":156,"line":2202},[154,14046,13944],{"class":192},[154,14048,10299],{"class":160},[154,14050,3897],{"class":192},[154,14052,14053],{"class":163},"\"這是一個布林值： ",[154,14055,14056],{"class":250},"%t\\r\\n",[154,14058,10310],{"class":163},[154,14060,4003],{"class":192},[154,14062,10884],{"class":250},[154,14064,10258],{"class":192},[154,14066,14067],{"class":156,"line":2214},[154,14068,317],{"emptyLinePlaceholder":86},[154,14070,14071,14073,14075,14077,14080,14083,14085,14087,14090,14093,14095],{"class":156,"line":2227},[154,14072,13944],{"class":192},[154,14074,10299],{"class":160},[154,14076,3897],{"class":192},[154,14078,14079],{"class":163},"\"這是一個字元： ",[154,14081,14082],{"class":250},"%c\\r\\n",[154,14084,10310],{"class":163},[154,14086,4003],{"class":192},[154,14088,14089],{"class":163},"'",[154,14091,14092],{"class":250},"j",[154,14094,14089],{"class":163},[154,14096,10258],{"class":192},[154,14098,14099],{"class":156,"line":2232},[154,14100,317],{"emptyLinePlaceholder":86},[154,14102,14103,14105,14107,14109,14112,14114,14116,14118,14120],{"class":156,"line":2238},[154,14104,13944],{"class":192},[154,14106,10299],{"class":160},[154,14108,3897],{"class":192},[154,14110,14111],{"class":163},"\"這是一個字串： ",[154,14113,10307],{"class":250},[154,14115,10310],{"class":163},[154,14117,4003],{"class":192},[154,14119,10250],{"class":163},[154,14121,10258],{"class":192},[154,14123,14124],{"class":156,"line":2251},[154,14125,317],{"emptyLinePlaceholder":86},[154,14127,14128],{"class":156,"line":2262},[154,14129,3776],{"class":192},[15,14131,14132],{},[783,14133,5790],{},[146,14135,14137],{"className":148,"code":14136,"language":150,"meta":78,"style":78},"我是一行字串我會換行\n你看見換行了嗎\n這是一個整數： 5\n這是一浮點數： 0.34\n這是一個布林值： true\n這是一個字元： j\n這是一個字串： Allen\n",[19,14138,14139,14144,14149,14156,14164,14172,14180],{"__ignoreMap":78},[154,14140,14141],{"class":156,"line":157},[154,14142,14143],{"class":160},"我是一行字串我會換行\n",[154,14145,14146],{"class":156,"line":79},[154,14147,14148],{"class":160},"你看見換行了嗎\n",[154,14150,14151,14154],{"class":156,"line":314},[154,14152,14153],{"class":160},"這是一個整數：",[154,14155,335],{"class":250},[154,14157,14158,14161],{"class":156,"line":320},[154,14159,14160],{"class":160},"這是一浮點數：",[154,14162,14163],{"class":250}," 0.34\n",[154,14165,14166,14169],{"class":156,"line":326},[154,14167,14168],{"class":160},"這是一個布林值：",[154,14170,14171],{"class":250}," true\n",[154,14173,14174,14177],{"class":156,"line":889},[154,14175,14176],{"class":160},"這是一個字元：",[154,14178,14179],{"class":163}," j\n",[154,14181,14182,14185],{"class":156,"line":900},[154,14183,14184],{"class":160},"這是一個字串：",[154,14186,10353],{"class":163},[15,14188,14189],{},[783,14190,1875],{},[259,14192,14193,14199],{},[115,14194,14195,14196,14198],{},"其中浮點數 ",[19,14197,11199],{}," 表示取到小數點第二位",[115,14200,14201,1341,14203,14206,14207],{},[19,14202,11205],{},[19,14204,14205],{},"\\n"," 都是換行的控制字元\n",[259,14208,14209,14214],{},[115,14210,14211,14213],{},[19,14212,14205],{},"：在 Unix 系統中，此控制字元，表示換到下一行的開頭，在 Windows 系統中，只會進行換行",[115,14215,14216,14218,14219,14222,14223],{},[19,14217,11205],{},"：在 Windows，",[19,14220,14221],{},"\\r"," 代表 Enter 鍵，所以我們需要換到下一行的開頭時，我們必需用 ",[19,14224,11205],{},[100,14226,14227],{"id":14227},"輸入",[112,14229,14230,14236],{},[115,14231,14232,14235],{},[19,14233,14234],{},"scan(&x)","：會讀取整行輸入，並將輸入內容軟成字串型態",[115,14237,14238,14241],{},[19,14239,14240],{},"scanf(\"%d %.2f\", &x)","：可以指定輸入格式，並可一次輸入多個參數",[15,14243,14244],{},[783,14245,13645],{},[146,14247,14249],{"className":10142,"code":14248,"language":10144,"meta":78,"style":78},"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,14250,14251,14257,14261,14271,14275,14283,14287,14295,14299,14309,14313,14321,14325,14333,14337,14350,14364,14377,14399,14412,14442,14446,14458,14471,14483,14487,14500,14536,14540],{"__ignoreMap":78},[154,14252,14253,14255],{"class":156,"line":157},[154,14254,10214],{"class":1067},[154,14256,10217],{"class":160},[154,14258,14259],{"class":156,"line":79},[154,14260,317],{"emptyLinePlaceholder":86},[154,14262,14263,14265,14267,14269],{"class":156,"line":314},[154,14264,10222],{"class":1067},[154,14266,10225],{"class":163},[154,14268,10228],{"class":160},[154,14270,10231],{"class":163},[154,14272,14273],{"class":156,"line":320},[154,14274,317],{"emptyLinePlaceholder":86},[154,14276,14277,14279,14281],{"class":156,"line":326},[154,14278,10151],{"class":1067},[154,14280,10238],{"class":160},[154,14282,4116],{"class":192},[154,14284,14285],{"class":156,"line":889},[154,14286,317],{"emptyLinePlaceholder":86},[154,14288,14289,14291,14293],{"class":156,"line":900},[154,14290,10677],{"class":1067},[154,14292,10680],{"class":192},[154,14294,10683],{"class":1067},[154,14296,14297],{"class":156,"line":906},[154,14298,317],{"emptyLinePlaceholder":86},[154,14300,14301,14303,14306],{"class":156,"line":916},[154,14302,10677],{"class":1067},[154,14304,14305],{"class":192}," age ",[154,14307,14308],{"class":1067},"int8\n",[154,14310,14311],{"class":156,"line":1648},[154,14312,317],{"emptyLinePlaceholder":86},[154,14314,14315,14317,14319],{"class":156,"line":1654},[154,14316,10677],{"class":1067},[154,14318,10700],{"class":192},[154,14320,10703],{"class":1067},[154,14322,14323],{"class":156,"line":2151},[154,14324,317],{"emptyLinePlaceholder":86},[154,14326,14327,14329,14331],{"class":156,"line":2165},[154,14328,10677],{"class":1067},[154,14330,10710],{"class":192},[154,14332,10703],{"class":1067},[154,14334,14335],{"class":156,"line":2178},[154,14336,317],{"emptyLinePlaceholder":86},[154,14338,14339,14341,14343,14345,14348],{"class":156,"line":2183},[154,14340,10478],{"class":192},[154,14342,11145],{"class":160},[154,14344,3897],{"class":192},[154,14346,14347],{"class":163},"\"請輸入您的姓名：\"",[154,14349,10258],{"class":192},[154,14351,14352,14354,14357,14359,14361],{"class":156,"line":2189},[154,14353,10478],{"class":192},[154,14355,14356],{"class":160},"Scanln",[154,14358,3897],{"class":192},[154,14360,6853],{"class":1067},[154,14362,14363],{"class":192},"name)\n",[154,14365,14366,14368,14370,14372,14375],{"class":156,"line":2202},[154,14367,10478],{"class":192},[154,14369,11145],{"class":160},[154,14371,3897],{"class":192},[154,14373,14374],{"class":163},"\"請輸入你的年紀：\"",[154,14376,10258],{"class":192},[154,14378,14379,14381,14384,14386,14388,14390,14392,14394,14396],{"class":156,"line":2214},[154,14380,10478],{"class":192},[154,14382,14383],{"class":160},"Scanf",[154,14385,3897],{"class":192},[154,14387,10310],{"class":163},[154,14389,11893],{"class":250},[154,14391,10310],{"class":163},[154,14393,4003],{"class":192},[154,14395,6853],{"class":1067},[154,14397,14398],{"class":192},"age)\n",[154,14400,14401,14403,14405,14407,14410],{"class":156,"line":2227},[154,14402,10478],{"class":192},[154,14404,11145],{"class":160},[154,14406,3897],{"class":192},[154,14408,14409],{"class":163},"\"請輸入你的身高和體重：\"",[154,14411,10258],{"class":192},[154,14413,14414,14416,14418,14420,14422,14425,14428,14430,14432,14434,14437,14439],{"class":156,"line":2232},[154,14415,10478],{"class":192},[154,14417,14383],{"class":160},[154,14419,3897],{"class":192},[154,14421,10310],{"class":163},[154,14423,14424],{"class":250},"%f",[154,14426,14427],{"class":250}," %f",[154,14429,10310],{"class":163},[154,14431,4003],{"class":192},[154,14433,6853],{"class":1067},[154,14435,14436],{"class":192},"height, ",[154,14438,6853],{"class":1067},[154,14440,14441],{"class":192},"weight)\n",[154,14443,14444],{"class":156,"line":2238},[154,14445,317],{"emptyLinePlaceholder":86},[154,14447,14448,14451,14453,14455],{"class":156,"line":2251},[154,14449,14450],{"class":192},"    age ",[154,14452,3457],{"class":1067},[154,14454,10289],{"class":1067},[154,14456,14457],{"class":192},"(age)\n",[154,14459,14460,14463,14465,14468],{"class":156,"line":2262},[154,14461,14462],{"class":192},"    height ",[154,14464,3457],{"class":1067},[154,14466,14467],{"class":1067}," float32",[154,14469,14470],{"class":192},"(height)\n",[154,14472,14473,14476,14478,14480],{"class":156,"line":2273},[154,14474,14475],{"class":192},"    weight ",[154,14477,3457],{"class":1067},[154,14479,14467],{"class":1067},[154,14481,14482],{"class":192},"(weight)\n",[154,14484,14485],{"class":156,"line":2278},[154,14486,317],{"emptyLinePlaceholder":86},[154,14488,14489,14491,14493,14495,14498],{"class":156,"line":2284},[154,14490,10478],{"class":192},[154,14492,10481],{"class":160},[154,14494,3897],{"class":192},[154,14496,14497],{"class":163},"\"====您輸入的內容如下=====\"",[154,14499,10258],{"class":192},[154,14501,14502,14504,14506,14508,14511,14513,14516,14519,14521,14524,14526,14529,14531,14533],{"class":156,"line":2294},[154,14503,10478],{"class":192},[154,14505,10299],{"class":160},[154,14507,3897],{"class":192},[154,14509,14510],{"class":163},"\"您的大名是： ",[154,14512,13453],{"class":250},[154,14514,14515],{"class":250}," \\r\\n",[154,14517,14518],{"class":163},"您的年齡： ",[154,14520,10327],{"class":250},[154,14522,14523],{"class":163},"您的身高： ",[154,14525,10809],{"class":250},[154,14527,14528],{"class":163},"您的體重：",[154,14530,10809],{"class":250},[154,14532,10310],{"class":163},[154,14534,14535],{"class":192},", name, age, height, weight)\n",[154,14537,14538],{"class":156,"line":2308},[154,14539,317],{"emptyLinePlaceholder":86},[154,14541,14542],{"class":156,"line":2313},[154,14543,3776],{"class":192},[15,14545,14546],{},[783,14547,5790],{},[146,14549,14551],{"className":148,"code":14550,"language":150,"meta":78,"style":78},"請輸入您的姓名：Allen\n請輸入你的年紀：25\n請輸入你的身高和體重：175 70 \n====您輸入的內容如下=====\n您的大名是： Allen \n您的年齡： 25\n您的身高： 175.00\n您的體重：70.00\n",[19,14552,14553,14558,14563,14574,14579,14589,14596,14604],{"__ignoreMap":78},[154,14554,14555],{"class":156,"line":157},[154,14556,14557],{"class":160},"請輸入您的姓名：Allen\n",[154,14559,14560],{"class":156,"line":79},[154,14561,14562],{"class":160},"請輸入你的年紀：25\n",[154,14564,14565,14568,14571],{"class":156,"line":314},[154,14566,14567],{"class":160},"請輸入你的身高和體重：175",[154,14569,14570],{"class":250}," 70",[154,14572,14573],{"class":192}," \n",[154,14575,14576],{"class":156,"line":320},[154,14577,14578],{"class":163},"====您輸入的內容如下=====\n",[154,14580,14581,14584,14587],{"class":156,"line":326},[154,14582,14583],{"class":160},"您的大名是：",[154,14585,14586],{"class":163}," Allen",[154,14588,14573],{"class":192},[154,14590,14591,14594],{"class":156,"line":889},[154,14592,14593],{"class":160},"您的年齡：",[154,14595,12362],{"class":250},[154,14597,14598,14601],{"class":156,"line":900},[154,14599,14600],{"class":160},"您的身高：",[154,14602,14603],{"class":250}," 175.00\n",[154,14605,14606],{"class":156,"line":906},[154,14607,14608],{"class":160},"您的體重：70.00\n",[675,14610,14611],{},"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":78,"searchDepth":79,"depth":79,"links":14613},[14614,14615],{"id":13874,"depth":79,"text":13874},{"id":14227,"depth":79,"text":14227},{},"\u002Farticles\u002F2023-03-07-go-print","2023-03-07 23:26:00",{"title":13865,"description":78},"articles\u002F2023-03-07-go-print","在 Go lang 中，會使用 `fmt` 這個套件，來處理基本的輸入輸出",[10144],"qed74xM3e9OGLUD8A3VRr5d374RcyCdF1WljBm5JUi0",{"id":14625,"title":14626,"body":14627,"category":10023,"description":78,"extension":83,"image":11006,"meta":15169,"navigation":86,"path":15170,"pubDate":15171,"seo":15172,"status":86,"stem":15173,"summary":15174,"tags":15175,"__hash__":15176},"content\u002Farticles\u002F2023-03-01-go-lang-variable.md","《Go 學習筆記2》 變數型態",{"type":8,"value":14628,"toc":15158},[14629,14633,14636,14645,14689,14694,14726,14729,14743,14747,14805,14808,14948,14951,14963,14966,14973,14976,14984,15005,15008,15016,15019,15027,15136,15140,15155],[10129,14630,14631],{},[15,14632,10133],{},[100,14634,14635],{"id":14635},"變數宣告",[15,14637,14638,14639,3112,14642,14644],{},"在 Go lang 變數宣告，可使用 ",[19,14640,14641],{},"var",[19,14643,10454],{}," 兩個關鍵字，進行變數宣告。",[146,14646,14648],{"className":10142,"code":14647,"language":10144,"meta":78,"style":78},"var x int =  10\nvar y float32 = 3.1412\nvar z string = \"Hello World\"\n",[19,14649,14650,14663,14676],{"__ignoreMap":78},[154,14651,14652,14654,14656,14658,14660],{"class":156,"line":157},[154,14653,14641],{"class":1067},[154,14655,10532],{"class":192},[154,14657,10523],{"class":1067},[154,14659,3888],{"class":1067},[154,14661,14662],{"class":250},"  10\n",[154,14664,14665,14667,14669,14671,14673],{"class":156,"line":79},[154,14666,14641],{"class":1067},[154,14668,10537],{"class":192},[154,14670,10866],{"class":1067},[154,14672,3888],{"class":1067},[154,14674,14675],{"class":250}," 3.1412\n",[154,14677,14678,14680,14682,14684,14686],{"class":156,"line":314},[154,14679,14641],{"class":1067},[154,14681,11868],{"class":192},[154,14683,10856],{"class":1067},[154,14685,3888],{"class":1067},[154,14687,14688],{"class":163}," \"Hello World\"\n",[15,14690,2577,14691,14693],{},[19,14692,10454],{}," 符號變數宣告時，可以省略型態，系統會自動推斷變數的型態",[146,14695,14697],{"className":10142,"code":14696,"language":10144,"meta":78,"style":78},"x := 10\ny := 3.1412\nz := \"Hello World\"\n",[19,14698,14699,14708,14717],{"__ignoreMap":78},[154,14700,14701,14704,14706],{"class":156,"line":157},[154,14702,14703],{"class":192},"x ",[154,14705,10454],{"class":1067},[154,14707,12009],{"class":250},[154,14709,14710,14713,14715],{"class":156,"line":79},[154,14711,14712],{"class":192},"y ",[154,14714,10454],{"class":1067},[154,14716,14675],{"class":250},[154,14718,14719,14722,14724],{"class":156,"line":314},[154,14720,14721],{"class":192},"z ",[154,14723,10454],{"class":1067},[154,14725,14688],{"class":163},[15,14727,14728],{},"多變數宣告",[146,14730,14732],{"className":10142,"code":14731,"language":10144,"meta":78,"style":78},"var x, y, z int\n",[19,14733,14734],{"__ignoreMap":78},[154,14735,14736,14738,14741],{"class":156,"line":157},[154,14737,14641],{"class":1067},[154,14739,14740],{"class":192}," x, y, z ",[154,14742,11801],{"class":1067},[100,14744,14746],{"id":14745},"go-語言的變數型態包括","Go 語言的變數型態包括:",[112,14748,14749,14781,14789,14800],{},[115,14750,14751,14752,4003,14754,4003,14757,4003,14760,4003,14763,4003,14766,4003,14769,4003,14772,4003,14775,4003,14778],{},"整數類型: ",[19,14753,10523],{},[19,14755,14756],{},"int8",[19,14758,14759],{},"int16",[19,14761,14762],{},"int32",[19,14764,14765],{},"int64",[19,14767,14768],{},"uint",[19,14770,14771],{},"uint8",[19,14773,14774],{},"uint16",[19,14776,14777],{},"uint32",[19,14779,14780],{},"uint64",[115,14782,14783,14784,4003,14786],{},"浮點數類型: ",[19,14785,10866],{},[19,14787,14788],{},"float64",[115,14790,14791,14792,4003,14794,4003,14797],{},"字符類型: ",[19,14793,10856],{},[19,14795,14796],{},"rune",[19,14798,14799],{},"byte",[115,14801,14802,14803],{},"布林類型: ",[19,14804,10861],{},[225,14806,14807],{"id":14807},"整數型態",[259,14809,14810,14880],{},[115,14811,14812,14814,14815],{},[19,14813,10523],{}," ： 是帶有符號的整數，可表示正數與負數\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",[1861,14816,14817,14829],{},[1864,14818,14819],{},[1867,14820,14821,14823,14826],{},[1870,14822,2388],{},[1870,14824,14825],{},"大小",[1870,14827,14828],{},"範圍",[1877,14830,14831,14841,14851,14861,14871],{},[1867,14832,14833,14835,14838],{},[1882,14834,14756],{},[1882,14836,14837],{},"8 bits",[1882,14839,14840],{},"-128 ~ 127",[1867,14842,14843,14845,14848],{},[1882,14844,14759],{},[1882,14846,14847],{},"16bits",[1882,14849,14850],{},"-2^15 ~ 2^15-1",[1867,14852,14853,14855,14858],{},[1882,14854,14762],{},[1882,14856,14857],{},"32bits",[1882,14859,14860],{},"-2^31 ~ 2^31-1",[1867,14862,14863,14865,14868],{},[1882,14864,14765],{},[1882,14866,14867],{},"64bits",[1882,14869,14870],{},"-2^63 ~ 2^63-1",[1867,14872,14873,14875,14878],{},[1882,14874,10523],{},[1882,14876,14877],{},"取決於平台",[1882,14879,14877],{},[115,14881,14882,14885,14886],{},[19,14883,14884],{},"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",[1861,14887,14888,14898],{},[1864,14889,14890],{},[1867,14891,14892,14894,14896],{},[1870,14893,2388],{},[1870,14895,14825],{},[1870,14897,14828],{},[1877,14899,14900,14910,14920,14930,14940],{},[1867,14901,14902,14905,14907],{},[1882,14903,14904],{},"unit8",[1882,14906,14837],{},[1882,14908,14909],{},"0 ~ 255",[1867,14911,14912,14915,14917],{},[1882,14913,14914],{},"unit16",[1882,14916,14847],{},[1882,14918,14919],{},"0 ~ 2^16 - 1",[1867,14921,14922,14925,14927],{},[1882,14923,14924],{},"unit32",[1882,14926,14857],{},[1882,14928,14929],{},"0 ~ 2^31 -1",[1867,14931,14932,14935,14937],{},[1882,14933,14934],{},"unit64",[1882,14936,14867],{},[1882,14938,14939],{},"0~ 2^63 -1",[1867,14941,14942,14944,14946],{},[1882,14943,14884],{},[1882,14945,14877],{},[1882,14947,14877],{},[225,14949,14950],{"id":14950},"浮點數型態",[259,14952,14953,14958],{},[115,14954,14955,14957],{},[19,14956,10866],{},"：在記憶體佔用 32 位元，並以單精度浮點數格式儲存",[115,14959,14960,14962],{},[19,14961,14788],{},"：在記憶體佔用 64 位元，並以倍精度浮點數格式儲存",[225,14964,14965],{"id":14965},"字串",[15,14967,14968,14969,14972],{},"在 Go lang 中，可以使用雙引號來宣告如 ",[19,14970,14971],{},"\"Hello World\""," 也可以使用反引號來宣告 `hello World`",[225,14974,14975],{"id":14975},"字元",[15,14977,14978,14979,3112,14981,14983],{},"在 Go lang 中，以 ",[19,14980,14799],{},[19,14982,14796],{}," 來表示字元的變數型態",[112,14985,14986,14994],{},[115,14987,14988,14990,14991,14993],{},[19,14989,14799],{},"：是 ",[19,14992,14904],{}," 的別名，用來表示一個 8 bits 無符號正整數。它常用來表示 ASCII 碼或 UTF-8 編碼的字元。",[115,14995,14996,14990,14998,15000,15001,15004],{},[19,14997,14796],{},[19,14999,14762],{}," 的別名，用來表示一個 ",[19,15002,15003],{},"Unicode"," 碼點。它常用來表示 UTF-32 編碼的字元。",[225,15006,15007],{"id":15007},"布林值",[15,15009,15010,15011,1341,15013],{},"Go lang 是以 bool 來宣告，其實為 ",[19,15012,10884],{},[19,15014,15015],{},"false",[100,15017,15018],{"id":15018},"型態轉換",[15,15020,15021,15022,3112,15024,15026],{},"由於 Go lang 是強型別語言，所以它不允許表達式中混合不同型態的變數。例如，我們不同直接將 ",[19,15023,14756],{},[19,15025,10866],{}," 進行相加。要解決此問題，我們必需將變數型態，改成同一種變數型態，才能進行運算。",[146,15028,15030],{"className":10142,"code":15029,"language":10144,"meta":78,"style":78},"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,15031,15032,15038,15042,15052,15056,15064,15068,15080,15084,15096,15100,15119,15123,15132],{"__ignoreMap":78},[154,15033,15034,15036],{"class":156,"line":157},[154,15035,10214],{"class":1067},[154,15037,10217],{"class":160},[154,15039,15040],{"class":156,"line":79},[154,15041,317],{"emptyLinePlaceholder":86},[154,15043,15044,15046,15048,15050],{"class":156,"line":314},[154,15045,10222],{"class":1067},[154,15047,10225],{"class":163},[154,15049,10228],{"class":160},[154,15051,10231],{"class":163},[154,15053,15054],{"class":156,"line":320},[154,15055,317],{"emptyLinePlaceholder":86},[154,15057,15058,15060,15062],{"class":156,"line":326},[154,15059,10151],{"class":1067},[154,15061,10238],{"class":160},[154,15063,4116],{"class":192},[154,15065,15066],{"class":156,"line":889},[154,15067,317],{"emptyLinePlaceholder":86},[154,15069,15070,15072,15074,15076,15078],{"class":156,"line":900},[154,15071,10677],{"class":1067},[154,15073,10532],{"class":192},[154,15075,10523],{"class":1067},[154,15077,3888],{"class":1067},[154,15079,12009],{"class":250},[154,15081,15082],{"class":156,"line":906},[154,15083,10726],{"class":192},[154,15085,15086,15088,15090,15092,15094],{"class":156,"line":916},[154,15087,10677],{"class":1067},[154,15089,10537],{"class":192},[154,15091,10866],{"class":1067},[154,15093,3888],{"class":1067},[154,15095,14675],{"class":250},[154,15097,15098],{"class":156,"line":1648},[154,15099,10726],{"class":192},[154,15101,15102,15104,15106,15108,15110,15112,15115,15117],{"class":156,"line":1654},[154,15103,10677],{"class":1067},[154,15105,11868],{"class":192},[154,15107,10866],{"class":1067},[154,15109,3888],{"class":1067},[154,15111,14467],{"class":1067},[154,15113,15114],{"class":192},"(x) ",[154,15116,5096],{"class":1067},[154,15118,11879],{"class":192},[154,15120,15121],{"class":156,"line":2151},[154,15122,10726],{"class":192},[154,15124,15125,15127,15129],{"class":156,"line":2165},[154,15126,10478],{"class":192},[154,15128,10481],{"class":160},[154,15130,15131],{"class":192},"(x, y, z)\n",[154,15133,15134],{"class":156,"line":2178},[154,15135,3776],{"class":192},[15,15137,15138],{},[783,15139,5790],{},[146,15141,15143],{"className":148,"code":15142,"language":150,"meta":78,"style":78},"10 3.1412 13.1412\n",[19,15144,15145],{"__ignoreMap":78},[154,15146,15147,15149,15152],{"class":156,"line":157},[154,15148,3843],{"class":160},[154,15150,15151],{"class":250}," 3.1412",[154,15153,15154],{"class":250}," 13.1412\n",[675,15156,15157],{},"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":78,"searchDepth":79,"depth":79,"links":15159},[15160,15161,15168],{"id":14635,"depth":79,"text":14635},{"id":14745,"depth":79,"text":14746,"children":15162},[15163,15164,15165,15166,15167],{"id":14807,"depth":314,"text":14807},{"id":14950,"depth":314,"text":14950},{"id":14965,"depth":314,"text":14965},{"id":14975,"depth":314,"text":14975},{"id":15007,"depth":314,"text":15007},{"id":15018,"depth":79,"text":15018},{},"\u002Farticles\u002F2023-03-01-go-lang-variable","2023-03-01 21:09:00",{"title":14626,"description":78},"articles\u002F2023-03-01-go-lang-variable","Go語言變數的使用",[10144],"DB-nKle0k_0j3qTQYeUi6BcZelDX2AsafhQIlZhDKi4",{"id":15178,"title":15179,"body":15180,"category":10023,"description":78,"extension":83,"image":11006,"meta":15382,"navigation":86,"path":15383,"pubDate":15384,"seo":15385,"status":86,"stem":15386,"summary":15387,"tags":15388,"__hash__":15389},"content\u002Farticles\u002F2023-02-27-hello-world.md","《Go 學習筆記2》不免俗的 Ｈello World",{"type":8,"value":15181,"toc":15374},[15182,15186,15189,15202,15205,15212,15225,15228,15231,15290,15328,15331,15345,15348,15357,15359,15371],[10129,15183,15184],{},[15,15185,10133],{},[100,15187,15188],{"id":15188},"建立專案目錄",[146,15190,15192],{"className":148,"code":15191,"language":150,"meta":78,"style":78},"mkdir go-test\n",[19,15193,15194],{"__ignoreMap":78},[154,15195,15196,15199],{"class":156,"line":157},[154,15197,15198],{"class":160},"mkdir",[154,15200,15201],{"class":163}," go-test\n",[100,15203,15204],{"id":15204},"建立程式檔",[15,15206,15207,15208,15211],{},"Go lang 的程式檔，會以 ",[19,15209,15210],{},"*.go"," 為副檔名",[146,15213,15215],{"className":148,"code":15214,"language":150,"meta":78,"style":78},"touch hello.go\n",[19,15216,15217],{"__ignoreMap":78},[154,15218,15219,15222],{"class":156,"line":157},[154,15220,15221],{"class":160},"touch",[154,15223,15224],{"class":163}," hello.go\n",[100,15226,15227],{"id":15227},"編輯程式碼",[15,15229,15230],{},"以文字編輯器或IDE開啟，輸入下列程式碼",[146,15232,15234],{"className":10142,"code":15233,"language":10144,"meta":78,"style":78},"\u002F**\n這是注解\n***\u002F\npackage main\nimport \"fmt\"\nfunc main() {\n    fmt.Println(\"Hello World\")\n}\n",[19,15235,15236,15240,15245,15250,15256,15266,15274,15286],{"__ignoreMap":78},[154,15237,15238],{"class":156,"line":157},[154,15239,8695],{"class":298},[154,15241,15242],{"class":156,"line":79},[154,15243,15244],{"class":298},"這是注解\n",[154,15246,15247],{"class":156,"line":314},[154,15248,15249],{"class":298},"***\u002F\n",[154,15251,15252,15254],{"class":156,"line":320},[154,15253,10214],{"class":1067},[154,15255,10217],{"class":160},[154,15257,15258,15260,15262,15264],{"class":156,"line":326},[154,15259,10222],{"class":1067},[154,15261,10225],{"class":163},[154,15263,10228],{"class":160},[154,15265,10231],{"class":163},[154,15267,15268,15270,15272],{"class":156,"line":889},[154,15269,10151],{"class":1067},[154,15271,10238],{"class":160},[154,15273,4116],{"class":192},[154,15275,15276,15278,15280,15282,15284],{"class":156,"line":900},[154,15277,10478],{"class":192},[154,15279,10481],{"class":160},[154,15281,3897],{"class":192},[154,15283,14971],{"class":163},[154,15285,10258],{"class":192},[154,15287,15288],{"class":156,"line":906},[154,15289,3776],{"class":192},[112,15291,15292,15298,15304,15311,15322],{},[115,15293,15294,15297],{},[19,15295,15296],{},"\u002F**\u002F","：為多行註解",[115,15299,15300,15303],{},[19,15301,15302],{},"\u002F\u002F"," ：為單行注解",[115,15305,15306,15307,15310],{},"package：是 Go lang 來定義 namespace 的方式，可以用來避免與第三方套件名稱衝突，若所開發為應用程式，則用 ",[19,15308,15309],{},"main","，若開發的為函式庫，則由開發者自行命名。",[115,15312,15313,15315,15316,15318,15319,15321],{},[19,15314,10222],{}," ：引入函式庫用，包含 Go lang 的標準函式庫或是第三方開發的函式庫，都可以用 ",[19,15317,10222],{}," 引入，而範例中 ",[19,15320,10228],{}," 為 Go lang 的基本輸入輸出的函式庫",[115,15323,15324,15327],{},[19,15325,15326],{},"func main","：為主程式進入點，程式執行時，會先執行該段程式",[100,15329,15330],{"id":15330},"進行編譯",[146,15332,15334],{"className":148,"code":15333,"language":150,"meta":78,"style":78},"go build hello.go\n",[19,15335,15336],{"__ignoreMap":78},[154,15337,15338,15340,15343],{"class":156,"line":157},[154,15339,10144],{"class":160},[154,15341,15342],{"class":163}," build",[154,15344,15224],{"class":163},[100,15346,15347],{"id":15347},"執行程式",[146,15349,15351],{"className":148,"code":15350,"language":150,"meta":78,"style":78},".\u002Fhello\n",[19,15352,15353],{"__ignoreMap":78},[154,15354,15355],{"class":156,"line":157},[154,15356,15350],{"class":160},[100,15358,5790],{"id":5790},[146,15360,15362],{"className":148,"code":15361,"language":150,"meta":78,"style":78},"Hello world\n",[19,15363,15364],{"__ignoreMap":78},[154,15365,15366,15368],{"class":156,"line":157},[154,15367,10350],{"class":160},[154,15369,15370],{"class":163}," world\n",[675,15372,15373],{},"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":78,"searchDepth":79,"depth":79,"links":15375},[15376,15377,15378,15379,15380,15381],{"id":15188,"depth":79,"text":15188},{"id":15204,"depth":79,"text":15204},{"id":15227,"depth":79,"text":15227},{"id":15330,"depth":79,"text":15330},{"id":15347,"depth":79,"text":15347},{"id":5790,"depth":79,"text":5790},{},"\u002Farticles\u002F2023-02-27-hello-world","2023-02-27 22:28:00",{"title":15179,"description":78},"articles\u002F2023-02-27-hello-world","Go語言一些基本操作",[10144],"AGAAFRb7gZGddzu0isU-2bKBkb4OTw3OC0QkXbImczw",{"id":15391,"title":15392,"body":15393,"category":10023,"description":78,"extension":83,"image":11006,"meta":15701,"navigation":86,"path":15702,"pubDate":15703,"seo":15704,"status":86,"stem":15705,"summary":15706,"tags":15707,"__hash__":15708},"content\u002Farticles\u002F2023-02-26-go-lang-setup.md","《Go 學習筆記1》開發環境建置",{"type":8,"value":15394,"toc":15693},[15395,15399,15402,15406,15412,15415,15421,15427,15430,15433,15437,15446,15460,15464,15473,15487,15491,15496,15500,15526,15535,15540,15581,15590,15608,15613,15650,15653,15656,15668,15672,15690],[10129,15396,15397],{},[15,15398,10133],{},[15,15400,15401],{},"先從安裝開發環境",[100,15403,15405],{"id":15404},"go-語言官網","Go 語言官網",[15,15407,15408],{},[726,15409,15410],{"href":15410,"rel":15411},"https:\u002F\u002Fgo.dev\u002F",[730],[100,15413,15414],{"id":15414},"官網下載頁",[15,15416,15417],{},[726,15418,15419],{"href":15419,"rel":15420},"https:\u002F\u002Fgo.dev\u002Fdl\u002F",[730],[15,15422,15423],{},[939,15424],{"alt":15425,"src":15426},"alt Go語言下載","\u002Farticles\u002F2023-02-26-go-lang-setup\u002FPasted-image-20230124103550.png",[15,15428,15429],{},"基本上 Windows 和 MacOS 只要下載相對應的的版本，然後依安裝精靈，一步一步安裝裝即可。",[15,15431,15432],{},"也可以用指令安裝",[100,15434,15436],{"id":15435},"windows-指令安裝","Windows 指令安裝",[15,15438,15439,15440,15445],{},"在 Windows 環境下，要透過指令安裝，可以用安裝 ",[726,15441,15444],{"href":15442,"rel":15443},"https:\u002F\u002Fchocolatey.org\u002F",[730],"chocolate"," 後，以下面指令安裝",[146,15447,15449],{"className":148,"code":15448,"language":150,"meta":78,"style":78},"choco install golang\n",[19,15450,15451],{"__ignoreMap":78},[154,15452,15453,15455,15457],{"class":156,"line":157},[154,15454,1533],{"class":160},[154,15456,1039],{"class":163},[154,15458,15459],{"class":163}," golang\n",[100,15461,15463],{"id":15462},"macos-指令安裝","MacOS 指令安裝",[15,15465,15466,15467,15472],{},"在 MacOS 環境下，則可透過 ",[726,15468,15471],{"href":15469,"rel":15470},"https:\u002F\u002Fbrew.sh\u002Findex_zh-tw",[730],"Homebrew"," 這個套件管理工具，進行安裝，指令如下：",[146,15474,15476],{"className":148,"code":15475,"language":150,"meta":78,"style":78},"brew install go\n",[19,15477,15478],{"__ignoreMap":78},[154,15479,15480,15482,15484],{"class":156,"line":157},[154,15481,1036],{"class":160},[154,15483,1039],{"class":163},[154,15485,15486],{"class":163}," go\n",[100,15488,15490],{"id":15489},"linux-指令安裝","Linux 指令安裝",[15,15492,15493],{},[783,15494,15495],{},"一般 Linux",[259,15497,15498],{},[115,15499,8088],{},[146,15501,15503],{"className":148,"code":15502,"language":150,"meta":78,"style":78},"wget https:\u002F\u002Fdl.google.com\u002Fgo\u002Fgo\u003C版本號>linux-amd64.tar.gz\n",[19,15504,15505],{"__ignoreMap":78},[154,15506,15507,15510,15513,15515,15518,15521,15523],{"class":156,"line":157},[154,15508,15509],{"class":160},"wget",[154,15511,15512],{"class":163}," https:\u002F\u002Fdl.google.com\u002Fgo\u002Fgo",[154,15514,3449],{"class":1067},[154,15516,15517],{"class":163},"版本",[154,15519,15520],{"class":192},"號",[154,15522,4199],{"class":1067},[154,15524,15525],{"class":163},"linux-amd64.tar.gz\n",[112,15527,15528],{},[115,15529,15530,15531,15534],{},"版本號：可至 ",[726,15532,15414],{"href":15419,"rel":15533},[730]," 查詢可安裝的版本號",[259,15536,15537],{"start":79},[115,15538,15539],{},"解壓縮",[146,15541,15543],{"className":148,"code":15542,"language":150,"meta":78,"style":78},"   sudo tar -xvf go\u003C版本號>linux-amd64.tar.gz\n   sudo mv go \u002Fusr\u002Flocal\n",[19,15544,15545,15569],{"__ignoreMap":78},[154,15546,15547,15550,15553,15556,15559,15561,15563,15565,15567],{"class":156,"line":157},[154,15548,15549],{"class":160},"   sudo",[154,15551,15552],{"class":163}," tar",[154,15554,15555],{"class":250}," -xvf",[154,15557,15558],{"class":163}," go",[154,15560,3449],{"class":1067},[154,15562,15517],{"class":163},[154,15564,15520],{"class":192},[154,15566,4199],{"class":1067},[154,15568,15525],{"class":163},[154,15570,15571,15573,15576,15578],{"class":156,"line":79},[154,15572,15549],{"class":160},[154,15574,15575],{"class":163}," mv",[154,15577,15558],{"class":163},[154,15579,15580],{"class":163}," \u002Fusr\u002Flocal\n",[259,15582,15583],{"start":314},[115,15584,15585,15586,15589],{},"設定環境變數\n在 ",[19,15587,15588],{},"~\u002F.profile"," 最後一行加上",[146,15591,15593],{"className":148,"code":15592,"language":150,"meta":78,"style":78},"   export PATH=$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin\n",[19,15594,15595],{"__ignoreMap":78},[154,15596,15597,15600,15603,15605],{"class":156,"line":157},[154,15598,15599],{"class":1067},"   export",[154,15601,15602],{"class":192}," PATH",[154,15604,3457],{"class":1067},[154,15606,15607],{"class":192},"$PATH:\u002Fusr\u002Flocal\u002Fgo\u002Fbin\n",[15,15609,15610],{},[783,15611,15612],{},"Ubuntu 指令安裝",[146,15614,15616],{"className":148,"code":15615,"language":150,"meta":78,"style":78},"sudo add-apt-repository ppa:longsleep\u002Fgolang-backports\nsudo apt update\nsudo apt install golang-go\n",[19,15617,15618,15629,15639],{"__ignoreMap":78},[154,15619,15620,15623,15626],{"class":156,"line":157},[154,15621,15622],{"class":160},"sudo",[154,15624,15625],{"class":163}," add-apt-repository",[154,15627,15628],{"class":163}," ppa:longsleep\u002Fgolang-backports\n",[154,15630,15631,15633,15636],{"class":156,"line":79},[154,15632,15622],{"class":160},[154,15634,15635],{"class":163}," apt",[154,15637,15638],{"class":163}," update\n",[154,15640,15641,15643,15645,15647],{"class":156,"line":314},[154,15642,15622],{"class":160},[154,15644,15635],{"class":163},[154,15646,1039],{"class":163},[154,15648,15649],{"class":163}," golang-go\n",[100,15651,15652],{"id":15652},"安裝環境測試",[15,15654,15655],{},"使用下列指令，即可知道安裝環境是否成功，亦可知曉安裝版本號",[146,15657,15659],{"className":148,"code":15658,"language":150,"meta":78,"style":78},"go version\n",[19,15660,15661],{"__ignoreMap":78},[154,15662,15663,15665],{"class":156,"line":157},[154,15664,10144],{"class":160},[154,15666,15667],{"class":163}," version\n",[15,15669,15670],{},[783,15671,5790],{},[146,15673,15675],{"className":148,"code":15674,"language":150,"meta":78,"style":78},"go version go1.20.1 darwin\u002Farm64\n",[19,15676,15677],{"__ignoreMap":78},[154,15678,15679,15681,15684,15687],{"class":156,"line":157},[154,15680,10144],{"class":160},[154,15682,15683],{"class":163}," version",[154,15685,15686],{"class":163}," go1.20.1",[154,15688,15689],{"class":163}," darwin\u002Farm64\n",[675,15691,15692],{},"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":78,"searchDepth":79,"depth":79,"links":15694},[15695,15696,15697,15698,15699,15700],{"id":15404,"depth":79,"text":15405},{"id":15414,"depth":79,"text":15414},{"id":15435,"depth":79,"text":15436},{"id":15462,"depth":79,"text":15463},{"id":15489,"depth":79,"text":15490},{"id":15652,"depth":79,"text":15652},{},"\u002Farticles\u002F2023-02-26-go-lang-setup","2023-02-26 22:07:00",{"title":15392,"description":78},"articles\u002F2023-02-26-go-lang-setup","Go語言開發環境建置",[10144],"1MsaGwXGPaKjHByWDr40lLNGtsFtegUMCMt7bttsgQ8",{"id":15710,"title":15711,"body":15712,"category":7999,"description":16079,"extension":83,"image":16080,"meta":16081,"navigation":86,"path":16082,"pubDate":16083,"seo":16084,"status":86,"stem":16085,"summary":16086,"tags":16087,"__hash__":16089},"content\u002Farticles\u002F2023-01-17-docker-postgresql-import-export.md","Docker 裡的 Postgresql 的匯入與匯出",{"type":8,"value":15713,"toc":16075},[15714,15723,15726,15733,15740,15743,15817,15849,15852,15858,15864,15867,15936,15958,15965,15967,16042,16072],[15,15715,15716,15717,15722],{},"我們可以用 ",[726,15718,15721],{"href":15719,"rel":15720},"https:\u002F\u002Fhub.docker.com\u002F_\u002Fadminer",[730],"Adminer"," 這個資料庫管理工具，來進行匯入匯出，但檔案太大時，用 Adminer 就會顯得力不從心，而我們另外一個選擇，就是透過指令匯入匯出 SQL 檔。",[100,15724,15725],{"id":15725},"匯入",[15,15727,15728,15729,15732],{},"要將 SQL 檔案匯入到 Docker 內的 PostgreSQL 資料庫，您可以使用 ",[19,15730,15731],{},"docker exec","指令來執行 SQL 檔案。首先，確保您已經在 Docker 內運行 PostgreSQL 資料庫，並且已經知道資料庫的容器名稱。",[15,15734,15735,15736,15739],{},"而 Postgresql 要匯入 SQL 檔時，我們會使用 ",[19,15737,15738],{},"psql"," 這個指令",[15,15741,15742],{},"完整指令與參數如下：",[146,15744,15746],{"className":148,"code":15745,"language":150,"meta":78,"style":78},"docker exec -i \u003Ccontainer_name> psql -U \u003Cusername> -d \u003Cdatabase_name> -n \u003Cschema_name> \u003C \u003Csql_file>.sql\n",[19,15747,15748],{"__ignoreMap":78},[154,15749,15750,15752,15755,15757,15759,15762,15764,15766,15769,15772,15774,15777,15779,15781,15783,15785,15788,15790,15792,15794,15796,15799,15801,15803,15805,15807,15810,15812,15814],{"class":156,"line":157},[154,15751,7092],{"class":160},[154,15753,15754],{"class":163}," exec",[154,15756,2708],{"class":250},[154,15758,6940],{"class":1067},[154,15760,15761],{"class":163},"container_nam",[154,15763,5598],{"class":192},[154,15765,4199],{"class":1067},[154,15767,15768],{"class":163}," psql",[154,15770,15771],{"class":250}," -U",[154,15773,6940],{"class":1067},[154,15775,15776],{"class":163},"usernam",[154,15778,5598],{"class":192},[154,15780,4199],{"class":1067},[154,15782,8275],{"class":250},[154,15784,6940],{"class":1067},[154,15786,15787],{"class":163},"database_nam",[154,15789,5598],{"class":192},[154,15791,4199],{"class":1067},[154,15793,6075],{"class":250},[154,15795,6940],{"class":1067},[154,15797,15798],{"class":163},"schema_nam",[154,15800,5598],{"class":192},[154,15802,4199],{"class":1067},[154,15804,6940],{"class":1067},[154,15806,6940],{"class":1067},[154,15808,15809],{"class":163},"sql_fil",[154,15811,5598],{"class":192},[154,15813,4199],{"class":1067},[154,15815,15816],{"class":163},".sql\n",[112,15818,15819,15825,15831,15837,15843],{},[115,15820,15821,15824],{},[19,15822,15823],{},"container_name","：PostgreSQL 容器的名稱",[115,15826,15827,15830],{},[19,15828,15829],{},"username","：資料庫中使用的使用者名稱",[115,15832,15833,15836],{},[19,15834,15835],{},"database_name","： 資料庫名稱",[115,15838,15839,15842],{},[19,15840,15841],{},"schema_name","：要匯入 SQL 檔案的 schema 名稱",[115,15844,15845,15848],{},[19,15846,15847],{},"sql_file","：SQL 檔案 路徑",[100,15850,15851],{"id":15851},"匯出",[15,15853,15854,15855,15857],{},"要將 Docker 裡 Postgresql 服務器中的資料匯出時，我們一樣要使用 ",[19,15856,15731],{}," 這個指令，一樣我們先確認 Docker 內的 Postgresql 資料庫是正常運作。",[15,15859,15860,15861,15739],{},"而 Postgresql 要匯出 SQL 檔時，我們會使用 ",[19,15862,15863],{},"pg_dump",[15,15865,15866],{},"完整指令如下：",[146,15868,15870],{"className":148,"code":15869,"language":150,"meta":78,"style":78},"docker exec -i \u003Ccontainer_name> pg_dump -U \u003Cusername> -d \u003Cusername> -n \u003Cschema_name> > \u003Csql_path>.sql\n",[19,15871,15872],{"__ignoreMap":78},[154,15873,15874,15876,15878,15880,15882,15884,15886,15888,15891,15893,15895,15897,15899,15901,15903,15905,15907,15909,15911,15913,15915,15917,15919,15921,15924,15926,15929,15932,15934],{"class":156,"line":157},[154,15875,7092],{"class":160},[154,15877,15754],{"class":163},[154,15879,2708],{"class":250},[154,15881,6940],{"class":1067},[154,15883,15761],{"class":163},[154,15885,5598],{"class":192},[154,15887,4199],{"class":1067},[154,15889,15890],{"class":163}," pg_dump",[154,15892,15771],{"class":250},[154,15894,6940],{"class":1067},[154,15896,15776],{"class":163},[154,15898,5598],{"class":192},[154,15900,4199],{"class":1067},[154,15902,8275],{"class":250},[154,15904,6940],{"class":1067},[154,15906,15776],{"class":163},[154,15908,5598],{"class":192},[154,15910,4199],{"class":1067},[154,15912,6075],{"class":250},[154,15914,6940],{"class":1067},[154,15916,15798],{"class":163},[154,15918,5598],{"class":192},[154,15920,4199],{"class":1067},[154,15922,15923],{"class":1067}," >",[154,15925,6940],{"class":1067},[154,15927,15928],{"class":163},"sql_pat",[154,15930,15931],{"class":192},"h",[154,15933,4199],{"class":1067},[154,15935,15816],{"class":163},[112,15937,15938,15942,15946,15950,15954],{},[115,15939,15940,15824],{},[19,15941,15823],{},[115,15943,15944,15830],{},[19,15945,15829],{},[115,15947,15948,15836],{},[19,15949,15835],{},[115,15951,15952,15842],{},[19,15953,15841],{},[115,15955,15956,15848],{},[19,15957,15847],{},[15,15959,15960,15961,15964],{},"而我們也可以在匯出時，直接匯出 gzip 壓縮檔，只要我們加上 ",[19,15962,15963],{},"pipe line gzip"," 的指令即可",[15,15966,15866],{},[146,15968,15970],{"className":148,"code":15969,"language":150,"meta":78,"style":78},"docker exec -i \u003Ccontainer_name> pg_dump -U \u003Cusername> -d \u003Cusername> -n \u003Cschema_name> | gzip -9 > \u003Czip_path>.sql.gz\n",[19,15971,15972],{"__ignoreMap":78},[154,15973,15974,15976,15978,15980,15982,15984,15986,15988,15990,15992,15994,15996,15998,16000,16002,16004,16006,16008,16010,16012,16014,16016,16018,16020,16022,16025,16028,16030,16032,16035,16037,16039],{"class":156,"line":157},[154,15975,7092],{"class":160},[154,15977,15754],{"class":163},[154,15979,2708],{"class":250},[154,15981,6940],{"class":1067},[154,15983,15761],{"class":163},[154,15985,5598],{"class":192},[154,15987,4199],{"class":1067},[154,15989,15890],{"class":163},[154,15991,15771],{"class":250},[154,15993,6940],{"class":1067},[154,15995,15776],{"class":163},[154,15997,5598],{"class":192},[154,15999,4199],{"class":1067},[154,16001,8275],{"class":250},[154,16003,6940],{"class":1067},[154,16005,15776],{"class":163},[154,16007,5598],{"class":192},[154,16009,4199],{"class":1067},[154,16011,6075],{"class":250},[154,16013,6940],{"class":1067},[154,16015,15798],{"class":163},[154,16017,5598],{"class":192},[154,16019,4199],{"class":1067},[154,16021,1068],{"class":1067},[154,16023,16024],{"class":160}," gzip",[154,16026,16027],{"class":250}," -9",[154,16029,15923],{"class":1067},[154,16031,6940],{"class":1067},[154,16033,16034],{"class":163},"zip_pat",[154,16036,15931],{"class":192},[154,16038,4199],{"class":1067},[154,16040,16041],{"class":163},".sql.gz\n",[112,16043,16044,16048,16052,16056,16060,16066],{},[115,16045,16046,15824],{},[19,16047,15823],{},[115,16049,16050,15830],{},[19,16051,15829],{},[115,16053,16054,15836],{},[19,16055,15835],{},[115,16057,16058,15842],{},[19,16059,15841],{},[115,16061,16062,16065],{},[19,16063,16064],{},"zip_path"," ：壓縮檔路徑",[115,16067,16068,16071],{},[19,16069,16070],{},"-9","：為壓縮等級，範圍為 0~9，其中 0 為不壓縮僅打包，9 為最高壓縮等級，這裡也可以不指定壓縮等級，它則會以預設 6 來進行壓縮",[675,16073,16074],{},"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":78,"searchDepth":79,"depth":79,"links":16076},[16077,16078],{"id":15725,"depth":79,"text":15725},{"id":15851,"depth":79,"text":15851},"我們可以用 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":15711,"description":16079},"articles\u002F2023-01-17-docker-postgresql-import-export","在 Docker 的環境，如何匯入匯出 Postgresql",[16088,7093],"PostgreSQL","jNGUE7713QOJ1uS2wd7Q70oQzHSviRpYIk8u2R8U67Y",{"id":16091,"title":16092,"body":16093,"category":16504,"description":78,"extension":83,"image":16505,"meta":16506,"navigation":86,"path":16507,"pubDate":16508,"seo":16509,"status":86,"stem":16510,"summary":16511,"tags":16512,"__hash__":16513},"content\u002Farticles\u002F2022-05-28-front-end-tool.md","2022 前端常用的套件與工具",{"type":8,"value":16094,"toc":16493},[16095,16098,16101,16104,16112,16115,16134,16144,16147,16233,16236,16250,16252,16255,16258,16263,16279,16284,16297,16302,16356,16359,16373,16379,16382,16385,16396,16399,16405,16409,16412,16418,16422,16425,16431,16435,16438,16455,16461,16464,16468,16471,16477,16481,16484,16490],[100,16096,16097],{"id":16097},"nvm",[15,16099,16100],{},"NVM 是 Node Version Manager 的縮寫，主要功能就可以快速切換 Node.js 版本。",[15,16102,16103],{},"使用場景：",[259,16105,16106,16109],{},[115,16107,16108],{},"維護多個不同時期所開發專案",[115,16110,16111],{},"編譯老舊專案",[15,16113,16114],{},"Linux \u002F MacOS 安裝方式",[146,16116,16118],{"className":148,"code":16117,"language":150,"meta":78,"style":78},"curl -o- https:\u002F\u002Fraw.githubusercontent.com\u002Fnvm-sh\u002Fnvm\u002Fv0.39.1\u002Finstall.sh | bash\n",[19,16119,16120],{"__ignoreMap":78},[154,16121,16122,16124,16127,16130,16132],{"class":156,"line":157},[154,16123,1058],{"class":160},[154,16125,16126],{"class":250}," -o-",[154,16128,16129],{"class":163}," https:\u002F\u002Fraw.githubusercontent.com\u002Fnvm-sh\u002Fnvm\u002Fv0.39.1\u002Finstall.sh",[154,16131,1068],{"class":1067},[154,16133,1071],{"class":160},[15,16135,16136,16137,16140,16141],{},"在終端機設定檔 bash 環境下編輯 ",[19,16138,16139],{},"~\u002F.bashrc"," 或 zsh 環境下編輯 ",[19,16142,16143],{},"~\u002F.zshrc",[15,16145,16146],{},"在文件內加入以下設定：",[146,16148,16150],{"className":148,"code":16149,"language":150,"meta":78,"style":78},"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,16151,16152,16202],{"__ignoreMap":78},[154,16153,16154,16157,16160,16162,16165,16168,16171,16174,16177,16179,16182,16185,16188,16191,16194,16196,16199],{"class":156,"line":157},[154,16155,16156],{"class":1067},"export",[154,16158,16159],{"class":192}," NVM_DIR",[154,16161,3457],{"class":1067},[154,16163,16164],{"class":163},"\"$([ ",[154,16166,16167],{"class":1067},"-z",[154,16169,16170],{"class":163}," \"${",[154,16172,16173],{"class":192},"XDG_CONFIG_HOME-",[154,16175,16176],{"class":163},"}\" ] && ",[154,16178,8534],{"class":250},[154,16180,16181],{"class":163}," %s \"${",[154,16183,16184],{"class":192},"HOME",[154,16186,16187],{"class":163},"}\u002F.nvm\" ",[154,16189,16190],{"class":1067},"||",[154,16192,16193],{"class":250}," printf",[154,16195,16181],{"class":163},[154,16197,16198],{"class":192},"XDG_CONFIG_HOME",[154,16200,16201],{"class":163},"}\u002Fnvm\")\"\n",[154,16203,16204,16207,16210,16212,16215,16218,16221,16224,16226,16228,16230],{"class":156,"line":79},[154,16205,16206],{"class":192},"[ ",[154,16208,16209],{"class":1067},"-s",[154,16211,10225],{"class":163},[154,16213,16214],{"class":192},"$NVM_DIR",[154,16216,16217],{"class":163},"\u002Fnvm.sh\"",[154,16219,16220],{"class":192}," ] && ",[154,16222,16223],{"class":160},"\\.",[154,16225,10225],{"class":163},[154,16227,16214],{"class":192},[154,16229,16217],{"class":163},[154,16231,16232],{"class":298}," # This loads nvm\n",[15,16234,16235],{},"然後執行下面指令",[112,16237,16238,16244],{},[115,16239,16240,16241],{},"bash：",[19,16242,16243],{},"source ~\u002F.bashrc",[115,16245,16246,16247],{},"zsh: ",[19,16248,16249],{},"source ~\u002F.zshrc",[100,16251,1657],{"id":1657},[15,16253,16254],{},"是 Facebook 所開發的前端工具，是 Node.js 的套件管理，算是 npm 的替代品，優點是速度較快。",[15,16256,16257],{},"安裝方式：",[15,16259,16260],{},[783,16261,16262],{},"使用 npm 安裝",[146,16264,16266],{"className":148,"code":16265,"language":150,"meta":78,"style":78},"npm install -g yarn\n",[19,16267,16268],{"__ignoreMap":78},[154,16269,16270,16272,16274,16276],{"class":156,"line":157},[154,16271,1570],{"class":160},[154,16273,1039],{"class":163},[154,16275,1575],{"class":250},[154,16277,16278],{"class":163}," yarn\n",[15,16280,16281],{},[783,16282,16283],{},"MacOS安裝",[146,16285,16287],{"className":148,"code":16286,"language":150,"meta":78,"style":78},"brew install yarn\n",[19,16288,16289],{"__ignoreMap":78},[154,16290,16291,16293,16295],{"class":156,"line":157},[154,16292,1036],{"class":160},[154,16294,1039],{"class":163},[154,16296,16278],{"class":163},[15,16298,16299],{},[783,16300,16301],{},"Ubuntu安裝",[146,16303,16305],{"className":148,"code":16304,"language":150,"meta":78,"style":78},"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,16306,16307,16331,16335],{"__ignoreMap":78},[154,16308,16309,16311,16314,16317,16319,16322,16325,16327,16329],{"class":156,"line":157},[154,16310,1058],{"class":160},[154,16312,16313],{"class":250}," -sS",[154,16315,16316],{"class":163}," https:\u002F\u002Fdl.yarnpkg.com\u002Fdebian\u002Fpubkey.gpg",[154,16318,1068],{"class":1067},[154,16320,16321],{"class":160}," sudo",[154,16323,16324],{"class":163}," apt-key",[154,16326,1663],{"class":163},[154,16328,2865],{"class":163},[154,16330,311],{"class":192},[154,16332,16333],{"class":156,"line":79},[154,16334,317],{"emptyLinePlaceholder":86},[154,16336,16337,16339,16342,16345,16348,16350,16352,16354],{"class":156,"line":314},[154,16338,15622],{"class":160},[154,16340,16341],{"class":163}," apt-get",[154,16343,16344],{"class":163}," update",[154,16346,16347],{"class":192}," && ",[154,16349,15622],{"class":160},[154,16351,16341],{"class":163},[154,16353,1039],{"class":163},[154,16355,16278],{"class":163},[100,16357,8022],{"id":16358},"nuxtjs",[15,16360,16361,16362,1303,16365,16368,16369,16372],{},"是一個混合式 Vue 框架，支援 ",[783,16363,16364],{},"服務器渲染(SSR)",[783,16366,16367],{},"生成靜態頁面","或是",[783,16370,16371],{},"單頁應用程式(SPA)","，並優化了SEO，也支援 TypeScript。",[15,16374,7020,16375],{},[726,16376,16377],{"href":16377,"rel":16378},"https:\u002F\u002Fnuxtjs.org\u002F",[730],[100,16380,16381],{"id":16381},"tailwindcss",[15,16383,16384],{},"是一個近期相當流行的 Utility Framework，也是我近期最用的 UI 構建工具，其特色包含：",[259,16386,16387,16390,16393],{},[115,16388,16389],{},"快速上手",[115,16391,16392],{},"快速建置",[115,16394,16395],{},"高度客製化",[15,16397,16398],{},"因為以上特色，真得讓人一用就愛上了。",[15,16400,7020,16401],{},[726,16402,16403],{"href":16403,"rel":16404},"https:\u002F\u002Ftailwindcss.com\u002F",[730],[100,16406,16408],{"id":16407},"bootstrap","Bootstrap",[15,16410,16411],{},"相當知名且老牌的 UI component Framework，可以快速透過各種組件的組合建立 Web App，不過其實近期的專案，我已很少用到 Bootstrap 了。",[15,16413,7020,16414],{},[726,16415,16416],{"href":16416,"rel":16417},"https:\u002F\u002Fgetbootstrap.com\u002F",[730],[100,16419,16421],{"id":16420},"element-ui","element UI",[15,16423,16424],{},"這是我也滿喜歡的一個 UI component Framework，相對於 Bootstrap 它的組件更加豐富，特別適合拿來做管理介面。",[15,16426,7020,16427],{},[726,16428,16429],{"href":16429,"rel":16430},"https:\u002F\u002Felement.eleme.io\u002F",[730],[100,16432,16434],{"id":16433},"momentjs","Moment.js",[15,16436,16437],{},"是一個專門處理日期與時間的Library，功能包含了：",[259,16439,16440,16443,16446,16449,16452],{},[115,16441,16442],{},"日期時間格式化",[115,16444,16445],{},"日期時間相減運算",[115,16447,16448],{},"相對時間時間",[115,16450,16451],{},"時區轉換",[115,16453,16454],{},"支持多語系",[15,16456,7020,16457],{},[726,16458,16459],{"href":16459,"rel":16460},"https:\u002F\u002Fmomentjs.com\u002F",[730],[15,16462,16463],{},"對於日期時間的處理，Moment.js 幾乎都可以滿足",[100,16465,16467],{"id":16466},"lodash","Lodash",[15,16469,16470],{},"在用 javascript 做資料處理，Lodash 可以幫我們省去很多時間。",[15,16472,7020,16473],{},[726,16474,16475],{"href":16475,"rel":16476},"https:\u002F\u002Flodash.com\u002F",[730],[100,16478,16480],{"id":16479},"apache-echarts","Apache ECharts",[15,16482,16483],{},"這是一個開源的繪圖工具，當做數據分析時，需要圖表統計時，ECharts 是不錯的選擇",[15,16485,7020,16486],{},[726,16487,16488],{"href":16488,"rel":16489},"https:\u002F\u002Fecharts.apache.org\u002F",[730],[675,16491,16492],{},"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":78,"searchDepth":79,"depth":79,"links":16494},[16495,16496,16497,16498,16499,16500,16501,16502,16503],{"id":16097,"depth":79,"text":16097},{"id":1657,"depth":79,"text":1657},{"id":16358,"depth":79,"text":8022},{"id":16381,"depth":79,"text":16381},{"id":16407,"depth":79,"text":16408},{"id":16420,"depth":79,"text":16421},{"id":16433,"depth":79,"text":16434},{"id":16466,"depth":79,"text":16467},{"id":16479,"depth":79,"text":16480},"frontend","\u002Fimages\u002Farticles\u002F2022-06-03-frontend-tool\u002Fcover.png",{},"\u002Farticles\u002F2022-05-28-front-end-tool","2022-05-28 11:00:00",{"title":16092,"description":78},"articles\u002F2022-05-28-front-end-tool","這裡收集了我開發前端時，常用的套件與工具",[3875,3427,3688],"aULNoAsXNxW4_qR3-D3eYMi5LPuZ1DlIjYcmbq496Kw",{"id":16515,"title":16516,"body":16517,"category":1401,"description":78,"extension":83,"image":16625,"meta":16626,"navigation":86,"path":16627,"pubDate":16628,"seo":16629,"status":86,"stem":16630,"summary":16631,"tags":16632,"__hash__":16633},"content\u002Farticles\u002F2022-04-27-develop-tool.md","開發環境工具介紹-環境篇",{"type":8,"value":16518,"toc":16616},[16519,16521,16524,16530,16534,16537,16544,16548,16551,16557,16559,16562,16568,16571,16574,16581,16583,16586,16593,16597,16608],[100,16520,7093],{"id":7092},[15,16522,16523],{},"有別於傳統虛擬機以作業系統為中心，Docker 則是以應用程式為中心，在達成虛擬化，並不需要完整載入完整的 Guest OS，而只要啟用應用層級程式及相關函式，因此其優勢，不需完整安裝 Guest OS 節省硬碟資源，另外啟用速度快，也是其最大優勢。",[15,16525,7020,16526],{},[726,16527,16529],{"href":7101,"rel":16528},[730],"Home - Docker",[100,16531,16533],{"id":16532},"laradock","Laradock",[15,16535,16536],{},"這應該在 Docker 上最完整的 PHP 開發環境。支持各版本 PHP 切換，支援主流資料庫，如 MySQL、Postgres、MariaDB及各種常用伺服器服務。",[15,16538,16539,16540],{},"官網： ",[726,16541,16542],{"href":16542,"rel":16543},"https:\u002F\u002Flaradock.io\u002F",[730],[100,16545,16547],{"id":16546},"visual-studio-code","Visual Studio Code",[15,16549,16550],{},"微軟開發的開源文字編器，相當受社群歡迎，支援 Windows、MacOS、Linux 三大主流作業系統。另外有各種插件可使用，功能不輸需要付費的IDE。",[15,16552,7020,16553],{},[726,16554,16556],{"href":7023,"rel":16555},[730],"Visual Studio Code - Code Editing. Redefined",[100,16558,7054],{"id":7053},[15,16560,16561],{},"相當知名的 Rest API 測試工具，支援各種API認證、常用的 http method，及常用 Http 的 Authorizing",[15,16563,7020,16564],{},[726,16565,16567],{"href":7062,"rel":16566},[730],"Postman API Platform | Sign Up for Free",[100,16569,16570],{"id":6108},"Git",[15,16572,16573],{},"是一個免費且開源的版控軟體，是目前最主流的版控軟體，支援MacOS、Ｗindows、Linux多平台",[15,16575,7020,16576],{},[726,16577,16580],{"href":16578,"rel":16579},"https:\u002F\u002Fgit-scm.com\u002F",[730],"Git (git-scm.com)",[100,16582,7067],{"id":7066},[15,16584,16585],{},"Git 知名的原始碼代管服務平台，所發行 Git GUI 免費軟體，目前提供 Windows 和 MacOS，介面相當友善， 對 Git 的功能支援的相當完整，很適合 Git 初心者使用。",[15,16587,7020,16588],{},[726,16589,16592],{"href":16590,"rel":16591},"https:\u002F\u002Fdesktop.github.com\u002F",[730],"GitHub Desktop | Simple collaboration from your desktop",[100,16594,16596],{"id":16595},"zsh-command-line-oh-my-zsh","zsh Command Line + oh my zsh",[15,16598,16599,16600,3112,16602,16604,16605,16607],{},"開發網站時常要用到 Command Line，雖然 ",[19,16601,1410],{},[19,16603,3111],{}," 都支援 ",[19,16606,150],{},"，但更喜歡 zsh + oh my zsh 各種插件，針對 git 優化，指令提醒功能，甚致可以顯示CPU、記憶體使用量等潮到爆的功能，你也可自訂佈景，讓你的 Command Line 呈現簡約風格。",[15,16609,16610,16611],{},"官綱：",[726,16612,16615],{"href":16613,"rel":16614},"https:\u002F\u002Fohmyz.sh\u002F",[730],"Oh My zsh官網",{"title":78,"searchDepth":79,"depth":79,"links":16617},[16618,16619,16620,16621,16622,16623,16624],{"id":7092,"depth":79,"text":7093},{"id":16532,"depth":79,"text":16533},{"id":16546,"depth":79,"text":16547},{"id":7053,"depth":79,"text":7054},{"id":6108,"depth":79,"text":16570},{"id":7066,"depth":79,"text":7067},{"id":16595,"depth":79,"text":16596},"\u002Fimages\u002Farticles\u002F2022-04-27-develop-tool\u002Fcover.png",{},"\u002Farticles\u002F2022-04-27-develop-tool","2022-04-27 12:00:00",{"title":16516,"description":78},"articles\u002F2022-04-27-develop-tool","記錄自已在網站開發時，常用的工具",[1401],"vI9Ah-vhtRDUUlZPJuEb9VQPYrnvz4BqrjLqFerjxAY",{"id":16635,"title":16636,"body":16637,"category":1401,"description":78,"extension":83,"image":16997,"meta":16998,"navigation":86,"path":16999,"pubDate":17000,"seo":17001,"status":86,"stem":17002,"summary":17003,"tags":17004,"__hash__":17005},"content\u002Farticles\u002F2022-04-10-mac-os-tool.md","大推！MacOS 上好用軟體集",{"type":8,"value":16638,"toc":16979},[16639,16643,16660,16666,16668,16690,16693,16703,16708,16710,16717,16743,16750,16753,16769,16771,16774,16791,16794,16800,16807,16811,16814,16820,16822,16828,16834,16836,16846,16851,16853,16856,16861,16865,16868,16874,16880,16882,16898,16900,16903,16908,16910,16913,16918,16922,16925,16928,16933,16937,16940,16945,16947,16950,16955,16957,16960,16965,16967,16970,16976],[100,16640,16642],{"id":16641},"homebrew","HomeBrew",[15,16644,16645,16646,16649,16650,16653,16654,16649,16657],{},"MacOS 上的套件管理，類似 ",[783,16647,16648],{},"Ubuntu"," 上的 ",[19,16651,16652],{},"apt"," 或是 ",[783,16655,16656],{},"CentOS",[19,16658,16659],{},"yum",[15,16661,7020,16662],{},[726,16663,16664],{"href":16664,"rel":16665},"https:\u002F\u002Fbrew.sh",[730],[15,16667,16257],{},[146,16669,16671],{"className":148,"code":16670,"language":150,"meta":78,"style":78},"\u002Fbin\u002Fbash -c \"$(curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002FHomebrew\u002Finstall\u002FHEAD\u002Finstall.sh)\"\n",[19,16672,16673],{"__ignoreMap":78},[154,16674,16675,16678,16680,16683,16685,16687],{"class":156,"line":157},[154,16676,16677],{"class":160},"\u002Fbin\u002Fbash",[154,16679,2878],{"class":250},[154,16681,16682],{"class":163}," \"$(",[154,16684,1058],{"class":160},[154,16686,1061],{"class":250},[154,16688,16689],{"class":163}," https:\u002F\u002Fraw.githubusercontent.com\u002FHomebrew\u002Finstall\u002FHEAD\u002Finstall.sh)\"\n",[100,16691,16692],{"id":7027},"iTerm2",[15,16694,16695,16696,16698,16699,16702],{},"雖然MacOS有內建terminal，但 ",[19,16697,16692],{},"更加強大，再加上 ",[19,16700,16701],{},"zsh","，真得是開發者必裝軟體",[15,16704,7020,16705],{},[726,16706,7036],{"href":7036,"rel":16707},[730],[100,16709,7325],{"id":7324},[15,16711,16712,16713,16716],{},"好用且",[783,16714,16715],{},"免費開源","的硬體監測軟體，可即時監測以下硬體資訊",[259,16718,16719,16722,16725,16728,16731,16734,16737,16740],{},[115,16720,16721],{},"CPU",[115,16723,16724],{},"RAM",[115,16726,16727],{},"GPU",[115,16729,16730],{},"DISK",[115,16732,16733],{},"溫度",[115,16735,16736],{},"網路使用狀況",[115,16738,16739],{},"電池",[115,16741,16742],{},"藍芽",[15,16744,16745,16746],{},"下載位置： ",[726,16747,16748],{"href":16748,"rel":16749},"https:\u002F\u002Fgithub.com\u002Fexelban\u002Fstats\u002Freleases",[730],[15,16751,16752],{},"HomeBrew 安裝",[146,16754,16756],{"className":148,"code":16755,"language":150,"meta":78,"style":78},"brew install --cask stats\n",[19,16757,16758],{"__ignoreMap":78},[154,16759,16760,16762,16764,16767],{"class":156,"line":157},[154,16761,1036],{"class":160},[154,16763,1039],{"class":163},[154,16765,16766],{"class":250}," --cask",[154,16768,164],{"class":163},[100,16770,7377],{"id":7376},[15,16772,16773],{},"是 MacOS 上相當好的螢幕截圖，功能如下：",[259,16775,16776,16779,16782,16785,16788],{},[115,16777,16778],{},"區域截圖",[115,16780,16781],{},"視窗截圖",[115,16783,16784],{},"捲動截圖 (截圖網頁時，超好用 👍)",[115,16786,16787],{},"截圖標示 (可標示矩形、圓形、直線、鉛筆、馬賽克、文字、序號、高亮區塊等)",[115,16789,16790],{},"釘選螢幕 (可在截圖後，將圖片釘在螢幕上)",[15,16792,16793],{},"另外也可付費解鎖更完整的功能",[15,16795,16539,16796],{},[726,16797,16798],{"href":16798,"rel":16799},"http:\u002F\u002Fxnipapp.com\u002F",[730],[15,16801,16802,16803],{},"App Store：",[726,16804,16805],{"href":16805,"rel":16806},"https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fxnip\u002Fid1221250572?mt=12",[730],[100,16808,16810],{"id":16809},"couleurs","Couleurs",[15,16812,16813],{},"這是一款簡單免費的螢幕選色器，操作上相當直覺。",[15,16815,16539,16816],{},[726,16817,16818],{"href":16818,"rel":16819},"https:\u002F\u002Fcouleursapp.com\u002F",[730],[100,16821,7390],{"id":7389},[15,16823,16824,16825,16827],{},"Apple 觸控板真得很好用，但當你改用滑鼠時，就會讓你感到非常悲劇，那悲催的卡頓感，真得讓人很崩潰，而 ",[783,16826,7390],{}," 就可以改善，滑鼠在MacOS上的使用體驗。",[15,16829,7020,16830],{},[726,16831,16832],{"href":16832,"rel":16833},"https:\u002F\u002Fmos.caldis.me\u002F",[730],[100,16835,991],{"id":7312},[15,16837,16838,16839,16842,16843,16845],{},"MacOS 在軟體解除安裝，一般是進到 ",[783,16840,16841],{},"應用程式"," 目錄程式中，直接刪除軟體即可，但必竟每個軟體設計都不同，常常刪除不乾淨，而 ",[19,16844,991],{}," 就可以很好的解決此問題。",[15,16847,7020,16848],{},[726,16849,7320],{"href":7320,"rel":16850},[730],[100,16852,7249],{"id":7248},[15,16854,16855],{},"MacOS上強大好用的影音播放器，支援大部分的影音格式播放，不用在額外安裝各種編碼器，這個播放器一個搞定。",[15,16857,7020,16858],{},[726,16859,7257],{"href":7257,"rel":16860},[730],[100,16862,16864],{"id":16863},"hidden-bar","Hidden Bar",[15,16866,16867],{},"當裝愈來愈多常駐軟體，就會發現上方系統列的ICON愈來愈多，而這個軟體可以暫時隱藏ICON，要用到時可隨時展開",[15,16869,16745,16870],{},[726,16871,16872],{"href":16872,"rel":16873},"https:\u002F\u002Fgithub.com\u002Fdwarvesf\u002Fhidden\u002Freleases",[730],[15,16875,16802,16876],{},[726,16877,16878],{"href":16878,"rel":16879},"https:\u002F\u002Fapps.apple.com\u002Ftw\u002Fapp\u002Fhidden-bar\u002F",[730],[15,16881,16752],{},[146,16883,16885],{"className":148,"code":16884,"language":150,"meta":78,"style":78},"brew install --cask hiddenbar\n",[19,16886,16887],{"__ignoreMap":78},[154,16888,16889,16891,16893,16895],{"class":156,"line":157},[154,16890,1036],{"class":160},[154,16892,1039],{"class":163},[154,16894,16766],{"class":250},[154,16896,16897],{"class":163}," hiddenbar\n",[100,16899,16547],{"id":16546},[15,16901,16902],{},"目前在程式開發上，站長使用的程式碼編輯器，擁有各類插件，可以加快開發速度。",[15,16904,7020,16905],{},[726,16906,7023],{"href":7023,"rel":16907},[730],[100,16909,7080],{"id":7079},[15,16911,16912],{},"雖雖 vscode 很強大，但有時讓人覺得有點肥大，若只是臨時要編輯文字檔，我會用這款輕量編輯器",[15,16914,7020,16915],{},[726,16916,7088],{"href":7088,"rel":16917},[730],[100,16919,16921],{"id":16920},"keka-壓縮軟體","KeKa 壓縮軟體",[15,16923,16924],{},"這是 MacOS 我用過最好用的壓縮軟體，支援多種壓縮格式，密碼保護，分片壓縮等功能，其中最棒是可「排除 MacOS 資源檔」檔的功能。",[15,16926,16927],{},"在以往直接在 MacOS 打包壓縮的檔案，在 Windows 環境下打開，總會多出一些讓使用者迷惑的檔案，而這個功能就會幫忙先排除這檔案。",[15,16929,7020,16930],{},[726,16931,7279],{"href":7279,"rel":16932},[730],[100,16934,16936],{"id":16935},"shottr","Shottr",[15,16938,16939],{},"另一款螢幕截圖軟體，除了一般截圖功能、馬賽克、OCR、釘圖、螢幕選色器 等功能。",[15,16941,7020,16942],{},[726,16943,7372],{"href":7372,"rel":16944},[730],[100,16946,7416],{"id":7415},[15,16948,16949],{},"MacOS 對於外接螢幕，相當不友善，無法用熱健去控制外接螢幕的亮度和音量，而 BetterDisplay 則可以解決這些問題。",[15,16951,7020,16952],{},[726,16953,7424],{"href":7424,"rel":16954},[730],[100,16956,7041],{"id":7040},[15,16958,16959],{},"支援 M1 晶片的虛擬機，除了以接近本機的速度在Apple Silicon上運行ARM64操作系統，在英特爾 Mac 上，x86\u002Fx64 作業系統可以虛擬化。",[15,16961,7584,16962],{},[726,16963,7049],{"href":7049,"rel":16964},[730],[100,16966,7338],{"id":7337},[15,16968,16969],{},"一款能大幅提升你工作效率的 Mac 軟體，可以取代 Spotlight，且功能更加狂大。",[15,16971,7584,16972],{},[726,16973,16974],{"href":16974,"rel":16975},"https:\u002F\u002Fwww.raycast.com\u002F",[730],[675,16977,16978],{},"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":78,"searchDepth":79,"depth":79,"links":16980},[16981,16982,16983,16984,16985,16986,16987,16988,16989,16990,16991,16992,16993,16994,16995,16996],{"id":16641,"depth":79,"text":16642},{"id":7027,"depth":79,"text":16692},{"id":7324,"depth":79,"text":7325},{"id":7376,"depth":79,"text":7377},{"id":16809,"depth":79,"text":16810},{"id":7389,"depth":79,"text":7390},{"id":7312,"depth":79,"text":991},{"id":7248,"depth":79,"text":7249},{"id":16863,"depth":79,"text":16864},{"id":16546,"depth":79,"text":16547},{"id":7079,"depth":79,"text":7080},{"id":16920,"depth":79,"text":16921},{"id":16935,"depth":79,"text":16936},{"id":7415,"depth":79,"text":7416},{"id":7040,"depth":79,"text":7041},{"id":7337,"depth":79,"text":7338},"\u002Fimages\u002Farticles\u002F2022-04-10-mas-os-tool\u002Fcover.png",{},"\u002Farticles\u002F2022-04-10-mac-os-tool","2022-04-10 12:00:00",{"title":16636,"description":78},"articles\u002F2022-04-10-mac-os-tool","這裡收集了，站長在 MacOS 上常用的軟體",[1410,1401],"LdwPGKbfWnAayVtGNscPJXvm97oroNn4Ipb5HjBSj7E",{"id":17007,"title":17008,"body":17009,"category":10023,"description":78,"extension":83,"image":17461,"meta":17462,"navigation":86,"path":17463,"pubDate":17464,"seo":17465,"status":86,"stem":17466,"summary":17467,"tags":17468,"__hash__":17469},"content\u002Farticles\u002F2022-03-26-php-zip.md","PHP 產生壓縮檔",{"type":8,"value":17010,"toc":17456},[17011,17014,17022,17028,17055,17058,17063,17125,17131,17134,17148,17153,17170,17173,17181,17186,17203,17205,17219,17224,17241,17243,17257,17262,17279,17281,17289,17294,17311,17313,17321,17326,17343,17345,17359,17364,17380,17383,17387,17437,17441,17454],[100,17012,17013],{"id":17013},"需求",[112,17015,17016,17019],{},[115,17017,17018],{},"php5.2 以上版本",[115,17020,17021],{},"安裝 zip 庫",[15,17023,17024,17025,17027],{},"以 ",[19,17026,16648],{}," 為例：",[146,17029,17031],{"className":148,"code":17030,"language":150,"meta":78,"style":78},"sudo apt update\nsudo apt install -y php7.4-zip\n",[19,17032,17033,17041],{"__ignoreMap":78},[154,17034,17035,17037,17039],{"class":156,"line":157},[154,17036,15622],{"class":160},[154,17038,15635],{"class":163},[154,17040,15638],{"class":163},[154,17042,17043,17045,17047,17049,17052],{"class":156,"line":79},[154,17044,15622],{"class":160},[154,17046,15635],{"class":163},[154,17048,1039],{"class":163},[154,17050,17051],{"class":250}," -y",[154,17053,17054],{"class":163}," php7.4-zip\n",[100,17056,17057],{"id":17057},"壓縮範例程式",[15,17059,17060],{},[783,17061,17062],{},"產生壓縮檔",[146,17064,17066],{"className":8497,"code":17065,"language":8499,"meta":78,"style":78},"\u003C?php\n\u002F\u002Fnew ZipArchive 物件\n$zip = new ZipArchive;\n\n$zip->open('new.zip', ZipArchive::CREATE);\n\n",[19,17067,17068,17076,17081,17095,17099],{"__ignoreMap":78},[154,17069,17070,17073],{"class":156,"line":157},[154,17071,17072],{"class":1067},"\u003C?",[154,17074,17075],{"class":250},"php\n",[154,17077,17078],{"class":156,"line":79},[154,17079,17080],{"class":298},"\u002F\u002Fnew ZipArchive 物件\n",[154,17082,17083,17086,17088,17090,17093],{"class":156,"line":314},[154,17084,17085],{"class":192},"$zip ",[154,17087,3457],{"class":1067},[154,17089,4729],{"class":1067},[154,17091,17092],{"class":250}," ZipArchive",[154,17094,3711],{"class":192},[154,17096,17097],{"class":156,"line":320},[154,17098,317],{"emptyLinePlaceholder":86},[154,17100,17101,17104,17106,17109,17111,17114,17116,17119,17121,17123],{"class":156,"line":326},[154,17102,17103],{"class":192},"$zip",[154,17105,8762],{"class":1067},[154,17107,17108],{"class":160},"open",[154,17110,3897],{"class":192},[154,17112,17113],{"class":163},"'new.zip'",[154,17115,4003],{"class":192},[154,17117,17118],{"class":250},"ZipArchive",[154,17120,8547],{"class":1067},[154,17122,7755],{"class":250},[154,17124,3903],{"class":192},[15,17126,6643,17127,17130],{},[19,17128,17129],{},"$zip->open()"," 第一參數為要產壓縮檔路徑",[15,17132,17133],{},"第二參數為產生檔案的模式",[259,17135,17136,17142],{},[115,17137,17138,17141],{},[19,17139,17140],{},"ZipArchive::CREATE","：產生新檔案",[115,17143,17144,17147],{},[19,17145,17146],{},"ZipArchive::OVERWRITE",": 若壓縮檔存在，則覆蓋檔案",[15,17149,17150],{},[783,17151,17152],{},"加入一個空資料夾",[146,17154,17156],{"className":8497,"code":17155,"language":8499,"meta":78,"style":78},"$zip->addEmptyDir($dirname);\n",[19,17157,17158],{"__ignoreMap":78},[154,17159,17160,17162,17164,17167],{"class":156,"line":157},[154,17161,17103],{"class":192},[154,17163,8762],{"class":1067},[154,17165,17166],{"class":160},"addEmptyDir",[154,17168,17169],{"class":192},"($dirname);\n",[15,17171,17172],{},"參數說明",[259,17174,17175],{},[115,17176,17177,17180],{},[19,17178,17179],{},"$dirname"," 資料夾名稱",[15,17182,17183],{},[783,17184,17185],{},"將檔案加入壓縮檔",[146,17187,17189],{"className":8497,"code":17188,"language":8499,"meta":78,"style":78},"$zip->addaddFile($filePath, $newFileName);\n",[19,17190,17191],{"__ignoreMap":78},[154,17192,17193,17195,17197,17200],{"class":156,"line":157},[154,17194,17103],{"class":192},[154,17196,8762],{"class":1067},[154,17198,17199],{"class":160},"addaddFile",[154,17201,17202],{"class":192},"($filePath, $newFileName);\n",[15,17204,17172],{},[259,17206,17207,17213],{},[115,17208,17209,17212],{},[19,17210,17211],{},"$filePath"," 為檔案路徑",[115,17214,17215,17218],{},[19,17216,17217],{},"$newFileName"," 重新命名 (選填)",[15,17220,17221],{},[783,17222,17223],{},"將字串加入文字檔並壓縮",[146,17225,17227],{"className":8497,"code":17226,"language":8499,"meta":78,"style":78},"$zip->addFromString($filename, $content);\n",[19,17228,17229],{"__ignoreMap":78},[154,17230,17231,17233,17235,17238],{"class":156,"line":157},[154,17232,17103],{"class":192},[154,17234,8762],{"class":1067},[154,17236,17237],{"class":160},"addFromString",[154,17239,17240],{"class":192},"($filename, $content);\n",[15,17242,17172],{},[259,17244,17245,17251],{},[115,17246,17247,17250],{},[19,17248,17249],{},"$filename"," 檔案名稱",[115,17252,17253,17256],{},[19,17254,17255],{},"$content"," 文字內容",[15,17258,17259],{},[783,17260,17261],{},"依索引刪除檔案",[146,17263,17265],{"className":8497,"code":17264,"language":8499,"meta":78,"style":78},"$zip->deleteIndex($index);\n",[19,17266,17267],{"__ignoreMap":78},[154,17268,17269,17271,17273,17276],{"class":156,"line":157},[154,17270,17103],{"class":192},[154,17272,8762],{"class":1067},[154,17274,17275],{"class":160},"deleteIndex",[154,17277,17278],{"class":192},"($index);\n",[15,17280,17172],{},[259,17282,17283],{},[115,17284,17285,17288],{},[19,17286,17287],{},"$index"," 刪除索引的檔案",[15,17290,17291],{},[783,17292,17293],{},"依檔名刪除檔案",[146,17295,17297],{"className":8497,"code":17296,"language":8499,"meta":78,"style":78},"$zip->deleteName($name);\n",[19,17298,17299],{"__ignoreMap":78},[154,17300,17301,17303,17305,17308],{"class":156,"line":157},[154,17302,17103],{"class":192},[154,17304,8762],{"class":1067},[154,17306,17307],{"class":160},"deleteName",[154,17309,17310],{"class":192},"($name);\n",[15,17312,17172],{},[259,17314,17315],{},[115,17316,17317,17320],{},[19,17318,17319],{},"$name"," 刪除檔案名稱",[15,17322,17323],{},[783,17324,17325],{},"更改檔名",[146,17327,17329],{"className":8497,"code":17328,"language":8499,"meta":78,"style":78},"$zip->renameName($oldName, $newName);\n",[19,17330,17331],{"__ignoreMap":78},[154,17332,17333,17335,17337,17340],{"class":156,"line":157},[154,17334,17103],{"class":192},[154,17336,8762],{"class":1067},[154,17338,17339],{"class":160},"renameName",[154,17341,17342],{"class":192},"($oldName, $newName);\n",[15,17344,17172],{},[259,17346,17347,17353],{},[115,17348,17349,17352],{},[19,17350,17351],{},"$oldName"," 原本檔名",[115,17354,17355,17358],{},[19,17356,17357],{},"$newName"," 新檔名",[15,17360,17361],{},[783,17362,17363],{},"關閉壓縮檔",[146,17365,17367],{"className":8497,"code":17366,"language":8499,"meta":78,"style":78},"$zip->close();\n",[19,17368,17369],{"__ignoreMap":78},[154,17370,17371,17373,17375,17378],{"class":156,"line":157},[154,17372,17103],{"class":192},[154,17374,8762],{"class":1067},[154,17376,17377],{"class":160},"close",[154,17379,5209],{"class":192},[100,17381,17382],{"id":17382},"解壓縮程式",[15,17384,17385],{},[783,17386,13645],{},[146,17388,17390],{"className":8497,"code":17389,"language":8499,"meta":78,"style":78},"$zip = new ZipArchive;\n$zip->open($zipFile);\n$zip->extractTo($filePath);\n$zip->close();\n",[19,17391,17392,17404,17415,17427],{"__ignoreMap":78},[154,17393,17394,17396,17398,17400,17402],{"class":156,"line":157},[154,17395,17085],{"class":192},[154,17397,3457],{"class":1067},[154,17399,4729],{"class":1067},[154,17401,17092],{"class":250},[154,17403,3711],{"class":192},[154,17405,17406,17408,17410,17412],{"class":156,"line":79},[154,17407,17103],{"class":192},[154,17409,8762],{"class":1067},[154,17411,17108],{"class":160},[154,17413,17414],{"class":192},"($zipFile);\n",[154,17416,17417,17419,17421,17424],{"class":156,"line":314},[154,17418,17103],{"class":192},[154,17420,8762],{"class":1067},[154,17422,17423],{"class":160},"extractTo",[154,17425,17426],{"class":192},"($filePath);\n",[154,17428,17429,17431,17433,17435],{"class":156,"line":320},[154,17430,17103],{"class":192},[154,17432,8762],{"class":1067},[154,17434,17377],{"class":160},[154,17436,5209],{"class":192},[15,17438,17439],{},[783,17440,17172],{},[259,17442,17443,17449],{},[115,17444,17445,17448],{},[19,17446,17447],{},"$zipFile"," 壓縮檔位置",[115,17450,17451,17453],{},[19,17452,17211],{}," 解壓縮檔路徑",[675,17455,6775],{},{"title":78,"searchDepth":79,"depth":79,"links":17457},[17458,17459,17460],{"id":17013,"depth":79,"text":17013},{"id":17057,"depth":79,"text":17057},{"id":17382,"depth":79,"text":17382},"\u002Fimages\u002Farticles\u002F2022-03-26-php-zip\u002Fcover.png",{},"\u002Farticles\u002F2022-03-26-php-zip","2022-03-26 11:00:00",{"title":17008,"description":78},"articles\u002F2022-03-26-php-zip","在某些需求，如要讓使用者下載多個檔案時，我們可以打包成一個檔案供用戶下載，或是檔案太大，可以壓縮檔案已減少頻寛。",[8499],"axPiVBtvCJExqY5-9kjtwpxNVXxvivHDhw3IsOl0YXs",[17471],{"title":3064,"pubDate":3240,"path":3239,"summary":3243,"tags":17472,"image":3237,"category":700},[709,3245,1401,710],1786885664132]