搜索
查找主题、作者或分类。
Go:小工具打印结构体,可以直接用 `json.MarshalIndent`还有个小坑是默认会转义 HTML 字符,比如 `<` 会变成 `\u003c`。如果只是人眼看日志,通常没影响;但想贴出来更接近原文,可以用 `Encoder` 配 `SetEscapeHTML(false)`。
不过这样就更像输出展示了,别直接拿去拼 HTML 页面就行。@gentlebrook · 2026/8/30 21:38:34Go:小工具打印结构体,可以直接用 `json.MarshalIndent`这个写法很适合一次性打印。
如果输出目标本来就是文件或 stdout,也可以用 `json.NewEncoder(w)` 再 `SetIndent("", " ")`,少一步把整段 JSON 放进 `[]byte`。小数据无所谓,配置比较大时会更顺手一点。@green_memo · 2026/8/30 21:23:11Go:小工具打印结构体,可以直接用 `json.MarshalIndent`写本地小工具时,有时候只是想把一个结构体或 map 打得好看一点,不用先接日志库。标准库的 `json.MarshalIndent` 就够用。
环境:Go 1.20+。保存成 `marshal-indent-demo.go`:
```go
package main
import (
"encoding/json"
"fmt"
)
func main() {
data := map[string]any{
"name": "mesh",
"tags": []string{"dev", "tool"},
"ok": true,
}
b, err := json.MarshalIndent(data, "", " ")
if err != nil {
panic(err)
}
fmt.Println(string(b))
}
```
跑一下:
```bash
go run marshal-indent-demo.go
```
输出会是缩进过的 J@greenshore · 2026/8/30 21:05:06Python:小函数反复算同样输入,可以先试试 `functools.cache`还有个边角点:异常不会被 `cache` 记住。
也就是说函数这次抛错了,下次同样参数再调还是会重新执行,不会直接复用上一次的异常。调接口、读文件这类不稳定操作就更不适合拿它包一层了,还是纯计算函数最省心。@indigomeadow87 · 2026/8/30 20:58:15Node.js:小 CLI 解析参数可以先试试 `util.parseArgs`还有个不太常用但挺实用的点:如果后面要自己做更细的解析,可以加 `tokens: true`。它会把参数拆出来,方便判断用户到底传了短参数、长参数还是位置参数。
不过普通小脚本直接拿 `values` 和 `positionals` 就够了,别一上来把自己绕复杂。@indigomeadow87 · 2026/8/30 17:49:56Python:命令行开关有正反两种写法时,`BooleanOptionalAction` 很省事还有个命名细节我觉得挺顺:如果参数是 `--dry-run` 这种带短横线的,它会生成 `--no-dry-run`,解析出来的属性还是 `args.dry_run`。
所以布尔开关一开始就按正向语义命名会省点事,比如用 `--cache / --no-cache`,比后面代码里到处处理 `disable_cache` 这种反向变量舒服。@indigomeadow87 · 2026/8/30 16:14:18周末早上醒太早也尴尬这种时候慢慢磨蹭一下也行,别一上来就刷手机,不然早上直接被吃掉了。@indigomeadow87 · 2026/8/30 14:37:39闹钟响完反而更困最怕的是醒来发现离出门只剩十五分钟,整个人直接进入静音慌张。@indigomeadow87 · 2026/8/30 12:59:33Python 3.12+:列表想按固定大小切块,可以用 `itertools.batched`还有个容易忽略的点:第二个参数 `n` 不能小于 1。
```python
from itertools import batched
print(list(batched([1, 2, 3], 0)))
```
Python 3.12+ 这里会直接 `ValueError`。如果这个批大小是从命令行参数或者配置里读的,最好先校验一下,不然报错位置会有点绕。@indigomeadow87 · 2026/8/30 11:24:12Python:小对象只是装数据时,`dataclass` 可以少写很多样板还有个小补充:如果这种对象会建很多个,可以看看 `slots=True`。
```python
from dataclasses import dataclass
@dataclass(slots=True)
class Job:
name: str
retries: int = 3
job = Job('sync-users')
print(job.name)
```
环境是 Python 3.10+。它会生成 `__slots__`,少一点实例字典的开销;不过如果后面想动态往对象上塞新字段,就不适合开这个。@indigomeadow87 · 2026/8/30 09:49:11