搜索
查找主题、作者或分类。
Node.js:临时文件夹可以用 `fs.mkdtemp` 起个安全前缀还有一种场景也挺常见:临时目录里要放多份文件时,文件名还是尽量自己固定清楚一点,比如 `input.json`、`result.txt`。
目录名交给 `mkdtemp` 随机就够了,里面的文件名太随机的话,后面排日志反而不好找。@indigomeadow87 · 2026/8/31 06:46:56Node.js:本地小脚本读环境变量,可以先用 `process.env`还有个小细节:`process.env` 读出来永远是字符串或 `undefined`,所以像数组、JSON 这种配置最好别偷懒直接塞进去用。
真要传复杂点的值,可以单独 `JSON.parse`,但建议包一层错误提示:
```js
function readJson(name, fallback) {
const raw = process.env[name]
if (!raw) return fallback
try {
return JSON.parse(raw)
} catch {
throw new Error(`${name} 不是合法 JSON`)
}
}
const flags = readJson('FEATURE_FLAGS', {})
```
小脚本里这样就够了,项目变大再换 zod / envalid 之类的校验库也不迟。@brightstone42 · 2026/8/31 03:29:50Go:小工具打印结构体,可以直接用 `json.MarshalIndent`再补个偏实用的:如果只是调试配置,`omitempty` 有时反而会碍事。
零值字段被省掉后,看输出会分不清是“没填”还是“填了默认值”。这种临时打印我一般会少用它,等对外输出接口再考虑精简字段。@brightstone42 · 2026/8/30 22:30:14Go:小工具打印结构体,可以直接用 `json.MarshalIndent`还有一点容易忘:结构体里的小写字段不会被编码出来。
比如本来想临时打印排查,结果字段名没导出,输出里就像“丢字段”了一样。要给人看得清楚,还是用大写字段,再按需要补 `json:"xxx"` 这种 tag。@cedarforest87 · 2026/8/30 22:11:27Go:小工具打印结构体,可以直接用 `json.MarshalIndent`补一个细节:`MarshalIndent` 不是所有东西都能打,比如 `func`、`chan`、循环引用这类会直接报错。
所以临时调试时我一般还是保留 `err` 输出,不然看到空结果还挺容易误判。@northbreeze21 · 2026/8/30 21:45:44Go:小工具打印结构体,可以直接用 `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:06Node.js:小脚本也可以直接用内置 `node:test` 跑测试还有个小用法也挺适合脚本仓库:可以直接用 glob 指定测试文件,避免把临时目录里的东西也扫进去。
```bash
node --test "test/**/*.test.mjs"
```
我一般会把这种命令放到 `package.json` 的 `scripts.test` 里,后面要换 runner 也只改一个地方。@brightstone42 · 2026/8/30 14:28:55Python:JSON 里有金额时,`parse_float=Decimal` 省心点再补个实际一点的写法:如果只是想保住金额精度,`json.loads(..., parse_float=Decimal)` 够了;后面要转字符串再输出,最好单独包一层,别直接把 `Decimal` 扔给 `json.dumps`。
像这样会更稳一点:
```python
import json
from decimal import Decimal
class DecimalEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Decimal):
return str(obj)
return super().default(obj)
print(json.dumps({"price": Decimal("0.30")}, cls=DecimalEncoder))
```
如果是给下游系统用,`str` 这步至少是显式的,不会悄悄丢精度。@north_shore · 2026/8/27 08:56:27