<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>技术文章 Archives - 原立方</title>
	<atom:link href="https://www.atomic-cube.cn/category/%E6%8A%80%E6%9C%AF%E6%96%87%E7%AB%A0/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.atomic-cube.cn/category/技术文章/</link>
	<description>技术栈的流动-从零到∞</description>
	<lastBuildDate>Wed, 03 Jun 2026 04:42:10 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>多合一macOS系统安装U盘制作教程-终端篇</title>
		<link>https://www.atomic-cube.cn/%e5%a4%9a%e5%90%88%e4%b8%80macos%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85u%e7%9b%98%e5%88%b6%e4%bd%9c%e6%95%99%e7%a8%8b-%e7%bb%88%e7%ab%af%e7%af%87/</link>
					<comments>https://www.atomic-cube.cn/%e5%a4%9a%e5%90%88%e4%b8%80macos%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85u%e7%9b%98%e5%88%b6%e4%bd%9c%e6%95%99%e7%a8%8b-%e7%bb%88%e7%ab%af%e7%af%87/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 04:42:09 +0000</pubDate>
				<category><![CDATA[macOS]]></category>
		<category><![CDATA[技术文章]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=2104</guid>

					<description><![CDATA[<p>前排提示： 终端篇是在 Mac OS 系统环境制作 下列教程前提是你已经知道了怎么在 Mac 系统下通过终端命 [&#8230;]</p>
<p>The post <a href="https://www.atomic-cube.cn/%e5%a4%9a%e5%90%88%e4%b8%80macos%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85u%e7%9b%98%e5%88%b6%e4%bd%9c%e6%95%99%e7%a8%8b-%e7%bb%88%e7%ab%af%e7%af%87/">多合一macOS系统安装U盘制作教程-终端篇</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">前排提示：</h2>



<p class="wp-block-paragraph">终端篇是在 Mac OS 系统环境制作</p>



<p class="wp-block-paragraph">下列教程前提是你已经知道了怎么在 Mac 系统下通过终端命令制作U启动盘，知道原理后才能进阶学习多合一制作。</p>



<h2 class="wp-block-heading">为啥需要多合一？：</h2>



<p class="wp-block-paragraph">对于技术员来说，macOS的系统版本众多，一个U盘制作一个系统的话需要多个U盘，且不利于维护，往往都不知道哪个U盘是哪个版本，如果有一个大容量的U盘的，是否可以一次性把多个 macOS 写入进去呢，答案是可以的，下面教程就说说如何利用终端工具，一个U盘多个分区，逐个写入每个分区</p>



<p class="wp-block-paragraph"><strong>注意：目前官方最新提供的 macOS 10.12 不知道存在什么原因，无法终端写入，只能工具写，我也会跟进这个问题，不断获取最新的 macOS 10.12，希望早日也能终端写入，旧版的10.12就不再发布了，虽然可以终端写入，但是存在证书问题和有效负载报错问题，推荐用10.13代替，10.12和10.13支持的机型一模一样，Mac尽量保持能装新就装新原则</strong></p>



<p class="wp-block-paragraph"><strong>根据上面原则，推荐制作顺序：10.7、10.11、10.13、10.15，重复配置安装最新 macOS</strong></p>



<h2 class="wp-block-heading has-text-align-center">制作过程</h2>



<h2 class="wp-block-heading">分区：</h2>



<p class="wp-block-paragraph">首先需要一个大容量U盘，最好64G以上，我们将U盘分区，格式 GUID ，分几个区则要看你想要制作几个 macOS 。</p>



<figure class="wp-block-image"><img decoding="async" src="https://www.atomic-cube.cn/wp-content/uploads/2026/06/frc-e66985756d13b2d212366bfad6f69992.jpg" alt=""/></figure>



<div class="wp-block-image">
<figure class="aligncenter size-large"></figure>
</div>



<p class="wp-block-paragraph">然后分区：</p>



<p class="wp-block-paragraph">除了第一个叫upan外，其他暂时先用默认的用 未命名 名称，后面再改</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.atomic-cube.cn/wp-content/uploads/2026/06/frc-0618c094efd9655bb820b2d32ec5f42f.jpg" alt=""/></figure>



<h2 class="wp-block-heading">制作第一个 macOS ：</h2>



<p class="wp-block-paragraph">没有看到0-100进度条的，请耐心等待。。。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.atomic-cube.cn/wp-content/uploads/2026/06/frc-30a87951e1ed4e9dbb18584f00311a7d.jpg" alt=""/></figure>



<h2 class="wp-block-heading">等待上面完成后，继续制作第二个：</h2>



<p class="wp-block-paragraph">把第二个的未命名名字改成 upan </p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.atomic-cube.cn/wp-content/uploads/2026/06/frc-b0a0a4c7b6ea0e582eba7cf6b15174ff.jpg" alt=""/></figure>



<p class="wp-block-paragraph">然后继续终端写入，我这里写入10.14</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.atomic-cube.cn/wp-content/uploads/2026/06/frc-d9dcbe99e071248abe5f4451fd514108.jpg" alt=""/></figure>



<h2 class="wp-block-heading">最后成品图：</h2>



<p class="wp-block-paragraph">剩下的以此类推。</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.atomic-cube.cn/wp-content/uploads/2026/06/frc-a2aa9730a293ac55d3f99056278f79bb.jpg" alt=""/></figure>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://www.atomic-cube.cn/%e5%a4%9a%e5%90%88%e4%b8%80macos%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85u%e7%9b%98%e5%88%b6%e4%bd%9c%e6%95%99%e7%a8%8b-%e7%bb%88%e7%ab%af%e7%af%87/">多合一macOS系统安装U盘制作教程-终端篇</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/%e5%a4%9a%e5%90%88%e4%b8%80macos%e7%b3%bb%e7%bb%9f%e5%ae%89%e8%a3%85u%e7%9b%98%e5%88%b6%e4%bd%9c%e6%95%99%e7%a8%8b-%e7%bb%88%e7%ab%af%e7%af%87/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Go深度指南：从基础到高级的全面解析</title>
		<link>https://www.atomic-cube.cn/go%e6%b7%b1%e5%ba%a6%e6%8c%87%e5%8d%97%ef%bc%9a%e4%bb%8e%e5%9f%ba%e7%a1%80%e5%88%b0%e9%ab%98%e7%ba%a7%e7%9a%84%e5%85%a8%e9%9d%a2%e8%a7%a3%e6%9e%90/</link>
					<comments>https://www.atomic-cube.cn/go%e6%b7%b1%e5%ba%a6%e6%8c%87%e5%8d%97%ef%bc%9a%e4%bb%8e%e5%9f%ba%e7%a1%80%e5%88%b0%e9%ab%98%e7%ba%a7%e7%9a%84%e5%85%a8%e9%9d%a2%e8%a7%a3%e6%9e%90/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Sat, 23 May 2026 07:25:58 +0000</pubDate>
				<category><![CDATA[go-zero]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Go-zero]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=2098</guid>

					<description><![CDATA[<p>Go 语言自推出以来，因其简洁性、并发支持和高效性能，在云计算、微服务和分布式系统中广泛应用。作为开发者，面试 [&#8230;]</p>
<p>The post <a href="https://www.atomic-cube.cn/go%e6%b7%b1%e5%ba%a6%e6%8c%87%e5%8d%97%ef%bc%9a%e4%bb%8e%e5%9f%ba%e7%a1%80%e5%88%b0%e9%ab%98%e7%ba%a7%e7%9a%84%e5%85%a8%e9%9d%a2%e8%a7%a3%e6%9e%90/">Go深度指南：从基础到高级的全面解析</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Go 语言自推出以来，因其简洁性、并发支持和高效性能，在云计算、微服务和分布式系统中广泛应用。作为开发者，面试时往往需要面对一系列技术问题，这些常被称为“八股文”的题目，虽然有时显得高级特性，力求每个解释都严谨实用，避免空话套话。让我们从最基础的部分开始。<br></p>



<h1 class="wp-block-heading">第一章：基础概念与语法</h1>



<h2 class="wp-block-heading">变量与类型系统<a href="http://is.iceymoss.com/blog/36#%E5%8F%98%E9%87%8F%E4%B8%8E%E7%B1%BB%E5%9E%8B%E7%B3%BB%E7%BB%9F"></a></h2>



<p class="wp-block-paragraph">Go 是静态类型语言，类型安全且编译时检查。变量声明使用&nbsp;<code>var</code>&nbsp;关键字，或短变量声明&nbsp;<code>:=</code>。基础类型包括整型、浮点型、布尔型和字符串等。理解零值概念至关重要：未初始化的变量会赋予其类型的零值，例如整型为 0，字符串为空字符串&#8221;&#8221;。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import "fmt"

func main() {
    var a int      // 声明整型变量，零值为0
    b := 10        // 短变量声明，类型推断为int
    var s string   // 字符串零值为""
    fmt.Printf("a: %d, b: %d, s: %s\n", a, b, s) // 输出: a: 0, b: 10, s: 
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">var</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">a</span><span style="color: #D8DEE9FF"> int      </span><span style="color: #616E88">// 声明整型变量，零值为0</span></span>
<span class="line"><span style="color: #D8DEE9FF">    b </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #D8DEE9FF">        </span><span style="color: #616E88">// 短变量声明，类型推断为int</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">var</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">s</span><span style="color: #D8DEE9FF"> string   </span><span style="color: #616E88">// 字符串零值为&quot;&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">a: %d, b: %d, s: %s</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">a</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">b</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">s</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: a: 0, b: 10, s: </span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<p class="wp-block-paragraph">类型转换必须是显式的，Go 不支持隐式类型转换。例如，将 <code>int</code> 转换为 <code>float64</code> 需要使用 <code>float64(x)</code>。这有助于避免意外错误。</p>



<h2 class="wp-block-heading">控制结构</h2>



<p class="wp-block-paragraph">Go 的控制结构包括 <code>if</code>、<code>for</code>、<code>switch</code> 等，设计简洁。<code>for</code> 循环是唯一的循环结构，但可以模拟 <code>while</code> 循环。<code>if</code> 语句可以包含初始化语句，增强可读性。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import "fmt"

func main() {
    // for循环示例
    for i := 0; i &lt; 5; i++ {
        fmt.Println(i)
    }
    // 类似while循环
    j := 0
    for j &lt; 3 {
        fmt.Println(j)
        j++
    }
    // if带初始化
    if x := 10; x > 5 {
        fmt.Println("x大于5")
    }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// for循环示例</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> i </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">5</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// 类似while循环</span></span>
<span class="line"><span style="color: #D8DEE9FF">    j </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">j</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">3</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">j</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">j</span><span style="color: #81A1C1">++</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// if带初始化</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> x </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">x</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">5</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">x大于5</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<p class="wp-block-paragraph"><code>switch</code> 语句在 Go 中更为灵活，case 表达式可以是常量、变量或函数调用，且默认不需要 <code>break</code>。</p>



<h2 class="wp-block-heading">函数</h2>



<p class="wp-block-paragraph">函数是 Go 的一等公民，支持多返回值，这在错误处理中尤为常见。函数可以定义为方法，与类型关联。理解值传递和引用传递的区别很重要：Go 中所有参数都是值传递，但对于切片、映射和通道等引用类型，传递的是底层数据的引用。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import "fmt"

// 多返回值函数
func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("除数不能为零")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 2)
    if err != nil {
        fmt.Println("错误:", err)
    } else {
        fmt.Println("结果:", result) // 输出: 结果: 5
    }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// 多返回值函数</span></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">divide</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">a</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">b</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">int</span><span style="color: #D8DEE9FF">) (</span><span style="color: #D8DEE9">int</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">error</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">b</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">==</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Errorf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">除数不能为零</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">a</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">b</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">result</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">divide</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">10</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">2</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">错误:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">else</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">结果:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">result</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: 结果: 5</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h1 class="wp-block-heading">第二章：并发编程核心</h1>



<p class="wp-block-paragraph">Go 的并发模型基于 goroutine 和 channel，是其最强大的特性之一。面试中常深入探讨这方面。</p>



<h2 class="wp-block-heading">goroutine<a href="http://is.iceymoss.com/blog/36#goroutine"></a></h2>



<p class="wp-block-paragraph">goroutine 是轻量级线程，由 Go 运行时管理。使用&nbsp;<code>go</code>&nbsp;关键字启动，开销小，可轻松创建成千上万个。但需要注意，goroutine 的执行顺序不确定，依赖于调度器。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "fmt"
    "time"
)

func sayHello(name string) {
    for i := 0; i &lt; 3; i++ {
        fmt.Println("Hello,", name)
        time.Sleep(100 * time.Millisecond)
    }
}

func main() {
    go sayHello("Alice")  // 启动goroutine
    go sayHello("Bob")
    time.Sleep(1 * time.Second) // 等待goroutine完成，实际应用中应使用同步机制
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">time</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">sayHello</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">name</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">string</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> i </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">3</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Hello,</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">name</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Sleep</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">100</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Millisecond</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">go</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">sayHello</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Alice</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)  </span><span style="color: #616E88">// 启动goroutine</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">go</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">sayHello</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Bob</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Sleep</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">1</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Second</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 等待goroutine完成，实际应用中应使用同步机制</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">channel</h2>



<p class="wp-block-paragraph">channel 是 goroutine 间的通信管道，可以传递数据并同步执行。分为有缓冲和无缓冲两种。无缓冲 channel 要求发送和接收同时就绪，否则会阻塞；有缓冲 channel 在缓冲区满或空时阻塞。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import "fmt"

func main() {
    // 无缓冲channel
    ch := make(chan int)
    go func() {
        ch &lt;- 42 // 发送数据
    }()
    value := &lt;-ch // 接收数据
    fmt.Println("接收值:", value) // 输出: 接收值: 42

    // 有缓冲channel
    bufferedCh := make(chan string, 2)
    bufferedCh &lt;- "hello"
    bufferedCh &lt;- "world"
    fmt.Println(&lt;-bufferedCh, &lt;-bufferedCh) // 输出: hello world
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// 无缓冲channel</span></span>
<span class="line"><span style="color: #D8DEE9FF">    ch </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">make</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">chan</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">int</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">go</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">func</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">ch</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">42</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// 发送数据</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">    value </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9">ch</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// 接收数据</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">接收值:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">value</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: 接收值: 42</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// 有缓冲channel</span></span>
<span class="line"><span style="color: #D8DEE9FF">    bufferedCh </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">make</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">chan</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">string</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">2</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">bufferedCh</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">hello</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">bufferedCh</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">world</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9">bufferedCh</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9">bufferedCh</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: hello world</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h1 class="wp-block-heading">同步原语</h1>



<p class="wp-block-paragraph">除了 channel，Go 的 <code>sync</code> 包提供了 Mutex、WaitGroup 等同步工具。在共享资源访问时，使用 Mutex 避免数据竞争。WaitGroup 用于等待一组 goroutine 完成。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "fmt"
    "sync"
    "time"
)

var counter int
var mu sync.Mutex

func increment(wg *sync.WaitGroup) {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}

func main() {
    var wg sync.WaitGroup
    for i := 0; i &lt; 1000; i++ {
        wg.Add(1)
        go increment(&amp;wg)
    }
    wg.Wait()
    fmt.Println("最终计数器值:", counter) // 应该输出1000
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">sync</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">time</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">var</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">counter</span><span style="color: #D8DEE9FF"> int</span></span>
<span class="line"><span style="color: #81A1C1">var</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">mu</span><span style="color: #D8DEE9FF"> sync.Mutex</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">increment</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">wg</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">sync</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">WaitGroup</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">wg</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Done</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">mu</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Lock</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">counter</span><span style="color: #81A1C1">++</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">mu</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Unlock</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">var</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">wg</span><span style="color: #D8DEE9FF"> sync.WaitGroup</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> i </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1000</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">wg</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Add</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">1</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">go</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">increment</span><span style="color: #D8DEE9FF">(</span><span style="color: #81A1C1">&amp;</span><span style="color: #D8DEE9">wg</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">wg</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Wait</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">最终计数器值:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">counter</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 应该输出1000</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h1 class="wp-block-heading">第三章：高级特性与设计模式</h1>



<h2 class="wp-block-heading">接口与多态<a href="http://is.iceymoss.com/blog/36#%E6%8E%A5%E5%8F%A3%E4%B8%8E%E5%A4%9A%E6%80%81"></a></h2>



<p class="wp-block-paragraph">Go 的接口是隐式实现的：类型只需实现接口所有方法，就自动满足该接口。这促进了松耦合设计。接口常用于定义行为，如&nbsp;<code>io.Reader</code>&nbsp;和&nbsp;<code>io.Writer</code>。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import "fmt"

// 定义接口
type Speaker interface {
    Speak() string
}

// 结构体实现接口
type Dog struct{}

func (d Dog) Speak() string {
    return "Woof!"
}

type Cat struct{}

func (c Cat) Speak() string {
    return "Meow!"
}

func makeSound(s Speaker) {
    fmt.Println(s.Speak())
}

func main() {
    dog := Dog{}
    cat := Cat{}
    makeSound(dog) // 输出: Woof!
    makeSound(cat) // 输出: Meow!
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// 定义接口</span></span>
<span class="line"><span style="color: #81A1C1">type</span><span style="color: #D8DEE9FF"> Speaker interface {</span></span>
<span class="line"><span style="color: #D8DEE9FF">    Speak() string</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// 结构体实现接口</span></span>
<span class="line"><span style="color: #81A1C1">type</span><span style="color: #D8DEE9FF"> Dog struct{}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">func</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">d</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Dog</span><span style="color: #D8DEE9FF">) </span><span style="color: #88C0D0">Speak</span><span style="color: #D8DEE9FF">() </span><span style="color: #D8DEE9">string</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Woof!</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">type</span><span style="color: #D8DEE9FF"> Cat struct{}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">func</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">c</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Cat</span><span style="color: #D8DEE9FF">) </span><span style="color: #88C0D0">Speak</span><span style="color: #D8DEE9FF">() </span><span style="color: #D8DEE9">string</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Meow!</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">makeSound</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">s</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Speaker</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">s</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Speak</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    dog </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Dog</span><span style="color: #ECEFF4">{}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    cat </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Cat</span><span style="color: #ECEFF4">{}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">makeSound</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">dog</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: Woof!</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">makeSound</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">cat</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: Meow!</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<p class="wp-block-paragraph">空接口 <code>interface{}</code> 可以表示任何类型，但使用时应谨慎，通常与类型断言结合。</p>



<h2 class="wp-block-heading">错误处理</h2>



<p class="wp-block-paragraph">Go 的错误处理通过返回值实现，而非异常。标准库提供了 <code>error</code> 接口。建议使用 <code>errors.New</code> 或 <code>fmt.Errorf</code> 创建错误，并通过 <code>if err != nil</code> 检查。defer、panic 和 recover 用于处理异常情况，但 panic 应仅用于不可恢复错误。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "errors"
    "fmt"
)

func process(value int) (int, error) {
    if value &lt; 0 {
        return 0, errors.New("值不能为负")
    }
    return value * 2, nil
}

func safeProcess() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("恢复panic:", r)
        }
    }()
    panic("测试panic")
}

func main() {
    result, err := process(5)
    if err != nil {
        fmt.Println("错误:", err)
    } else {
        fmt.Println("结果:", result) // 输出: 结果: 10
    }
    safeProcess() // 输出: 恢复panic: 测试panic
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">errors</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">process</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">value</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">int</span><span style="color: #D8DEE9FF">) (</span><span style="color: #D8DEE9">int</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">error</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">value</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">errors</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">New</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">值不能为负</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">value</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">2</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">safeProcess</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">func</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> r </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">recover</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">r</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">恢复panic:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">r</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">panic</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">测试panic</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">result</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">process</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">5</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">错误:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">else</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">结果:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">result</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: 结果: 10</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">safeProcess</span><span style="color: #D8DEE9FF">() </span><span style="color: #616E88">// 输出: 恢复panic: 测试panic</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">反射与元编程</h2>



<p class="wp-block-paragraph">反射通过 <code>reflect</code> 包实现，允许程序在运行时检查类型和值。尽管强大，但反射性能开销大，应仅在必要时使用，如序列化或通用函数中。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "fmt"
    "reflect"
)

func inspectType(v interface{}) {
    t := reflect.TypeOf(v)
    fmt.Printf("类型: %v, 种类: %v\n", t, t.Kind())
}

func main() {
    var x int = 42
    inspectType(x) // 输出: 类型: int, 种类: int
    inspectType("hello") // 输出: 类型: string, 种类: string
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">reflect</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">inspectType</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">v</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">interface</span><span style="color: #ECEFF4">{}</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    t </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">reflect</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">TypeOf</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">v</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">类型: %v, 种类: %v</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">t</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">t</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Kind</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">var</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">x</span><span style="color: #D8DEE9FF"> int </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">42</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">inspectType</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">x</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: 类型: int, 种类: int</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">inspectType</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">hello</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: 类型: string, 种类: string</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h1 class="wp-block-heading">第四章：内存管理与性能优化</h1>



<h2 class="wp-block-heading">指针与值语义<a href="http://is.iceymoss.com/blog/36#%E6%8C%87%E9%92%88%E4%B8%8E%E5%80%BC%E8%AF%AD%E4%B9%89"></a></h2>



<p class="wp-block-paragraph">Go 有指针，但不像 C 那样复杂。指针允许直接操作内存地址，常用于避免大结构体复制的开销。值语义和引用语义的选择依赖于场景：值语义更安全，引用语义更高效。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

// 值接收者
func (p Person) String() string {
    return fmt.Sprintf("%s (%d岁)", p.Name, p.Age)
}

// 指针接收者，可修改结构体
func (p *Person) Birthday() {
    p.Age++
}

func main() {
    p1 := Person{"Alice", 30}
    p1.Birthday() // 即使p1是值，Go会自动取地址
    fmt.Println(p1.String()) // 输出: Alice (31岁)
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">type</span><span style="color: #D8DEE9FF"> Person struct {</span></span>
<span class="line"><span style="color: #D8DEE9FF">    Name string</span></span>
<span class="line"><span style="color: #D8DEE9FF">    Age  int</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// 值接收者</span></span>
<span class="line"><span style="color: #88C0D0">func</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">p</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Person</span><span style="color: #D8DEE9FF">) </span><span style="color: #88C0D0">String</span><span style="color: #D8DEE9FF">() </span><span style="color: #D8DEE9">string</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Sprintf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">%s (%d岁)</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">p</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Name</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">p</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Age</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// 指针接收者，可修改结构体</span></span>
<span class="line"><span style="color: #88C0D0">func</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">p</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">Person</span><span style="color: #D8DEE9FF">) </span><span style="color: #88C0D0">Birthday</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">p</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Age</span><span style="color: #81A1C1">++</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    p1 </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Person</span><span style="color: #ECEFF4">{</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Alice</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">30</span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">p1</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Birthday</span><span style="color: #D8DEE9FF">() </span><span style="color: #616E88">// 即使p1是值，Go会自动取地址</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">p1</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">String</span><span style="color: #D8DEE9FF">()) </span><span style="color: #616E88">// 输出: Alice (31岁)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">垃圾回收<a href="http://is.iceymoss.com/blog/36#%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6"></a></h2>



<p class="wp-block-paragraph">Go 使用并发标记清除垃圾回收器，自动管理内存。开发者无需手动释放内存，但应注意避免内存泄漏，如未关闭的资源或全局变量引用。通过&nbsp;<code>runtime</code>&nbsp;包可以监控 GC 行为。</p>



<h2 class="wp-block-heading">性能调优<a href="http://is.iceymoss.com/blog/36#%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98"></a></h2>



<p class="wp-block-paragraph">性能优化包括减少分配、使用 sync.Pool 重用对象、避免不必要的反射等。工具如&nbsp;<code>pprof</code>&nbsp;用于分析 CPU 和内存使用。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "fmt"
    "sync"
)

var pool = sync.Pool{
    New: func() interface{} {
        return make([]byte, 1024)
    },
}

func main() {
    buf := pool.Get().([]byte)
    // 使用buf...
    fmt.Println("缓冲区长度:", len(buf))
    pool.Put(buf) // 放回池中以重用
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">sync</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">var</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pool</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sync</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Pool</span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">New</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">func</span><span style="color: #D8DEE9FF">() </span><span style="color: #D8DEE9">interface</span><span style="color: #ECEFF4">{}</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        return </span><span style="color: #88C0D0">make</span><span style="color: #ECEFF4">([]</span><span style="color: #D8DEE9">byte</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> 1024</span><span style="color: #ECEFF4">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">},</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    buf </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pool</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Get</span><span style="color: #D8DEE9FF">()</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">([]</span><span style="color: #D8DEE9">byte</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// 使用buf...</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">缓冲区长度:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">len</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">buf</span><span style="color: #D8DEE9FF">))</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">pool</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Put</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">buf</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 放回池中以重用</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h1 class="wp-block-heading">第五章：标准库与实战问题</h1>



<h3 class="wp-block-heading">常用标准库<a href="http://is.iceymoss.com/blog/36#%E5%B8%B8%E7%94%A8%E6%A0%87%E5%87%86%E5%BA%93"></a></h3>



<p class="wp-block-paragraph">Go 标准库丰富，面试常问&nbsp;<code>net/http</code>、<code>encoding/json</code>、<code>testing</code>&nbsp;等。例如，HTTP 服务器实现简单：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, %s!", r.URL.Path&#91;1:&#93;)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">net/http</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">handler</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">w</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">http</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">ResponseWriter</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">r</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">http</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Request</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fprintf</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">w</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Hello, %s!</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">r</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">URL</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Path</span><span style="color: #D8DEE9FF">&#91;</span><span style="color: #B48EAD">1</span><span style="color: #D8DEE9FF">:&#93;)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">http</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">HandleFunc</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">/</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">handler</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">http</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">ListenAndServe</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">:8080</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">JSON 序列化和反序列化：</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    user := User{"Bob", 25}
    data, err := json.Marshal(user)
    if err != nil {
        fmt.Println("错误:", err)
        return
    }
    fmt.Println(string(data)) // 输出: {"name":"Bob","age":25}
    var newUser User
    json.Unmarshal(data, &amp;newUser)
    fmt.Println(newUser) // 输出: {Bob 25}
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">encoding/json</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">type</span><span style="color: #D8DEE9FF"> User struct {</span></span>
<span class="line"><span style="color: #D8DEE9FF">    Name string `json:&quot;name&quot;`</span></span>
<span class="line"><span style="color: #D8DEE9FF">    Age  int    `json:&quot;age&quot;`</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    user </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">User</span><span style="color: #ECEFF4">{</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Bob</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">25</span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">json</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Marshal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">user</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">错误:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #88C0D0">string</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">data</span><span style="color: #D8DEE9FF">)) </span><span style="color: #616E88">// 输出: {&quot;name&quot;:&quot;Bob&quot;,&quot;age&quot;:25}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">var</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">newUser</span><span style="color: #D8DEE9FF"> User</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">json</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Unmarshal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&amp;</span><span style="color: #D8DEE9">newUser</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">newUser</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 输出: {Bob 25}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">常见面试题解析<a href="http://is.iceymoss.com/blog/36#%E5%B8%B8%E8%A7%81%E9%9D%A2%E8%AF%95%E9%A2%98%E8%A7%A3%E6%9E%90"></a></h2>



<p class="wp-block-paragraph">面试中常出现的问题包括：goroutine 泄漏如何避免、channel 死锁场景、接口设计原则等。例如，goroutine 泄漏通常因未正确关闭 channel 或忽略错误导致，解决方案是使用&nbsp;<code>context</code>&nbsp;包进行取消。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "context"
    "fmt"
    "time"
)

func worker(ctx context.Context, ch chan int) {
    for {
        select {
        case &lt;-ctx.Done():
            fmt.Println("worker停止")
            return
        case val := &lt;-ch:
            fmt.Println("处理值:", val)
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    ch := make(chan int)
    go worker(ctx, ch)
    ch &lt;- 1
    time.Sleep(1 * time.Second)
    cancel() // 取消worker，避免泄漏
    time.Sleep(100 * time.Millisecond)
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">context</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">time</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">worker</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">ctx</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">context</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Context</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ch</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">chan</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">int</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">select</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">case</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9">ctx</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Done</span><span style="color: #D8DEE9FF">():</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">worker停止</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">return</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">case</span><span style="color: #D8DEE9FF"> val </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9FF">ch</span><span style="color: #ECEFF4">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">处理值:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">val</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">ctx</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> cancel </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">context</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WithCancel</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">context</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Background</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #D8DEE9FF">    ch </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">make</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">chan</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">int</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">go</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">worker</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">ctx</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ch</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">ch</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;-</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Sleep</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">1</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Second</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">cancel</span><span style="color: #D8DEE9FF">() </span><span style="color: #616E88">// 取消worker，避免泄漏</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Sleep</span><span style="color: #D8DEE9FF">(</span><span style="color: #B48EAD">100</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">Millisecond</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h1 class="wp-block-heading">第六章：最佳实践与总结</h1>



<p class="wp-block-paragraph">在 Go 开发中，遵循最佳实践能提升代码质量：使用 go fmt 统一格式、编写单元测试、依赖管理使用 go mod、避免全局状态等。测试是 Go 文化的一部分，内置 testing 包支持表格驱动测试。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
    "testing"
)

func Add(a, b int) int {
    return a + b
}

func TestAdd(t *testing.T) {
    tests := []struct {
        a, b, expected int
    }{
        {1, 2, 3},
        {0, 0, 0},
        {-1, 1, 0},
    }
    for _, tt := range tests {
        result := Add(tt.a, tt.b)
        if result != tt.expected {
            t.Errorf("Add(%d, %d) = %d; 期望 %d", tt.a, tt.b, result, tt.expected)
        }
    }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">testing</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">Add</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">a</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">b</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">int</span><span style="color: #D8DEE9FF">) </span><span style="color: #D8DEE9">int</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">a</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">b</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">TestAdd</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">t</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">*</span><span style="color: #D8DEE9">testing</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">T</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    tests </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> []</span><span style="color: #D8DEE9">struct</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">a</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">b</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">expected</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">int</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">{</span><span style="color: #B48EAD">1</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">2</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">3</span><span style="color: #ECEFF4">},</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">{</span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">},</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">{</span><span style="color: #81A1C1">-</span><span style="color: #B48EAD">1</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">},</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">_</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> tt </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">range</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tests</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        result </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">Add</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">tt</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">a</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tt</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">b</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">result</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tt</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">expected</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">t</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Errorf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Add(%d, %d) = %d; 期望 %d</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tt</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">a</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tt</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">b</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">result</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tt</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">expected</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<p class="wp-block-paragraph">总结来说，Go 需要对语言特性的深刻理解。通过本文的梳理，我们希望读者能掌握从基础语法到并发模型、从接口设计到性能优化的核心点。实际编码中，多实践、多阅读优秀源码是提升的关键。持续学习才能应对不断变化的技术挑战。</p>
<p>The post <a href="https://www.atomic-cube.cn/go%e6%b7%b1%e5%ba%a6%e6%8c%87%e5%8d%97%ef%bc%9a%e4%bb%8e%e5%9f%ba%e7%a1%80%e5%88%b0%e9%ab%98%e7%ba%a7%e7%9a%84%e5%85%a8%e9%9d%a2%e8%a7%a3%e6%9e%90/">Go深度指南：从基础到高级的全面解析</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/go%e6%b7%b1%e5%ba%a6%e6%8c%87%e5%8d%97%ef%bc%9a%e4%bb%8e%e5%9f%ba%e7%a1%80%e5%88%b0%e9%ab%98%e7%ba%a7%e7%9a%84%e5%85%a8%e9%9d%a2%e8%a7%a3%e6%9e%90/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Python+deepseek+微信，秒变聊天机器人</title>
		<link>https://www.atomic-cube.cn/python%e9%85%8d%e7%bd%aedeep-seek%e5%8a%a0%e4%b8%8a%e5%be%ae%e4%bf%a1%ef%bc%8c%e7%a7%92%e5%8f%98%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba/</link>
					<comments>https://www.atomic-cube.cn/python%e9%85%8d%e7%bd%aedeep-seek%e5%8a%a0%e4%b8%8a%e5%be%ae%e4%bf%a1%ef%bc%8c%e7%a7%92%e5%8f%98%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Tue, 12 May 2026 07:14:41 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[llm]]></category>
		<category><![CDATA[weichat]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=2073</guid>

					<description><![CDATA[<p>deep seek接入微信实现自动回复消息</p>
<p>The post <a href="https://www.atomic-cube.cn/python%e9%85%8d%e7%bd%aedeep-seek%e5%8a%a0%e4%b8%8a%e5%be%ae%e4%bf%a1%ef%bc%8c%e7%a7%92%e5%8f%98%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba/">Python+deepseek+微信，秒变聊天机器人</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">deepseek接入微信实现自动回复消息，可以任意更改人设，几乎没有封号风险，让你秒变情场高手，附完整代码教程</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="510" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1024x510.png" alt="" class="wp-image-2074" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1024x510.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-300x149.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-768x382.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1536x764.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-2048x1019.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>安装第三方库</strong></p>



<p class="wp-block-paragraph">先安装调用deep seek的open AI的第三方库<strong>pip install openai</strong></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="515" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1-1024x515.png" alt="" class="wp-image-2075" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1-1024x515.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1-300x151.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1-768x386.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1-1536x772.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-1-2048x1030.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">接着安装调用微信的wxauto第三方库<strong>pip install wxauto</strong></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="518" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-2-1024x518.png" alt="" class="wp-image-2076" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-2-1024x518.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-2-300x152.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-2-768x388.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-2-1536x777.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-2-2048x1035.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>编写代码</strong></p>



<p class="wp-block-paragraph">导入openAI库和微信库，整个代码不到50行，调用了deep seek API处理用户消息，获取AI自动回复，成为智能客服回复消息</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import time
from openai import OpenAI
from wxauto import Wechat
class WeChatBot:
    def __init__(self):
        self.client = OpenAI(api_key="", base_url="")
        self.wx = WeChat()
        self.listen_list = &#91;""&#93;   #需要自行设置监听的好友列表
        for whoItem in self.listen_list:
            self.wx.AddListenChat(who=whoItem)
    def __ask(self, msg):
        response = self.client.chat.completions.create(
            model="deepseek-chat",
            messages=&#91;
                {"role": "system", "content": "你好，我是DeepSeek。"},
                {"role": "user", "content": msg},
            &#93;,
            stream=False
        )
        return response.choices&#91;0&#93;.message.content
    def run(self):
        wait = 2  # 设置2秒查看一次是否有新消息
        while True:
            msg = self.wx.GetListenMessage()
            for chat in msgs:
                msg=msgs.get(chat)
                for item in msg:
                    if item.type == 'friend':
                        reply = self.__ask(item.content)
                        print(f"接收【{item.sender}】的消息:{item.content}")
                        print(f"回复【{item.sender}】的消息:{reply}")
                        chat.wx.SendMsg(reply, item.sender)  
if __name__ == "__main__":
    bot = WeChatBot()
    bot.run()</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">time</span></span>
<span class="line"><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">openai</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">OpenAI</span></span>
<span class="line"><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">wxauto</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">Wechat</span></span>
<span class="line"><span style="color: #8FBCBB">class</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">WeChatBot</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #8FBCBB">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">__init__</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">):</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">client</span><span style="color: #D8DEE9FF"> = </span><span style="color: #8FBCBB">OpenAI</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">api_key</span><span style="color: #D8DEE9FF">=</span><span style="color: #ECEFF4">&quot;&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">base_url</span><span style="color: #D8DEE9FF">=</span><span style="color: #ECEFF4">&quot;&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">wx</span><span style="color: #D8DEE9FF"> = </span><span style="color: #8FBCBB">WeChat</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">listen_list</span><span style="color: #D8DEE9FF"> = &#91;</span><span style="color: #ECEFF4">&quot;&quot;</span><span style="color: #D8DEE9FF">&#93;   #</span><span style="color: #8FBCBB">需要自行设置监听的好友列表</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #8FBCBB">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">whoItem</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">in</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">listen_list</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">wx</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">AddListenChat</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">who</span><span style="color: #D8DEE9FF">=</span><span style="color: #8FBCBB">whoItem</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #8FBCBB">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">__ask</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">self</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">msg</span><span style="color: #D8DEE9FF">):</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #8FBCBB">response</span><span style="color: #D8DEE9FF"> = </span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">client</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">chat</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">completions</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">create</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #8FBCBB">model</span><span style="color: #D8DEE9FF">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">deepseek-chat</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #8FBCBB">messages</span><span style="color: #D8DEE9FF">=&#91;</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF">&quot;</span><span style="color: #8FBCBB">role</span><span style="color: #D8DEE9FF">&quot;: &quot;</span><span style="color: #8FBCBB">system</span><span style="color: #D8DEE9FF">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> &quot;</span><span style="color: #8FBCBB">content</span><span style="color: #D8DEE9FF">&quot;: &quot;</span><span style="color: #8FBCBB">你好</span><span style="color: #D8DEE9FF">，</span><span style="color: #8FBCBB">我是DeepSeek</span><span style="color: #D8DEE9FF">。&quot;</span><span style="color: #ECEFF4">},</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF">&quot;</span><span style="color: #8FBCBB">role</span><span style="color: #D8DEE9FF">&quot;: &quot;</span><span style="color: #8FBCBB">user</span><span style="color: #D8DEE9FF">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> &quot;</span><span style="color: #8FBCBB">content</span><span style="color: #D8DEE9FF">&quot;: </span><span style="color: #8FBCBB">msg</span><span style="color: #ECEFF4">},</span></span>
<span class="line"><span style="color: #D8DEE9FF">            &#93;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #8FBCBB">stream</span><span style="color: #D8DEE9FF">=</span><span style="color: #8FBCBB">False</span></span>
<span class="line"><span style="color: #D8DEE9FF">        )</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #8FBCBB">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">response</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">choices</span><span style="color: #D8DEE9FF">&#91;0&#93;.</span><span style="color: #8FBCBB">message</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">content</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #8FBCBB">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">run</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">):</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #8FBCBB">wait</span><span style="color: #D8DEE9FF"> = 2  # </span><span style="color: #8FBCBB">设置2秒查看一次是否有新消息</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #8FBCBB">while</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">True</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #8FBCBB">msg</span><span style="color: #D8DEE9FF"> = </span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">wx</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">GetListenMessage</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #8FBCBB">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">chat</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">in</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">msgs</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #8FBCBB">msg</span><span style="color: #D8DEE9FF">=</span><span style="color: #8FBCBB">msgs</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">get</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">chat</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #8FBCBB">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">item</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">in</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">msg</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">                    </span><span style="color: #8FBCBB">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">item</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">type</span><span style="color: #D8DEE9FF"> == </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">friend</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">                        </span><span style="color: #8FBCBB">reply</span><span style="color: #D8DEE9FF"> = </span><span style="color: #8FBCBB">self</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">__ask</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">item</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">content</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">                        </span><span style="color: #8FBCBB">print</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">f</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">接收【{item.sender}】的消息:{item.content}</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">                        </span><span style="color: #8FBCBB">print</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">f</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">回复【{item.sender}】的消息:{reply}</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">                        </span><span style="color: #8FBCBB">chat</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">wx</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">SendMsg</span><span style="color: #D8DEE9FF">(</span><span style="color: #8FBCBB">reply</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">item</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">sender</span><span style="color: #D8DEE9FF">)  </span></span>
<span class="line"><span style="color: #8FBCBB">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">__name__</span><span style="color: #D8DEE9FF"> == </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">__main__</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #8FBCBB">bot</span><span style="color: #D8DEE9FF"> = </span><span style="color: #8FBCBB">WeChatBot</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #8FBCBB">bot</span><span style="color: #D8DEE9FF">.</span><span style="color: #8FBCBB">run</span><span style="color: #D8DEE9FF">()</span></span></code></pre></div>



<p class="wp-block-paragraph">关键的位置在这里，deep seek的key和API地址</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="506" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-3-1024x506.png" alt="" class="wp-image-2077" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-3-1024x506.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-3-300x148.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-3-768x380.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-3-1536x759.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-3-2048x1013.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="517" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-4-1024x517.png" alt="" class="wp-image-2078" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-4-1024x517.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-4-300x151.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-4-768x388.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-4-1536x775.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-4-2048x1033.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>获取key和API地址</strong><br><br>到deep seek官网获取API开放平台</p>



<p class="wp-block-paragraph">左边获取API keys</p>



<p class="wp-block-paragraph">在下面的接口文档获取API地址</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="515" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-5-1024x515.png" alt="" class="wp-image-2079" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-5-1024x515.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-5-300x151.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-5-768x387.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-5-1536x773.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-5-2048x1031.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="502" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-6-1024x502.png" alt="" class="wp-image-2080" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-6-1024x502.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-6-300x147.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-6-768x376.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-6-1536x752.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-6-2048x1003.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="485" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-7-1024x485.png" alt="" class="wp-image-2081" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-7-1024x485.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-7-300x142.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-7-768x363.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-7-1536x727.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-7-2048x969.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="501" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-8-1024x501.png" alt="" class="wp-image-2082" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-8-1024x501.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-8-300x147.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-8-768x375.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-8-1536x751.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-8-2048x1001.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>添加人设</strong><br><br>给deep seek角色信息和人设信息，每段话不超20字。</p>



<p class="wp-block-paragraph">还要设定要检测的好友名称或者微信群名称，这里只监听一个好友。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="508" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-9-1024x508.png" alt="" class="wp-image-2083" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-9-1024x508.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-9-300x149.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-9-768x381.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-9-1536x762.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-9-2048x1015.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="509" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-10-1024x509.png" alt="" class="wp-image-2084" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-10-1024x509.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-10-300x149.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-10-768x382.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-10-1536x764.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-10-2048x1018.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>最终展示</strong></p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="520" src="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-11-1024x520.png" alt="" class="wp-image-2085" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-11-1024x520.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-11-300x152.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-11-768x390.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-11-1536x779.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/05/image-11-2048x1039.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">当然也可以，如本地 部署了模型的话，可以尝试连接本地的模型，如连接本地OLLMA或者是OMLX，这两个本地部署模型都是可以提供openapi地址和key 的，本地值得一试哦</p>
<p>The post <a href="https://www.atomic-cube.cn/python%e9%85%8d%e7%bd%aedeep-seek%e5%8a%a0%e4%b8%8a%e5%be%ae%e4%bf%a1%ef%bc%8c%e7%a7%92%e5%8f%98%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba/">Python+deepseek+微信，秒变聊天机器人</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/python%e9%85%8d%e7%bd%aedeep-seek%e5%8a%a0%e4%b8%8a%e5%be%ae%e4%bf%a1%ef%bc%8c%e7%a7%92%e5%8f%98%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Laravel 13 AI 辅助开发</title>
		<link>https://www.atomic-cube.cn/laravel-13-ai-%e8%be%85%e5%8a%a9%e5%bc%80%e5%8f%91/</link>
					<comments>https://www.atomic-cube.cn/laravel-13-ai-%e8%be%85%e5%8a%a9%e5%bc%80%e5%8f%91/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate>
				<category><![CDATA[agent skills]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[llm]]></category>
		<category><![CDATA[vibe coding]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=2058</guid>

					<description><![CDATA[<p>Laravel 官方推出两款 AI 工具：Laravel Boost 为 AI 助手提供应用上下文，实现精准代码生成与调试；Laravel MCP 则作为安全桥梁，允许 AI 代理通过受控端点安全执行应用内操作。两者结合旨在将 AI 深度集成至 Laravel 开发工作流，提升效率与自动化能力，同时确保安全性。</p>
<p>The post <a href="https://www.atomic-cube.cn/laravel-13-ai-%e8%be%85%e5%8a%a9%e5%bc%80%e5%8f%91/">Laravel 13 AI 辅助开发</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="introduction">简介</h2>



<p class="wp-block-paragraph">Laravel 具有独特的定位，是进行 AI 辅助开发和智能体开发的首选框架。<a href="https://docs.anthropic.com/en/docs/claude-code" target="_blank" rel="noreferrer noopener nofollow">Claude Code</a>、<a href="https://opencode.ac.cn/" target="_blank" rel="noreferrer noopener nofollow">OpenCode</a>、<a href="https://cursor.ac.cn/" target="_blank" rel="noreferrer noopener nofollow">Cursor</a> 和 <a href="https://github.com/features/copilot" target="_blank" rel="noreferrer noopener nofollow">GitHub Copilot</a> 等 AI 编码智能体的兴起，改变了开发人员编写代码的方式。这些工具能够以空前的速度生成完整功能、调试复杂问题并重构代码——但它们的有效性在很大程度上取决于它们对你代码库的理解程度。</p>



<h3 class="wp-block-heading" id="why-laravel-for-ai-development">为何选择 Laravel 进行 AI 开发？</h3>



<p class="wp-block-paragraph">Laravel 固有的约定和定义明确的结构使其成为 AI 辅助开发的理想框架。当你要求 AI 智能体添加一个控制器时，它确切地知道该将其放在哪里。当你需要新的迁移文件时，命名约定和文件位置都是可预测的。这种一致性消除了在更灵活的框架中经常困扰 AI 工具的猜测过程。</p>



<p class="wp-block-paragraph">除了文件组织，Laravel 富有表达力的语法和全面的文档，为 AI 智能体提供了生成准确、地道代码所需的上下文。Eloquent 关系、表单请求和中间件等功能遵循智能体可以可靠理解和复刻的模式。结果就是 AI 生成的代码看起来就像出自资深 Laravel 开发者之手，而不是从通用的 PHP 代码片段中拼凑出来的。</p>



<h2 class="wp-block-heading" id="laravel-boost">Laravel Boost</h2>



<p class="wp-block-paragraph"><a href="https://github.com/laravel/boost" target="_blank" rel="noreferrer noopener nofollow">Laravel Boost</a> 架起了 AI 编码智能体与 Laravel 应用程序之间的桥梁。Boost 是一个 MCP (模型上下文协议) 服务器，配备了 15 种以上的专用工具，为 AI 智能体提供关于应用程序结构、数据库、路由等的深度见解。当你安装 Boost 后，你的 AI 智能体将从通用的代码助手转变为能够理解你特定应用的 Laravel 专家。</p>



<p class="wp-block-paragraph">Boost 提供了三大核心能力：一套用于检查和交互应用程序的 MCP 工具、专为 Laravel 生态系统精心设计的可组合 AI 指南，以及一个包含超过 17,000 条 Laravel 特定知识的强大文档 API。</p>



<h3 class="wp-block-heading" id="installation">安装</h3>



<p class="wp-block-paragraph">Boost 可安装在运行 PHP 8.1 或更高版本的 Laravel 10、11、12 和 13 应用程序中。若要开始，请将 Boost 安装为开发依赖：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>composer require laravel/boost --dev</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">composer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">require</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">laravel</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">boost</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">dev</span></span></code></pre></div>



<p class="wp-block-paragraph">安装完成后，运行交互式安装程序：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>php artisan boost:install</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">artisan</span><span style="color: #D8DEE9FF"> boost</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">install</span></span></code></pre></div>



<p class="wp-block-paragraph">安装程序将自动检测你的 IDE 和 AI 智能体，允许你选择适合项目的集成。Boost 将生成必要的配置文件，例如用于 MCP 兼容编辑器的 <code>.mcp.json</code> 文件以及用于 AI 上下文的指南文件。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><br>生成的配置文件（如&nbsp;<code>.mcp.json</code>、<code>CLAUDE.md</code>&nbsp;和&nbsp;<code>boost.json</code>）可以安全地添加到你的&nbsp;<code>.gitignore</code>&nbsp;中，如果你希望每位开发者配置自己的环境的话。</p>
</blockquote>



<h3 class="wp-block-heading" id="available-tools">可用工具</h3>



<p class="wp-block-paragraph">Boost 通过模型上下文协议（Model Context Protocol）向 AI 智能体公开了一套全面的工具。这些工具允许智能体深入理解并与你的 Laravel 应用程序进行交互。</p>



<ul class="wp-block-list">
<li><strong>应用程序自省</strong> &#8211; 查询你的 PHP 和 Laravel 版本，列出已安装的包，并检查应用程序的配置和环境变量。</li>



<li><strong>数据库工具</strong> &#8211; 在无需退出对话的情况下，检查数据库模式、执行只读查询并了解数据结构。</li>



<li><strong>路由检查</strong> &#8211; 列出所有已注册的路由及其对应的中间件、控制器和参数。</li>



<li><strong>Artisan 命令</strong> &#8211; 发现可用的 Artisan 命令及其参数，使智能体能够针对你的任务建议并执行正确的命令。</li>



<li><strong>日志分析</strong> &#8211; 读取并分析应用程序的日志文件，以协助调试问题。</li>



<li><strong>浏览器日志</strong> &#8211; 在使用 Laravel 前端工具进行开发时，访问浏览器控制台日志和错误信息。</li>



<li><strong>Tinker 集成</strong> &#8211; 通过 Laravel Tinker 在应用程序上下文中执行 PHP 代码，允许智能体验证假设并确认行为。</li>



<li><strong>文档搜索</strong> &#8211; 搜索 Laravel 生态系统文档，并获得根据你所安装的包版本量身定制的结果。</li>
</ul>



<h3 class="wp-block-heading" id="ai-guidelines">AI 指南（AI Guidelines）</h3>



<p class="wp-block-paragraph">Boost 包含一套专门为 Laravel 生态系统精心制作的全面 AI 指南。这些指南教导 AI 智能体如何编写符合习惯的 Laravel 代码、遵循框架约定并避免常见陷阱。指南是可组合且具备版本感知能力的，这意味着智能体接收到的指令将完全适配你所使用的确切包版本。</p>



<p class="wp-block-paragraph">指南涵盖了 Laravel 本身以及 Laravel 生态系统中的 16 个以上的包，包括：</p>



<ul class="wp-block-list">
<li>Livewire (2.x, 3.x, 和 4.x)</li>



<li>Inertia.js (React, Svelte, 和 Vue 变体)</li>



<li>Tailwind CSS (3.x 和 4.x)</li>



<li>Filament (3.x 和 4.x)</li>



<li>PHPUnit</li>



<li>Pest PHP</li>



<li>Laravel Pint</li>



<li>以及更多</li>
</ul>



<p class="wp-block-paragraph">当你运行&nbsp;<code>boost:install</code>&nbsp;时，Boost 会自动检测你的应用程序使用了哪些包，并将相关的指南整合到项目的 AI 上下文文件中。</p>



<h3 class="wp-block-heading" id="agent-skills">智能体技能（Agent Skills）</h3>



<p class="wp-block-paragraph"><a href="https://agentskills.io/home" target="_blank" rel="noreferrer noopener nofollow">智能体技能 (Agent Skills)</a> 是轻量级、针对性的知识模块，智能体可以在处理特定领域时按需激活。与预先加载的指南不同，技能允许仅在相关时加载详细的模式和最佳实践，从而减少上下文冗余并提高 AI 生成代码的相关性。</p>



<p class="wp-block-paragraph">这些技能适用于 Livewire、Inertia、Tailwind CSS、Pest 等主流 Laravel 包。当你运行&nbsp;<code>boost:install</code>&nbsp;并选择技能作为功能时，系统会根据在&nbsp;<code>composer.json</code>&nbsp;中检测到的包自动安装相应的技能。</p>



<h3 class="wp-block-heading" id="documentation-search">文档搜索</h3>



<p class="wp-block-paragraph">Boost 包含一个强大的文档 API，使 AI 智能体能够访问超过 17,000 条 Laravel 生态系统文档。与通用的网络搜索不同，这些文档经过索引、向量化并根据你使用的特定包版本进行了筛选。</p>



<p class="wp-block-paragraph">当智能体需要理解某个功能的工作原理时，它可以搜索 Boost 的文档 API 并获得准确的、特定于版本的相关信息。这消除了 AI 智能体建议已弃用的方法或旧版本框架语法的常见问题。</p>



<h3 class="wp-block-heading" id="agent-integration">智能体集成</h3>



<p class="wp-block-paragraph">Boost 与支持模型上下文协议的流行 IDE 和 AI 工具集成。有关 Cursor、Claude Code、Codex、Gemini CLI、GitHub Copilot 和 Junie 的详细设置说明，请参阅 Boost 文档的 设置你的智能体 (Set Up Your Agents) 部分。</p>
<p>The post <a href="https://www.atomic-cube.cn/laravel-13-ai-%e8%be%85%e5%8a%a9%e5%bc%80%e5%8f%91/">Laravel 13 AI 辅助开发</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/laravel-13-ai-%e8%be%85%e5%8a%a9%e5%bc%80%e5%8f%91/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress主题theme开发入门教程</title>
		<link>https://www.atomic-cube.cn/wordpress%e4%b8%bb%e9%a2%98theme%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e6%95%99%e7%a8%8b/</link>
					<comments>https://www.atomic-cube.cn/wordpress%e4%b8%bb%e9%a2%98theme%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e6%95%99%e7%a8%8b/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Mon, 04 May 2026 00:00:46 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[wordpress theme]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=1977</guid>

					<description><![CDATA[<p>WordPress主题开发入门教程</p>
<p>The post <a href="https://www.atomic-cube.cn/wordpress%e4%b8%bb%e9%a2%98theme%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e6%95%99%e7%a8%8b/">WordPress主题theme开发入门教程</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="heading-1">引言</h2>



<p class="wp-block-paragraph">在互联网技术领域，不断涌现的新技术和新理念为开发者提供了无限的可能。本文将深入探讨一系列技术主题，旨在帮助读者更好地理解和应用这些技术，从而提升开发效率和产品质量。</p>



<h3 class="wp-block-heading" id="heading-2">1.1 技术背景</h3>



<p class="wp-block-paragraph">随着云计算、大数据、人工智能等领域的快速发展，互联网技术正面临着前所未有的挑战和机遇。了解这些技术的基础知识和应用场景，对于开发者来说至关重要。</p>



<h3 class="wp-block-heading" id="heading-3">1.2 博客目的</h3>



<p class="wp-block-paragraph">本博客旨在通过详细的段落解释和代码示例，帮助读者掌握以下技术要点：</p>



<ul class="wp-block-list">
<li>技术原理和概念</li>



<li>实际应用案例</li>



<li>代码实现和优化策略</li>
</ul>



<p class="wp-block-paragraph">通过阅读本博客，读者将能够更好地将这些技术应用到实际项目中，提升个人技术能力。</p>



<h2 class="wp-block-heading" id="heading-4">2. WordPress主题结构解析</h2>



<p class="wp-block-paragraph">WordPress作为世界上最流行的内容管理系统之一，其主题系统提供了强大的定制能力。理解WordPress主题的结构对于开发者来说，是进行主题定制和开发的基础。</p>



<h3 class="wp-block-heading" id="heading-5">2.1 主题文件组成</h3>



<p class="wp-block-paragraph">WordPress主题通常由一系列的文件组成，每个文件都有其特定的作用。以下是一些主要的主题文件及其功能：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>- `style.css`：主题的主要样式表，定义了网站的外观和样式。
- `index.php`：主题的主要模板文件，用于显示博客的首页内容。
- `single.php`：用于显示单篇文章的模板。
- `page.php`：用于显示独立页面的模板。
- `header.php`：包含网站头部信息的模板，如导航菜单、Logo等。
- `footer.php`：包含网站底部信息的模板。
- `functions.php`：主题的功能文件，用于添加或修改主题的功能。
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">style.css</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">主题的主要样式表</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">定义了网站的外观和样式</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">index.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">主题的主要模板文件</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">用于显示博客的首页内容</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">single.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">用于显示单篇文章的模板</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">page.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">用于显示独立页面的模板</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">header.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">包含网站头部信息的模板</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">如导航菜单</span><span style="color: #D8DEE9FF">、</span><span style="color: #D8DEE9">Logo等</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">footer.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">包含网站底部信息的模板</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">functions.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">主题的功能文件</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">用于添加或修改主题的功能</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading" id="heading-6">2.2 主题模板层次</h3>



<p class="wp-block-paragraph">WordPress的主题模板遵循一定的层次结构，这使得开发者可以更灵活地控制内容的显示。以下是一些常见的模板文件及其用途：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>- `archive.php`：用于显示归档页面。
- `category.php`：用于显示特定分类下的文章列表。
- `tag.php`：用于显示特定标签下的文章列表。
- `search.php`：用于显示搜索结果。
- `404.php`：用于显示404错误页面。
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">archive.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">用于显示归档页面</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">category.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">用于显示特定分类下的文章列表</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">tag.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">用于显示特定标签下的文章列表</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">search.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">用于显示搜索结果</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #A3BE8C">404.php</span><span style="color: #ECEFF4">`</span><span style="color: #D8DEE9FF">：</span><span style="color: #D8DEE9">用于显示404错误页面</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading" id="heading-7">2.3 主题自定义</h3>



<p class="wp-block-paragraph">开发者可以通过修改上述文件来自定义主题。例如，要修改网站头部，可以编辑<code>header.php</code>文件。以下是一个简单的示例，展示了如何在<code>header.php</code>中添加一个自定义的Logo：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;!DOCTYPE html>
&lt;html &lt;?php language_attributes(); ?>>
&lt;head>
    &lt;meta charset="&lt;?php bloginfo( 'charset' ); ?>">
    &lt;title>&lt;?php wp_title(); ?>&lt;/title>
    &lt;!-- 其他头部信息 -->
&lt;/head>
&lt;body>

&lt;header>
    &lt;a href="&lt;?php echo esc_url( home_url() ); ?>">
        &lt;img src="&lt;?php echo get_template_directory_uri(); ?>/images/logo.png" alt="Logo">
    &lt;/a>
&lt;/header>

&lt;!-- 页面内容 -->

&lt;?php get_footer(); ?>
&lt;/body>
&lt;/html>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;!</span><span style="color: #D8DEE9">DOCTYPE</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">html</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;html</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">&lt;?php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">language_attributes();</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">?&gt;&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">&lt;head&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">&lt;meta</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">charset</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&lt;?php bloginfo( &#39;charset&#39; ); ?&gt;</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;title&gt;</span><span style="color: #D8DEE9FF">&lt;?php wp_title(); ?&gt;</span><span style="color: #81A1C1">&lt;/title&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;!-- 其他头部信息 --&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/head&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;body&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;header&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;a</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">href</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&lt;?php echo esc_url( home_url() ); ?&gt;</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;img</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">src</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&lt;?php echo get_template_directory_uri(); ?&gt;/images/logo.png</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">alt</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Logo</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;/a&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/header&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">&lt;!-- 页面内容 --&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">&lt;?php get_footer(); ?&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/body&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/html&gt;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，<code>get_template_directory_uri()</code>函数用于获取主题的目录URL，以便正确引用Logo图片。通过这种方式，开发者可以轻松地添加自定义元素到WordPress主题中。</p>



<h2 class="wp-block-heading" id="heading-8">3. 创建基本主题文件</h2>



<p class="wp-block-paragraph">在WordPress中创建一个基本主题涉及几个关键步骤，包括设置主题文件夹、创建必要的模板文件以及定义主题信息。</p>



<h3 class="wp-block-heading" id="heading-9">3.1 设置主题文件夹</h3>



<p class="wp-block-paragraph">首先，你需要在WordPress安装目录的<code>wp-content/themes</code>文件夹中创建一个新的文件夹，这个文件夹将用于存放你的主题文件。文件夹的名称通常是主题的名称，例如<code>my-theme</code>。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>mkdir wp-content/themes/my-theme
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">mkdir</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">wp</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">content</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">themes</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">my</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">theme</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading" id="heading-10">3.2 创建主题文件</h3>



<p class="wp-block-paragraph">接下来，你需要在主题文件夹中创建以下基本文件：</p>



<ul class="wp-block-list">
<li><code>style.css</code>：主题样式表。</li>



<li><code>index.php</code>：主题主要模板文件。</li>



<li><code>functions.php</code>：主题功能文件。</li>
</ul>



<p class="wp-block-paragraph">以下是一个简单的示例，展示了如何创建这些文件：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/* style.css */
/*
Theme Name: My Theme
Theme URI: http://example.com/my-theme
Author: Your Name
Author URI: http://example.com
Description: A simple WordPress theme.
Version: 1.0
*/

body {
    font-family: Arial, sans-serif;
}

/* 其他样式 */
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">/* style.css */</span></span>
<span class="line"><span style="color: #616E88">/*</span></span>
<span class="line"><span style="color: #616E88">Theme Name: My Theme</span></span>
<span class="line"><span style="color: #616E88">Theme URI: http://example.com/my-theme</span></span>
<span class="line"><span style="color: #616E88">Author: Your Name</span></span>
<span class="line"><span style="color: #616E88">Author URI: http://example.com</span></span>
<span class="line"><span style="color: #616E88">Description: A simple WordPress theme.</span></span>
<span class="line"><span style="color: #616E88">Version: 1.0</span></span>
<span class="line"><span style="color: #616E88">*/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">body</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">font</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">family</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Arial</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sans</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">serif</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">/* 其他样式 */</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;?php
/* index.php */
?>
&lt;!DOCTYPE html>
&lt;html &lt;?php language_attributes(); ?>>
&lt;head>
    &lt;meta charset="&lt;?php bloginfo( 'charset' ); ?>">
    &lt;title>&lt;?php wp_title(); ?>&lt;/title>
    &lt;link rel="stylesheet" href="&lt;?php echo get_template_directory_uri(); ?>/style.css">
&lt;/head>
&lt;body>

&lt;?php get_header(); ?>

&lt;div class="content">
    &lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        &lt;article>
            &lt;h2>&lt;?php the_title(); ?>&lt;/h2>
            &lt;?php the_content(); ?>
        &lt;/article>
    &lt;?php endwhile; endif; ?>
&lt;/div>

&lt;?php get_footer(); ?>

&lt;/body>
&lt;/html>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span></span>
<span class="line"><span style="color: #616E88">/* index.php */</span></span>
<span class="line"><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;!</span><span style="color: #D8DEE9">DOCTYPE</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">html</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;html</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">&lt;?php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">language_attributes();</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">?&gt;&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">&lt;head&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">&lt;meta</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">charset</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&lt;?php bloginfo( &#39;charset&#39; ); ?&gt;</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;title&gt;</span><span style="color: #D8DEE9FF">&lt;?php wp_title(); ?&gt;</span><span style="color: #81A1C1">&lt;/title&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;link</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">rel</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">stylesheet</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">href</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&lt;?php echo get_template_directory_uri(); ?&gt;/style.css</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/head&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;body&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">&lt;?php get_header(); ?&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;div</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">class</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">content</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;article&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">&lt;h2&gt;</span><span style="color: #D8DEE9FF">&lt;?php the_title(); ?&gt;</span><span style="color: #81A1C1">&lt;/h2&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            &lt;?php the_content(); ?&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;/article&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;?php endwhile; endif; ?&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/div&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">&lt;?php get_footer(); ?&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;/body&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/html&gt;</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;?php
/* functions.php */
?>
&lt;?php
// 注册导航菜单
register_nav_menus(array(
    'primary' => __('Primary Menu'),
));

// 其他功能
?>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span></span>
<span class="line"><span style="color: #616E88">/* functions.php */</span></span>
<span class="line"><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span></span>
<span class="line"><span style="color: #616E88">// 注册导航菜单</span></span>
<span class="line"><span style="color: #88C0D0">register_nav_menus</span><span style="color: #D8DEE9FF">(</span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">primary</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">__</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">Primary Menu</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">));</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// 其他功能</span></span>
<span class="line"><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading" id="heading-11">3.3 定义主题信息</h3>



<p class="wp-block-paragraph">在<code>style.css</code>文件的顶部，你需要添加一些关键的主题信息，如主题名称、作者、描述等。这些信息将被WordPress用来识别和显示你的主题。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/*
Theme Name: My Theme
Theme URI: http://example.com/my-theme
Author: Your Name
Author URI: http://example.com
Description: A simple WordPress theme.
Version: 1.0
*/
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">/*</span></span>
<span class="line"><span style="color: #616E88">Theme Name: My Theme</span></span>
<span class="line"><span style="color: #616E88">Theme URI: http://example.com/my-theme</span></span>
<span class="line"><span style="color: #616E88">Author: Your Name</span></span>
<span class="line"><span style="color: #616E88">Author URI: http://example.com</span></span>
<span class="line"><span style="color: #616E88">Description: A simple WordPress theme.</span></span>
<span class="line"><span style="color: #616E88">Version: 1.0</span></span>
<span class="line"><span style="color: #616E88">*/</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">完成这些步骤后，你就可以在WordPress后台的主题列表中看到你的新主题，并可以激活它来使用。</p>



<h2 class="wp-block-heading" id="heading-12">4. 主题模板和模板标签的使用</h2>



<p class="wp-block-paragraph">WordPress主题模板是定义网站布局和内容的文件，而模板标签则是WordPress提供的用于在模板文件中插入动态内容的函数。</p>



<h3 class="wp-block-heading" id="heading-13">4.1 主题模板</h3>



<p class="wp-block-paragraph">WordPress的主题模板由一系列文件组成，每个文件对应网站的某个部分。以下是一些常用的模板文件：</p>



<ul class="wp-block-list">
<li><code>index.php</code>：如果没有更具体的模板匹配，WordPress将使用此文件显示首页。</li>



<li><code>single.php</code>：用于显示单篇文章。</li>



<li><code>page.php</code>：用于显示独立页面。</li>



<li><code>archive.php</code>：用于显示文章归档页面。</li>



<li><code>search.php</code>：用于显示搜索结果。</li>
</ul>



<p class="wp-block-paragraph">以下是一个<code>index.php</code>的简单示例，展示了如何使用模板标签：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;?php get_header(); ?>

&lt;div class="content">
    &lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        &lt;article &lt;?php post_class(); ?>>
            &lt;h2>&lt;?php the_title(); ?>&lt;/h2>
            &lt;?php the_content(); ?>
        &lt;/article>
    &lt;?php endwhile; endif; ?>
&lt;/div>

&lt;?php get_footer(); ?>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_header</span><span style="color: #D8DEE9FF">(); </span><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;div</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">class</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">content</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;article</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">&lt;?php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">post_class();</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">?&gt;&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">&lt;h2&gt;&lt;?php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">the_title();</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">?&gt;&lt;/h2&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #D8DEE9">&lt;?php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">the_content();</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">?&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">&lt;/article&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">&lt;?php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">endwhile;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">endif;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">?&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">&lt;/div&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">&lt;?php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get_footer();</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">?&gt;</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>4.2 模板标签
模板标签是WordPress提供的函数，用于在模板文件中插入动态内容。以下是一些常用的模板标签：

get_header()：插入网站头部。
get_footer()：插入网站底部。
have_posts()：检查是否有文章可以显示。
the_post()：循环遍历文章。
post_class()：为文章添加CSS类。
the_title()：显示文章标题。
the_content()：显示文章内容。
以下是一个使用get_template_part()模板标签的示例，它允许你在多个模板文件中重用代码：</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #B48EAD">4.2</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">模板标签</span></span>
<span class="line"><span style="color: #D8DEE9">模板标签是WordPress提供的函数</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">用于在模板文件中插入动态内容</span><span style="color: #D8DEE9FF">。</span><span style="color: #D8DEE9">以下是一些常用的模板标签</span><span style="color: #D8DEE9FF">：</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">get_header</span><span style="color: #D8DEE9FF">()：</span><span style="color: #D8DEE9">插入网站头部</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #88C0D0">get_footer</span><span style="color: #D8DEE9FF">()：</span><span style="color: #D8DEE9">插入网站底部</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #88C0D0">have_posts</span><span style="color: #D8DEE9FF">()：</span><span style="color: #D8DEE9">检查是否有文章可以显示</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #88C0D0">the_post</span><span style="color: #D8DEE9FF">()：</span><span style="color: #D8DEE9">循环遍历文章</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #88C0D0">post_class</span><span style="color: #D8DEE9FF">()：</span><span style="color: #D8DEE9">为文章添加CSS类</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #88C0D0">the_title</span><span style="color: #D8DEE9FF">()：</span><span style="color: #D8DEE9">显示文章标题</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #88C0D0">the_content</span><span style="color: #D8DEE9FF">()：</span><span style="color: #D8DEE9">显示文章内容</span><span style="color: #D8DEE9FF">。</span></span>
<span class="line"><span style="color: #88C0D0">以下是一个使用get_template_part</span><span style="color: #D8DEE9FF">()</span><span style="color: #D8DEE9">模板标签的示例</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">它允许你在多个模板文件中重用代码</span><span style="color: #D8DEE9FF">：</span></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;?php get_template_part('content', get_post_format()); ?>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_template_part</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">content</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_post_format</span><span style="color: #D8DEE9FF">()); </span><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">这个标签会根据文章格式（如<code>get_post_format()</code>返回的值）加载<code>content-&lt;format&gt;.php</code>文件，如果没有指定格式，则默认加载<code>content.php</code>。</p>



<h3 class="wp-block-heading" id="heading-15">4.3 示例：使用模板标签创建文章列表</h3>



<p class="wp-block-paragraph">以下是一个使用模板标签创建文章列表的示例：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;?php get_header(); ?>

&lt;div class="content">
    &lt;?php if ( have_posts() ) : ?>
        &lt;ul>
            &lt;?php while ( have_posts() ) : the_post(); ?>
                &lt;li &lt;?php post_class(); ?>>
                    &lt;h2>&lt;a href="&lt;?php the_permalink(); ?>">&lt;?php the_title(); ?>&lt;/a>&lt;/h2>
                    &lt;p>&lt;?php echo get_the_excerpt(); ?>&lt;/p>
                &lt;/li>
            &lt;?php endwhile; ?>
        &lt;/ul>
    &lt;?php endif; ?>
&lt;/div>

&lt;?php get_footer(); ?>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_header</span><span style="color: #D8DEE9FF">(); </span><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;div</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">class</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">content</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;?php if ( have_posts() ) : ?&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;ul&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            &lt;?php while ( have_posts() ) : the_post(); ?&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">&lt;li</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">&lt;?php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">post_class();</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">?&gt;&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">                    </span><span style="color: #D8DEE9">&lt;h2&gt;&lt;a</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">href</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&lt;?php the_permalink(); ?&gt;</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF">&lt;?php the_title(); ?&gt;</span><span style="color: #81A1C1">&lt;/a&gt;&lt;/h2&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">                    </span><span style="color: #81A1C1">&lt;p&gt;</span><span style="color: #D8DEE9FF">&lt;?php echo get_the_excerpt(); ?&gt;</span><span style="color: #81A1C1">&lt;/p&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">&lt;/li&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">endwhile</span><span style="color: #D8DEE9FF">; </span><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;/</span><span style="color: #D8DEE9">ul</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">endif</span><span style="color: #D8DEE9FF">; </span><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/</span><span style="color: #D8DEE9">div</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_footer</span><span style="color: #D8DEE9FF">(); </span><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，我们使用了<code>have_posts()</code>和<code>the_post()</code>来遍历文章，并使用<code>the_permalink()</code>、<code>the_title()</code>和<code>get_the_excerpt()</code>来显示每个文章的链接、标题和摘要。通过这种方式，你可以创建一个动态的文章列表，它会随着内容的更新而自动更新。</p>



<h2 class="wp-block-heading" id="heading-16">5. 主题样式和脚本加载</h2>



<p class="wp-block-paragraph">在WordPress主题中加载样式表和脚本是一个重要的步骤，它确保了网站的前端功能和视觉效果。</p>



<h3 class="wp-block-heading" id="heading-17">5.1 加载样式表</h3>



<p class="wp-block-paragraph">样式表通常在主题的<code>header.php</code>文件中通过<code>&lt;link&gt;</code>标签加载。为了确保样式表的正确加载，建议使用WordPress提供的<code>wp_enqueue_style()</code>函数。</p>



<p class="wp-block-paragraph">以下是一个示例，展示了如何在<code>functions.php</code>文件中使用<code>wp_enqueue_style()</code>函数加载主题样式表：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function my_theme_enqueue_styles() {
    wp_enqueue_style('my-theme-style', get_template_directory_uri() . '/style.css', array(), '1.0', 'all');
}

add_action('wp_enqueue_scripts', 'my_theme_enqueue_styles');
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">my_theme_enqueue_styles</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">wp_enqueue_style</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my-theme-style</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_template_directory_uri</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">/style.css</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">()</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">1.0</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">all</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">add_action</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">wp_enqueue_scripts</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_enqueue_styles</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个函数中，<code>my-theme-style</code>是样式的句柄，<code>get_template_directory_uri() . '/style.css'</code>是样式表的路径，<code>array()</code>是依赖项数组（这里是空的，表示没有依赖），<code>'1.0'</code>是样式表的版本号，<code>'all'</code>表示样式表适用于所有设备。</p>



<h3 class="wp-block-heading" id="heading-18">5.2 加载脚本</h3>



<p class="wp-block-paragraph">脚本的加载与样式表类似，可以使用<code>wp_enqueue_script()</code>函数。以下是一个示例，展示了如何在<code>functions.php</code>文件中加载自定义脚本：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function my_theme_enqueue_scripts() {
    wp_enqueue_script('my-theme-script', get_template_directory_uri() . '/js/script.js', array('jquery'), '1.0', true);
}

add_action('wp_enqueue_scripts', 'my_theme_enqueue_scripts');
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">my_theme_enqueue_scripts</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">wp_enqueue_script</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my-theme-script</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_template_directory_uri</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">/js/script.js</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">jquery</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">1.0</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">true</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">add_action</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">wp_enqueue_scripts</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_enqueue_scripts</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，<code>my-theme-script</code>是脚本的句柄，<code>get_template_directory_uri() . '/js/script.js'</code>是脚本的路径，<code>array('jquery')</code>表示脚本依赖于jQuery库，<code>'1.0'</code>是脚本的版本号，<code>true</code>表示脚本将在页面的底部加载，这通常是推荐的做法，因为它可以避免阻塞页面渲染。</p>



<h3 class="wp-block-heading" id="heading-19">5.3 使用<code>wp_head</code>和<code>wp_footer</code></h3>



<p class="wp-block-paragraph">在<code>header.php</code>和<code>footer.php</code>文件中，你应该保留<code>wp_head</code>和<code>wp_footer</code>函数调用。这些函数调用是WordPress用来插入所有队列中的样式和脚本的地方。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;?php get_header(); ?>

&lt;head>
    &lt;!-- 其他头部信息 -->
    &lt;?php wp_head(); ?>
&lt;/head>

&lt;!-- 页面内容 -->

&lt;?php get_footer(); ?>

&lt;footer>
    &lt;!-- 其他底部信息 -->
    &lt;?php wp_footer(); ?>
&lt;/footer>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_header</span><span style="color: #D8DEE9FF">(); </span><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;head&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;!-- 其他头部信息 --&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;?php wp_head(); ?&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/head&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;!--</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">页面内容</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;?</span><span style="color: #D8DEE9">php</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">get_footer</span><span style="color: #D8DEE9FF">(); </span><span style="color: #81A1C1">?&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;footer&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;!-- 其他底部信息 --&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    &lt;?php wp_footer(); ?&gt;</span></span>
<span class="line"><span style="color: #81A1C1">&lt;/footer&gt;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">通过使用<code>wp_head</code>和<code>wp_footer</code>，你确保了所有通过<code>wp_enqueue_style</code>和<code>wp_enqueue_script</code>添加的样式和脚本都会在正确的位置加载。</p>



<h3 class="wp-block-heading" id="heading-20">5.4 示例：在主题中加载Google字体</h3>



<p class="wp-block-paragraph">以下是一个示例，展示了如何在主题中加载Google字体：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function my_theme_enqueue_google_fonts() {
    wp_enqueue_style('my-theme-google-fonts', 'https://fonts.googleapis.com/css?family=Open+Sans&amp;display=swap', false);
}

add_action('wp_enqueue_scripts', 'my_theme_enqueue_google_fonts');
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">my_theme_enqueue_google_fonts</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">wp_enqueue_style</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my-theme-google-fonts</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">https://fonts.googleapis.com/css?family=Open+Sans&amp;display=swap</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">false</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">add_action</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">wp_enqueue_scripts</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_enqueue_google_fonts</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个函数中，我们添加了一个新的样式表，它从Google Fonts API加载了一个字体族。通过这种方式，你可以轻松地将外部字体集成到你的WordPress主题中。</p>



<h2 class="wp-block-heading" id="heading-21">6. 主题功能定制</h2>



<p class="wp-block-paragraph">WordPress主题的功能定制是通过修改<code>functions.php</code>文件来实现的。这个文件是主题的核心，用于添加或修改主题的功能。</p>



<h3 class="wp-block-heading" id="heading-22">6.1 添加自定义导航菜单</h3>



<p class="wp-block-paragraph">在WordPress中，你可以通过<code>register_nav_menus()</code>函数来注册自定义导航菜单。</p>



<p class="wp-block-paragraph">以下是一个示例，展示了如何在<code>functions.php</code>中添加一个自定义导航菜单：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function my_theme_register_nav_menus() {
    register_nav_menus(array(
        'primary-menu' => __('Primary Menu'),
        'footer-menu' => __('Footer Menu'),
    ));
}

add_action('after_setup_theme', 'my_theme_register_nav_menus');
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">my_theme_register_nav_menus</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">register_nav_menus</span><span style="color: #D8DEE9FF">(</span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">primary-menu</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">__</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">Primary Menu</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">footer-menu</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">__</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">Footer Menu</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    ))</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">add_action</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">after_setup_theme</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_register_nav_menus</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，我们注册了两个菜单：<code>primary-menu</code>和<code>footer-menu</code>。你可以在WordPress后台的“外观” &gt; “菜单”部分创建和分配这些菜单。</p>



<h3 class="wp-block-heading" id="heading-23">6.2 添加自定义小工具区域</h3>



<p class="wp-block-paragraph">WordPress允许你通过<code>register_sidebar()</code>函数添加自定义小工具区域。</p>



<p class="wp-block-paragraph">以下是一个示例，展示了如何在<code>functions.php</code>中添加一个自定义小工具区域：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function my_theme_register_sidebars() {
    register_sidebar(array(
        'name' => __('Primary Sidebar'),
        'id' => 'primary-sidebar',
        'description' => 'The primary sidebar.',
        'before_widget' => '&lt;div id="%1$s" class="widget %2$s">',
        'after_widget' => '&lt;/div>',
        'before_title' => '&lt;h3 class="widget-title">',
        'after_title' => '&lt;/h3>',
    ));
}

add_action('widgets_init', 'my_theme_register_sidebars');
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">my_theme_register_sidebars</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">register_sidebar</span><span style="color: #D8DEE9FF">(</span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">name</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">__</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">Primary Sidebar</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">id</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">primary-sidebar</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">description</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">The primary sidebar.</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">before_widget</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">&lt;div id=&quot;%1$s&quot; class=&quot;widget %2$s&quot;&gt;</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">after_widget</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">&lt;/div&gt;</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">before_title</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">&lt;h3 class=&quot;widget-title&quot;&gt;</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">after_title</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">&lt;/h3&gt;</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    ))</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">add_action</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">widgets_init</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_register_sidebars</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，我们添加了一个名为“Primary Sidebar”的小工具区域。你可以在WordPress后台的“外观” &gt; “小工具”部分管理这个区域的小工具。</p>



<h3 class="wp-block-heading" id="heading-24">6.3 添加自定义设置</h3>



<p class="wp-block-paragraph">WordPress提供了<code>add_customizer_section()</code>和<code>add_customizer_setting()</code>函数，允许你在主题定制器中添加自定义设置。</p>



<p class="wp-block-paragraph">以下是一个示例，展示了如何在<code>functions.php</code>中添加一个自定义设置：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>function my_theme_customizer($wp_customize) {
    // 添加一个面板
    $wp_customize->add_panel('my_theme_options', array(
        'title' => 'My Theme Options',
        'description' => 'Customize My Theme',
        'priority' => 10,
    ));

    // 添加一个部分
    $wp_customize->add_section('my_theme_general', array(
        'title' => 'General Settings',
        'priority' => 10,
        'panel' => 'my_theme_options',
    ));

    // 添加一个设置
    $wp_customize->add_setting('my_theme_logo', array(
        'default' => '',
        'transport' => 'refresh',
    ));

    // 添加一个控制
    $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'my_theme_logo', array(
        'label' => 'Logo',
        'section' => 'my_theme_general',
        'settings' => 'my_theme_logo',
    )));
}

add_action('customize_register', 'my_theme_customizer');
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">my_theme_customizer</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">$wp_customize</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// 添加一个面板</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">$wp_customize</span><span style="color: #81A1C1">-&gt;</span><span style="color: #88C0D0">add_panel</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_options</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">title</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">My Theme Options</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">description</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">Customize My Theme</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">priority</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    ))</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// 添加一个部分</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">$wp_customize</span><span style="color: #81A1C1">-&gt;</span><span style="color: #88C0D0">add_section</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_general</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">title</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">General Settings</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">priority</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">panel</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_options</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    ))</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// 添加一个设置</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">$wp_customize</span><span style="color: #81A1C1">-&gt;</span><span style="color: #88C0D0">add_setting</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_logo</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">default</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">transport</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">refresh</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    ))</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">    </span><span style="color: #616E88">// 添加一个控制</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">$wp_customize</span><span style="color: #81A1C1">-&gt;</span><span style="color: #88C0D0">add_control</span><span style="color: #D8DEE9FF">(</span><span style="color: #81A1C1">new</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">WP_Customize_Image_Control</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">$wp_customize</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_logo</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">array</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">label</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">Logo</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">section</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_general</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">settings</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_logo</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    )))</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">add_action</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">customize_register</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">my_theme_customizer</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，我们添加了一个名为“My Theme Options”的面板，一个名为“General Settings”的部分，以及一个名为“Logo”的图像设置。用户可以在主题定制器中上传一个自定义的Logo。</p>



<p class="wp-block-paragraph">通过这些定制，你可以扩展WordPress主题的功能，使其更加灵活和适应不同的需求。</p>



<h2 class="wp-block-heading" id="heading-25">7. 响应式设计实现</h2>



<p class="wp-block-paragraph">响应式设计是现代网页设计的关键组成部分，它确保网站能够在不同尺寸的设备上提供良好的用户体验。在WordPress主题中实现响应式设计通常涉及媒体查询和灵活的布局。</p>



<h3 class="wp-block-heading" id="heading-26">7.1 媒体查询</h3>



<p class="wp-block-paragraph">媒体查询是CSS3的一个特性，它允许你根据不同的屏幕尺寸应用不同的样式规则。以下是一个简单的示例，展示了如何在<code>style.css</code>文件中使用媒体查询：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/* 基础样式 */
body {
    font-family: Arial, sans-serif;
}

/* 响应式样式 */
@media (max-width: 768px) {
    .content {
        padding: 10px;
    }

    .sidebar {
        display: none;
    }
}

@media (min-width: 769px) and (max-width: 1024px) {
    .content {
        width: 75%;
    }

    .sidebar {
        width: 25%;
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">/* 基础样式 */</span></span>
<span class="line"><span style="color: #D8DEE9">body</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">font</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">family</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Arial</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sans</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">serif</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">/* 响应式样式 */</span></span>
<span class="line"><span style="color: #D08770">@media</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D08770">max</span><span style="color: #81A1C1">-</span><span style="color: #D08770">width</span><span style="color: #D8DEE9FF">: 768</span><span style="color: #D08770">px</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">content</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        padding</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> 10</span><span style="color: #D8DEE9">px</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">sidebar</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        display</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">none</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D08770">@media</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D08770">min</span><span style="color: #81A1C1">-</span><span style="color: #D08770">width</span><span style="color: #D8DEE9FF">: 769</span><span style="color: #D08770">px</span><span style="color: #D8DEE9FF">) </span><span style="color: #88C0D0">and</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">max</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">width</span><span style="color: #D8DEE9FF">: 1024</span><span style="color: #D8DEE9">px</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">content</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        width</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">75</span><span style="color: #81A1C1">%;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">sidebar</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        width</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">25</span><span style="color: #81A1C1">%;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，我们定义了两个媒体查询。第一个媒体查询针对最大宽度为768px的设备，它将内容区域的填充设置为10px，并隐藏侧边栏。第二个媒体查询针对宽度在769px到1024px之间的设备，它设置了内容区域和侧边栏的宽度。</p>



<h3 class="wp-block-heading" id="heading-27">7.2 灵活的布局</h3>



<p class="wp-block-paragraph">为了实现灵活的布局，可以使用百分比、flexbox或grid布局。以下是一个使用flexbox的示例：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>.container {
    display: flex;
    flex-wrap: wrap;
}

.content {
    flex: 1;
}

.sidebar {
    flex: 1;
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">container</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    display</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">flex</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #D8DEE9">flex</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">wrap</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">wrap</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">content</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    flex</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">sidebar</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    flex</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，<code>.container</code>类使用了flexbox布局，<code>.content</code>和<code>.sidebar</code>类都占据了等宽的空间。</p>



<h3 class="wp-block-heading" id="heading-28">7.3 响应式图片</h3>



<p class="wp-block-paragraph">为了确保图片在不同设备上正确显示，可以使用<code>srcset</code>和<code>sizes</code>属性。以下是一个示例：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;img src="example.jpg" srcset="example-small.jpg 500w, example.jpg 1000w" sizes="(max-width: 500px) 100vw, 50vw" alt="Example">
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;img</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">src</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">example.jpg</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">srcset</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">example-small.jpg 500w, example.jpg 1000w</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">sizes</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">(max-width: 500px) 100vw, 50vw</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">alt</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Example</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">在这个例子中，<code>srcset</code>属性定义了不同分辨率的图片，而<code>sizes</code>属性定义了在不同屏幕尺寸下图片的显示尺寸。</p>



<h3 class="wp-block-heading" id="heading-29">7.4 测试响应式设计</h3>



<p class="wp-block-paragraph">实现响应式设计后，应该在不同设备上进行测试，以确保布局和功能在不同尺寸的屏幕上都能正常工作。可以使用浏览器的开发者工具来模拟不同设备的屏幕尺寸。</p>



<p class="wp-block-paragraph">通过以上步骤，你可以为WordPress主题实现响应式设计，从而提升用户体验。</p>



<h2 class="wp-block-heading" id="heading-30">8. 主题测试与发布</h2>



<p class="wp-block-paragraph">在完成WordPress主题的开发后，进行彻底的测试和准备发布是确保主题质量和用户满意度的关键步骤。</p>



<h3 class="wp-block-heading" id="heading-31">8.1 主题测试</h3>



<p class="wp-block-paragraph">主题测试应该包括以下几个方面：</p>



<ul class="wp-block-list">
<li><strong>功能测试</strong>：确保所有功能如导航菜单、小工具、自定义设置等都能正常工作。</li>



<li><strong>响应式测试</strong>：在不同的设备上测试主题的布局和功能，确保响应式设计有效。</li>



<li><strong>兼容性测试</strong>：在不同的浏览器和操作系统上测试主题，确保兼容性。</li>



<li><strong>性能测试</strong>：使用工具如Google PageSpeed Insights测试主题的性能，优化加载速度。</li>



<li><strong>安全性测试</strong>：检查主题代码，确保没有安全漏洞。</li>
</ul>



<h3 class="wp-block-heading" id="heading-32">8.2 代码审查</h3>



<p class="wp-block-paragraph">在发布之前，应该对主题代码进行审查，确保代码质量高、遵循最佳实践，并且没有错误或警告。</p>



<h3 class="wp-block-heading" id="heading-33">8.3 准备发布</h3>



<p class="wp-block-paragraph">在发布主题之前，需要确保以下几点：</p>



<ul class="wp-block-list">
<li><strong>主题信息完整</strong>：<code>style.css</code>文件中的主题信息（如名称、描述、版本等）应该完整且准确。</li>



<li><strong>文档准备</strong>：准备详细的文档，包括安装指南、使用说明和常见问题解答。</li>



<li><strong>许可证</strong>：确保主题遵循适当的许可证，并在主题中包含许可证文件。</li>
</ul>



<h3 class="wp-block-heading" id="heading-34">8.4 发布主题</h3>



<p class="wp-block-paragraph">发布主题可以通过以下几种方式：</p>



<ul class="wp-block-list">
<li><strong>WordPress主题目录</strong>：如果你希望你的主题被更多人使用，可以将其提交到WordPress主题目录。这需要遵循WordPress.org的指南和审查流程。</li>



<li><strong>个人或公司网站</strong>：你可以在自己的网站或公司的网站上发布主题，并提供下载链接。</li>



<li><strong>市场平台</strong>：你也可以选择在第三方市场平台如ThemeForest上发布主题，这通常需要支付一定的费用。</li>
</ul>



<h3 class="wp-block-heading" id="heading-35">8.5 维护和更新</h3>



<p class="wp-block-paragraph">发布主题后，定期维护和更新是必要的。这包括修复bug、添加新功能、更新文档以及响应用户反馈。</p>



<p class="wp-block-paragraph">通过以上步骤，你可以确保WordPress主题的质量，并为用户提供一个稳定和可靠的产品。</p>
<p>The post <a href="https://www.atomic-cube.cn/wordpress%e4%b8%bb%e9%a2%98theme%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e6%95%99%e7%a8%8b/">WordPress主题theme开发入门教程</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/wordpress%e4%b8%bb%e9%a2%98theme%e5%bc%80%e5%8f%91%e5%85%a5%e9%97%a8%e6%95%99%e7%a8%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kubectl 命令参考手册</title>
		<link>https://www.atomic-cube.cn/kubectl-%e5%91%bd%e4%bb%a4%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/</link>
					<comments>https://www.atomic-cube.cn/kubectl-%e5%91%bd%e4%bb%a4%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Sun, 03 May 2026 00:00:22 +0000</pubDate>
				<category><![CDATA[K8S]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[k3s]]></category>
		<category><![CDATA[k8s]]></category>
		<category><![CDATA[Minikube]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=2016</guid>

					<description><![CDATA[<p>Kubectl 命令参考手册</p>
<p>The post <a href="https://www.atomic-cube.cn/kubectl-%e5%91%bd%e4%bb%a4%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/">Kubectl 命令参考手册</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">K8S 命令老是忘记，索性整理了常用的 kubectl 命令，方便日常 Kubernetes 集群管理使用。</p>



<p class="wp-block-paragraph"></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/f77c570b1742a4fdddfd34d9f7d68877-1024x576.png" alt="" class="wp-image-2028" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/f77c570b1742a4fdddfd34d9f7d68877-1024x576.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/f77c570b1742a4fdddfd34d9f7d68877-300x169.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/f77c570b1742a4fdddfd34d9f7d68877-768x432.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/f77c570b1742a4fdddfd34d9f7d68877-1536x864.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/f77c570b1742a4fdddfd34d9f7d68877-1280x720.png 1280w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/f77c570b1742a4fdddfd34d9f7d68877.png 1801w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading"><strong>一：基础命令</strong></h2>



<h2 class="wp-block-heading">1.1 查看集群信息</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看集群信息
kubectl cluster-info

# 查看 Kubernetes 版本
kubectl version

# 查看 API 资源列表
kubectl api-resources

# 查看 API 版本
kubectl api-versions</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看集群信息</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">cluster</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">info</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Kubernetes</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">版本</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">version</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">API</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">资源列表</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">api</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">resources</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">API</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">版本</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">api</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">versions</span></span></code></pre></div>



<h2 class="wp-block-heading">1.2 查看节点信息</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看所有节点
kubectl get nodes

# 查看节点详细信息
kubectl get nodes -o wide

# 查看节点详细信息（JSON/YAML）
kubectl get nodes -o json
kubectl get nodes -o yaml

# 查看特定节点
kubectl get node &lt;node-name>

# 描述节点
kubectl describe node &lt;node-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有节点</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nodes</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看节点详细信息</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nodes</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">wide</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看节点详细信息</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">JSON</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">YAML</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nodes</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">json</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nodes</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">yaml</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看特定节点</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">node</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">node</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">描述节点</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">node</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">node</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading"><strong>二：资源查看</strong></h2>



<h2 class="wp-block-heading">2.1 Pod 相关：</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看所有命名空间的 Podkubectl get pods --all-namespaces
kubectl get pods -A

# 查看指定命名空间的 Podkubectl get pods -n &lt;namespace>

# 查看 Pod 详细信息
kubectl get pods -o wide

# 查看 Pod 详细信息（JSON/YAML）
kubectl get pods -o json
kubectl get pods -o yaml

# 查看特定 Podkubectl get pod &lt;pod-name> -n &lt;namespace>

# 查看 Pod 标签
kubectl get pods --show-labels</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有命名空间的</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Podkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">namespaces</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">A</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看指定命名空间的</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Podkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">详细信息</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">wide</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">详细信息</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">JSON</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">YAML</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">json</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">yaml</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看特定</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Podkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">标签</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">show</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">labels</span></span></code></pre></div>



<h2 class="wp-block-heading">2.2 Deployment 相关：</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看所有 Deploymentkubectl get deployments
kubectl get deploy

# 查看 Deployment 详细信息
kubectl get deployments -o wide

# 查看特定 Deploymentkubectl get deployment &lt;deployment-name> -n &lt;namespace></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Deploymentkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployments</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deploy</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">详细信息</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployments</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">wide</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看特定</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Deploymentkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">2.3 Service 相关：</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看所有 Servicekubectl get services
kubectl get svc

# 查看 Service 详细信息
kubectl get services -o wide

# 查看特定 Servicekubectl get service &lt;service-name> -n &lt;namespace></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Servicekubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">services</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">svc</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Service</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">详细信息</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">services</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">wide</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看特定</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Servicekubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">service</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">service</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">2.4 其他资源：</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看所有资源类型
kubectl get all

# 查看 ConfigMapkubectl get configmaps
kubectl get cm

# 查看 Secretkubectl get secrets

# 查看 PersistentVolumekubectl get pv

# 查看 PersistentVolumeClaimkubectl get pvc

# 查看 Ingresskubectl get ingress
kubectl get ing

# 查看 Jobkubectl get jobs

# 查看 CronJobkubectl get cronjobs

# 查看 DaemonSetkubectl get daemonsets
kubectl get ds

# 查看 StatefulSetkubectl get statefulsets
kubectl get sts</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有资源类型</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">all</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ConfigMapkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">configmaps</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">cm</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Secretkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">secrets</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">PersistentVolumekubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pv</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">PersistentVolumeClaimkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pvc</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Ingresskubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ingress</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ing</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Jobkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">jobs</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">CronJobkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">cronjobs</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">DaemonSetkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">daemonsets</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ds</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">StatefulSetkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">statefulsets</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sts</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>三：资源操作</strong></p>



<h2 class="wp-block-heading">3.1 创建资源</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 从文件创建资源
kubectl create -f &lt;file.yaml>

# 从 URL 创建资源
kubectl create -f &lt;url>

# 从目录创建所有资源
kubectl create -f &lt;directory>/

# 创建命名空间
kubectl create namespace &lt;namespace-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">从文件创建资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">create</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">从</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">URL</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">创建资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">create</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">url</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">从目录创建所有资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">create</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">directory</span><span style="color: #81A1C1">&gt;/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">创建命名空间</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">create</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">namespace</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">3.2 应用资源</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 应用配置文件（推荐）
kubectl apply -f &lt;file.yaml>

# 应用目录下所有文件
kubectl apply -f &lt;directory>/

# 应用并记录配置
kubectl apply -f &lt;file.yaml> --record

# 强制替换资源
kubectl apply -f &lt;file.yaml> --force</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">应用配置文件</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">推荐</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">apply</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">应用目录下所有文件</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">apply</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">directory</span><span style="color: #81A1C1">&gt;/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">应用并记录配置</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">apply</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">record</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">强制替换资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">apply</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">force</span></span></code></pre></div>



<h2 class="wp-block-heading">3.3 删除资源</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 删除资源
kubectl delete -f &lt;file.yaml>

# 删除特定资源
kubectl delete pod &lt;pod-name> -n &lt;namespace>
kubectl delete deployment &lt;deployment-name> -n &lt;namespace>
kubectl delete service &lt;service-name> -n &lt;namespace>

# 删除所有资源
kubectl delete all --all -n &lt;namespace>

# 删除命名空间（会删除命名空间下所有资源）
kubectl delete namespace &lt;namespace-name>

# 强制删除 Podkubectl delete pod &lt;pod-name> --force --grace-period=0</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除特定资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">service</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">service</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除所有资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除命名空间</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">会删除命名空间下所有资源</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">namespace</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">强制删除</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Podkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">force</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">grace</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">period</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">0</span></span></code></pre></div>



<h2 class="wp-block-heading">3.4 编辑资源</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 编辑资源（使用默认编辑器）
kubectl edit pod &lt;pod-name> -n &lt;namespace>
kubectl edit deployment &lt;deployment-name> -n &lt;namespace>

# 编辑并应用
kubectl edit -f &lt;file.yaml></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">编辑资源</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">使用默认编辑器</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">edit</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">edit</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">编辑并应用</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">edit</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">3.5 替换资源</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 替换资源
kubectl replace -f &lt;file.yaml>

# 强制替换
kubectl replace -f &lt;file.yaml> --force</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">替换资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">replace</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">强制替换</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">replace</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">force</span></span></code></pre></div>



<h1 class="wp-block-heading"><strong>四：调试和日志</strong></h1>



<h2 class="wp-block-heading">4.1查看日志</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看 Pod 日志
kubectl logs &lt;pod-name> -n &lt;namespace>

# 查看前 N 行日志
kubectl logs &lt;pod-name> -n &lt;namespace> --tail=100

# 实时跟踪日志
kubectl logs &lt;pod-name> -n &lt;namespace> -f

# 查看之前容器的日志
kubectl logs &lt;pod-name> -n &lt;namespace> --previous

# 查看多容器 Pod 中特定容器的日志
kubectl logs &lt;pod-name> -c &lt;container-name> -n &lt;namespace>

# 查看指定时间范围的日志
kubectl logs &lt;pod-name> -n &lt;namespace> --since=1h
kubectl logs &lt;pod-name> -n &lt;namespace> --since-time="2024-01-01T00:00:00Z"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">日志</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">logs</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看前</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">N</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">行日志</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">logs</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">tail</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">100</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">实时跟踪日志</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">logs</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">f</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看之前容器的日志</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">logs</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">previous</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看多容器</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">中特定容器的日志</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">logs</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">c</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">container</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看指定时间范围的日志</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">logs</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">since</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">1</span><span style="color: #D8DEE9">h</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">logs</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">since</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">time</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">2024-01-01T00:00:00Z</span><span style="color: #ECEFF4">&quot;</span></span></code></pre></div>



<h2 class="wp-block-heading">4.2 进入容器</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 进入 Pod 容器（交互式）
kubectl exec -it &lt;pod-name> -n &lt;namespace> -- /bin/bash
kubectl exec -it &lt;pod-name> -n &lt;namespace> -- /bin/sh

# 在容器中执行命令
kubectl exec &lt;pod-name> -n &lt;namespace> -- &lt;command>

# 在特定容器中执行命令
kubectl exec &lt;pod-name> -c &lt;container-name> -n &lt;namespace> -- &lt;command></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">进入</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">容器</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">交互式</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">it</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">bin</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">bash</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">it</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">bin</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">sh</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">在容器中执行命令</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">command</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">在特定容器中执行命令</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">c</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">container</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">command</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">4.3 调试工具</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看 Pod 详细信息
kubectl describe pod &lt;pod-name> -n &lt;namespace>

# 查看事件
kubectl get events -n &lt;namespace> --sort-by='.lastTimestamp'

# 查看资源使用情况
kubectl top nodes
kubectl top pods -n &lt;namespace>

# 查看资源使用情况（所有命名空间）
kubectl top pods --all-namespaces</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">详细信息</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看事件</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">events</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">sort</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">by</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">.lastTimestamp</span><span style="color: #ECEFF4">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看资源使用情况</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">top</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nodes</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">top</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看资源使用情况</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">所有命名空间</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">top</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">namespaces</span></span></code></pre></div>



<h1 class="wp-block-heading"><strong>五: 配置管理</strong></h1>



<h2 class="wp-block-heading">5.1 ConfigMap 操作</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看 ConfigMapkubectl get configmap &lt;configmap-name> -n &lt;namespace>

# 查看 ConfigMap 内容
kubectl get configmap &lt;configmap-name> -n &lt;namespace> -o yaml

# 从文件创建 ConfigMapkubectl create configmap &lt;configmap-name> --from-file=&lt;file-path>

# 从目录创建 ConfigMapkubectl create configmap &lt;configmap-name> --from-file=&lt;directory>/

# 从字面量创建 ConfigMapkubectl create configmap &lt;configmap-name> --from-literal=key1=value1 --from-literal=key2=value2

# 编辑 ConfigMapkubectl edit configmap &lt;configmap-name> -n &lt;namespace>

# 删除 ConfigMapkubectl delete configmap &lt;configmap-name> -n &lt;namespace></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ConfigMapkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">configmap</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">configmap</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ConfigMap</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">内容</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">configmap</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">configmap</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">yaml</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">从文件创建</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ConfigMapkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">create</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">configmap</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">configmap</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">from</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">file</span><span style="color: #81A1C1">=&lt;</span><span style="color: #8FBCBB">file-path</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 从目录创建 ConfigMapkubectl create configmap </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">configmap-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> --from-file=</span><span style="color: #81A1C1">&lt;directory&gt;</span><span style="color: #D8DEE9FF">/</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 从字面量创建 ConfigMapkubectl create configmap </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">configmap-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> --from-literal=key1=value1 --from-literal=key2=value2</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 编辑 ConfigMapkubectl edit configmap </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">configmap-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 删除 ConfigMapkubectl delete configmap </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">configmap-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">5.2 Secret 操作</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看 Secretkubectl get secret &lt;secret-name> -n &lt;namespace>

# 查看 Secret 内容（Base64 编码）
kubectl get secret &lt;secret-name> -n &lt;namespace> -o yaml

# 解码 Secretkubectl get secret &lt;secret-name> -n &lt;namespace> -o jsonpath='{.data.&lt;key>}' | base64 -d

# 从文件创建 Secretkubectl create secret generic &lt;secret-name> --from-file=&lt;file-path>

# 从字面量创建 Secretkubectl create secret generic &lt;secret-name> --from-literal=username=admin --from-literal=password=secret

# 从 Docker 注册表创建 Secretkubectl create secret docker-registry &lt;secret-name> --docker-server=&lt;server> --docker-username=&lt;username> --docker-password=&lt;password>

# 编辑 Secretkubectl edit secret &lt;secret-name> -n &lt;namespace>

# 删除 Secretkubectl delete secret &lt;secret-name> -n &lt;namespace></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Secretkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">secret</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">secret</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Secret</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">内容</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">Base64</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">编码</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">secret</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">secret</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">yaml</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">解码</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Secretkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">secret</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">secret</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">jsonpath</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">{.data.&lt;key&gt;}</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">base64</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">d</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">从文件创建</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Secretkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">create</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">secret</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">generic</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">secret</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">from</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">file</span><span style="color: #81A1C1">=&lt;</span><span style="color: #8FBCBB">file-path</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 从字面量创建 Secretkubectl create secret generic </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">secret-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> --from-literal=username=admin --from-literal=password=secret</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 从 Docker 注册表创建 Secretkubectl create secret docker-registry </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">secret-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> --docker-server=</span><span style="color: #81A1C1">&lt;server&gt;</span><span style="color: #D8DEE9FF"> --docker-username=</span><span style="color: #81A1C1">&lt;username&gt;</span><span style="color: #D8DEE9FF"> --docker-password=</span><span style="color: #81A1C1">&lt;password&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 编辑 Secretkubectl edit secret </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">secret-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 删除 Secretkubectl delete secret </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">secret-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">5.3 端口转发</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 转发 Pod 端口到本地
kubectl port-forward &lt;pod-name> &lt;local-port>:&lt;pod-port> -n &lt;namespace>

# 转发 Service 端口到本地
kubectl port-forward service/&lt;service-name> &lt;local-port>:&lt;service-port> -n &lt;namespace>

# 转发 Deployment 端口到本地
kubectl port-forward deployment/&lt;deployment-name> &lt;local-port>:&lt;container-port> -n &lt;namespace>

# 示例：转发 MySQL 服务
kubectl port-forward service/mysql 3306:3306 -n default</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">转发</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">端口到本地</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">port</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">forward</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">local-port</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF">:</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">pod-port</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 转发 Service 端口到本地</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl port-forward service/</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">service-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">local-port</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF">:</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">service-port</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 转发 Deployment 端口到本地</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl port-forward deployment/</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">deployment-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">local-port</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF">:</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">container-port</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 示例：转发 MySQL 服务</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl port-forward service/mysql 3306:3306 -n default</span></span></code></pre></div>



<h2 class="wp-block-heading">5.4 执行命令</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 在 Pod 中执行命令
kubectl exec &lt;pod-name> -n &lt;namespace> -- &lt;command>

# 在 Pod 中执行交互式命令
kubectl exec -it &lt;pod-name> -n &lt;namespace> -- &lt;command>

# 在特定容器中执行命令
kubectl exec &lt;pod-name> -c &lt;container-name> -n &lt;namespace> -- &lt;command>

# 示例
kubectl exec my-pod -- ls /tmp
kubectl exec -it my-pod -- /bin/bash</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">在</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">中执行命令</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">command</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">在</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">中执行交互式命令</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">it</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">command</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">在特定容器中执行命令</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">c</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">container</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">command</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">示例</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">my</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ls</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">tmp</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">exec</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">it</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">my</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">bin</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">bash</span></span></code></pre></div>



<h2 class="wp-block-heading">5.5 标签和选择器</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看资源标签
kubectl get pods --show-labels

# 给资源添加标签
kubectl label pod &lt;pod-name> app=myapp -n &lt;namespace>

# 更新标签
kubectl label pod &lt;pod-name> app=newapp --overwrite -n &lt;namespace>

# 删除标签
kubectl label pod &lt;pod-name> app- -n &lt;namespace>

# 使用标签选择器查询
kubectl get pods -l app=myapp -n &lt;namespace>
kubectl get pods -l 'app in (myapp,yourapp)' -n &lt;namespace>
kubectl get pods -l 'app=myapp,version=v1' -n &lt;namespace></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看资源标签</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">show</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">labels</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">给资源添加标签</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">label</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">app</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">myapp</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">更新标签</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">label</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">app</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">newapp</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">overwrite</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除标签</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">label</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">app</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">使用标签选择器查询</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">l</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">app</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">myapp</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">l</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">app in (myapp,yourapp)</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">l</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">app=myapp,version=v1</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">5.6 滚动更新</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看滚动更新状态
kubectl rollout status deployment/&lt;deployment-name> -n &lt;namespace>

# 查看滚动更新历史
kubectl rollout history deployment/&lt;deployment-name> -n &lt;namespace>

# 回滚到上一个版本
kubectl rollout undo deployment/&lt;deployment-name> -n &lt;namespace>

# 回滚到指定版本
kubectl rollout undo deployment/&lt;deployment-name> --to-revision=&lt;revision-number> -n &lt;namespace>

# 暂停滚动更新
kubectl rollout pause deployment/&lt;deployment-name> -n &lt;namespace>

# 恢复滚动更新
kubectl rollout resume deployment/&lt;deployment-name> -n &lt;namespace>

# 扩展 Deploymentkubectl scale deployment/&lt;deployment-name> --replicas=&lt;number> -n &lt;namespace></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看滚动更新状态</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">rollout</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">status</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">/&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看滚动更新历史</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">rollout</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">history</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">/&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">回滚到上一个版本</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">rollout</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">undo</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">/&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">回滚到指定版本</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">rollout</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">undo</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">/&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">to</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">revision</span><span style="color: #81A1C1">=&lt;</span><span style="color: #8FBCBB">revision-number</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 暂停滚动更新</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl rollout pause deployment/</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">deployment-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 恢复滚动更新</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl rollout resume deployment/</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">deployment-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 扩展 Deploymentkubectl scale deployment/</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">deployment-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> --replicas=</span><span style="color: #81A1C1">&lt;number&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">5.7 资源描述</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 描述 Podkubectl describe pod &lt;pod-name> -n &lt;namespace>

# 描述 Deploymentkubectl describe deployment &lt;deployment-name> -n &lt;namespace>

# 描述 Servicekubectl describe service &lt;service-name> -n &lt;namespace>

# 描述 Nodekubectl describe node &lt;node-name>

# 描述命名空间
kubectl describe namespace &lt;namespace-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">描述</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Podkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">描述</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Deploymentkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">描述</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Servicekubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">service</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">service</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">描述</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Nodekubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">node</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">node</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">描述命名空间</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">namespace</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">5.8 事件查看</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看所有事件
kubectl get events -n &lt;namespace>

# 查看所有命名空间的事件
kubectl get events --all-namespaces

# 按时间排序查看事件
kubectl get events -n &lt;namespace> --sort-by='.lastTimestamp'

# 查看特定资源的事件
kubectl get events --field-selector involvedObject.name=&lt;pod-name> -n &lt;namespace>

# 实时监控事件
kubectl get events -n &lt;namespace> --watch</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有事件</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">events</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有命名空间的事件</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">events</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">namespaces</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">按时间排序查看事件</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">events</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">sort</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">by</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">.lastTimestamp</span><span style="color: #ECEFF4">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看特定资源的事件</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">events</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">field</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">selector</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">involvedObject</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">=&lt;</span><span style="color: #8FBCBB">pod-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 实时监控事件</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl get events -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span><span style="color: #D8DEE9FF"> --watch</span></span></code></pre></div>



<h2 class="wp-block-heading">5.9 命名空间管理</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看所有命名空间
kubectl get namespaces
kubectl get ns

# 查看命名空间详细信息
kubectl get namespace &lt;namespace-name> -o yaml

# 创建命名空间
kubectl create namespace &lt;namespace-name>

# 删除命名空间
kubectl delete namespace &lt;namespace-name>

# 切换到命名空间（使用 kubectx/kubens 工具）
# 或者使用上下文
kubectl config set-context --current --namespace=&lt;namespace-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有命名空间</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">namespaces</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ns</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看命名空间详细信息</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">namespace</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">yaml</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">创建命名空间</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">create</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">namespace</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除命名空间</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">namespace</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">切换到命名空间</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">使用</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">kubectx</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">kubens</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">工具</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">或者使用上下文</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">config</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">set</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">context</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">current</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">=&lt;</span><span style="color: #8FBCBB">namespace-name</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">5.10 上下文和配置</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 查看当前上下文
kubectl config current-context

# 查看所有上下文
kubectl config get-contexts

# 切换上下文
kubectl config use-context &lt;context-name>

# 查看配置
kubectl config view

# 查看特定上下文的配置
kubectl config view --context=&lt;context-name>

# 设置默认命名空间
kubectl config set-context --current --namespace=&lt;namespace-name>

# 查看集群信息
kubectl config view --minify

# 重命名上下文
kubectl config rename-context &lt;old-name> &lt;new-name></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看当前上下文</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">config</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">current</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">context</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看所有上下文</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">config</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">contexts</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">切换上下文</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">config</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">use</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">context</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">context</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看配置</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">config</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">view</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">查看特定上下文的配置</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">config</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">view</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">context</span><span style="color: #81A1C1">=&lt;</span><span style="color: #8FBCBB">context-name</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 设置默认命名空间</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl config set-context --current --namespace=</span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">namespace-name</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 查看集群信息</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl config view --minify</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># 重命名上下文</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl config rename-context </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">old-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">new-name</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h1 class="wp-block-heading"><strong>六: 实用技巧</strong></h1>



<h2 class="wp-block-heading">6.1 输出格式</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># JSON 格式
kubectl get pods -o json

# YAML 格式
kubectl get pods -o yaml

# 自定义列
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase

# JSONPath
kubectl get pods -o jsonpath='{.items&#91;*&#93;.metadata.name}'

# 表格格式（默认）
kubectl get pods</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">JSON</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">格式</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">json</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">YAML</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">格式</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">yaml</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">自定义列</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">custom</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">columns</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">NAME</span><span style="color: #ECEFF4">:.</span><span style="color: #D8DEE9">metadata</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">name</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF">STATUS</span><span style="color: #ECEFF4">:.</span><span style="color: #D8DEE9">status</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">phase</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">JSONPath</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">jsonpath</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">{.items&#91;*&#93;.metadata.name}</span><span style="color: #ECEFF4">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">表格格式</span><span style="color: #D8DEE9FF">（</span><span style="color: #D8DEE9">默认</span><span style="color: #D8DEE9FF">）</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span></span></code></pre></div>



<h2 class="wp-block-heading">6.2 过滤和搜索</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 按标签过滤
kubectl get pods -l app=myapp

# 按字段选择器过滤
kubectl get pods --field-selector status.phase=Running

# 搜索资源
kubectl get all | grep &lt;keyword></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">按标签过滤</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">l</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">app</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">myapp</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">按字段选择器过滤</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">field</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">selector</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">status</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">phase</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">Running</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">搜索资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">grep</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">keyword</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">6.3 批量操作</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 删除所有命名空间下的所有 Podkubectl delete pods --all --all-namespaces

# 删除所有命名空间下的所有 Deploymentkubectl delete deployments --all --all-namespaces

# 删除命名空间下的所有资源
kubectl delete all --all -n &lt;namespace></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除所有命名空间下的所有</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Podkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">namespaces</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除所有命名空间下的所有</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Deploymentkubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployments</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">namespaces</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">删除命名空间下的所有资源</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading" id="导出资源">6.4 导出资源<a href="http://is.iceymoss.com/blog/1#%E5%AF%BC%E5%87%BA%E8%B5%84%E6%BA%90"></a></h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;em># 导出资源为 YAMLkubectl get pod &lt;pod-name> -n &lt;namespace> -o yaml > pod.yaml&lt;/em>

&lt;em># 导出资源为 JSONkubectl get pod &lt;pod-name> -n &lt;namespace> -o json > pod.json&lt;/em>

&lt;em># 导出并移除集群特定信息&lt;/em>
kubectl get pod &lt;pod-name> -n &lt;namespace> -o yaml --export > pod.yaml
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 导出资源为 YAMLkubectl get pod </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">pod-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span><span style="color: #D8DEE9FF"> -o yaml &gt; pod.yaml</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 导出资源为 JSONkubectl get pod </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">pod-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span><span style="color: #D8DEE9FF"> -o json &gt; pod.json</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 导出并移除集群特定信息</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">kubectl get pod </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">pod-name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> -n </span><span style="color: #81A1C1">&lt;namespace&gt;</span><span style="color: #D8DEE9FF"> -o yaml --export &gt; pod.yaml</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading" id="补丁操作">6.5 补丁操作<a href="http://is.iceymoss.com/blog/1#%E8%A1%A5%E4%B8%81%E6%93%8D%E4%BD%9C"></a></h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;em># 使用 JSON 补丁&lt;/em>
kubectl patch pod &lt;pod-name> -p '{"spec":{"containers":&#91;{"name":"mycontainer","image":"newimage"}&#93;}}'

&lt;em># 使用策略性合并补丁&lt;/em>
kubectl patch deployment &lt;deployment-name> -p '{"spec":{"replicas":3}}'

&lt;em># 使用 JSON 补丁文件&lt;/em>
kubectl patch pod &lt;pod-name> --patch-file=patch.json
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 使用 JSON 补丁</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">patch</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">p</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">{&quot;spec&quot;:{&quot;containers&quot;:&#91;{&quot;name&quot;:&quot;mycontainer&quot;,&quot;image&quot;:&quot;newimage&quot;}&#93;}}</span><span style="color: #ECEFF4">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 使用策略性合并补丁</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">patch</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">p</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">{&quot;spec&quot;:{&quot;replicas&quot;:3}}</span><span style="color: #ECEFF4">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 使用 JSON 补丁文件</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">patch</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">patch</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">file</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">patch</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">json</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading" id="常用组合命令">七: 常用组合命令<a href="http://is.iceymoss.com/blog/1#%E5%B8%B8%E7%94%A8%E7%BB%84%E5%90%88%E5%91%BD%E4%BB%A4"></a></h1>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;em># 查看 Pod 并显示标签&lt;/em>
kubectl get pods --show-labels -n &lt;namespace>

&lt;em># 查看所有命名空间的资源&lt;/em>
kubectl get all --all-namespaces

&lt;em># 查看资源并持续监控&lt;/em>
kubectl get pods -w -n &lt;namespace>

&lt;em># 查看资源并排序&lt;/em>
kubectl get pods --sort-by=.metadata.creationTimestamp -n &lt;namespace>

&lt;em># 查看资源使用情况&lt;/em>
kubectl top pods --sort-by=memory -n &lt;namespace>

&lt;em># 查看资源并过滤&lt;/em>
kubectl get pods -n &lt;namespace> | grep &lt;keyword>

&lt;em># 查看资源并导出&lt;/em>
kubectl get deployment &lt;deployment-name> -n &lt;namespace> -o yaml > deployment.yaml
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看 Pod 并显示标签</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">show</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">labels</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看所有命名空间的资源</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">namespaces</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看资源并持续监控</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">w</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看资源并排序</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">sort</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">by</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">metadata</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">creationTimestamp</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看资源使用情况</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">top</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">sort</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">by</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">memory</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看资源并过滤</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">grep</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">keyword</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看资源并导出</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">deployment</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">o</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">yaml</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">yaml</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading" id="故障排查命令">八: 故障排查命令<a href="http://is.iceymoss.com/blog/1#%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5%E5%91%BD%E4%BB%A4"></a></h1>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;em># 查看 Pod 状态和事件&lt;/em>
kubectl describe pod &lt;pod-name> -n &lt;namespace>

&lt;em># 查看 Pod 日志&lt;/em>
kubectl logs &lt;pod-name> -n &lt;namespace> --previous

&lt;em># 查看所有命名空间的错误 Podkubectl get pods --all-namespaces --field-selector status.phase!=Running&lt;/em>

&lt;em># 查看节点资源使用&lt;/em>
kubectl top nodes

&lt;em># 查看集群事件&lt;/em>
kubectl get events --all-namespaces --sort-by='.lastTimestamp'

&lt;em># 检查 API 服务器连接&lt;/em>
kubectl cluster-info dump

&lt;em># 查看资源配额&lt;/em>
kubectl describe quota -n &lt;namespace>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看 Pod 状态和事件</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看 Pod 日志</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">logs</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">previous</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看所有命名空间的错误 Podkubectl get pods --all-namespaces --field-selector status.phase!=Running</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看节点资源使用</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">top</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nodes</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看集群事件</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">events</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">namespaces</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">sort</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">by</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">.lastTimestamp</span><span style="color: #ECEFF4">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 检查 API 服务器连接</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">cluster</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">info</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">dump</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">&lt;em&gt;</span><span style="color: #D8DEE9FF"># 查看资源配额</span><span style="color: #81A1C1">&lt;/em&gt;</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">describe</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">quota</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading" id="注意事项">注意事项<a href="http://is.iceymoss.com/blog/1#%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9"></a></h1>



<p class="wp-block-paragraph">1.&nbsp;<strong>命名空间</strong>：大多数命令需要指定&nbsp;<code>-n &lt;namespace&gt;</code>&nbsp;或&nbsp;<code>--namespace=&lt;namespace&gt;</code>，如果不指定则使用默认命名空间（通常是&nbsp;<code>default</code>）</p>



<p class="wp-block-paragraph">2.&nbsp;<strong>资源名称</strong>：可以使用完整名称或简写形式，例如：</p>



<ul class="wp-block-list">
<li><code>pods</code>&nbsp;或&nbsp;<code>po</code></li>



<li><code>services</code>&nbsp;或&nbsp;<code>svc</code></li>



<li><code>deployments</code>&nbsp;或&nbsp;<code>deploy</code></li>



<li><code>namespaces</code>&nbsp;或&nbsp;<code>ns</code></li>
</ul>



<p class="wp-block-paragraph">3.&nbsp;<strong>输出格式</strong>：使用&nbsp;<code>-o</code>&nbsp;参数指定输出格式，常用格式包括：</p>



<ul class="wp-block-list">
<li><code>yaml</code></li>



<li><code>json</code></li>



<li><code>wide</code></li>



<li><code>custom-columns</code></li>
</ul>



<p class="wp-block-paragraph">4.&nbsp;<strong>强制删除</strong>：删除资源时，如果 Pod 处于&nbsp;<code>Terminating</code>&nbsp;状态，可以使用：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="复制" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl delete pod &lt;pod-name> --force --grace-period=0 -n &lt;namespace>
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">pod</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">name</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">force</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">grace</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">period</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">0</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9">namespace</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">5.&nbsp;<strong>权限</strong>：某些命令可能需要相应的 RBAC 权限，确保当前用户有足够的权限执行操作</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading" id="参考资源">参考资源<a href="http://is.iceymoss.com/blog/1#%E5%8F%82%E8%80%83%E8%B5%84%E6%BA%90"></a></h1>



<ul class="wp-block-list">
<li><a href="https://kubernetes.io/docs/">Kubernetes 官方文档</a></li>



<li><a href="https://kubernetes.io/docs/reference/kubectl/">kubectl 官方文档</a></li>



<li><a href="https://kubernetes.io/docs/reference/kubectl/cheatsheet/">kubectl 备忘单</a></li>
</ul>
<p>The post <a href="https://www.atomic-cube.cn/kubectl-%e5%91%bd%e4%bb%a4%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/">Kubectl 命令参考手册</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/kubectl-%e5%91%bd%e4%bb%a4%e5%8f%82%e8%80%83%e6%89%8b%e5%86%8c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>本地安装Minikube部署Kubernetes环境</title>
		<link>https://www.atomic-cube.cn/apple-chip%e5%ae%89%e8%a3%85minikube/</link>
					<comments>https://www.atomic-cube.cn/apple-chip%e5%ae%89%e8%a3%85minikube/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Wed, 29 Apr 2026 23:20:00 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[K8S]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[k3s]]></category>
		<category><![CDATA[k8s]]></category>
		<category><![CDATA[Minikube]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=1685</guid>

					<description><![CDATA[<p>Minikube&#160;是一个工具，它为本地环境提供了一种轻量化的&#160;Kubernetes&#038;nbs [&#8230;]</p>
<p>The post <a href="https://www.atomic-cube.cn/apple-chip%e5%ae%89%e8%a3%85minikube/">本地安装Minikube部署Kubernetes环境</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Minikube&nbsp;是一个工具，它为本地环境提供了一种轻量化的&nbsp;Kubernetes&nbsp;集群实现。通过 Minikube，用户可以在本地机器上快速启动并运行一个 Kubernetes 环境，用来学习、测试和开发。Minikube支持Kubernetes的所有主要功能，包括Dashboard、DNS、容器运行时（如Docker、containerd、CRI-O）等。这种本地化的 Kubernetes 环境主要为开发者提供了便捷，不再需要花费额外的精力去搭建和维护一个庞大的远程集群。</p>



<h4 class="wp-block-heading" id="mR92-1776855755612"><strong>1.安装 Docker Desktop</strong></h4>



<p class="wp-block-paragraph">作为官方推荐的容器化平台，安装Docker Desktop能让你顺利使用Docker驱动<a href="https://developer.baidu.com/article/detail.html?id=3189546"></a>。</p>



<ul class="wp-block-list">
<li><strong>下载与安装</strong>：访问&nbsp;<a href="https://www.docker.com/products/docker-desktop/">Docker 官网</a>，我使用的是Mac M2，需要下载适用于&nbsp;<strong>Apple Chip</strong>&nbsp;的安装包并进行安装<a href="https://blog.csdn.net/hiliang521/article/details/158770295"></a><a href="https://www.e-com-net.com/article/1739862094263631872.htm"></a>。</li>



<li><strong>启动与验证</strong>：安装完成后，启动 Docker Desktop，并确保它在后台正常运行，状态显示为&nbsp;Running<a href="https://blog.csdn.net/hiliang521/article/details/158770295"></a>。</li>
</ul>



<p class="wp-block-paragraph"><strong>2. 安装 Minikube 和 kubectl</strong></p>



<p class="wp-block-paragraph">使用 Homebrew 可以一键安装这两个核心工具<a href="https://blog.csdn.net/hiliang521/article/details/158770295"></a><a href="https://developer.baidu.com/article/detail.html?id=3189546"></a>。</p>



<p class="wp-block-paragraph"><strong>使用 Homebrew 安装</strong>：在终端中执行以下命令：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>brew install kubectl
brew install minikube</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">brew</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">install</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">kubectl</span></span>
<span class="line"><span style="color: #D8DEE9">brew</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">install</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">minikube</span></span></code></pre></div>



<p class="wp-block-paragraph"><br><strong>验证安装</strong>：运行以下命令，确认版本信息能正常输出：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl version --client
minikube version</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">version</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">client</span></span>
<span class="line"><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">version</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img decoding="async" width="860" height="216" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image.png" alt="" class="wp-image-1686" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image.png 860w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-300x75.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-768x193.png 768w" sizes="(max-width: 860px) 100vw, 860px" /></figure>



<p class="wp-block-paragraph"><strong>3. 启动你的 Kubernetes 集群</strong></p>



<p class="wp-block-paragraph">启动命令是最关键的一步。对于国内的网络环境，强烈建议配置阿里云的镜像加速，这能显著提升启动速度和成功率。</p>



<p class="wp-block-paragraph"><strong>推荐方案：使用 Docker 驱动 + 阿里云镜像/dl.k8s.io加速</strong>：使用以下命令启动 Minikube：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>docker配置使用国内镜像源后，可直接运行：
minikube start --driver=docker

可以手动指定其他源，可尝试多次下载：
minikube start --driver=docker --kubernetes-version='v1.35.1' --binary-mirror='https://dl.k8s.io'

如出现下载失败或者下载超时，可采用以下方式彻底清除现有集群和缓存，然后重新执行上面的命令进行下载：
minikube delete --all --purge
rm -rf ~/.minikube   # 可选，彻底清理残留配置</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">docker配置使用国内镜像源后</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">可直接运行</span><span style="color: #D8DEE9FF">：</span></span>
<span class="line"><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">start</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">driver</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">docker</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">可以手动指定其他源</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">可尝试多次下载</span><span style="color: #D8DEE9FF">：</span></span>
<span class="line"><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">start</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">driver</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">docker</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">kubernetes</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">version</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">v1.35.1</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">binary</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">mirror</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">https://dl.k8s.io</span><span style="color: #ECEFF4">&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">如出现下载失败或者下载超时</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">可采用以下方式彻底清除现有集群和缓存</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">然后重新执行上面的命令进行下载</span><span style="color: #D8DEE9FF">：</span></span>
<span class="line"><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">purge</span></span>
<span class="line"><span style="color: #D8DEE9">rm</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">rf</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">~/</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF">   # </span><span style="color: #D8DEE9">可选</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">彻底清理残留配置</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>4.验证并开始使用</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>minikube status
kubectl get nodes</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">status</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nodes</span></span></code></pre></div>



<p class="wp-block-paragraph">如果看到节点状态为&nbsp;Ready，就说明你的单节点 Kubernetes 集群已经成功运行了<a href="https://blog.csdn.net/hiliang521/article/details/158770295"></a>。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="984" height="384" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-1.png" alt="" class="wp-image-1690" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-1.png 984w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-1-300x117.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-1-768x300.png 768w" sizes="(max-width: 984px) 100vw, 984px" /></figure>



<p class="wp-block-paragraph"><strong>5. (可选) 启用 Minikube 插件</strong></p>



<p class="wp-block-paragraph">Minikube 提供了许多插件来扩展功能，最常用的是仪表盘（Dashboard）。</p>



<p class="wp-block-paragraph"><strong>启用仪表盘 (Dashboard)</strong>：执行以下命令，浏览器将自动打开 Kubernetes 的 Web UI 界面，方便你直观地管理集群。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>minikube addons enable dashboard
启用可能会失败：
# 拉取 dashboard 镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.7.0

# 拉取 metrics-scraper 镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.8

将拉取下来的国内镜像，标记为 Kubernetes 期望的官方镜像名：
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.7.0 kubernetes/dashboard:v2.7.0

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.8 kubernetes/metrics-scraper:v1.0.8

删除失败的 Pod，让它们重新创建
kubectl delete pod -n kubernetes-dashboard --all

kubectl get pods -n kubernetes-dashboard

minikube dashboard</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">addons</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">enable</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">dashboard</span></span>
<span class="line"><span style="color: #D8DEE9">启用可能会失败</span><span style="color: #D8DEE9FF">：</span></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">拉取</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">dashboard</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">镜像</span></span>
<span class="line"><span style="color: #D8DEE9">docker</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pull</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">registry</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">cn</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">hangzhou</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">aliyuncs</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">com</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">google_containers</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF">dashboard</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">v2</span><span style="color: #ECEFF4">.</span><span style="color: #B48EAD">7.0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF"># </span><span style="color: #D8DEE9">拉取</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">metrics</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">scraper</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">镜像</span></span>
<span class="line"><span style="color: #D8DEE9">docker</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pull</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">registry</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">cn</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">hangzhou</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">aliyuncs</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">com</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">google_containers</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">metrics</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">scraper</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">v1</span><span style="color: #ECEFF4">.</span><span style="color: #B48EAD">0.8</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">将拉取下来的国内镜像</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">标记为</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Kubernetes</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">期望的官方镜像名</span><span style="color: #D8DEE9FF">：</span></span>
<span class="line"><span style="color: #D8DEE9">docker</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tag</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">registry</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">cn</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">hangzhou</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">aliyuncs</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">com</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">google_containers</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF">dashboard</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">v2</span><span style="color: #ECEFF4">.</span><span style="color: #B48EAD">7.0</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">kubernetes</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF">dashboard</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">v2</span><span style="color: #ECEFF4">.</span><span style="color: #B48EAD">7.0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">docker</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tag</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">registry</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">cn</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">hangzhou</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">aliyuncs</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">com</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">google_containers</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">metrics</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">scraper</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">v1</span><span style="color: #ECEFF4">.</span><span style="color: #B48EAD">0.8</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">kubernetes</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">metrics</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">scraper</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">v1</span><span style="color: #ECEFF4">.</span><span style="color: #B48EAD">0.8</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">删除失败的</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Pod</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">让它们重新创建</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pod</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">kubernetes</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">dashboard</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">all</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">get</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">pods</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">kubernetes</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">dashboard</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">dashboard</span></span></code></pre></div>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-2-scaled.png"><img decoding="async" width="1024" height="529" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-2-1024x529.png" alt="" class="wp-image-1720" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-2-1024x529.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-2-300x155.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-2-768x397.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-2-1536x794.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-2-2048x1058.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-13-scaled.png"><img decoding="async" width="1024" height="525" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-13-1024x525.png" alt="" class="wp-image-1751" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-13-1024x525.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-13-300x154.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-13-768x393.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-13-1536x787.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-13-2048x1049.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-14-scaled.png"><img decoding="async" width="1024" height="512" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-14-1024x512.png" alt="" class="wp-image-1753" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-14-1024x512.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-14-300x150.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-14-768x384.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-14-1536x768.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-14-2048x1024.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-15-scaled.png"><img decoding="async" width="1024" height="523" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-15-1024x523.png" alt="" class="wp-image-1754" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-15-1024x523.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-15-300x153.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-15-768x392.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-15-1536x785.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-15-2048x1046.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph"><br><strong>更多插件</strong>：执行&nbsp;minikube addons list&nbsp;可以查看所有可用插件，例如&nbsp;ingress&nbsp;用于管理入站网络流量。</p>



<p class="wp-block-paragraph"><strong>🧪 测试集群：部署一个 Nginx 应用</strong></p>



<p class="wp-block-paragraph">为了验证集群功能，可以尝试部署一个简单的 Nginx 应用<a href="https://blog.csdn.net/xuezhiwu001/article/details/128392695"></a>。</p>



<ol class="wp-block-list">
<li><strong>创建 Nginx Deployment</strong>：</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl create deployment nginx --image=nginx:alpine</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">create</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nginx</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">image</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">nginx</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9">alpine</span></span></code></pre></div>



<p class="wp-block-paragraph">2.<strong>创建一个 Service 来暴露应用</strong>：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl expose deployment nginx --type=NodePort --port=80</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">expose</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nginx</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">type</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9">NodePort</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">port</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">80</span></span></code></pre></div>



<p class="wp-block-paragraph">3.<strong>获取访问地址</strong>：运行以下命令获取服务的访问 URL，然后在浏览器中打开它，就能看到 Nginx 的欢迎页面了。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>minikube service nginx --url</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">service</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nginx</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">url</span></span></code></pre></div>



<p class="wp-block-paragraph">4.<strong>清理测试资源</strong>：测试完成后，可以删除 Deployment 和 Service 来释放资源。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>kubectl delete service nginx
kubectl delete deployment nginx

常用 Minikube 命令
停止集群: minikube stop (保留数据，释放 CPU/内存)
暂停集群: minikube pause (快速暂停)
删除集群: minikube delete (彻底删除数据)
查看 Dashboard: minikube dashboard (打开 Web 界面)
查看插件列表: minikube addons list</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">service</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nginx</span></span>
<span class="line"><span style="color: #D8DEE9">kubectl</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">deployment</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nginx</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">常用</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">命令</span></span>
<span class="line"><span style="color: #D8DEE9FF">停止集群</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">stop</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">保留数据</span><span style="color: #D8DEE9FF">，</span><span style="color: #D8DEE9">释放</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">CPU</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9">内存</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">暂停集群</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">pause</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">快速暂停</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">删除集群</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">delete</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">彻底删除数据</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9">查看</span><span style="color: #D8DEE9FF"> Dashboard</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">dashboard</span><span style="color: #D8DEE9FF"> (</span><span style="color: #D8DEE9">打开</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Web</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">界面</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">查看插件列表</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">minikube</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">addons</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">list</span></span></code></pre></div>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://www.atomic-cube.cn/apple-chip%e5%ae%89%e8%a3%85minikube/">本地安装Minikube部署Kubernetes环境</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/apple-chip%e5%ae%89%e8%a3%85minikube/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Go 语言文件处理</title>
		<link>https://www.atomic-cube.cn/go-%e8%af%ad%e8%a8%80%e6%96%87%e4%bb%b6%e5%a4%84%e7%90%86/</link>
					<comments>https://www.atomic-cube.cn/go-%e8%af%ad%e8%a8%80%e6%96%87%e4%bb%b6%e5%a4%84%e7%90%86/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 23:37:11 +0000</pubDate>
				<category><![CDATA[Gin]]></category>
		<category><![CDATA[go-zero]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Go-zero]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=1952</guid>

					<description><![CDATA[<p>文件处理是 Go 语言中最常见的操作之一——读取配置、写入日志、数据持久化都离不开它。Go 的标准库提供了一套简洁而强大的文件 I/O 接口，覆盖从单次读写到流式处理的各种场景</p>
<p>The post <a href="https://www.atomic-cube.cn/go-%e8%af%ad%e8%a8%80%e6%96%87%e4%bb%b6%e5%a4%84%e7%90%86/">Go 语言文件处理</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">文件处理是 Go 语言中最常见的操作之一——读取配置、写入日志、数据持久化都离不开它。Go 的标准库提供了一套简洁而强大的文件 I/O 接口，覆盖从单次读写到流式处理的各种场景。</p>



<p class="wp-block-paragraph">与文件处理相关的核心包有 5 个，各有分工：</p>



<figure class="wp-block-image"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/os-scaled.png"><img decoding="async" width="2560" height="986" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/os-scaled.png" alt="" class="wp-image-1954" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/os-scaled.png 2560w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/os-300x116.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/os-1024x394.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/os-768x296.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/os-1536x592.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/os-2048x789.png 2048w" sizes="(max-width: 2560px) 100vw, 2560px" /></a></figure>



<p class="wp-block-paragraph"></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>版本提示：</strong><code>ioutil</code> 包在 Go 1.16 已弃用，其功能已迁移到 <code>os</code>（如 <code>os.ReadFile</code>、<code>os.WriteFile</code>）和 <code>io</code>（如 <code>io.ReadAll</code>）。新代码应直接使用 <code>os</code> 和 <code>io</code> 包。</p>
</blockquote>



<h2 class="wp-block-heading">1. 文件创建</h2>



<p class="wp-block-paragraph"><code>os.Create</code> 创建一个新文件。如果文件已存在，<span class="marked">会被截断（清空内容）</span>。返回的文件对象必须关闭以释放系统资源：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "log"
        "os"
)

func main() {
        // os.Create 创建文件（已存在则清空）
        file, err := os.Create("test.txt")
        if err != nil {
                log.Fatal(err)
        }
        defer file.Close() // defer 确保函数结束时关闭文件

        // 写入内容验证创建成功
        file.WriteString("文件创建成功\n")
        log.Println("文件创建成功")
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// os.Create 创建文件（已存在则清空）</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Create</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">test.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">() </span><span style="color: #616E88">// defer 确保函数结束时关闭文件</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 写入内容验证创建成功</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WriteString</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">文件创建成功</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">文件创建成功</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong><code>defer file.Close()</code></strong> 是 Go 文件操作的最佳实践。<code>defer</code> 会确保即使后续代码出现 panic，文件也会被正确关闭，避免文件描述符泄漏。</p>
</blockquote>



<h2 class="wp-block-heading">2. 文件打开与关闭</h2>



<p class="wp-block-paragraph"><code>os</code> 包提供三种打开文件的方式，适用于不同场景：</p>



<figure class="wp-block-table reference"><table class="has-fixed-layout"><tbody><tr><th>函数</th><th>模式</th><th>说明</th></tr><tr><td><code>os.Open(name)</code></td><td>只读</td><td>最简单的方式，只读打开</td></tr><tr><td><code>os.Create(name)</code></td><td>读写 + 创建/截断</td><td>创建新文件或清空已有文件</td></tr><tr><td><code>os.OpenFile(name, flag, perm)</code></td><td>自定义</td><td>可指定读写、追加、创建等标志</td></tr></tbody></table></figure>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "fmt"
        "os"
)

func main() {
        // 方式1：只读打开
        file, err := os.Open("example.txt")
        if err != nil {
                fmt.Println("打开失败:", err)
                return
        }
        defer file.Close()
        fmt.Println("文件打开成功")

        // 方式2：OpenFile 自定义模式
        // os.O_WRONLY  只写
        // os.O_CREATE  不存在则创建
        // os.O_APPEND  追加模式
        // os.O_TRUNC   存在则截断
        f, err := os.OpenFile("log.txt",
                os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
        if err != nil {
                fmt.Println("打开失败:", err)
                return
        }
        defer f.Close()
        f.WriteString("追加一行日志\n")
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 方式1：只读打开</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Open</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">example.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">打开失败:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">return</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">文件打开成功</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 方式2：OpenFile 自定义模式</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// os.O_WRONLY  只写</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// os.O_CREATE  不存在则创建</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// os.O_APPEND  追加模式</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// os.O_TRUNC   存在则截断</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">f</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">OpenFile</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">O_WRONLY</span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">O_CREATE</span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">O_APPEND</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0644</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">打开失败:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">return</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">f</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">f</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WriteString</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">追加一行日志</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">OpenFile 标志位说明</h3>



<figure class="wp-block-table reference"><table class="has-fixed-layout"><tbody><tr><th>标志</th><th>说明</th></tr><tr><td><code>os.O_RDONLY</code></td><td>只读（默认）</td></tr><tr><td><code>os.O_WRONLY</code></td><td>只写</td></tr><tr><td><code>os.O_RDWR</code></td><td>读写</td></tr><tr><td><code>os.O_APPEND</code></td><td>追加模式，写入内容追加到文件末尾</td></tr><tr><td><code>os.O_CREATE</code></td><td>文件不存在时创建</td></tr><tr><td><code>os.O_TRUNC</code></td><td>打开时清空文件内容</td></tr><tr><td><code>os.O_EXCL</code></td><td>与 CREATE 配合，文件已存在时报错</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">3. 文件读取</h2>



<p class="wp-block-paragraph">Go 提供了三种主要的文件读取方式，根据文件大小和处理需求选择：<a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/c.png"><img decoding="async" class="alignnone size-full wp-image-1955" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/c.png" alt="" width="1956" height="484" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/c.png 1956w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/c-300x74.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/c-1024x253.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/c-768x190.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/c-1536x380.png 1536w" sizes="(max-width: 1956px) 100vw, 1956px" /></a></p>



<h3 class="wp-block-heading">3.1 一次性读取（小文件推荐）</h3>



<p class="wp-block-paragraph"><code>os.ReadFile</code> 是最简洁的方式——自动打开、读取、关闭文件，一步到位：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "fmt"
        "log"
        "os"
)

func main() {
        // 一次性读取整个文件（Go 1.16+）
        data, err := os.ReadFile("config.json")
        if err != nil {
                log.Fatal(err)
        }

        fmt.Println(string(data))
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 一次性读取整个文件（Go 1.16+）</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">data</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">ReadFile</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">config.json</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #88C0D0">string</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">data</span><span style="color: #D8DEE9FF">))</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">3.2 逐行读取（大文件推荐）</h3>



<p class="wp-block-paragraph">对于大文件，使用 <code>bufio.Scanner</code> 逐行处理，避免一次性加载到内存：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "bufio"
        "fmt"
        "log"
        "os"
)

func main() {
        file, err := os.Open("large-file.log")
        if err != nil {
                log.Fatal(err)
        }
        defer file.Close()

        // 逐行扫描
        scanner := bufio.NewScanner(file)
        lineNum := 0
        for scanner.Scan() {
                lineNum++
                line := scanner.Text() // 获取当前行内容
                fmt.Printf("第 %d 行: %s\n", lineNum, line)
        }

        // 检查扫描过程中是否出错
        if err := scanner.Err(); err != nil {
                log.Fatal("读取错误:", err)
        }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">bufio</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Open</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">large-file.log</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 逐行扫描</span></span>
<span class="line"><span style="color: #D8DEE9FF">        scanner </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">bufio</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">NewScanner</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">file</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        lineNum </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">scanner</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Scan</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">lineNum</span><span style="color: #81A1C1">++</span></span>
<span class="line"><span style="color: #D8DEE9FF">                line </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">scanner</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Text</span><span style="color: #D8DEE9FF">() </span><span style="color: #616E88">// 获取当前行内容</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">第 %d 行: %s</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">lineNum</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">line</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 检查扫描过程中是否出错</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">scanner</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Err</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">读取错误:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>注意：</strong><code>bufio.Scanner</code> 默认最大行长度为 64KB。如果文件中有超长行，需要在调用 <code>Scan()</code> 前设置 <code>scanner.Buffer(make([]byte, 0), maxSize)</code> 来增大缓冲区。</p>
</blockquote>



<h3 class="wp-block-heading">3.3 使用 io.ReadAll 读取</h3>



<p class="wp-block-paragraph">当你已经有一个打开的 <code>io.Reader</code>（如网络响应、已打开的文件），可以使用 <code>io.ReadAll</code>：</p>



<pre class="wp-block-code"><code>package main

import (
        "fmt"
        "io"
        "log"
        "os"
)

func main() {
        file, err := os.Open("example.txt")
        if err != nil {
                log.Fatal(err)
        }
        defer file.Close()

        // 从 Reader 读取所有数据
        data, err := io.ReadAll(file)
        if err != nil {
                log.Fatal(err)
        }

        fmt.Println(string(data))
}</code></pre>



<h2 class="wp-block-heading">4. 文件写入</h2>



<p class="wp-block-paragraph">Go 提供了多种写入方式，从简单的一次性写入到高性能的缓冲写入：</p>



<h3 class="wp-block-heading">4.1 一次性写入</h3>



<p class="wp-block-paragraph"><code>os.WriteFile</code> 将数据一次性写入文件（覆盖原有内容）：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "log"
        "os"
)

func main() {
        content := []byte("Hello, Go!\n这是第二行\n")

        // 0644: 所有者读写，其他用户只读
        err := os.WriteFile("output.txt", content, 0644)
        if err != nil {
                log.Fatal(err)
        }
        log.Println("写入成功")
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        content </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> []</span><span style="color: #88C0D0">byte</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Hello, Go!</span><span style="color: #EBCB8B">\n</span><span style="color: #A3BE8C">这是第二行</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 0644: 所有者读写，其他用户只读</span></span>
<span class="line"><span style="color: #D8DEE9FF">        err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WriteFile</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">output.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">content</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0644</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">写入成功</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">4.2 使用 File 对象写入</h3>



<p class="wp-block-paragraph">通过文件对象写入，可以分多次写入内容：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "fmt"
        "log"
        "os"
)

func main() {
        file, err := os.Create("output.txt")
        if err != nil {
                log.Fatal(err)
        }
        defer file.Close()

        // 方式1：写入字符串
        file.WriteString("直接写入字符串\n")

        // 方式2：写入字节切片
        data := []byte("写入字节切片\n")
        file.Write(data)

        // 方式3：格式化写入
        fmt.Fprintf(file, "格式化写入: %d + %d = %d\n", 3, 4, 7)
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Create</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">output.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 方式1：写入字符串</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WriteString</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">直接写入字符串</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 方式2：写入字节切片</span></span>
<span class="line"><span style="color: #D8DEE9FF">        data </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> []</span><span style="color: #88C0D0">byte</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">写入字节切片</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Write</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">data</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 方式3：格式化写入</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fprintf</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">格式化写入: %d + %d = %d</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">3</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">4</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">7</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">4.3 缓冲写入（大量数据推荐）</h3>



<p class="wp-block-paragraph"><code>bufio.Writer</code> 会先将数据写入内存缓冲区，攒够后再批量写入磁盘，显著减少 I/O 次数。<span class="marked">务必在结束前调用 <code>Flush()</code></span>：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "bufio"
        "log"
        "os"
)

func main() {
        file, err := os.Create("buffered-output.txt")
        if err != nil {
                log.Fatal(err)
        }
        defer file.Close()

        // 创建带缓冲的写入器
        writer := bufio.NewWriter(file)

        // 写入多行（先进入缓冲区，不会立即写磁盘）
        for i := 0; i &lt; 1000; i++ {
                writer.WriteString("这是第 " + itoa(i) + " 行\n")
        }

        // Flush 将缓冲区剩余数据写入文件
        if err := writer.Flush(); err != nil {
                log.Fatal("刷新缓冲区失败:", err)
        }
        log.Println("缓冲写入完成")
}

// 简单的 int 转 string 辅助函数
func itoa(n int) string {
        return fmt.Sprintf("%d", n)
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">bufio</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Create</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">buffered-output.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 创建带缓冲的写入器</span></span>
<span class="line"><span style="color: #D8DEE9FF">        writer </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">bufio</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">NewWriter</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">file</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 写入多行（先进入缓冲区，不会立即写磁盘）</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> i </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1000</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">i</span><span style="color: #81A1C1">++</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">writer</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WriteString</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">这是第 </span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">itoa</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">i</span><span style="color: #D8DEE9FF">) </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C"> 行</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// Flush 将缓冲区剩余数据写入文件</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">writer</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Flush</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">刷新缓冲区失败:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">缓冲写入完成</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// 简单的 int 转 string 辅助函数</span></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">itoa</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">int</span><span style="color: #D8DEE9FF">) </span><span style="color: #D8DEE9">string</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Sprintf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">%d</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">5. 文件追加写入</h2>



<p class="wp-block-paragraph">使用 <code>os.O_APPEND</code> 标志在文件末尾追加内容，而不覆盖已有数据：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "log"
        "os"
        "time"
)

func main() {
        // O_APPEND: 追加模式
        // O_CREATE: 不存在则创建
        // O_WRONLY: 只写
        file, err := os.OpenFile("app.log",
                os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
        if err != nil {
                log.Fatal(err)
        }
        defer file.Close()

        // 每次运行都会追加，不会覆盖
        timestamp := time.Now().Format("2006-01-02 15:04:05")
        file.WriteString("&#91;" + timestamp + "&#93; 应用启动\n")
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">time</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// O_APPEND: 追加模式</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// O_CREATE: 不存在则创建</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// O_WRONLY: 只写</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">OpenFile</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">app.log</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">O_APPEND</span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">O_CREATE</span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">O_WRONLY</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0644</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 每次运行都会追加，不会覆盖</span></span>
<span class="line"><span style="color: #D8DEE9FF">        timestamp </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">time</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Now</span><span style="color: #D8DEE9FF">()</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Format</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">2006-01-02 15:04:05</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">file</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">WriteString</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&#91;</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">timestamp</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">&#93; 应用启动</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>对比：</strong><code>os.Create</code> 会清空已有内容；<code>os.OpenFile</code> 配合 <code>O_APPEND</code> 会追加内容。日志场景务必使用追加模式。</p>
</blockquote>



<h2 class="wp-block-heading">6. 文件删除与重命名</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "log"
        "os"
)

func main() {
        // 重命名 / 移动文件
        err := os.Rename("old.txt", "new.txt")
        if err != nil {
                log.Fatal("重命名失败:", err)
        }
        log.Println("重命名成功")

        // 删除文件
        err = os.Remove("temp.txt")
        if err != nil {
                log.Fatal("删除失败:", err)
        }
        log.Println("删除成功")
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 重命名 / 移动文件</span></span>
<span class="line"><span style="color: #D8DEE9FF">        err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Rename</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">old.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">new.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">重命名失败:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">重命名成功</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 删除文件</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Remove</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">temp.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">删除失败:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">删除成功</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">7. 文件信息与检查</h2>



<h3 class="wp-block-heading">7.1 获取文件信息</h3>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "fmt"
        "log"
        "os"
)

func main() {
        info, err := os.Stat("test.txt")
        if err != nil {
                log.Fatal(err)
        }

        fmt.Println("文件名:    ", info.Name())
        fmt.Println("大小:      ", info.Size(), "字节")
        fmt.Println("权限:      ", info.Mode())
        fmt.Println("修改时间:  ", info.ModTime())
        fmt.Println("是目录吗:  ", info.IsDir())
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">info</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Stat</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">test.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">文件名:    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">info</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Name</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">大小:      </span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">info</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Size</span><span style="color: #D8DEE9FF">()</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">字节</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">权限:      </span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">info</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Mode</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">修改时间:  </span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">info</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">ModTime</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">是目录吗:  </span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">info</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">IsDir</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">7.2 检查文件是否存在</h3>



<p class="wp-block-paragraph">Go 没有专门的&#8221;文件存在&#8221;函数，通过 <code>os.Stat</code> + <code>os.IsNotExist</code> 判断：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "fmt"
        "os"
)

// fileExists 检查文件是否存在
func fileExists(path string) bool {
        _, err := os.Stat(path)
        return !os.IsNotExist(err)
}

func main() {
        if fileExists("test.txt") {
                fmt.Println("文件存在")
        } else {
                fmt.Println("文件不存在")
        }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// fileExists 检查文件是否存在</span></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">fileExists</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">path</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">string</span><span style="color: #D8DEE9FF">) </span><span style="color: #D8DEE9">bool</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">_</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Stat</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">path</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!</span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">IsNotExist</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">fileExists</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">test.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">文件存在</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">else</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">文件不存在</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">8. 目录操作</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "fmt"
        "log"
        "os"
)

func main() {
        // 创建单个目录
        err := os.Mkdir("newdir", 0755)
        if err != nil {
                log.Fatal(err)
        }

        // 递归创建多级目录（父目录不存在也会自动创建）
        err = os.MkdirAll("path/to/deep/dir", 0755)
        if err != nil {
                log.Fatal(err)
        }

        // 读取目录内容
        entries, err := os.ReadDir(".")
        if err != nil {
                log.Fatal(err)
        }
        for _, entry := range entries {
                mark := "&#x1f4c4;"
                if entry.IsDir() {
                        mark = "&#x1f4c1;"
                }
                fmt.Printf("%s %s\n", mark, entry.Name())
        }

        // 删除空目录
        os.Remove("newdir")

        // 递归删除目录及其所有内容（&#x26a0; 谨慎使用）
        os.RemoveAll("path")
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 创建单个目录</span></span>
<span class="line"><span style="color: #D8DEE9FF">        err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Mkdir</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">newdir</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0755</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 递归创建多级目录（父目录不存在也会自动创建）</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">MkdirAll</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">path/to/deep/dir</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0755</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 读取目录内容</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">entries</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">ReadDir</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">.</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">for</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">_</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> entry </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">range</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">entries</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                mark </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">📄</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">entry</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">IsDir</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                        </span><span style="color: #D8DEE9">mark</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">📁</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">%s %s</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">mark</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">entry</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Name</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 删除空目录</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Remove</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">newdir</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 递归删除目录及其所有内容（⚠ 谨慎使用）</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">RemoveAll</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">path</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h2 class="wp-block-heading">9. 高级操作</h2>



<h3 class="wp-block-heading">9.1 文件复制</h3>



<p class="wp-block-paragraph">使用 <code>io.Copy</code> 在两个文件之间高效复制数据：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "io"
        "log"
        "os"
)

// copyFile 复制文件的通用函数
func copyFile(src, dst string) (int64, error) {
        srcFile, err := os.Open(src)
        if err != nil {
                return 0, err
        }
        defer srcFile.Close()

        dstFile, err := os.Create(dst)
        if err != nil {
                return 0, err
        }
        defer dstFile.Close()

        // io.Copy 自动管理缓冲区，高效复制
        return io.Copy(dstFile, srcFile)
}

func main() {
        n, err := copyFile("source.txt", "destination.txt")
        if err != nil {
                log.Fatal(err)
        }
        log.Printf("复制完成，共 %d 字节", n)
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">io</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// copyFile 复制文件的通用函数</span></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">copyFile</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">src</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">dst</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">string</span><span style="color: #D8DEE9FF">) (</span><span style="color: #D8DEE9">int64</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">error</span><span style="color: #D8DEE9FF">) </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">srcFile</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Open</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">src</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">srcFile</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">dstFile</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Create</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">dst</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">dstFile</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Close</span><span style="color: #D8DEE9FF">()</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// io.Copy 自动管理缓冲区，高效复制</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">io</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Copy</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">dstFile</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">srcFile</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">n</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">copyFile</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">source.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">destination.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Printf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">复制完成，共 %d 字节</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">n</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">9.2 临时文件与目录</h3>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "fmt"
        "log"
        "os"
)

func main() {
        // 创建临时文件（自动命名，前缀为 "app-"）
        tmpFile, err := os.CreateTemp("", "app-*.txt")
        if err != nil {
                log.Fatal(err)
        }
        defer os.Remove(tmpFile.Name()) // 用完后清理
        fmt.Println("临时文件:", tmpFile.Name())

        // 创建临时目录
        tmpDir, err := os.MkdirTemp("", "app-*")
        if err != nil {
                log.Fatal(err)
        }
        defer os.RemoveAll(tmpDir) // 用完后清理
        fmt.Println("临时目录:", tmpDir)
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 创建临时文件（自动命名，前缀为 &quot;app-&quot;）</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">tmpFile</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">CreateTemp</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">app-*.txt</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Remove</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">tmpFile</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Name</span><span style="color: #D8DEE9FF">()) </span><span style="color: #616E88">// 用完后清理</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">临时文件:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tmpFile</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Name</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">        </span><span style="color: #616E88">// 创建临时目录</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">tmpDir</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">MkdirTemp</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">app-*</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">defer</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">RemoveAll</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">tmpDir</span><span style="color: #D8DEE9FF">) </span><span style="color: #616E88">// 用完后清理</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">临时目录:</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">tmpDir</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">9.3 递归遍历目录</h3>



<p class="wp-block-paragraph"><code>filepath.Walk</code> 可以递归遍历目录树中的所有文件和子目录：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>package main

import (
        "fmt"
        "log"
        "os"
        "path/filepath"
)

func main() {
        root := "." // 从当前目录开始遍历

        err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
                if err != nil {
                        return err // 遇到错误时可以选择跳过或返回
                }

                // 打印路径和大小
                size := ""
                if !info.IsDir() {
                        size = fmt.Sprintf(" (%d bytes)", info.Size())
                }
                fmt.Println(path + size)
                return nil
        })

        if err != nil {
                log.Fatal(err)
        }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">package</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">main</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">import</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">fmt</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">log</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">os</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">path/filepath</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">func</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">main</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">        root </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">.</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// 从当前目录开始遍历</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">        err </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">filepath</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Walk</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">root</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">func</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">path</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">string</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">info</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">FileInfo</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">error</span><span style="color: #D8DEE9FF">) </span><span style="color: #D8DEE9">error</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                if err != nil </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">// 遇到错误时可以选择跳过或返回</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ECEFF4">                </span><span style="color: #616E88">// 打印路径和大小</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #88C0D0">size </span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!</span><span style="color: #D8DEE9">info</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">IsDir</span><span style="color: #D8DEE9FF">() </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                        </span><span style="color: #D8DEE9">size</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Sprintf</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C"> (%d bytes)</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">info</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Size</span><span style="color: #D8DEE9FF">())</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">fmt</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Println</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">path</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">size</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">nil</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">log</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">Fatal</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">err</span><span style="color: #D8DEE9FF">)</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span></code></pre></div>



<h3 class="wp-block-heading">9.4 跨平台路径拼接</h3>



<p class="wp-block-paragraph"><span class="marked">永远不要用字符串拼接路径</span>（如 <code>dir + "/" + file</code>），使用 <code>filepath.Join</code> 确保跨平台兼容：</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>// 错误：Windows 上路径分隔符是 \&lt;br>path := "dir" + "/" + "file.txt"&lt;br>&lt;br>// 正确：自动适配当前操作系统&lt;br>path := filepath.Join("dir", "file.txt")&lt;br>&lt;br></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88">// 错误：Windows 上路径分隔符是 \&lt;br&gt;path := &quot;dir&quot; + &quot;/&quot; + &quot;file.txt&quot;&lt;br&gt;&lt;br&gt;// 正确：自动适配当前操作系统&lt;br&gt;path := filepath.Join(&quot;dir&quot;, &quot;file.txt&quot;)&lt;br&gt;&lt;br&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">场景速查表</h2>



<figure class="wp-block-table reference"><table class="has-fixed-layout"><tbody><tr><th>场景</th><th>推荐方式</th><th>关键代码</th></tr><tr><td>读取小文件</td><td><code>os.ReadFile</code></td><td><code>data, err := os.ReadFile("file.txt")</code></td></tr><tr><td>逐行读取大文件</td><td><code>bufio.Scanner</code></td><td><code>scanner := bufio.NewScanner(file)</code></td></tr><tr><td>写入小文件</td><td><code>os.WriteFile</code></td><td><code>os.WriteFile("f.txt", data, 0644)</code></td></tr><tr><td>大量数据写入</td><td><code>bufio.Writer</code></td><td><code>writer := bufio.NewWriter(file)</code></td></tr><tr><td>追加日志</td><td><code>os.OpenFile</code> + <code>O_APPEND</code></td><td><code>os.OpenFile("log", os.O_APPEND|os.O_WRONLY, 0644)</code></td></tr><tr><td>文件复制</td><td><code>io.Copy</code></td><td><code>io.Copy(dst, src)</code></td></tr><tr><td>遍历目录</td><td><code>filepath.Walk</code></td><td><code>filepath.Walk(".", callback)</code></td></tr><tr><td>路径拼接</td><td><code>filepath.Join</code></td><td><code>filepath.Join("dir", "file.txt")</code></td></tr><tr><td>检查文件存在</td><td><code>os.Stat</code> + <code>os.IsNotExist</code></td><td><code>_, err := os.Stat(path)</code></td></tr><tr><td>创建临时文件</td><td><code>os.CreateTemp</code></td><td><code>os.CreateTemp("", "prefix-*.txt")</code></td></tr></tbody></table></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>文件权限说明：</strong><code>0644</code> 表示所有者可读写（6=4+2），组和其他用户只读（4）。目录通常使用 <code>0755</code>（多了执行权限，否则无法进入目录）。</p>
</blockquote>
<p>The post <a href="https://www.atomic-cube.cn/go-%e8%af%ad%e8%a8%80%e6%96%87%e4%bb%b6%e5%a4%84%e7%90%86/">Go 语言文件处理</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/go-%e8%af%ad%e8%a8%80%e6%96%87%e4%bb%b6%e5%a4%84%e7%90%86/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VSCode ,codex,claude code使用 ‌oMLX‌ 本地模型</title>
		<link>https://www.atomic-cube.cn/vs-code-%e4%b8%ad%e4%bd%bf%e7%94%a8-omlx-%e6%9c%ac%e5%9c%b0%e6%a8%a1%e5%9e%8b/</link>
					<comments>https://www.atomic-cube.cn/vs-code-%e4%b8%ad%e4%bd%bf%e7%94%a8-omlx-%e6%9c%ac%e5%9c%b0%e6%a8%a1%e5%9e%8b/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 22:00:00 +0000</pubDate>
				<category><![CDATA[agent skills]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[Codex]]></category>
		<category><![CDATA[Gin]]></category>
		<category><![CDATA[go-zero]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[Vibe Coding]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[llm]]></category>
		<category><![CDATA[token]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=1858</guid>

					<description><![CDATA[<p>在 VS Code 中使用 ‌oMLX‌ 本地模型，主要依赖于 oMLX 提供的 ‌OpenAI / Anth [&#8230;]</p>
<p>The post <a href="https://www.atomic-cube.cn/vs-code-%e4%b8%ad%e4%bd%bf%e7%94%a8-omlx-%e6%9c%ac%e5%9c%b0%e6%a8%a1%e5%9e%8b/">VSCode ,codex,claude code使用 ‌oMLX‌ 本地模型</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">在 VS Code 中使用 ‌<strong>oMLX</strong>‌ 本地模型，主要依赖于 oMLX 提供的 ‌<strong>OpenAI / Anthropic 兼容 API 接口</strong>‌，通过配置 VS Code 的 AI 插件（如 Continue、Copilot Chat 等）连接到 oMLX 本地服务。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">✅ 核心步骤</h3>



<ul class="wp-block-list">
<li>‌<strong>oMLX 仅支持 macOS + Apple Silicon（M1/M2/M3/M4/M5）</strong>‌，不支持 Windows 或 NVIDIA 显卡 ‌。</li>



<li>oMLX 启动后默认提供以下 API 接口：
<ul class="wp-block-list">
<li>OpenAI 兼容：<code>http://localhost:8000/v1</code></li>



<li>Anthropic 兼容：<code>http://localhost:8000</code></li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">🛠️ 在 VS Code 中配置 oMLX 的方法</h3>



<h4 class="wp-block-heading">一：使用 ‌<strong>Continue 插件</strong>‌（推荐）</h4>



<ol class="wp-block-list">
<li>‌<strong>安装 Continue 插件</strong>‌
<ul class="wp-block-list">
<li>打开 VS Code → 扩展市场 → 搜索&nbsp;<code>Continue</code>&nbsp;→ 安装 ‌。</li>
</ul>
</li>



<li>‌<strong>配置本地模型</strong>‌
<ul class="wp-block-list">
<li>打开 VS Code 设置（<code>Cmd+,</code>）→ 搜索&nbsp;<code>Continue</code>。</li>



<li>在&nbsp;<code>Continue: Models</code>&nbsp;中添加如下配置：</li>



<li>重启 VS Code 或重新加载 Continue。</li>
</ul>
</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>models:
  - name: MLX-Qwen3.5-9B-Claude-4.6-Opus-Reasoning-Distilled-v2-4bit
    provider: openai #一定要设置成openai
    model: MLX-Qwen3.5-9B-Claude-4.6-Opus-Reasoning-Distilled-v2-4bit #这里改成本地使用的模型
    apiKey: omlx #这里改成本地omlx设置的apikey
    apiBase: http://localhost:8000/v1 #这里改成OMLX中API 端点OpenAI API的地址即可
    roles:
      - chat
      - edit
      - apply</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">models</span><span style="color: #ECEFF4">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> name</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">MLX</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Qwen3</span><span style="color: #ECEFF4">.</span><span style="color: #B48EAD">5</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">9</span><span style="color: #D8DEE9">B</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Claude</span><span style="color: #81A1C1">-</span><span style="color: #B48EAD">4.6</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Opus</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Reasoning</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Distilled</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">v2</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">4</span><span style="color: #D8DEE9">bit</span></span>
<span class="line"><span style="color: #D8DEE9FF">    provider</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">openai</span><span style="color: #D8DEE9FF"> #</span><span style="color: #D8DEE9">一定要设置成openai</span></span>
<span class="line"><span style="color: #D8DEE9FF">    model</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">MLX</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Qwen3</span><span style="color: #ECEFF4">.</span><span style="color: #B48EAD">5</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">9</span><span style="color: #D8DEE9">B</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Claude</span><span style="color: #81A1C1">-</span><span style="color: #B48EAD">4.6</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Opus</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Reasoning</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Distilled</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">v2</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">4</span><span style="color: #D8DEE9">bit</span><span style="color: #D8DEE9FF"> #</span><span style="color: #D8DEE9">这里改成本地使用的模型</span></span>
<span class="line"><span style="color: #D8DEE9FF">    apiKey</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">omlx</span><span style="color: #D8DEE9FF"> #</span><span style="color: #D8DEE9">这里改成本地omlx设置的apikey</span></span>
<span class="line"><span style="color: #D8DEE9FF">    apiBase</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> http</span><span style="color: #ECEFF4">:</span><span style="color: #616E88">//localhost:8000/v1 #这里改成OMLX中API 端点OpenAI API的地址即可</span></span>
<span class="line"><span style="color: #D8DEE9FF">    roles</span><span style="color: #ECEFF4">:</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">chat</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">edit</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">apply</span></span></code></pre></div>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-25.png"><img decoding="async" width="1024" height="645" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-25-1024x645.png" alt="" class="wp-image-1878" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-25-1024x645.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-25-300x189.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-25-768x484.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-25-1536x968.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-25-2048x1291.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-35-scaled.png"><img decoding="async" width="1024" height="559" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-35-1024x559.png" alt="" class="wp-image-1915" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-35-1024x559.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-35-300x164.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-35-768x419.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-35-1536x839.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-35-2048x1118.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph"></p>



<ol class="wp-block-list">
<li><strong>启动 oMLX 服务</strong>‌
<ul class="wp-block-list">
<li>确保 oMLX 已在终端或菜单栏中运行，并已加载目标模型 ‌。</li>
</ul>
</li>



<li>‌<strong>使用</strong>‌
<ul class="wp-block-list">
<li>在 VS Code 编辑器中右键 → 选择&nbsp;<code>Continue: Chat</code>、Agent&nbsp;或按快捷键（默认&nbsp;<code>Cmd+I</code>）即可调用本地模型。</li>
</ul>
</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">✅ 优势：完全离线、代码不上传云端、支持工具调用与结构化输出 ‌。</p>
</blockquote>



<p class="wp-block-paragraph">本地使用截图，能用，够用(M2 16G+512G的macbook pro，请忽略token生成的速度)：</p>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-26-scaled.png"><img decoding="async" width="1024" height="502" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-26-1024x502.png" alt="" class="wp-image-1882" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-26-1024x502.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-26-300x147.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-26-768x377.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-26-1536x753.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-26-2048x1004.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-33.png"><img decoding="async" width="1024" height="458" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-33-1024x458.png" alt="" class="wp-image-1896" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-33-1024x458.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-33-300x134.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-33-768x343.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-33-1536x687.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-33-2048x916.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-17.png"><img decoding="async" width="1024" height="765" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-17-1024x765.png" alt="" class="wp-image-1859" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-17-1024x765.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-17-300x224.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-17-768x574.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-17-1536x1148.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-17.png 1956w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">集成 Claude Code / Codex/<strong>OpenCode</strong>/<strong>OpenClaw</strong></h3>



<p class="wp-block-paragraph">oMLX 提供一键配置生成器，简化了与主流开发工具的集成：</p>



<ol class="wp-block-list">
<li>打开 Web 管理面板 (http://localhost:8000/admin)</li>



<li>选择要使用的模型</li>



<li>点击 “Integrations” 选项卡</li>



<li>一键复制配置命令</li>



<li>打开命令行，cd进入需要处理的项目文件夹，对应的命令 回车就可以啦，如codex和claude code的启动命令</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>'/Applications/oMLX.app/Contents/MacOS/omlx-cli' launch codex --model 'MLX-Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-v2-8bit' --api-key 'omlx'</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">/Applications/oMLX.app/Contents/MacOS/omlx-cli</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">launch</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">codex</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">model</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">MLX-Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-v2-8bit</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9">api</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">key</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">omlx</span><span style="color: #ECEFF4">&#39;</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>ANTHROPIC_BASE_URL='http://127.0.0.1:8000' ANTHROPIC_AUTH_TOKEN='omlx' ANTHROPIC_DEFAULT_OPUS_MODEL='MLX-Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-v2-8bit' ANTHROPIC_DEFAULT_SONNET_MODEL='MLX-Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-v2-8bit' ANTHROPIC_DEFAULT_HAIKU_MODEL='MLX-Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-v2-8bit' API_TIMEOUT_MS=3000000 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 claude</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">ANTHROPIC_BASE_URL</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">http://127.0.0.1:8000</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ANTHROPIC_AUTH_TOKEN</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">omlx</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ANTHROPIC_DEFAULT_OPUS_MODEL</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">MLX-Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-v2-8bit</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ANTHROPIC_DEFAULT_SONNET_MODEL</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">MLX-Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-v2-8bit</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ANTHROPIC_DEFAULT_HAIKU_MODEL</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">MLX-Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-v2-8bit</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">API_TIMEOUT_MS</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">3000000</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">1</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">claude</span></span></code></pre></div>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-30.png"><img decoding="async" width="1024" height="367" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-30-1024x367.png" alt="" class="wp-image-1889" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-30-1024x367.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-30-300x107.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-30-768x275.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-30-1536x550.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-30-2048x733.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-31.png"><img decoding="async" width="1024" height="460" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-31-1024x460.png" alt="" class="wp-image-1891" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-31-1024x460.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-31-300x135.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-31-768x345.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-31-1536x689.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-31-2048x919.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-34.png"><img decoding="async" width="1024" height="253" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-34-1024x253.png" alt="" class="wp-image-1909" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-34-1024x253.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-34-300x74.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-34-768x190.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-34-1536x380.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-34-2048x506.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-29.png"><img decoding="async" width="1024" height="579" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-29-1024x579.png" alt="" class="wp-image-1888" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-29-1024x579.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-29-300x170.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-29-768x435.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-29-1536x869.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-29-2048x1159.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-36.png"><img decoding="async" width="1024" height="605" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-36-1024x605.png" alt="" class="wp-image-1918" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-36-1024x605.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-36-300x177.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-36-768x454.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-36-1536x908.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-36-2048x1211.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-37.png"><img decoding="async" width="1024" height="609" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-37-1024x609.png" alt="" class="wp-image-1920" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-37-1024x609.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-37-300x178.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-37-768x457.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-37-1536x914.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-37-2048x1218.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
<p>The post <a href="https://www.atomic-cube.cn/vs-code-%e4%b8%ad%e4%bd%bf%e7%94%a8-omlx-%e6%9c%ac%e5%9c%b0%e6%a8%a1%e5%9e%8b/">VSCode ,codex,claude code使用 ‌oMLX‌ 本地模型</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/vs-code-%e4%b8%ad%e4%bd%bf%e7%94%a8-omlx-%e6%9c%ac%e5%9c%b0%e6%a8%a1%e5%9e%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>2026AI 编码工具全面对比：Codex CLI、Claude Code、Cursor、Gemini CLI、Copilot CLI</title>
		<link>https://www.atomic-cube.cn/2026-ai-%e7%bc%96%e7%a0%81-cli-%e5%b7%a5%e5%85%b7%e5%85%a8%e9%9d%a2%e5%af%b9%e6%af%94%ef%bc%9acodex-cli%e3%80%81claude-code%e3%80%81cursor%e3%80%81gemini-cli%e3%80%81copilot-cli/</link>
					<comments>https://www.atomic-cube.cn/2026-ai-%e7%bc%96%e7%a0%81-cli-%e5%b7%a5%e5%85%b7%e5%85%a8%e9%9d%a2%e5%af%b9%e6%af%94%ef%bc%9acodex-cli%e3%80%81claude-code%e3%80%81cursor%e3%80%81gemini-cli%e3%80%81copilot-cli/#respond</comments>
		
		<dc:creator><![CDATA[evans]]></dc:creator>
		<pubDate>Sun, 26 Apr 2026 21:30:23 +0000</pubDate>
				<category><![CDATA[agent skills]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[claude code]]></category>
		<category><![CDATA[Codex]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[Vibe Coding]]></category>
		<category><![CDATA[技术文章]]></category>
		<category><![CDATA[codex]]></category>
		<category><![CDATA[llm]]></category>
		<category><![CDATA[opencode]]></category>
		<category><![CDATA[token]]></category>
		<category><![CDATA[vibe coding]]></category>
		<guid isPermaLink="false">https://www.atomic-cube.cn/?p=1927</guid>

					<description><![CDATA[<p>一、概述与产品定位 2025 至 2026 年间，AI 编程工具从 IDE 插件（以 Cursor 为代表）大 [&#8230;]</p>
<p>The post <a href="https://www.atomic-cube.cn/2026-ai-%e7%bc%96%e7%a0%81-cli-%e5%b7%a5%e5%85%b7%e5%85%a8%e9%9d%a2%e5%af%b9%e6%af%94%ef%bc%9acodex-cli%e3%80%81claude-code%e3%80%81cursor%e3%80%81gemini-cli%e3%80%81copilot-cli/">2026AI 编码工具全面对比：Codex CLI、Claude Code、Cursor、Gemini CLI、Copilot CLI</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">一、概述与产品定位</h2>



<p class="wp-block-paragraph">2025 至 2026 年间，AI 编程工具从 IDE 插件（以 Cursor 为代表）大举走向终端（即 “Vibe Coding”）。Anthropic 的 Claude Code、OpenAI 的 Codex CLI、Google 的 Gemini CLI 三款主流命令行工具相继成熟，它们以交互式终端为基本界面，支持读取本地文件、编辑代码、执行 Shell 命令，让开发者在终端内完成从原型到部署的完整编码流程<a href="https://zhuanlan.zhihu.com/p/2024146096939614452" target="_blank" rel="noreferrer noopener"></a>。与此同时，Cursor 于 2026 年 1 月推出 CLI 功能，GitHub Copilot CLI 于 2026 年 2 月正式 GA，终端 AI 编码的战场已经全面铺开<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a>。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="458" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-45-1024x458.png" alt="" class="wp-image-1945" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-45-1024x458.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-45-300x134.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-45-768x343.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-45-1536x687.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-45-2048x916.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">工具</th><th class="has-text-align-left" data-align="left">出品方</th><th class="has-text-align-left" data-align="left">核心定位</th><th class="has-text-align-left" data-align="left">起步价格</th></tr></thead><tbody><tr><td><strong>Claude Code</strong></td><td>Anthropic</td><td>高自主度终端 Agent</td><td>$20/月（Pro）</td></tr><tr><td><strong>Cursor CLI</strong></td><td>Anysphere</td><td>AI 原生 IDE + CLI 混合体</td><td>$20/月（Pro）</td></tr><tr><td><strong>Gemini CLI</strong></td><td>Google</td><td>开源终端 Agent</td><td>免费（1,000 次请求/天）</td></tr><tr><td><strong>Codex CLI</strong></td><td>OpenAI</td><td>轻量开源终端 Agent</td><td>$20/月（ChatGPT Plus）</td></tr><tr><td><strong>Copilot CLI</strong></td><td>GitHub / Microsoft</td><td>GitHub 原生 CLI</td><td>免费 / $10/月起（Pro）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">以上信息综合整理自各工具官方文档与公开资料<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a>。</p>



<h2 class="wp-block-heading">二、综合对比总表</h2>



<p class="wp-block-paragraph">下表从核心维度对五款工具进行全景对比：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">对比维度</th><th class="has-text-align-left" data-align="left">Claude Code</th><th class="has-text-align-left" data-align="left">Cursor CLI</th><th class="has-text-align-left" data-align="left">Gemini CLI</th><th class="has-text-align-left" data-align="left">Codex CLI</th><th class="has-text-align-left" data-align="left">Copilot CLI</th></tr></thead><tbody><tr><td><strong>主界面</strong></td><td>终端 + VS Code + Web + 桌面</td><td>VS Code 分支 + CLI</td><td>终端</td><td>终端 + macOS 桌面 App</td><td>终端 + IDE + Web</td></tr><tr><td><strong>SWE-bench Verified</strong></td><td><strong>80.9%</strong>（Opus 4.5）</td><td>~73%（取决于所选模型）</td><td>~65%</td><td>77.3%（Terminal-Bench 2.0）</td><td>未公布官方成绩</td></tr><tr><td><strong>最大上下文窗口</strong></td><td>200K（1M Beta）</td><td>200K</td><td><strong>1M（免费）</strong></td><td>1M（Pro）</td><td>~128K</td></tr><tr><td><strong>多模型支持</strong></td><td>仅 Claude 系列</td><td>✅ 多模型</td><td>仅 Google 系列</td><td>仅 OpenAI 系列</td><td>✅ Claude、GPT、Gemini、xAI</td></tr><tr><td><strong>Tab 实时补全</strong></td><td>❌</td><td>✅（&lt;100ms）</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td><strong>IDE 集成</strong></td><td>VS Code / JetBrains</td><td>VS Code 原生</td><td>❌</td><td>VS Code / Cursor</td><td>VS Code / JetBrains</td></tr><tr><td><strong>MCP 支持</strong></td><td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td><strong>后台 Agent</strong></td><td>✅（子 Agent + 云会话）</td><td>✅（云 VM 后台）</td><td>❌</td><td>✅（云沙箱）</td><td>✅（后台委托）</td></tr><tr><td><strong>开源</strong></td><td>❌ 闭源</td><td>❌ 闭源</td><td>✅ 开源</td><td>✅ 开源（Apache 2.0）</td><td>❌ 闭源</td></tr><tr><td><strong>CI/CD 支持</strong></td><td>✅（GitHub Actions）</td><td>❌</td><td>✅</td><td>✅（headless 模式）</td><td>✅（GitHub Actions）</td></tr><tr><td><strong>操作系统支持</strong></td><td>macOS / Linux / Win(WSL)</td><td>macOS / Windows / Linux</td><td>macOS / Linux / Windows</td><td>macOS / Linux（Win 预览）</td><td>macOS / Linux / Windows</td></tr><tr><td><strong>Skill.md 标准</strong></td><td>✅</td><td>✅</td><td>✅</td><td>✅</td><td>✅</td></tr><tr><td><strong>安装方式</strong></td><td>npm / Homebrew / 原生二进制</td><td>IDE 内安装</td><td>npm（<code>@google/gemini-cli</code>）</td><td>npm / 原生二进制</td><td>GitHub CLI 插件</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">主要数据来源：Morphllm 2026 年综合评测、各工具官方文档、JEECG 低代码 2026 年 4 月横评<a href="https://www.morphllm.com/best-ai-coding-agents-2026" target="_blank" rel="noreferrer noopener"></a><a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a><a href="https://blog.csdn.net/zhangdaiscott/article/details/160244202" target="_blank" rel="noreferrer noopener"></a><a href="https://www.morphllm.com/comparisons/claude-code-alternatives" target="_blank" rel="noreferrer noopener"></a></p>



<h2 class="wp-block-heading">三、核心能力：谁的编程能力最强？</h2>



<h3 class="wp-block-heading">3.1 SWE-bench Verified 基准跑分</h3>



<p class="wp-block-paragraph">SWE-bench Verified 是目前最权威的编码 Agent 评测标准，任务是自动修复真实的 GitHub Issue。各工具排名如下：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">排名</th><th class="has-text-align-left" data-align="left">工具</th><th class="has-text-align-left" data-align="left">得分</th><th class="has-text-align-left" data-align="left">备注</th></tr></thead><tbody><tr><td>🥇</td><td><strong>Claude Code</strong></td><td><strong>80.9%</strong></td><td>首次通过率约 95%，绝大多数任务一次通过<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a></td></tr><tr><td>🥈</td><td><strong>Codex CLI</strong></td><td>77.3%</td><td>Terminal-Bench 2.0 数据，用 Rust 重写后速度和 Token 效率大幅提升<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a></td></tr><tr><td>🥉</td><td><strong>Cursor</strong></td><td>~73%</td><td>取决于底层模型选择，选用 Claude 时表现最佳<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a></td></tr><tr><td>4</td><td><strong>Gemini CLI</strong></td><td>~65%</td><td>Google 模型在创意和搜索上有优势，但纯编码任务还有提升空间<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a></td></tr><tr><td>5</td><td><strong>Copilot CLI</strong></td><td>未公布</td><td>社区反馈显示复杂任务表现偏弱<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">3.2 真实项目实测</h3>



<p class="wp-block-paragraph">Particula Tech 团队用一个完整的 Express.js 项目重构作为测试任务，结果如下<a href="https://blog.csdn.net/zhangdaiscott/article/details/160244202" target="_blank" rel="noreferrer noopener"></a>：</p>



<ul class="wp-block-list">
<li><strong>Claude Code</strong>：完成时间 1 小时 17 分钟，一次通过 ✓</li>



<li><strong>Codex CLI</strong>：完成时间 1 小时 41 分钟，一次通过 ✓</li>



<li><strong>Gemini CLI</strong>：完成时间 2 小时 04 分钟，一次通过 ✓</li>
</ul>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="505" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-39-1024x505.png" alt="" class="wp-image-1930" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-39-1024x505.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-39-300x148.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-39-768x379.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-39.png 1336w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">3.3 各维度能力细项对比</h3>



<p class="wp-block-paragraph">以下表格展示了五款工具在不同开发维度上的能力分布<a href="https://blog.csdn.net/zhangdaiscott/article/details/160244202" target="_blank" rel="noreferrer noopener"></a>：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">能力维度</th><th class="has-text-align-left" data-align="left">Claude Code</th><th class="has-text-align-left" data-align="left">Cursor CLI</th><th class="has-text-align-left" data-align="left">Gemini CLI</th><th class="has-text-align-left" data-align="left">Codex CLI</th><th class="has-text-align-left" data-align="left">Copilot CLI</th></tr></thead><tbody><tr><td>多文件复杂重构</td><td>✅ 最强</td><td>✅ 强</td><td>⚠️ 中等</td><td>⚠️ 中等</td><td>❌ 弱</td></tr><tr><td>超大代码库理解（1M 上下文）</td><td>✅（Beta）</td><td>⚠️ 200K</td><td>✅ 免费 1M</td><td>✅ 1M（Pro）</td><td>❌ ~128K</td></tr><tr><td>实时 Tab 补全</td><td>❌</td><td>✅ &lt;100ms</td><td>❌</td><td>❌</td><td>✅</td></tr><tr><td>截图转代码</td><td>❌</td><td>✅</td><td>❌</td><td>✅</td><td>❌</td></tr><tr><td>实时网络搜索</td><td>❌</td><td>❌</td><td>✅ Google 搜索</td><td>❌</td><td>❌</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>从中可以解读出</strong>：Claude Code 在自主规划、复杂多文件操作上遥遥领先，Cursor 在交互式实时编码体验上无人能敌，Gemini CLI 免费提供最大的上下文窗口和搜索能力，Codex CLI 在性能和安全性之间取得了出色平衡，Copilot CLI 则在 GitHub 生态深度和低价方面独树一帜<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a>。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="823" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-40-1024x823.png" alt="" class="wp-image-1931" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-40-1024x823.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-40-300x241.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-40-768x617.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-40.png 1161w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">四、生态与扩展功能对比</h2>



<h3 class="wp-block-heading">4.1 MCP 服务器支持</h3>



<p class="wp-block-paragraph">五款工具全部支持 MCP（Model Context Protocol），这是 2026 年 AI 编码工具的重要基础设施。MCP 允许 Agent 连接到数据库、API、浏览器等外部工具和服务<a href="https://www.morphllm.com/claude-coding-agent" target="_blank" rel="noreferrer noopener"></a>。</p>



<p class="wp-block-paragraph"><strong>各工具 MCP 扩展亮点</strong>：</p>



<ul class="wp-block-list">
<li><strong>Claude Code</strong>：支持 STDIO 和流式 HTTP 服务器，通过&nbsp;<code>claude mcp add</code>&nbsp;命令管理<a href="https://www.morphllm.com/claude-coding-agent" target="_blank" rel="noreferrer noopener"></a></li>



<li><strong>Gemini CLI</strong>：支持通过 hooks 机制在 Agent 生命周期的特定节点调用 MCP 服务<a href="https://devops.com/google-adds-hooks-to-gemini-cli-for-customized-ai-workflows/" target="_blank" rel="noreferrer noopener"></a></li>



<li><strong>Copilot CLI</strong>：可自定义 Agent 使用 MCP 服务器，实现 Work IQ 等高级功能</li>
</ul>



<h3 class="wp-block-heading">4.2 Skill.md 标准</h3>



<p class="wp-block-paragraph">SKILL.md 标准是 2026 年出现的重要标准化成果，实现了跨工具技能互通，让开发者能灵活组合使用不同工具以优化工作流。五款工具均已支持此标准，这意味着你可以在 Claude Code 中编写的技能文件，同样可以在 Codex CLI 或 Gemini CLI 中使用，大大降低了工具切换成本<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a>。</p>



<h3 class="wp-block-heading">4.3 价格体系与总拥有成本</h3>



<p class="wp-block-paragraph">五款工具的价格体系反映了各自面向的目标用户群体不同。</p>



<h4 class="wp-block-heading">（1）按价定价之外，还要关注上限</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">工具</th><th class="has-text-align-left" data-align="left">基础套餐</th><th class="has-text-align-left" data-align="left">进阶套餐</th><th class="has-text-align-left" data-align="left">企业级</th><th class="has-text-align-left" data-align="left">免费层</th><th class="has-text-align-left" data-align="left">模型锁定？</th></tr></thead><tbody><tr><td><strong>Claude Code</strong></td><td>$20/月（Claude Pro）</td><td>$100-200/月（Max）</td><td>Teams / Enterprise</td><td>无</td><td><strong>是</strong>（仅 Claude 模型）</td></tr><tr><td><strong>Cursor CLI</strong></td><td>$20/月（Pro）</td><td>$60-200/月（Pro+/Ultra）</td><td>企业定制</td><td>有限免费</td><td>否（多模型）</td></tr><tr><td><strong>Gemini CLI</strong></td><td><strong>免费</strong>（1,000 请求/天）</td><td>N/A</td><td>N/A</td><td><strong>是</strong></td><td>是（仅 Google 模型）</td></tr><tr><td><strong>Codex CLI</strong></td><td>$20/月（ChatGPT Plus）</td><td>Pro</td><td>Enterprise</td><td>有限免费</td><td>是（仅 OpenAI 模型）</td></tr><tr><td><strong>Copilot CLI</strong></td><td><strong>$10/月</strong>（Copilot Pro）</td><td>$39/月（Pro+）</td><td>Business $19 / Enterprise $39</td><td>2,000 次补全 + 50 次高级请求/月</td><td><strong>否</strong>（多模型）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Copilot 超额使用费为每次高级请求 $0.04，包括 Chat、CLI、Agent 模式、代码审核和 Spark 功能<a href="https://www.morphllm.com/comparisons/claude-code-vs-copilot" target="_blank" rel="noreferrer noopener"></a>。Claude Code 是唯一完全没有免费层的工具，Gemini CLI 则是性价比最高的选择<a href="https://www.morphllm.com/comparisons/claude-code-alternatives" target="_blank" rel="noreferrer noopener"></a>。</p>



<h4 class="wp-block-heading">（2）隐藏的成本考量</h4>



<ul class="wp-block-list">
<li><strong>Token 膨胀</strong>：虽然 Claude Code 定价最高，但独立测试显示它在完成相同任务时的 Token 消耗远低于 Cursor（约 33K vs 188K），这让高阶用户的实际成本可能更低</li>



<li><strong>Codex 沙箱</strong>：OpenAI 的 Codex CLI 提供免费的本地执行和云端沙箱分离，Token 优化据称可以减少 40-60% 的实际消耗<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a></li>



<li><strong>Gemini 免费的代价</strong>：1M 上下文免费，但搜索和复杂任务可能请求消耗较快，而且只支持 Google 自家模型</li>
</ul>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="505" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-41-1024x505.png" alt="" class="wp-image-1932" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-41-1024x505.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-41-300x148.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-41-768x379.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-41.png 1336w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">4.4 工具间配合：不是“替换”而是“组合”</h3>



<p class="wp-block-paragraph">2026 年的调查显示，有经验的开发者平均使用&nbsp;<strong>2.3 个工具同时工作</strong>。这些工具并非相互排斥——每个都有自己擅长的工作场景<a href="https://wavespeed.ai/blog/posts/claude-code-vs-cursor-2026/" target="_blank" rel="noreferrer noopener"></a>。具体推荐组合见下文选择建议。</p>



<h2 class="wp-block-heading">五、优势与局限总结</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">工具</th><th class="has-text-align-left" data-align="left">核心优势</th><th class="has-text-align-left" data-align="left">主要短板</th></tr></thead><tbody><tr><td><strong>Claude Code</strong></td><td>自主重构能力最强，SWE-bench 得分最高（80.9%），Agent Teams 支持并行子任务，CLAUDE.md 项目记忆驱动</td><td>仅支持 Claude 模型，无免费层，价格最高（$20-200/月），无 Tab 实时补全</td></tr><tr><td><strong>Cursor CLI</strong></td><td>实时 &lt;200ms Tab 补全行业领先，8 个并行 Agent，多模型自由切换，VS Code 原生体验</td><td>非开源，SWE-bench 依赖所选模型，自主重构能力不及 Claude Code</td></tr><tr><td><strong>Gemini CLI</strong></td><td>完全免费 + 1,000 次请求/天，1M 上下文免费，Google 搜索集成，开源可审计</td><td>纯编码任务不如 Claude Code / Codex CLI，无 Tab 补全，仅 Google 模型</td></tr><tr><td><strong>Codex CLI</strong></td><td>Rust 重写后性能出色，云端沙箱安全隔离，开源（Apache 2.0），Token 效率高（据称减少 40-60%）</td><td>$20/月起步，仅 OpenAI 模型，Windows 尚在预览阶段</td></tr><tr><td><strong>Copilot CLI</strong></td><td>价格最低（$10/月起 + 免费层），5 种模型自由选择，GitHub 生态深度集成，内置代码审查 Agent</td><td>复杂重构能力弱，上下文窗口小（~128K），开源透明度不足</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">六、选型决策指南</h2>



<h3 class="wp-block-heading">按开发者画像推荐</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">用户画像</th><th class="has-text-align-left" data-align="left">首选工具</th><th class="has-text-align-left" data-align="left">备选工具</th><th class="has-text-align-left" data-align="left">理由</th></tr></thead><tbody><tr><td><strong>专注复杂重构的架构师</strong></td><td>Claude Code</td><td>Codex CLI</td><td>80.9% SWE-bench 得分、Agent Teams、多文件自主操作</td></tr><tr><td><strong>日常编码为主的开发者</strong></td><td>Cursor CLI + Copilot CLI</td><td>—</td><td>Cursor 的 Tab 补全 + Copilot 的多模型和低价，双工具覆盖 80% 场景</td></tr><tr><td><strong>预算有限的个人 / 学生</strong></td><td>Gemini CLI</td><td>Copilot CLI 免费层</td><td>免费、1M 上下文、Google 搜索接地气</td></tr><tr><td><strong>开源贡献者</strong></td><td>Codex CLI</td><td>Gemini CLI</td><td>Apache 2.0 开源、可审计、可自定义</td></tr><tr><td><strong>GitHub 深度用户</strong></td><td>Copilot CLI</td><td>Claude Code</td><td>PR / Issue 原生集成、多模型选择、CI/CD 管道</td></tr><tr><td><strong>全栈 / Web 开发者</strong></td><td>Cursor CLI + Codex CLI</td><td>—</td><td>VS Code 生态 + 截图转代码 + 远程服务器 Dev</td></tr><tr><td><strong>数据隐私优先的企业</strong></td><td>自部署 Codex</td><td>Gemini CLI</td><td>开源、企业级部署</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">按任务场景推荐</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">任务场景</th><th class="has-text-align-left" data-align="left">推荐工具</th><th class="has-text-align-left" data-align="left">说明</th></tr></thead><tbody><tr><td><strong>大规模代码重构</strong></td><td>Claude Code</td><td>Agent Teams 并行处理，先计划后执行，支持 Git Worktree 安全操作</td></tr><tr><td><strong>日常快速编码</strong></td><td>Cursor CLI 或 Copilot CLI（Tab 补全）</td><td>Cursor 的 &lt;200ms Tab 补全覆盖日常 80% 编码需求</td></tr><tr><td><strong>复杂多步骤任务（CI/CD）</strong></td><td>Codex CLI</td><td>云端沙箱隔离执行，支持 headless 远程操作，适合 DevOps 自动化</td></tr><tr><td><strong>代码审查</strong></td><td>Copilot CLI（内置 Code Review Agent）</td><td>自动委托给专业审查 Agent，修复建议可直接采纳</td></tr><tr><td><strong>学习新技术栈</strong></td><td>Gemini CLI（Ask + 搜索）或 Cursor CLI（Ask 模式）</td><td>免费上下文窗口 + Google 搜索接地气</td></tr><tr><td><strong>API 文档编写</strong></td><td>Claude Code</td><td>强大的自主生成和结构化内容能力</td></tr><tr><td><strong>多模型对比实验</strong></td><td>Cursor CLI 或 Copilot CLI</td><td>支持在多个模型间自由切换，方便比较</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">实际工作流建议</h3>



<p class="wp-block-paragraph">2026 年 AI 编码调查显示，有经验的开发者平均使用&nbsp;<strong>2.3 个工具</strong>。这些工具并非互斥——每个都有其擅长的工作场景<a href="https://wavespeed.ai/blog/posts/claude-code-vs-cursor-2026/" target="_blank" rel="noreferrer noopener"></a>。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-left" data-align="left">组合方案</th><th class="has-text-align-left" data-align="left">核心配置</th><th class="has-text-align-left" data-align="left">月成本</th><th class="has-text-align-left" data-align="left">适合人群</th></tr></thead><tbody><tr><td><strong>日常极简主义</strong></td><td>Copilot CLI（Tab 补全 + 多模型）</td><td><strong>$10</strong></td><td>普通开发者的全能选择</td></tr><tr><td><strong>高效全能型</strong></td><td>Cursor + Codex CLI（IDE + 后台 Agent）</td><td>$40（Cursor $20 + Codex $20）</td><td>全栈 / 高级开发者的日常主力和后台自动化</td></tr><tr><td><strong>性能狂热型</strong></td><td>Claude Code + Copilot CLI（重构 + 补全）</td><td>$30（CC $20 + Copilot $10）</td><td>架构师 + 高要求项目的全覆盖方案</td></tr><tr><td><strong>零成本学习型</strong></td><td>Gemini CLI + Cursor 免费层（搜索 + 补全）</td><td><strong>$0</strong></td><td>学生 / 学习者 / 试水者</td></tr></tbody></table></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="422" src="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-42-1024x422.png" alt="" class="wp-image-1934" srcset="https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-42-1024x422.png 1024w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-42-300x124.png 300w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-42-768x316.png 768w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-42-1536x632.png 1536w, https://www.atomic-cube.cn/wp-content/uploads/2026/04/image-42.png 1785w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">七、2026 年关键趋势</h2>



<p class="wp-block-paragraph"><strong>1. 终端成为新的战场。</strong>&nbsp;2026 年，所有主流 AI 编码工具都已经或即将发布 CLI 版本，终端已成为 AI Agent 的第一界面<a href="https://zhuanlan.zhihu.com/p/2024146096939614452" target="_blank" rel="noreferrer noopener"></a>。</p>



<p class="wp-block-paragraph"><strong>2. 多工具组合使用成为常态。</strong>&nbsp;单靠一个工具解决所有问题的时代已经过去，开发者倾向于根据不同任务选择最佳工具，再利用 Skill.md 标准实现跨工具复用<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a>。</p>



<p class="wp-block-paragraph"><strong>3. 上下文窗口竞赛白热化。</strong>&nbsp;Gemini CLI 免费提供 1M 上下文，Claude Code 有 1M Beta，Codex CLI 的 Pro 版也达到 1M。更大的上下文窗口意味着更好的代码库理解能力。</p>



<p class="wp-block-paragraph"><strong>4. 开源与闭源的博弈。</strong>&nbsp;Gemini CLI 和 Codex CLI 选择了开源路线，Claude Code 和 Cursor 则保持闭源。开源意味着可审计、可定制，闭源则意味着更集中的资源投入。</p>



<p class="wp-block-paragraph"><strong>5. 后台 Agent 执行成为标配。</strong>&nbsp;从 Cursor 的 Cloud Agent 到 Copilot CLI 的&nbsp;<code>&amp;</code>&nbsp;前缀后台委托，再到 Codex CLI 的云端沙箱执行，AI 编码正在从“人盯 AI”走向“AI 自主执行、人异步审查”的新范式。</p>



<p class="wp-block-paragraph"><strong>6. 国内生态加速接入。</strong>&nbsp;Claude Code 支持阿里云 Coding Plan，可调用 Qwen 系列模型<a href="https://www.alibabacloud.com/help/tc/model-studio/claude-code-coding-plan" target="_blank" rel="noreferrer noopener"></a>。低代码平台 JEECG 等已深度集成 AI CLI 工具，形成面向国内开发者的完整工具链<a href="https://my.oschina.net/jeecg/blog/19579572" target="_blank" rel="noreferrer noopener"></a>。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><em>本报告综合整理自 Morphllm 2026 年评测数据、各工具官方文档与 GitHub 仓库、以及多个独立开发者社区的实际使用反馈。AI 编码工具迭代极快，建议在决策前查阅各工具最新文档。</em></p>
<p>The post <a href="https://www.atomic-cube.cn/2026-ai-%e7%bc%96%e7%a0%81-cli-%e5%b7%a5%e5%85%b7%e5%85%a8%e9%9d%a2%e5%af%b9%e6%af%94%ef%bc%9acodex-cli%e3%80%81claude-code%e3%80%81cursor%e3%80%81gemini-cli%e3%80%81copilot-cli/">2026AI 编码工具全面对比：Codex CLI、Claude Code、Cursor、Gemini CLI、Copilot CLI</a> appeared first on <a href="https://www.atomic-cube.cn">原立方</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.atomic-cube.cn/2026-ai-%e7%bc%96%e7%a0%81-cli-%e5%b7%a5%e5%85%b7%e5%85%a8%e9%9d%a2%e5%af%b9%e6%af%94%ef%bc%9acodex-cli%e3%80%81claude-code%e3%80%81cursor%e3%80%81gemini-cli%e3%80%81copilot-cli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
