protoc-go-inject-tag 项目使用教程
1. 项目的目录结构及介绍
protoc-go-inject-tag/
├── cmd/
│ └── protoc-go-inject-tag/
│ └── main.go
├── internal/
│ └── inject/
│ ├── inject.go
│ ├── inject_test.go
│ └── tag.go
├── go.mod
├── go.sum
└── README.md
- cmd/: 包含项目的启动文件。
- internal/: 包含项目的核心逻辑,如标签注入的具体实现。
- go.mod 和 go.sum: Go 模块文件,用于管理项目的依赖。
- README.md: 项目的说明文档。
2. 项目的启动文件介绍
项目的启动文件位于 cmd/protoc-go-inject-tag/main.go
。该文件主要负责解析命令行参数并调用内部逻辑来注入标签。
package main
import (
"flag"
"log"
"os"
"github.com/favadi/protoc-go-inject-tag/internal/inject"
)
func main() {
var (
input string
verbose bool
removeTag bool
xxxSkipTags string
)
flag.StringVar(&input, "input", "", "pattern to match input file(s)")
flag.BoolVar(&verbose, "verbose", false, "verbose logging")
flag.BoolVar(&removeTag, "remove_tag_comment", false, "removes tag comments from the generated file(s)")
flag.StringVar(&xxxSkipTags, "XXX_skip", "", "tags that should be skipped (applies 'tag:\"-\"') for unknown fields (deprecated since protoc-gen-go v1.4.0)")
flag.Parse()
if input == "" {
log.Fatal("input is required")
}
if err := inject.Process(input, verbose, removeTag, xxxSkipTags); err != nil {
log.Fatalf("failed to process: %v", err)
}
}
3. 项目的配置文件介绍
项目没有传统的配置文件,而是通过命令行参数进行配置。以下是主要的命令行参数:
-input
: 指定输入文件的模式。-verbose
: 启用详细日志输出。-remove_tag_comment
: 移除生成的文件中的标签注释。-XXX_skip
: 跳过未知字段的标签(已弃用)。
使用示例:
protoc-go-inject-tag -input=./path/to/your/file.pb.go
以上命令将处理指定路径下的 .pb.go
文件,并注入自定义标签。