Files
share/public/hello-world-longform-20260829.html
T

141 lines
8.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
<meta name="color-scheme" content="light dark">
<meta name="robots" content="noindex,nofollow">
<title>Hello World:从第一行代码到一个可分享的世界</title>
<style>
:root{--bg:#fff;--fg:#202124;--muted:#727780;--line:#e6e8eb;--code:#f5f6f8;--link:#315c9b;--warn:#8a5a00}
@media(prefers-color-scheme:dark){:root{--bg:#18191b;--fg:#e8eaed;--muted:#9aa0a6;--line:#303236;--code:#222428;--link:#8ab4f8;--warn:#f6c453}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;background:var(--bg)}
body{margin:0;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;line-height:1.85;letter-spacing:.01em}
main{max-width:780px;margin:0 auto;padding:42px 22px 72px}
header{margin-bottom:30px;padding-bottom:18px;border-bottom:1px solid var(--line)}
.meta{display:flex;gap:8px;flex-wrap:wrap;color:var(--muted);font-size:14px}
.dot{opacity:.65}
.page-title{font-size:32px;line-height:1.3;margin:0 0 20px}
article{font-size:17px;word-break:break-word}
article h1{font-size:32px;line-height:1.3;margin:0 0 22px}article h2{font-size:23px;line-height:1.4;margin:36px 0 14px}article h3{font-size:19px;line-height:1.5;margin:28px 0 12px}
article p{margin:0 0 18px}article ul,article ol{padding-left:1.5em;margin:0 0 20px}article li{margin:6px 0}
article blockquote{margin:22px 0;padding:2px 0 2px 18px;border-left:3px solid var(--line);color:var(--muted)}
article a{color:var(--link);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--link) 35%,transparent)}
article img{display:block;max-width:100%;height:auto;margin:24px auto;border-radius:8px}
article pre{overflow-x:auto;margin:22px 0;padding:16px;border-radius:10px;background:var(--code);line-height:1.6;font-size:14px;-webkit-overflow-scrolling:touch}
article code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono",monospace;font-size:.9em;background:var(--code);padding:.15em .35em;border-radius:4px}
article pre code{padding:0;background:transparent;font-size:inherit}
article table{display:block;width:100%;overflow-x:auto;border-collapse:collapse;margin:22px 0}article th,article td{border:1px solid var(--line);padding:8px 12px;text-align:left}
article hr{border:0;border-top:1px solid var(--line);margin:34px 0}
.fallback{white-space:pre-wrap;word-break:break-word}
.render-warning{color:var(--warn);font-size:14px}
footer{margin-top:48px;padding-top:18px;border-top:1px solid var(--line);color:var(--muted);font-size:13px}
@media(max-width:560px){main{padding:30px 18px 56px}article{font-size:16.5px}article h1{font-size:27px}article h2{font-size:21px}}
</style>
</head>
<body>
<main>
<header><div class="meta"><span>2026-08-29 14:10 +0800</span><span class="dot">·</span><span>文章</span></div></header>
<article><h1>Hello World:从第一行代码到一个可分享的世界</h1>
<p dir="auto">“Hello World” 往往是一个人接触新编程语言时写下的第一段程序。它几乎没有业务逻辑,也不展示复杂算法,却承担着一个很重要的任务:确认编辑器、运行时、终端和输出链路都已经正常工作。</p>
<p dir="auto">这篇测试文章使用中英文、段落、列表、引用、表格、行内代码与多种代码块,目的是验证 Markdown 原文和浏览器 HTML 渲染页都能正常访问与阅读。</p>
<h2>为什么第一段程序总是 Hello World</h2>
<p dir="auto">学习一门新语言时,人们首先需要一个尽可能小、但能够完整运行的例子。它应该回答几个基础问题:</p>
<ol dir="auto">
<li>源文件应该使用什么扩展名?</li>
<li>程序从哪里开始执行?</li>
<li>如何调用标准输出?</li>
<li>如何编译或解释运行?</li>
<li>中文、英文和标点能否正确显示?</li>
</ol>
<p dir="auto">当屏幕上出现 <code>Hello, World!</code> 时,我们得到的不只是一个字符串,而是一条完整链路已经畅通的证据。</p>
<blockquote>
<p dir="auto">小程序的价值不在于功能复杂,而在于用最低成本证明系统可以工作。</p>
</blockquote>
<h2>不同语言中的写法</h2>
<h3>Python</h3>
<div><pre><code><span class="k">def</span> <span class="nf">greet</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&#34;World&#34;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&#34;Hello, </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">!&#34;</span>
<span class="nb">print</span><span class="p">(</span><span class="n">greet</span><span class="p">())</span>
<span class="nb">print</span><span class="p">(</span><span class="n">greet</span><span class="p">(</span><span class="s2">&#34;石记&#34;</span><span class="p">))</span>
</code></pre></div><h3>JavaScript</h3>
<div><pre><code><span class="kd">function</span> <span class="nx">greet</span><span class="p">(</span><span class="nx">name</span> <span class="o">=</span> <span class="s2">&#34;World&#34;</span><span class="p">)</span> <span class="p">{</span>
<span class="k">return</span> <span class="sb">`Hello, </span><span class="si">${</span><span class="nx">name</span><span class="si">}</span><span class="sb">!`</span><span class="p">;</span>
<span class="p">}</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">greet</span><span class="p">());</span>
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">greet</span><span class="p">(</span><span class="s2">&#34;Browser&#34;</span><span class="p">));</span>
</code></pre></div><h3>Shell</h3>
<div><pre><code><span class="nv">name</span><span class="o">=</span><span class="s2">&#34;World&#34;</span>
<span class="nb">printf</span> <span class="s1">&#39;Hello, %s!\n&#39;</span> <span class="s2">&#34;</span><span class="nv">$name</span><span class="s2">&#34;</span>
</code></pre></div><p dir="auto">虽然语法不同,但三个例子都完成了相同的数据流:准备输入、构造文本、输出结果。</p>
<h2>从输出字符串到工程验证</h2>
<p dir="auto">在真实项目中,Hello World 可以继续扩展成一组轻量的健康检查:</p>
<ul dir="auto">
<li>Web 服务返回 <code>200 OK</code></li>
<li>数据库连接能够建立;</li>
<li>配置文件能够读取;</li>
<li>日志可以写入预期位置;</li>
<li>中文采用 UTF-8 正确编码;</li>
<li>外部访问地址可以完成 HTTPS 握手;</li>
<li>分享链接能够从短域名跳转到最终页面。</li>
</ul>
<p dir="auto">本次发布测试对应的检查关系如下:</p>
<table>
<thead>
<tr>
<th>检查对象</th>
<th>期望结果</th>
<th>用途</th>
</tr>
</thead>
<tbody>
<tr>
<td>Markdown 原文</td>
<td>UTF-8 内容完整</td>
<td>便于复制、归档和版本管理</td>
</tr>
<tr>
<td>Gitea 渲染页</td>
<td>标题、列表、表格、代码块正常</td>
<td>便于浏览器阅读</td>
</tr>
<tr>
<td>短链接</td>
<td>返回 302 并跳转到 Gitea</td>
<td>便于转发</td>
</tr>
<tr>
<td>固定链接</td>
<td>绑定具体提交</td>
<td>保留不可变快照</td>
</tr>
</tbody>
</table>
<h2>一个更有意义的 Hello World</h2>
<p dir="auto">当系统逐渐复杂后,最好的测试仍然应该保持简单。测试内容可以丰富,但判断结果应当清晰:页面能打开、正文没有乱码、代码块没有丢失、链接目标正确。</p>
<p dir="auto">下面是一段伪代码,描述发布流程:</p>
<div><pre><code>读取 Markdown
检查大小和 UTF-8
确认目标 ID 是否已存在
创建或显式更新 Gitea 文件
返回短链接、稳定链接与提交固定链接
</code></pre></div><p dir="auto">这条流程刻意避免在访问时抓取并解析 Gitea 的 HTML。短域名只做跳转,因此 Gitea 页面结构升级时,分享服务也不需要同步修改解析规则。</p>
<h2>最后的输出</h2>
<p dir="auto">如果你正在浏览 HTML 渲染版本,说明域名、HTTPS、OpenResty 跳转和 Gitea Markdown 页面已经连通。如果你正在查看 <code>.md</code> 原文,说明仓库的公开读取和原始内容链路同样正常。</p>
<div><pre><code>Hello, World!
你好,世界!
分享链路验证完成。
</code></pre></div></article>
<footer>公开分享页面 · Markdown 与 HTML 均保存在版本化仓库</footer>
</main>
</body>
</html>