在Go语言中,可以使用正则表达式和strconv包来检查结构体字段的合法性。以下是一个示例代码,演示如何检查Addr是否为合法的IPv4地址,Port是否为合法的端口号,SyncPeriod是否为合法的数字:
import (
"net"
"regexp"
"strconv"
)
type TimeConfigInfo struct {
RequestId string `json:"requestId"`
Addr string `json:"addr"`
Port string `json:"port"`
SyncPeriod int `json:"syncPeriod"`
}
func IsValidIPv4(address string) bool {
ip := net.ParseIP(address)
if ip == nil || ip.To4() == nil {
return false
}
return true
}
func IsValidPort(port string) bool {
portNum, err := strconv.Atoi(port)
if err != nil || portNum < 1 || portNum > 65535 {
return false
}
return true
}
func IsValidSyncPeriod(syncPeriod int) bool {
if syncPeriod <= 0 {
return false
}
return true
}
func ValidateTimeConfigInfo(config *TimeConfigInfo) bool {
if !IsValidIPv4(config.Addr) || !IsValidPort(config.Port) || !IsValidSyncPeriod(config.SyncPeriod) {
return false
}
return true
}
func main() {
config := &TimeConfigInfo{
RequestId: "123",
Addr: "192.168.0.1",
Port: "8080",
SyncPeriod: 60,
}
isValid := ValidateTimeConfigInfo(config)
if isValid {
// 数据有效,进行后续操作
} else {
// 数据无效,处理错误逻辑
}
}
在以上示例中,IsValidIPv4
函数用于检查Addr字段是否为合法的IPv4地址,IsValidPort
函数用于检查Port字段是否为合法的端口号,IsValidSyncPeriod
函数用于检查SyncPeriod字段是否为合法的数字。然后,使用ValidateTimeConfigInfo
函数对整个结构体进行验证。
请注意,在实际应用中,您可能需要根据具体需求进行更严格的验证逻辑,并添加错误处理和逻辑处理部分。
内容由零声教学AI助手提供,问题来源于学员提问