记录搭建博客的过程(Hexo+Butterfly+Github Actions+Github Pages)
契机很久以前曾经搭过一次个人博客,但后来觉得自己写的东西太小儿科了太羞耻于是删掉了。然而最近偶然看到一个人的博客刷新了我对博客的看法:他的博客里东西很多,既有“小儿科”的简单内容(例如学习某个语言基本用法),也有高级复杂的内容(例如k8s集群)。整个博客给人的感觉就像是见证了他的学习成长历程一样,那些简单的内容也变得值得敬佩。 所以想了想把自己私藏许久的笔记也拿出来晒晒,其中有些确实是我当时网上找了好久研究了很长时间才解决的问题,值得分享。 需求&选择理由我不想在博客上花一分钱(图床除外),也不想买个域名,因此github pages是最好的选择。 另外因为我的github pages已经用于展示字幕组文档了(docsify),所以这次需要同时保留docsify作为子路径能够访问得到。 此外考虑到重复的在本地 hexo clean && hexo g && hexo s 后还要commit也挺麻烦的,但又觉得写个本地脚本不够优雅,所以这次采用Github...
go缓解连续多个iferr的一个办法
开门见上,直接上代码: (详细代码请查看正文) 可以看到,这利用到了go1.18的泛型,使得能够直接获取返回值且不用再类型断言。而其内部也很简单,无反射。当然适用的情形前面也说了,不需要当即判断并return的,不影响接下来几个代码执行的。 至于为何是搞个闭包,是因为像这样函数返回多个值的作为参数,go规定了返回的值的个数和类型必须和参数完全匹配(...any这样也算),所以没法做到第一次参数输入error收集器,第二个参数之后输入函数返回值: (详细代码请查看正文) 具体可见官方解释: As a special case, if the return values of a function or method g are equal in number and individually assignable to the parameters of another function or method f, then the call f(g(parameters_of_g)) will invoke f after binding the return...
解决Goland换主题但代码看起来五颜六色太乱的问题
在设置里编辑器→配色方案→Go→语义高亮显示里把“值继承自”关掉,同时还要把“语义高亮显示”关掉。(“语言默认值”里的“语义高亮显示”关掉可能没用,下次打开Goland时又会恢复原样,不知道是不是bug,但在这里关掉,下次打开Goland能够保持设定) 如它所述,他会为每个参数或变量分配各种颜色,但显然实际看起来不仅没起到区分的作用,还更乱了,因此建议关掉。
Typescript使用ts-node报错Could not find a declaration file for module
ts要用js的第三方modules时,会提示你Could not find a declaration file for module,然后让你install @types/对应的模块名,或者自己写.d.ts文件。后者的话,随便在哪新建个xxx.d.ts文件,xxx自己取。然后文件里写上: (详细代码请查看正文) 你可以多个模块声明写在一个文件里,也可以分开。 但是如果你用ts-node的话,写了.d.ts文件还不行,还是会报错找不到。这时候需要你新建个文件夹,里面再新建个文件夹,然后里面放上.d.ts文件。例如: ┏ node_modules┣ src┗ index.ts┣ types┗ package┗ alltypes.d.ts┣ tsconfig.json┗ package.json 然后在tsconfig.json里添加: (详细代码请查看正文)...
Could not read source map for xxx
在launch.json中添加: (详细代码请查看正文) 参考:[node-debugger] Debugger spams “Could not read sourcemaps” messages · Issue #102042 · microsoft/vscode · GitHub
go通过github action自动部署到服务器
我的最终的配置文件 deploy.yml ,主要做了以下几件事: 先配置go环境; go build; 先终止在伪终端里跑的程序(否则无法成功上传); 上传构建后的文件; 让程序在伪终端里跑起来。 (详细代码请查看正文) 期间经历了很多坎坷,接二连三遇到问题: 先出现了 remote open("/home/ubuntu/app/rabbitool/rabbitool") failure ,解决办法是先把正在运行的程序停了,然后再上传。因此才用ssh-scp-ssh-pipelines。 然后出现了 open terminal failed: not a terminal,解决办法是ssh启动时加上 -t 。但是ssh-scp-ssh-pipelines没法在连接ssh时传入参数,因此最后再用个单独的ssh action。 shell - tmux open terminal failed: not a terminal - Stack Overflow 又出现了 Pseudo-terminal will not be allocated...
go判断struct实例是不是哪个具体的struct
代码示例: (详细代码请查看正文)
go如何实现抽象类和抽象方法,父类方法调用子类实现的方法
代码示例: (详细代码请查看正文) 其实结构体里套接口实际是一个匿名字段,而new时候做的事就是把子类实例自身传进去,好让继承的父类方法能够调用到子类实现的方法。 参考:oop - How to implement an abstract class in Go? - Stack Overflow
go regexp不支持unicode
(详细代码请查看正文) 会报错 error parsing regexp: invalid escape sequence: `\u` 因为go的regexp不支持 \u 。改用 \x 或者 \p{class}。 参考:regex for Chinese · Issue #257 · google/mtail · GitHub
go zerolog打印json值内的换行符不起作用——原始字符串转字符串字面量
在使用go zerolog打印json log时发现json值的换行符不起作用。探究源码的时候发现了 strconv.Quote() : (详细代码请查看正文) 于是怀疑跟原始字符串有关。然后查找到如何将原始字符串转换为字符串字面量,知道了应该使用 strconv.Unquote(`"` + s + `"`) 。 (详细代码请查看正文) 参考:Go - Is it possible to convert a raw string literal to an interpreted string literal? - Stack Overflow