读取可选配置时,用 errors.is(err, fs.errnotexist) 判断路径缺失。只有这个分支返回默认值,权限、格式和其他错误继续返回给调用方。

在读取阶段决定是否回退
保存为 main.go。已有配置使用 JSON 格式。
package main
import (
"encoding/json"
"errors"
"fmt"
"io/fs"
"os"
)
type Config struct {
Port int `json:"port"`
}
func load(path string) (Config, error) {
cfg := Config{Port: 8080}
data, err := os.ReadFile(path)
if errors.Is(err, fs.ErrNotExist) {
return cfg, nil
}
if err != nil {
return Config{}, fmt.Errorf("读取配置 %q: %w", path, err)
}
if err := json.Unmarshal(data, &cfg); err != nil {
return Config{}, fmt.Errorf("解析配置 %q: %w", path, err)
}
if cfg.Port < 1 || cfg.Port > 65535 {
return Config{}, fmt.Errorf("无效端口: %d", cfg.Port)
}
return cfg, nil
}
func main() {
cfg, err := load("config.json")
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
fmt.Println(cfg.Port)
}
这里先初始化默认端口,JSON 文件省略 port 时会保留默认值。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
验证缺失和正常两种情况
在用于测试的空目录中运行以下命令。
go run main.go
printf '{"port":9000}
' > config.json
go run main.go两次分别输出 8080 和 9000。
验证损坏配置和目录输入
在同一个测试目录内继续验证错误分支。
printf 'invalid JSON ' > config.json go run main.go mv config.json invalid-config.json mkdir config.json go run main.go
两次都以非零状态退出。第一个报告解析错误,第二个报告读取错误。

















