Documentation
¶
Overview ¶
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-25 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-25 00:00:00 * @FilePath: \go-toolbox\pkg\validator\format.go * @Description: 格式验证函数 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-25 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-25 00:00:00 * @FilePath: \go-toolbox\pkg\validator\helpers.go * @Description: 验证器通用辅助函数 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-23 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-23 00:00:00 * @FilePath: \go-toolbox\pkg\validator\http.go * @Description: HTTP 相关验证(状态码、Header 等) * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-02-19 10:25:55 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-02-19 10:25:55 * @FilePath: \go-toolbox\pkg\validator\ip.go * @Description: IP地址验证器 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-23 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-23 00:00:00 * @FilePath: \go-toolbox\pkg\validator\json.go * @Description: JSON 验证和 JSONPath 支持 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-23 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-23 00:00:00 * @FilePath: \go-toolbox\pkg\validator\number.go * @Description: 数值比较验证 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-23 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-23 22:10:16 * @FilePath: \go-toolbox\pkg\validator\operator.go * @Description: 比较操作符定义和结果类型 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-03-18 16:35:27 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-03-18 16:35:27 * @FilePath: \go-toolbox\pkg\validator\path.go * @Description: 路径匹配和验证功能 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-23 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-23 00:00:00 * @FilePath: \go-toolbox\pkg\validator\regex.go * @Description: 正则表达式验证 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-25 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-25 00:00:00 * @FilePath: \go-toolbox\pkg\validator\schema.go * @Description: JSON Schema 验证 - 高性能嵌套验证 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-23 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-23 00:00:00 * @FilePath: \go-toolbox\pkg\validator\string.go * @Description: 字符串比较和验证 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
Index ¶
- func CheckEmptyTimePointer(v reflect.Value) (isEmpty bool, handled bool)
- func CheckEmptyTimeStruct(v reflect.Value) (isEmpty bool, handled bool)
- func CheckEmptyWrapperPointer(v reflect.Value) (isEmpty bool, handled bool)
- func ClearRegexCache()
- func ContainsChinese(s string) bool
- func DerefValue(value interface{}) (interface{}, bool)
- func EmptyToDefault(str string, defaultStr string) string
- func FormatSchemaError(result CompareResult) string
- func GetCompiledRegex(pattern string) (*regexp.Regexp, error)
- func HasEmpty(elems []interface{}) (bool, int)
- func IfNullOrUndefined(str string) bool
- func IsAllEmpty(elems []interface{}) bool
- func IsAllowedField(field string, allowedFields ...[]string) bool
- func IsCEmpty[T comparable](v T) bool
- func IsEmptyAfterDeref(value interface{}) (interface{}, bool)
- func IsEmptyPointer(v reflect.Value) bool
- func IsEmptyStruct(v reflect.Value) bool
- func IsEmptyValue(v reflect.Value) bool
- func IsFuncType[T any]() bool
- func IsIPAllowed(ip string, cidrList []string) bool
- func IsIPBlocked(ip string, blacklist []string) bool
- func IsIPInRange(ip, start, end net.IP) bool
- func IsJSONNull(data []byte) bool
- func IsNil(x interface{}) bool
- func IsNull(str string) bool
- func IsPrivateIP(ip string) bool
- func IsProtobufTimestampEmpty(v reflect.Value) bool
- func IsSafeFieldName(field string) bool
- func IsTimeEmpty(t *time.Time) bool
- func IsTimeValid(timeVal interface{}) bool
- func IsUndefined(str string) bool
- func MatchIPInList(ip string, ipList []string) bool
- func MatchIPPattern(ip, pattern string) bool
- func MatchIPWithWildcard(ip, pattern string) bool
- func MatchPathInList(path string, patterns []string) bool
- func ScanJSONString(data []byte, start int) (int, error)
- func ScanJSONValueEnd(data []byte, start int) (int, error)
- func SkipJSONSpaces(data []byte, i int) int
- func UnwrapProtobufWrapper(value interface{}) (interface{}, bool)
- func ValidateJSON(data []byte) error
- func ValidateJSONWithData(body []byte) (any, error)
- type CompareOperator
- type CompareResult
- func CompareNumbers[T types.Numerical](actual, expect T, op CompareOperator) CompareResult
- func CompareStrings(actual, expect string, op CompareOperator) CompareResult
- func ValidateBase64(str string) CompareResult
- func ValidateContains(body []byte, substring string) CompareResult
- func ValidateContentType(headers map[string]string, expected string) CompareResult
- func ValidateEmail(email string) CompareResult
- func ValidateHTTP(urlStr string) CompareResult
- func ValidateHeader(headers map[string]string, key, expected string, op CompareOperator) CompareResult
- func ValidateIP(ipStr string) CompareResult
- func ValidateJSONField(body []byte, field string, expected any) CompareResult
- func ValidateJSONFields(body []byte, rules map[string]any) []CompareResult
- func ValidateJSONPath(body []byte, jsonPath string, expected any, op CompareOperator) CompareResult
- func ValidateJSONPathExists(body []byte, jsonPath string) CompareResult
- func ValidateJSONSchema(data interface{}, schema interface{}) CompareResult
- func ValidateNotContains(body []byte, substring string) CompareResult
- func ValidateProtocol(urlStr string, allowedProtocols ...string) CompareResult
- func ValidateRegex(body []byte, pattern string) CompareResult
- func ValidateStatusCode(statusCode, expected int, op CompareOperator) CompareResult
- func ValidateStatusCodeRange(actual, min, max int) CompareResult
- func ValidateString(actual, expect string, op CompareOperator) CompareResult
- func ValidateStructWithSchema(structData interface{}, schema interface{}) CompareResult
- func ValidateUUID(uuidStr string) CompareResult
- func ValidateWebSocket(urlStr string) CompareResult
- type EnumValidator
- func (v *EnumValidator[T]) Add(values ...T)
- func (v *EnumValidator[T]) Clear()
- func (v *EnumValidator[T]) Clone() *EnumValidator[T]
- func (v *EnumValidator[T]) Contains(value T) bool
- func (v *EnumValidator[T]) Count() int
- func (v *EnumValidator[T]) GetValidValues() []T
- func (v *EnumValidator[T]) GetValidValuesString() []string
- func (v *EnumValidator[T]) IsValid(value T) bool
- func (v *EnumValidator[T]) MustBeValid(value T) error
- func (v *EnumValidator[T]) Remove(values ...T)
- type IPBase
- type JSONSchema
- type SchemaBuilder
- func (b *SchemaBuilder) ArrayProperty(name string, items JSONSchema) *SchemaBuilder
- func (b *SchemaBuilder) Build() JSONSchema
- func (b *SchemaBuilder) BuildJSON() string
- func (b *SchemaBuilder) Enum(values ...interface{}) *SchemaBuilder
- func (b *SchemaBuilder) NumberProperty(name string, min, max *float64) *SchemaBuilder
- func (b *SchemaBuilder) Property(name string, propSchema JSONSchema) *SchemaBuilder
- func (b *SchemaBuilder) Required(fields ...string) *SchemaBuilder
- func (b *SchemaBuilder) StringProperty(name string, minLen, maxLen int) *SchemaBuilder
- func (b *SchemaBuilder) Type(t string) *SchemaBuilder
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CheckEmptyTimePointer ¶ added in v0.11.86
CheckEmptyTimePointer 检查指针类型的时间是否为空
func CheckEmptyTimeStruct ¶ added in v0.11.86
CheckEmptyTimeStruct 检查结构体类型的时间是否为空
func CheckEmptyWrapperPointer ¶ added in v0.12.0
CheckEmptyWrapperPointer 检查 protobuf wrapper 类型是否为空
func ContainsChinese ¶
ContainsChinese checks if a string contains any Chinese characters.
func DerefValue ¶ added in v0.12.0
func DerefValue(value interface{}) (interface{}, bool)
DerefValue 解引用 interface{} 中的指针,返回底层值 Deprecated: 请使用 types.DerefValue 替代
func EmptyToDefault ¶
EmptyToDefault returns defaultStr if str is empty; otherwise, returns str.
func FormatSchemaError ¶ added in v0.11.87
func FormatSchemaError(result CompareResult) string
FormatSchemaError 格式化 Schema 验证错误信息
func GetCompiledRegex ¶ added in v0.11.87
GetCompiledRegex 获取编译的正则(带缓存)- 公共函数供其他模块使用
func IfNullOrUndefined ¶ added in v0.11.87
IfNullOrUndefined returns trueVal if str is "null" or "undefined"; otherwise, returns falseVal.
func IsAllEmpty ¶
func IsAllEmpty(elems []interface{}) bool
IsAllEmpty checks if all elements in the slice are empty.
func IsAllowedField ¶ added in v0.11.87
IsAllowedField 检查字段是否在白名单中 如果提供了白名单,检查字段是否在白名单中;否则验证字段名是否安全 参数:
- field: 要检查的字段名
- allowedFields: 可选的白名单切片(可变参数,传入一个[]string切片)
返回:
- true: 字段允许使用
- false: 字段不允许使用
func IsCEmpty ¶ added in v0.11.59
func IsCEmpty[T comparable](v T) bool
IsCEmpty 判断元素是否为类型零值 Deprecated: 请使用 types.IsCEmpty 替代
func IsEmptyAfterDeref ¶ added in v0.12.0
func IsEmptyAfterDeref(value interface{}) (interface{}, bool)
IsEmptyAfterDeref 判断值是否为空(用于过滤条件场景) 支持自动解引用指针:nil 指针为空,非 nil 指针检查其底层值 内部复用 IsEmptyValue 进行统一的空值判断 返回解引用后的值和是否为空的标志,避免调用方重复调用 DerefValue
适用场景: SQL 构建器中的 IfNotEmpty 系列方法
func IsEmptyPointer ¶ added in v0.11.86
IsEmptyPointer 检查指针或接口类型是否为空
func IsEmptyStruct ¶ added in v0.11.86
IsEmptyStruct 检查结构体是否为空
func IsEmptyValue ¶
isEmptyValue checks if a reflect.Value is empty.
func IsFuncType ¶ added in v0.11.59
IsFuncType 判断传入的类型是否为函数类型 Deprecated: 请使用 types.IsFuncType 替代
func IsIPAllowed ¶ added in v0.11.48
IsIPAllowed 检查 IP 是否在允许列表中 支持: - 空列表:返回 true(允许所有) - 通配符 "*":返回 true(允许所有) - 精确匹配:如 "192.168.1.100" - CIDR 格式:如 "192.168.1.0/24" - IPv6 支持
func IsIPBlocked ¶ added in v0.11.87
IsIPBlocked 检查 IP 是否在黑名单中 支持: - 空列表:返回 false(不阻止) - 通配符 "*":返回 true(阻止所有) - 精确匹配:如 "192.168.1.100" - CIDR 格式:如 "192.168.1.0/24" - IPv6 支持
func IsIPInRange ¶ added in v0.11.87
IsIPInRange 检查 IP 是否在指定范围内
func IsJSONNull ¶ added in v0.12.0
IsJSONNull 判断字节数据去除空白后是否为 JSON null
func IsNil ¶ added in v0.11.37
func IsNil(x interface{}) bool
IsNil 判断传入的接口值是否为 nil Deprecated: 请使用 types.IsNil 替代
func IsProtobufTimestampEmpty ¶ added in v0.11.86
IsProtobufTimestampEmpty 检查 protobuf Timestamp 是否为空(使用反射避免复制锁)
func IsSafeFieldName ¶ added in v0.11.87
IsSafeFieldName 检查字段名是否安全(仅包含字母、数字、下划线、点号) 用于防止 SQL 注入等安全问题
func IsTimeEmpty ¶ added in v0.11.86
IsTimeEmpty 检查 time.Time 是否为空 空的定义:零值、Unix 零点或之前的时间
func IsTimeValid ¶ added in v0.12.0
func IsTimeValid(timeVal interface{}) bool
IsTimeValid 检查时间值是否有效(非nil且非零值) 支持 time.Time 和 *time.Time 类型 其他类型始终返回 true(视为有效) 适用场景: SQL 构建器中时间范围过滤条件的有效性判断
func IsUndefined ¶
IsUndefined checks if a string is "undefined" (case insensitive).
func MatchIPInList ¶ added in v0.11.87
MatchIPInList 检查 IP 是否匹配列表中的任一规则 支持多种格式: 1. 分隔符列表: 支持分号、逗号、换行符、空格分隔
- "192.168.0.10;192.168.0.1"
- "192.168.0.1,192.168.0.56"
- "192.168.0.15\n192.168.0.1"
- "192.168.0.15 192.168.0.17"
2. 精确匹配: "192.168.1.100" 3. CIDR: "192.168.1.0/24" 4. IP范围: "172.16.0.1-172.16.0.10" 5. 通配符: "192.168.2.*" 或 "192.168.*.*"
func MatchIPPattern ¶ added in v0.11.87
MatchIPPattern 匹配 IP 模式(支持通配符 * 和 CIDR) 返回是否匹配
func MatchIPWithWildcard ¶ added in v0.11.87
MatchIPWithWildcard 使用通配符匹配 IP
func MatchPathInList ¶ added in v0.11.87
MatchPathInList 检查路径是否匹配列表中的任一模式
支持的匹配规则: 1. 精确匹配:path == pattern 2. 前缀匹配:path 以 pattern 开头
参数:
- path: 待检查的路径
- patterns: 路径模式列表
返回:如果匹配任意一个模式则返回 true
注意:如需更复杂的匹配(如 Glob、正则),请使用 matcher.PathMatcher
示例:
patterns := []string{"/api/v1", "/health"}
MatchPathInList("/api/v1/users", patterns) // true (前缀匹配)
MatchPathInList("/health", patterns) // true (精确匹配)
MatchPathInList("/admin", patterns) // false
func ScanJSONString ¶ added in v0.12.0
ScanJSONString 扫描 JSON 字符串,并返回字符串结束后一位的位置
func ScanJSONValueEnd ¶ added in v0.12.0
ScanJSONValueEnd 扫描任意 JSON 值,并返回值结束后一位的位置
func SkipJSONSpaces ¶ added in v0.12.0
SkipJSONSpaces 跳过 JSON 字节流中的空白字符,并返回下一个非空白位置
func UnwrapProtobufWrapper ¶ added in v0.12.0
func UnwrapProtobufWrapper(value interface{}) (interface{}, bool)
UnwrapProtobufWrapper 解包 protobuf 包装器,返回底层值 如果值为 nil 或指向 nil 指针,则返回 (nil, true) 如果值是指针且非 nil,返回 (dereferencedValue, true) 如果值不是指针,返回 (originalValue, true)
func ValidateJSON ¶ added in v0.11.87
ValidateJSON 验证JSON结构(基础版,仅验证格式)
func ValidateJSONWithData ¶ added in v0.11.87
ValidateJSONWithData 验证JSON并返回解析后的数据
Types ¶
type CompareOperator ¶ added in v0.11.87
type CompareOperator string
CompareOperator 比较操作符
const ( OpEqual CompareOperator = "eq" OpNotEqual CompareOperator = "ne" OpGreaterThan CompareOperator = "gt" OpGreaterThanOrEqual CompareOperator = "gte" OpLessThan CompareOperator = "lt" OpLessThanOrEqual CompareOperator = "lte" OpContains CompareOperator = "contains" OpNotContains CompareOperator = "not_contains" OpHasPrefix CompareOperator = "has_prefix" OpHasSuffix CompareOperator = "has_suffix" OpRegex CompareOperator = "regex" OpEmpty CompareOperator = "empty" OpNotEmpty CompareOperator = "not_empty" // 符号别名 OpSymbolEqual CompareOperator = "=" OpSymbolNotEqual CompareOperator = "!=" OpSymbolGreaterThan CompareOperator = ">" OpSymbolGreaterThanOrEqual CompareOperator = ">=" OpSymbolLessThan CompareOperator = "<" OpSymbolLessThanOrEqual CompareOperator = "<=" )
func (CompareOperator) String ¶ added in v0.11.87
func (op CompareOperator) String() string
String 返回操作符的字符串表示
type CompareResult ¶ added in v0.11.87
type CompareResult struct {
Success bool `json:"success"`
Message string `json:"message"`
Actual string `json:"actual"`
Expect string `json:"expect"`
}
CompareResult 比较结果
func CompareNumbers ¶ added in v0.11.87
func CompareNumbers[T types.Numerical](actual, expect T, op CompareOperator) CompareResult
CompareNumbers 比较两个数值 - 使用 cmp.Compare 支持泛型比较
func CompareStrings ¶ added in v0.11.87
func CompareStrings(actual, expect string, op CompareOperator) CompareResult
CompareStrings 比较两个字符串
func ValidateBase64 ¶ added in v0.11.87
func ValidateBase64(str string) CompareResult
ValidateBase64 验证 Base64 编码
func ValidateContains ¶ added in v0.11.87
func ValidateContains(body []byte, substring string) CompareResult
ValidateContains 验证响应体包含指定字符串
func ValidateContentType ¶ added in v0.11.87
func ValidateContentType(headers map[string]string, expected string) CompareResult
ValidateContentType 验证 Content-Type
func ValidateEmail ¶ added in v0.11.87
func ValidateEmail(email string) CompareResult
ValidateEmail 验证 Email 格式
func ValidateHTTP ¶ added in v0.11.87
func ValidateHTTP(urlStr string) CompareResult
ValidateHTTP 验证 HTTP/HTTPS URL(便捷函数)
func ValidateHeader ¶ added in v0.11.87
func ValidateHeader(headers map[string]string, key, expected string, op CompareOperator) CompareResult
ValidateHeader 验证HTTP头部字段
func ValidateIP ¶ added in v0.11.87
func ValidateIP(ipStr string) CompareResult
ValidateIP 验证 IP 地址(支持 IPv4 和 IPv6)
func ValidateJSONField ¶ added in v0.11.87
func ValidateJSONField(body []byte, field string, expected any) CompareResult
ValidateJSONField 验证JSON字段值
func ValidateJSONFields ¶ added in v0.11.87
func ValidateJSONFields(body []byte, rules map[string]any) []CompareResult
ValidateJSONFields 批量验证JSON字段
func ValidateJSONPath ¶ added in v0.11.87
func ValidateJSONPath(body []byte, jsonPath string, expected any, op CompareOperator) CompareResult
ValidateJSONPath 验证JSONPath查询结果
func ValidateJSONPathExists ¶ added in v0.11.87
func ValidateJSONPathExists(body []byte, jsonPath string) CompareResult
ValidateJSONPathExists 验证JSONPath路径是否存在(不验证值)
func ValidateJSONSchema ¶ added in v0.11.87
func ValidateJSONSchema(data interface{}, schema interface{}) CompareResult
ValidateJSONSchema 验证 JSON 数据是否符合 Schema data: JSON 字符串或已解析的数据 schema: JSON Schema 定义(可以是 JSONSchema 结构体或 JSON 字符串)
返回 CompareResult,包含验证结果和详细信息
func ValidateNotContains ¶ added in v0.11.87
func ValidateNotContains(body []byte, substring string) CompareResult
ValidateNotContains 验证响应体不包含指定字符串
func ValidateProtocol ¶ added in v0.11.87
func ValidateProtocol(urlStr string, allowedProtocols ...string) CompareResult
ValidateProtocol 验证 URL 协议(支持多种协议:http, https, ws, wss, ftp, ftps 等) allowedProtocols: 允许的协议列表,为空则允许所有常见协议
func ValidateRegex ¶ added in v0.11.87
func ValidateRegex(body []byte, pattern string) CompareResult
ValidateRegex 验证响应体匹配正则表达式
func ValidateStatusCode ¶ added in v0.11.87
func ValidateStatusCode(statusCode, expected int, op CompareOperator) CompareResult
ValidateStatusCode 验证HTTP状态码 - 支持多种比较操作符
func ValidateStatusCodeRange ¶ added in v0.11.87
func ValidateStatusCodeRange(actual, min, max int) CompareResult
ValidateStatusCodeRange 验证HTTP状态码在范围内
func ValidateString ¶ added in v0.11.87
func ValidateString(actual, expect string, op CompareOperator) CompareResult
ValidateString 验证字符串(支持各种操作符)
func ValidateStructWithSchema ¶ added in v0.11.87
func ValidateStructWithSchema(structData interface{}, schema interface{}) CompareResult
ValidateStructWithSchema 验证结构体是否符合 JSON Schema
将结构体转换为 JSON 后进行 Schema 验证
func ValidateUUID ¶ added in v0.11.87
func ValidateUUID(uuidStr string) CompareResult
ValidateUUID 验证 UUID 格式(支持 UUID v1-v5)
func ValidateWebSocket ¶ added in v0.11.87
func ValidateWebSocket(urlStr string) CompareResult
ValidateWebSocket 验证 WebSocket URL(便捷函数)
type EnumValidator ¶ added in v0.12.0
type EnumValidator[T comparable] struct { // contains filtered or unexported fields }
EnumValidator 枚举验证器,用于验证枚举类型的有效性 T 必须是可比较的类型 (comparable),通常是 string、int 等
使用示例:
type UserRole string
const (
RoleAdmin UserRole = "admin"
RoleUser UserRole = "user"
RoleGuest UserRole = "guest"
)
validator := NewEnumValidator(RoleAdmin, RoleUser, RoleGuest)
if validator.IsValid(RoleAdmin) {
fmt.Println("Valid role")
}
Example ¶
示例测试
// 创建用户角色验证器
roleValidator := NewEnumValidator(RoleAdmin, RoleUser, RoleGuest)
// 验证角色
if roleValidator.IsValid(RoleAdmin) {
// 角色有效
}
// 强制验证
if err := roleValidator.MustBeValid(RoleUser); err != nil {
// 处理错误
}
// 获取所有有效值
validRoles := roleValidator.GetValidValues()
_ = validRoles
func NewEnumValidator ¶ added in v0.12.0
func NewEnumValidator[T comparable](values ...T) *EnumValidator[T]
NewEnumValidator 创建一个新的枚举验证器 参数 values 为所有有效的枚举值
示例:
validator := NewEnumValidator("pending", "approved", "rejected")
func (*EnumValidator[T]) Add ¶ added in v0.12.0
func (v *EnumValidator[T]) Add(values ...T)
Add 添加新的有效枚举值 如果值已存在,则不会重复添加
示例:
validator.Add("new_status")
Example ¶
validator := NewEnumValidator(RoleAdmin, RoleUser)
// 添加新的角色
validator.Add(RoleGuest)
validator.Add(UserRole("moderator"), UserRole("vip"))
func (*EnumValidator[T]) Clear ¶ added in v0.12.0
func (v *EnumValidator[T]) Clear()
Clear 清空所有有效枚举值
func (*EnumValidator[T]) Clone ¶ added in v0.12.0
func (v *EnumValidator[T]) Clone() *EnumValidator[T]
Clone 创建验证器的副本
func (*EnumValidator[T]) Contains ¶ added in v0.12.0
func (v *EnumValidator[T]) Contains(value T) bool
Contains 检查验证器是否包含指定的枚举值 功能与 IsValid 相同,提供更语义化的方法名
func (*EnumValidator[T]) Count ¶ added in v0.12.0
func (v *EnumValidator[T]) Count() int
Count 返回有效枚举值的数量
func (*EnumValidator[T]) GetValidValues ¶ added in v0.12.0
func (v *EnumValidator[T]) GetValidValues() []T
GetValidValues 获取所有有效的枚举值列表 返回的列表顺序不固定
示例:
validValues := validator.GetValidValues()
fmt.Printf("Valid values: %v\n", validValues)
func (*EnumValidator[T]) GetValidValuesString ¶ added in v0.12.0
func (v *EnumValidator[T]) GetValidValuesString() []string
GetValidValuesString 获取所有有效枚举值的字符串表示 对于 string 类型的枚举特别有用,返回排序后的列表
示例:
fmt.Printf("Valid roles: %v\n", validator.GetValidValuesString())
func (*EnumValidator[T]) IsValid ¶ added in v0.12.0
func (v *EnumValidator[T]) IsValid(value T) bool
IsValid 检查给定值是否为有效的枚举值
示例:
if validator.IsValid("pending") {
fmt.Println("Valid status")
}
func (*EnumValidator[T]) MustBeValid ¶ added in v0.12.0
func (v *EnumValidator[T]) MustBeValid(value T) error
MustBeValid 验证给定值,如果无效则返回错误
示例:
if err := validator.MustBeValid(status); err != nil {
return err
}
func (*EnumValidator[T]) Remove ¶ added in v0.12.0
func (v *EnumValidator[T]) Remove(values ...T)
Remove 移除指定的枚举值 如果值不存在,不会产生错误
示例:
validator.Remove("deprecated_status")
type IPBase ¶ added in v0.11.87
type IPBase struct{}
IPBase IP验证器基类
func (*IPBase) ValidateIP ¶ added in v0.11.87
ValidateIP 验证IP地址是否有效
type JSONSchema ¶ added in v0.11.87
type JSONSchema struct {
Type string `json:"type,omitempty"` // string, number, integer, boolean, array, object, null
Properties map[string]JSONSchema `json:"properties,omitempty"` // 对象属性定义
Required []string `json:"required,omitempty"` // 必需字段
Items *JSONSchema `json:"items,omitempty"` // 数组元素 schema
Enum []interface{} `json:"enum,omitempty"` // 枚举值
Minimum *float64 `json:"minimum,omitempty"` // 最小值
Maximum *float64 `json:"maximum,omitempty"` // 最大值
MinLength *int `json:"minLength,omitempty"` // 最小长度
MaxLength *int `json:"maxLength,omitempty"` // 最大长度
Pattern string `json:"pattern,omitempty"` // 正则模式
MinItems *int `json:"minItems,omitempty"` // 数组最小元素数
MaxItems *int `json:"maxItems,omitempty"` // 数组最大元素数
UniqueItems bool `json:"uniqueItems,omitempty"` // 数组元素唯一性
AdditionalProperties interface{} `json:"additionalProperties,omitempty"` // 额外属性
}
JSONSchema JSON Schema 定义
func QuickSchema ¶ added in v0.11.87
func QuickSchema(properties map[string]string, required ...string) JSONSchema
QuickSchema 快速创建简单的对象 Schema(语法糖)
示例:
schema := QuickSchema(map[string]string{
"name": "string",
"age": "number",
"email": "string",
}, "name", "email") // name 和 email 是必需的
type SchemaBuilder ¶ added in v0.11.87
type SchemaBuilder struct {
// contains filtered or unexported fields
}
SchemaBuilder JSON Schema 构建器(链式调用)
func NewSchemaBuilder ¶ added in v0.11.87
func NewSchemaBuilder() *SchemaBuilder
NewSchemaBuilder 创建 Schema 构建器
func (*SchemaBuilder) ArrayProperty ¶ added in v0.11.87
func (b *SchemaBuilder) ArrayProperty(name string, items JSONSchema) *SchemaBuilder
ArrayProperty 添加数组属性
func (*SchemaBuilder) Build ¶ added in v0.11.87
func (b *SchemaBuilder) Build() JSONSchema
Build 构建 Schema
func (*SchemaBuilder) BuildJSON ¶ added in v0.11.87
func (b *SchemaBuilder) BuildJSON() string
BuildJSON 构建 Schema JSON 字符串
func (*SchemaBuilder) Enum ¶ added in v0.11.87
func (b *SchemaBuilder) Enum(values ...interface{}) *SchemaBuilder
Enum 设置枚举值
func (*SchemaBuilder) NumberProperty ¶ added in v0.11.87
func (b *SchemaBuilder) NumberProperty(name string, min, max *float64) *SchemaBuilder
NumberProperty 添加数字属性
func (*SchemaBuilder) Property ¶ added in v0.11.87
func (b *SchemaBuilder) Property(name string, propSchema JSONSchema) *SchemaBuilder
Property 添加属性
func (*SchemaBuilder) Required ¶ added in v0.11.87
func (b *SchemaBuilder) Required(fields ...string) *SchemaBuilder
Required 设置必需字段
func (*SchemaBuilder) StringProperty ¶ added in v0.11.87
func (b *SchemaBuilder) StringProperty(name string, minLen, maxLen int) *SchemaBuilder
StringProperty 添加字符串属性
func (*SchemaBuilder) Type ¶ added in v0.11.87
func (b *SchemaBuilder) Type(t string) *SchemaBuilder
Type 设置类型