package main import ( "flag" "fmt" "os" "path/filepath" ) // FilePath 带合法性校验的文件路径类型 type FilePath string func (f *FilePath) Set(s string) error { // 解析绝对路径 absPath, err := filepath.Abs(s) if err != nil { return fmt.Errorf("路径解析失败:%w", err) } // 校验文件存在且为普通文件 info, err := os.Stat(absPath) if err != nil { if os.IsNotExist(err) { return fmt.Errorf("配置文件不存在:%s", absPath) } return fmt.Errorf("文件访问异常:%w", err) } if info.IsDir() { return fmt.Errorf("路径为目录,需传入有效文件路径:%s", absPath) } *f = FilePath(absPath) return nil } func (f *FilePath) String() string { return string(*f) } func (f *FilePath) Get() any { return string(*f) } func main() { var configFile FilePath flag.Var(&configFile, "config", "必填配置文件路径") flag.Parse() fmt.Printf("加载配置文件:%s\n", configFile) }