[{"content":"","date":"2026-07-05","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"2026-07-05","externalUrl":null,"permalink":"/tags/ci-cd/","section":"Tags","summary":"","title":"CI-CD","type":"tags"},{"content":"","date":"2026-07-05","externalUrl":null,"permalink":"/tags/cloudflare/","section":"Tags","summary":"","title":"Cloudflare","type":"tags"},{"content":"","date":"2026-07-05","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"欢迎来到我的网站！我很高兴你的来访。\n","date":"2026-07-05","externalUrl":null,"permalink":"/","section":"欢迎来到 Blowfish ！","summary":"","title":"欢迎来到 Blowfish ！","type":"page"},{"content":"","date":"2026-07-05","externalUrl":null,"permalink":"/tags/%E8%AE%B0%E5%BD%95/","section":"Tags","summary":"","title":"记录","type":"tags"},{"content":" 为什么要迁移到cloudflare # 原因有几个:\n我碰巧注册了cloudflare的账号，而且买了个域名，也就想拿来用了 cloudflare的云生态很发达，而且免费计划很给力，例如有ddos保护、爬虫防护等功能，生态扩展也有免费的KV数据库和SQLite数据库，自定义域名也有，SSL也有，网站/请求分析也有 cloudflare的CI/CD功能更强大，构建速度和资源挺快的，而且还支持多版本预览：在非main分支提交代码，cloudflare会生成一个预览链接，可以先预览效果，再合并到主分支 cloudflare免费计划的限制 # 虽然 Cloudflare 的免费额度极度慷慨，但它依然有硬性指标：\n构建次数： 免费版每月限制 500 次构建（对于个人博客来说完全用不完）。 单文件大小限制： Cloudflare Pages 限制单个静态资源文件不能超过 25MB（如果博客里挂载了极大的高清视频或压缩包需要注意，建议大文件走对象存储） 部署文件总数： 单次部署文件数上限通常为 20,000 个（超大型博客需注意）。 迁移过程 # 在 Cloudflare 上关联并构建项目 # 登录/注册： 登录到 Cloudflare 控制台。 进入 Pages 页面： 在左侧导航栏中点击 \u0026ldquo;Workers 和 Pages\u0026rdquo;（Workers \u0026amp; Pages），然后点击 \u0026ldquo;创建\u0026rdquo; -\u0026gt; 选择 \u0026ldquo;Pages\u0026rdquo; 标签页。 连接 GitHub： 点击 \u0026ldquo;连接到 Git\u0026rdquo;（Connect to Git），按照提示授权 Cloudflare 访问你的 GitHub 账号，并选择你存放静态博客源码的那个私有或公开仓库。 配置构建设置： 项目名称： 默认即可（这会决定 *.pages.dev 二级域名）。 生产分支： 选择主分支 构建命令: 因为是hugo框架，所以写hugo -b / --minify就好 部署： 点击 \u0026ldquo;保存并部署\u0026rdquo;。Cloudflare 会拉取代码并开始首次构建。几分钟后获得一个 https://your-project.pages.dev 的独享域名，打开它确认博客内容显示正常。 重要 需要写清楚hugo版本，因为不知道cloudflare上的hugo是新或旧，所以需要自己指定\n指定方式是添加HUGO_VERSION环境变量，位于设置\u0026gt;构建\u0026gt;变量与机密。名称是HUGO_VERSION，值是\u0026lt;HUGO_VERSION\u0026gt;，例如v0.158.0\n第二步：迁移自定义域名（关键步骤） # 因为我早就把域名的DNS解析托管给了cloudflare所以就很简单了， 找到域tab，选择添加域名就OK了\n踩坑 # 一开始构建完成的项目是排版完全混乱的：图片非常大，文字效果像是html cloudflare上的文档说构建命令是hugo -b $CF_PAGES_URL\nBase URL configuration\nHugo allows you to configure the baseURL of your application. This allows you to utilize the absURL helper to construct full canonical URLs. In order to do this with Pages, you must provide the -b or \u0026ndash;baseURL flags with the CF_PAGES_URL environment variable to your hugo build command.\nYour final build command may look like this:\n这完全是在扯淡，我打印了CF_PAGES_URL的值，结果为空\n最后我问了AI是应该设置CF_PAGES_URL环境变量的值吗，AI让我直接写hugo -b / --minify。我试了一下，确实有效果，也就不管那么多了。\n","date":"2026-07-05","externalUrl":null,"permalink":"/posts/migrate-to-cloudflare-page/","section":"文章","summary":"","title":"迁移到cloudflare page","type":"posts"},{"content":"","date":"2026-07-05","externalUrl":null,"permalink":"/categories/%E7%BD%91%E7%AB%99/","section":"Categories","summary":"","title":"网站","type":"categories"},{"content":"","date":"2026-07-05","externalUrl":null,"permalink":"/posts/","section":"文章","summary":"","title":"文章","type":"posts"},{"content":"","date":"2026-06-26","externalUrl":null,"permalink":"/tags/golang/","section":"Tags","summary":"","title":"Golang","type":"tags"},{"content":"只挑我感兴趣的，完整release note在Go 1.27 Release Notes - The Go Programming Language\n升级 # go install golang.org/dl/go1.27rc1@latest go1.27rc1 download 泛型方法 # Go 1.27 开始支持：\nfunc (s Set[T]) Map[U any](f func(T) U) []U { ... } 很多 Fluent API、集合库、Stream 库终于能写得自然：\nusers. Filter(...). Map(...). GroupBy(...) 警告 接口方法仍然不能声明类型参数\ntype Reader interface { Read[T any]() T } // ❌\nencoding/json v2 正式进入标准库 # 当然是有v2用v2：性能提升、规范增加、功能增加\n添加了两个包：\nencoding/json/v2 包提供了 Marshal ， MarshalWrite ， MarshalEncode ， Unmarshal ， UnmarshalRead ，以及 UnmarshalDecode ，所有这些都接受可变参数 Options 用于配置序列化和反序列化行为的参数 encoding/json/jsontext 包提供对 JSON 的底层语法处理。 Encoder 和 Decoder 类型按以下方式运行 JSON 作为序列 Token 和 Value ，维护一个状态机以确保生成或使用的序列是有效的 JSON 文本 默认设置和v1有一些不同的地方，例如严格大小写、拒绝非法utf8字符、拒绝重复名称之类的\n而且还添加了Options选型，可以用来调控行为\ngoroutine泄漏侦察 # goroutineleak是一个新profile，可以用来检测泄漏的goroutine\n泄漏的goroutine就是阻塞在某些并发原语上的goroutine，而且这些并发原语只有它们自己持有，所以绝无唤醒的可能\n在1.26就作为实验性功能启用，在1.27正式启用了\n原理是可达性，所以如果并发原语是全局变量或者能被其他goroutine访问的话，是无法发现leak的\nuuid进入标准库 # 字面意思，新的uuid包可以用来生成和解析UUID 官方UUID库只支持uuidV4和uuidV7 据说官方的UUID库在浏览器上生成uuid的时候，uuidv7的时间相关序列会被抹平。因为浏览器处于安全考虑，提供的时间精度很低。所以官方和社区的解决方案是降级为用crypto/rand来生成随机安全比特，为了UUIDv7的递增性，所以是累加的\n","date":"2026-06-26","externalUrl":null,"permalink":"/posts/go_1.27rc1_try/","section":"文章","summary":"","title":"golang1.27尝鲜","type":"posts"},{"content":"这 是博客的内容。\n","date":"2026-05-28","externalUrl":null,"permalink":"/posts/firtst-blog/","section":"文章","summary":"了解更多关于我和我创建博客的初衷。","title":"我的第一篇博客文章","type":"posts"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"关于\n","externalUrl":null,"permalink":"/about/","section":"欢迎来到 Blowfish ！","summary":"","title":"关于","type":"page"},{"content":"","externalUrl":null,"permalink":"/archives/","section":"归档","summary":"","title":"归档","type":"archives"}]