update: Hello World:从第一行代码到一个可分享的世界
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
<!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">"World"</span><span class="p">)</span> <span class="o">-></span> <span class="nb">str</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Hello, </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">!"</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">"石记"</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">"World"</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">"Browser"</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">"World"</span>
|
||||
<span class="nb">printf</span> <span class="s1">'Hello, %s!\n'</span> <span class="s2">"</span><span class="nv">$name</span><span class="s2">"</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>
|
||||
Reference in New Issue
Block a user