Welcome to my knowledge planet
Hugo utterances 评论及暗黑模式适配
Hugo 官方添加评论教程 是关于 Disqus 配置,同时下方也提供了替换方案,utterances 是其中一个。由于浏览本站的用户基本都是有 GitHub 的账号,utterances 有天然的优势,所有的数据存储在公开仓库的 issues 里,并且支持暗黑模式。 手动添加外部功能自然而来带来一个问题——适配主题,添加 utterances 评论功能带来的最大问题是暗黑模式适配,PaperMod 支持自动 / 手动切换暗黑主题,utterances 评论主题应随着暗黑主题改变而改变。借鉴 Stack 主题的切换评论主题方法,并结合 iframe 操作解决主题适配问题。 添加评论 创建一个 GitHub public repo,按照 utterances.es 中 configuration 所述为创建的 repo 安装 utterances,根据指示导航完成安装(不会安装请自行百度图文教程)。 作者为用户预留了 comments.html 进行扩展,根据 自定义布局规则,在 layouts 目录下新建 partials/comments.html,加入评论代码,并在 config.yml 中添加配置信息。 utteranc: enable: true repo: "dparticle/learn.tclx.xyz" <!-- partials/comments.html --> {{- /* Comments area start */ -}} {{- /* to add comments read => https://gohugo.io/content-management/comments/ */ -}} <script src="https://utteranc....
【2022-02-22】Go 反射简述
反射的核心是接口对象与反射对象转换,即 reflect.Value <-> interface{},因此 reflect.ValueOf() 是反射的入口,Value.Interface() 是反射的出口。 反射三大核心 Type(Kind 是底层类型,通常基础数据类型(基类型)两者相同) Value 转换 Value.Elem() vs reflect.Indirect(Value) reflect.Value 是指针,两者等效,返回指针指向的对象 reflect.Value 是接口,Indirect 返回相同的值,而 Elem 返回所包含的动态值(因为被接口存储的指针本身是不能寻址和进行设置操作的) 如果 reflect.Value 不是接口值,会被包裹在一个 interface{} 中,反之是接口值,则存储在其中的具体值作为 interface{} 传递。 package main import ( "fmt" "io" "os" "reflect" ) func main() { var r io.Reader = os.Stdin // os.Stdin is of type *os.File which implements io.Reader v := reflect....
【2022-01-22】protobuf 备忘录
protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。 protobuf 语法 在非空非注释第一行使用 syntax = "proto3" 标明版本 (可选)package 作用类似命名空间,防止不同的消息类型有命名冲突 消息类型由字段组成,每个字段赋予唯一标识符(范围 [1, 2^29^-1]),对应 Go 中的 struct 每个字段的修饰符默认为 singular,repeated 表示字段可重复,reserved <标识符 / 字段名> 表示保留字段 syntax = "proto3";package main;// this is a comment message Student { string name = 1; bool male = 2; repeated int32 scores = 3;} 字段没有赋值默认为零值 字段类型 基本类型 枚举第一个选项必须是 0,若需要允许赋予相同的标识符,则在枚举体内设置 option allow_alias = true; 消息类型可以作为字段类型 any / oneof map 除了消息类型,还可以定义 RPC 服务接口...
【2022-01-18】Golang 简洁架构
转载:https://zhuanlan.zhihu.com/p/454054072 “Golang 简洁架构实战” 核心:明确的上下层模块、数据流的流向和逻辑。 重构 先让代码工作起来-如果代码不能工作,就不能产生价值;然后再试图将它变好-通过对代码进行重构,让我们自己和其他人更好地理解代码,并能按照需求不断地修改代码。 The Clean Architecture 简洁架构里对项目提出的要求: 独立于框架,作为工具使用,而不是将系统塞进它们有限的约束中 可测试,业务规则可以在没有UI、数据库、Web服务器或任何其他外部元素的情况下被测试 独立于用户界面,一个 Web UI 可以被替换成一个控制台 UI,而不改变业务规则 独立于数据库,将 MySQL 切换为 MongDB 不需要修改所有的实现 独立于任何外部机构
Hugo PaperMod 主题配置
Hugo 是 Go 语言实现的博客框架,最大的特点编译静态网站比隔壁的 Hexo 快好多,缺点个人觉得花里胡哨的东西没有 Hexo 多,妥妥的实在型。既然其编译速度极快,那么可以在网站上放大量的文章,适合存放每日的学习笔记,程序员活到老学到老,建立属于褪尘矗心的知识星球! Hugo 主题选择的是 PaperMod,简约大气。另一个符合我审美的是 Stack,不选它的原因是它太 Hexo 化了。 Hugo 主题配置 主题基本配置按照官方文档,在配置过程中找到中文翻译版1更容易阅读。本文只对个人配置过程中值得注意的配置项和新增自定义功能及样式进行说明。 国际化——zh 添加 DefaultContentLanguage: zh,而不是将 languageCode 改成 zh-CN。 永久链接 参考 Hexo 迁移到 Hugo 记录,属于碰到同道中人了,都有 hexo-abbrlink 的经历对短永久链接有需求吧。 修改文章模版 archetypes/default.md,添加 slug 字段 在 Front-matter 中添加一行,新建文章时将文章创建时间和标题进行 md5 加密,从第 4 位取取 8 位作为 slug,认同作者所说一样 hash 碰撞可能性挺小的。 --- ... slug: {{ substr (md5 (printf "%s%s" .Date (replace .TranslationBaseName "-" " " | title))) 4 8 }} ... --- 在网站配置 config....