golang从Go源码生成环境变量文档插件库envdoc的使用

Golang从Go源码生成环境变量文档插件库envdoc的使用

简介

envdoc是一个用于从Go结构体生成环境变量文档的工具。它会提取结构体中与env标签相关联的注释,并创建包含详细文档的Markdown、纯文本或HTML文件。

安装

Go >= 1.24

添加envdoc工具并安装:

go get -tool github.com/g4s8/envdoc@latest
go install tool

在代码中添加go:generate指令:

//go:generate envdoc -output config.md
type Config struct {
    // ...
}

生成文档:

go generate ./...

Go < 1.24

使用go run运行:

//go:generate go run github.com/g4s8/envdoc@latest -output environments.md
type Config struct {
    // ...
}

或者先安装二进制文件:

go install github.com/g4s8/envdoc@latest

然后在代码中使用:

//go:generate envdoc -output environments.md
type Config struct {
    // ...
}

使用

基本用法:

//go:generate envdoc -output <output_file_name>

可用参数:

  • -dir (path string, 可选) - 指定搜索文件的目录
  • -files (glob string, 可选) - 指定要处理的文件名的glob模式
  • -types (glob string, 可选) - 指定要处理的类型名称的glob模式
  • -target (enum(caarlos0, cleanenv) string, 可选, 默认caarlos0) - 设置环境库目标
  • -output (path string, 必填) - 生成的文档的输出文件名
  • -format (enum(markdown, plaintext, html, dotenv, json) string, 可选) - 文档的输出格式
  • -no-styles (bool, 可选) - 如果为true,html格式将不包含CSS样式
  • -env-prefix (string, 可选) - 为所有环境变量设置额外的全局前缀
  • -tag-name (string, 可选, 默认: env) - 使用自定义标签名代替env
  • -tag-default (string, 可选, 默认: envDefault) - 使用"default"标签名代替envDefault
  • -required-if-no-def (bool, 可选, 默认: false) - 如果没有设置默认值,则将属性设置为必需
  • -field-names (bool, 可选) - 如果未指定env:标签,则使用字段名作为环境变量名
  • -debug (bool, 可选) - 启用调试输出

示例

假设有以下Go文件config.go

package foo

//go:generate envdoc --output env-doc.md
type Config struct {
  // Port to listen for incoming connections
  Port int `env:"PORT,required"`
  // Address to serve
  Address string `env:"ADDRESS" envDefault:"localhost"`
}

执行go generate后,会在env-doc.md文件中生成以下文档:

Environment Variables

  • PORT (required) - Port to listen for incoming connections
  • ADDRESS (default: localhost) - Address to serve

## 兼容性

envdoc与以下库兼容:
- 完全兼容: caarlos0/env
- 完全兼容: ilyakaznacheev/cleanenv
- 部分兼容: sethvargo/go-envconfig
- 部分兼容: joeshaw/envdecode

## 贡献

如果您发现任何问题或有改进建议,欢迎提交issue或pull request。

## 许可证

本项目采用MIT许可证。

更多关于golang从Go源码生成环境变量文档插件库envdoc的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang从Go源码生成环境变量文档插件库envdoc的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang 环境变量文档生成工具 envdoc 使用指南

envdoc 是一个从 Go 源码自动生成环境变量文档的工具,它可以帮助开发者更好地管理和记录项目中的环境变量配置。

安装 envdoc

go install github.com/joeshaw/envdoc@latest

基本使用

1. 标记需要文档化的环境变量

在你的 Go 代码中,使用 envdoc 注释标记环境变量:

package main

import (
	"os"
	"strconv"
)

// envdoc:start
// Database configuration
var (
	// envdoc:DATABASE_URL
	// Database connection URL
	// Example: postgres://user:pass[@localhost](/user/localhost):5432/db
	DatabaseURL = os.Getenv("DATABASE_URL")

	// envdoc:DB_MAX_CONNS
	// Maximum number of database connections
	// Default: 10
	DBMaxConns, _ = strconv.Atoi(os.Getenv("DB_MAX_CONNS"))
)

// envdoc:DEBUG
// Enable debug mode
// Values: true, false
// Default: false
var Debug = os.Getenv("DEBUG") == "true"
// envdoc:end

2. 生成文档

运行以下命令生成文档:

envdoc ./... > ENV.md

这会扫描当前目录及子目录下的所有 Go 文件,提取带有 envdoc 注释的环境变量,并生成 Markdown 格式的文档。

高级用法

自定义输出格式

envdoc 支持多种输出格式:

# JSON 格式
envdoc -format json ./... > env.json

# YAML 格式
envdoc -format yaml ./... > env.yaml

# HTML 格式
envdoc -format html ./... > env.html

只包含特定前缀的环境变量

envdoc -prefix DB_ ./... > DB_ENV.md

排除测试文件

envdoc -exclude-tests ./... > ENV.md

集成到 CI/CD

你可以在项目的 Makefile 中添加:

.PHONY: envdoc
envdoc:
	envdoc ./... > ENV.md

然后在 CI 流程中运行 make envdoc 来保持环境变量文档的更新。

示例输出

生成的 Markdown 文档示例:

Environment Variables

Database configuration

Variable Description Example Default
DATABASE_URL Database connection URL postgres://user:pass@localhost:5432/db -
DB_MAX_CONNS Maximum number of database connections - 10

Other

Variable Description Values Default
DEBUG Enable debug mode true, false false

## 替代方案

如果你需要更复杂的功能,也可以考虑以下替代方案:

1. **godotenv** + **envconfig** 组合:
   - 使用 `godotenv` 加载 `.env` 文件
   - 使用 `envconfig` 进行结构化解析和文档生成

2. **cobra** 框架:
   - 如果你使用 cobra 构建 CLI 应用,可以结合 `viper` 管理环境变量
   - 自动生成帮助文档时会包含环境变量信息

envdoc 的优势在于它的简单性和专注于单一功能,特别适合需要快速生成环境变量文档的项目。

希望这个指南对你有所帮助!如果你有任何其他问题,请随时提问。
回到顶部