go101笔记
go101 笔记
列表2024-week08
#最近做的事
#自建网盘
构建网盘本身是很简单的过程,网上有很多开源的项目,比如:https://github.com/cloudreve/cloudreve
但是相应的生态太难跟进了
目前调研已知问题:
- webdav 传数据会丢失文件本来的时间信息(其它信息待确定)
- 很难有通用的手机 app
#golang struct
对齐
#相关链接
#w3m
一个命令行网页浏览工具,比较方便阅读:
1 | brew install w3m |
不过不能被wakatime
记录,突然有点不想用了。
#golang 范型
如果你经常要分别为不同的类型写完全相同逻辑的代码,那么使用泛型将是最合适的选择
在使用泛型的时候我们只能放弃使用匿名结构体,对于很多场景来说这会造成麻烦(最主要麻烦集中在单元测试的时候,为泛型做单元测试会非常麻烦)
列表2024-week07
#最近做的事
#tmux
每次要恢复一堆窗口好烦,用 tmux 了。
因为日常开发需要开 10 多个命令行窗口,每次重启都要手动开启,没想到这是我用tmux
的原因= =
1 | brew install tmux |
1 | cd |
prefix c
:创建一个新窗口,状态栏会显示多个窗口的信息。
prefix p
:切换到上一个窗口(按照状态栏上的顺序)。
prefix n
:切换到下一个窗口。
prefix <number>
:切换到指定编号的窗口,其中的<number>
是状态栏上的窗口编号。
prefix w
:从列表中选择窗口。
prefix ,
:窗口重命名。
prefix %:划分左右两个窗格。
prefix ":划分上下两个窗格。
prefix <arrow key>
:光标切换到其他窗格。<arrow key>
是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键 ↓。
prefix ;:光标切换到上一个窗格。
prefix o:光标切换到下一个窗格。
prefix {:当前窗格与上一个窗格交换位置。
prefix }:当前窗格与下一个窗格交换位置。
prefix Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格。
prefix Alt+o:所有窗格向后移动一个位置,最后一个窗格变成第一个窗格。
prefix x:关闭当前窗格。
prefix !:将当前窗格拆分为一个独立窗口。
prefix z:当前窗格全屏显示,再使用一次会变回原来大小。
prefix Ctrl+<arrow key>
:按箭头方向调整窗格大小。
prefix q:显示窗格编号。
开启自动保存会话只需要把.tmux.conf.local
的几行注释打开即可:
1 | set -g @plugin 'tmux-plugins/tmux-resurrect' |
- 自动保存会话的地址为:
/Users/onns/.local/share/tmux/resurrect
#相关链接
列表2024-week06
#最近做的事
#WaitGroup 原理
是我看到众多文章中逻辑最清晰的。
通过信号量控制并发问题,信号量的实现原理待继续阅读。
#《火星救援》
重新看了一遍经典影片,并查询了一些当初有疑问的点。
- 原著说维生素、蛋白质都足够生存,缺的只是卡路里(通过土豆获取)。
- 电影只交代了如何制造食物和水,没有谈及氧气,查了一下,已经有通过二氧化碳制取氧气和碳的设备。
#熟悉 Obsidian
有一款可以在里面边看网页边记笔记的浏览器插件
,可用性有待研究。
目前已经逐步在把工作中的文档迁移到Obsidian
,真的很利于检索文件或者内容。
想跨仓库引用笔记好像不可行,会被拷贝一份文件到当前仓库= =
#信号量
这篇文章底部有一些链接也可以同步阅读。
#内联函数inline
C 语言中的定义,在调用处展开函数。
#tmux 了解
了解下来是 screen 的升级版,但是目前应该没有类似的需求,因为工作无法远程所以不会有保持会话的需求。
#vim 技巧
- 高亮选区的范围由其两个端点界定。其中一端固定,而另一端可以随光标自由移动,我们可以用 o 键来切换其活动的端点。
- 启用了
wrap
之后,长度会折叠,出现屏幕行与实际行不同的情况。gj
作用于屏幕行,j
作用于实际行。 - 一个单词由字母、数字、下划线,或其他非空白字符的序列组成,单词间以空白字符分隔。而字串的定义则更简单,它由非空白字符序列组成,字串间以空白字符分隔。
W
、B
、E
、gE
是面向字串的移动方式。- 可视模式下,会有范围限定词,
t
是一个特殊的,代表 xml 或者 html 这类的标签选定(感觉算是特殊优化)。 m{a-zA-Z}
命令会用选定的字母标记当前光标所在位置。小写位置标记只在每个缓冲区里局部可见,而大写位置标记则全局可见。'{mark}
命令跳到位置标记所在行,并把光标置于该行第一个非空白字符上;而`{mark}
命令则把光标移动到设置此位置标记时光标所在之处,也就是说,它同时恢复行、列的位置。
列表2024-week05
列表2024-week04
#最近读的东西
#github 仓库问题
2024 一开年开始,我就发现github.com
在大陆的主 ip20.205.243.166
访问不通了= =,感觉每次都要专门开个梯子好麻烦,研究了一番,改 hosts 解决。
https://tool.chinaz.com/dns/github.com可以查看所有 ip,我选了第二个,在/etc/hosts
里添加了一条:
1 | 140.82.121.4 github.com |
问题解决。
BTW,我用的是 ssh 的模式,这个模式在之前网页访问不通的情况下依然可以很快拉仓库,结果现在原来的 ip 也不行了(新换的这个依旧可以)。
在~/.gitconfig
添加:
1 | [url "git@github.com:"] |
就会都走 ssh 模式。(很好用,我之前用来拉 nvim 仓库包的)
列表2024-week03
#最近读的东西
#perl 用法
1 | [2024/01/21 9:47:32] mbp ➜ ~ perl -h |
最近处理线上问题,需要捞日志,因为日常Perl
风格的正则写的比较多,所以希望能直接一条命令导出,省的多个编辑器之间来回切换。
但是目前几乎所有命令都只支持POSIX
风格的正则,记录一下解决方案:
- grep 可以通过
-P
参数,但是必须要下载 gnu 的 grep 才支持,mac 本身的不支持 sed
不支持Perl
风格,也不会支持,解决方法是换命令,perl
几乎 mac 都是装机自带的。-p
会打印输出,比较适合做管道处理。-e
就是执行后面的命令。
1 | cat 240120.json | ggrep -P "\"args\": \"mid" | perl -pe 's/\s+"args": "mid:([0-9]+)([ \S]+)/$1/' |
#https://go.dev/doc/gc-guide
Until Go 1.19, GOGC was the sole parameter that could be used to modify the GC’s behavior. While it works great as a way to set a trade-off, it doesn’t take into account that available memory is finite. Consider what happens when there’s a transient spike in the live heap size: because the GC will pick a total heap size proportional to that live heap size, GOGC must be configured such for the peak live heap size, even if in the usual case a higher GOGC value provides a better trade-off.
GOGC
在配置的时候没有考虑内存有限的情况,当出现有临时的内存突增时,要么 gc 阈值过高导致 oom,要么考验开发/运维,要在配置时考虑到内存激增的情况,配置对应可用的 GOGC。
为了避免参数滥用,golang 限制了 gc 时间,使得理论上的最坏情况是程序性能下降两倍。
#-1%3=?
差点因为这个表达式写了一个 bug,测试了多个语言,发现只有 python 会返回 2。
数学定义上没有对负数的取模进行精确定义,所以只依赖具体语言实现。
对于go
/c
/php
,这个值会返回 -1。
普罗米修斯笔记 (1)
#普罗米修斯笔记 (1)
#一些笔记
All regular expressions in Prometheus use RE2 syntax.
= = 暂缓研究,因为我发现运行一下午电脑 700m 空间没了,理想是希望能长期运行,但是目前看下来应用场景有问题,遂先放弃,但是相关的语法还是需要研究的。