作者工作中遇到需求,需要多级别效验 结构体,但是范例很少,特意留下范例,写得不好,请轻喷
版本: github.com/go-playground/validator/v10

主结构体

type SceneProcessUpdateRequest struct {Chat       *Chat       `json:"chat" form:"chat" binding:"required_without=Name"`                                // 流程jsonUpdateNote *NodeList   `json:"update_note" form:"update_note" binding:"required_without_all=Name DeleteNote"`   // 需要更新的节点 ,Name DeleteNote 不存在时必传DeleteNote *DeleteNote `json:"delete_note" form:"delete_note" binding:"required_without_all=Name UpdateNote"`   // 需要删除的节点ID         string      `json:"id" form:"id" binding:"required"`                                                 // 流程IDSceneID    string      `json:"scene_id" form:"scene_id" binding:"required"`                                     // 场景IDName       string      `json:"name" form:"name" binding:"required_without=Chat"`                                // 名称IsComplete int32       `json:"is_complete" form:"is_complete" binding:"required_with=Chat,omitempty,oneof=1 2"` // "是否完整,1是 2否" Chat存在时必须存在,不存在时,可为空
}type Chat struct {NodeList []NodeList `json:"node_list" form:"node_list" binding:"required,gte=1,dive,required"` // 节点 数组LineList []LineList `json:"line_list" form:"line_list" binding:"required,gte=1,dive,required"` // 前端定义ID       string     `json:"id" form:"id" binding:"required"`                                   // 流程ID
}
type LineList struct {From string `json:"from" form:"from" binding:"required"` // 来源 IDTo   string `json:"to" form:"to" binding:"required"`     // 跳转 ID
}type NodeList struct {TalkData       *ai_scene_node_repo.TalkData       `json:"talk_data" form:"talk_data" binding:"required_if=Type talk"`                                // 对话节点 数据KeyData        *ai_scene_node_repo.KeyData        `json:"key_data" form:"key_data" binding:"required_if=Type key"`                                   // 按键节点 数据ArtificialData *ai_scene_node_repo.ArtificialData `json:"artificial_data" form:"artificial_data" binding:"required_if=Type artificial"`              // 人工节点 数据NoteData       *ai_scene_node_repo.NoteData       `json:"note_data" form:"note_data" binding:"required_if=Type note"`                                // 短信节点 数据StartData      *ai_scene_node_repo.StartData      `json:"start_data" form:"start_data" binding:"required_if=Type start"`                             // 开始节点 数据JumpData       *ai_scene_node_repo.JumpData       `json:"jump_data" form:"jump_data" binding:"required_if=Type jump"`                                // 跳转节点 数据EndData        *ai_scene_node_repo.EndData        `json:"end_data" form:"end_data" binding:"required_if=Type end"`                                   // 结束节点 数据Type           string                             `json:"type" form:"type" binding:"required,eq=talk|eq=artificial|eq=note|eq=start|eq=jump|eq=end"` // 节点类型 start:开始 talk:对话   artificial:人工  note:短信  key:按键  jump:跳转 end:结束Tag            string                             `json:"tag" form:"tag" binding:"required"`                                                         // 节点标记(标签)Name           string                             `json:"name" form:"name" binding:"required"`                                                       // 节点名称ID             string                             `json:"id" form:"id" binding:"required"`                                                           // 节点IDLeft           string                             `json:"left" form:"left"`                                                                          // 前端自定义Top            string                             `json:"top" form:"top"`                                                                            // 前端自定义Ico            string                             `json:"ico" form:"ico"`                                                                            // 前端自定义State          string                             `json:"state" form:"state"`                                                                        // 前端自定义
}type DeleteNote struct {ID  string `json:"id" form:"id" binding:"required"`   // 节点IDTag string `json:"tag" form:"tag" binding:"required"` // 节点标签
}
package ai_scene_node_repo// 开始
type StartData struct {JumpNodeID string `json:"jump_node_id" form:"jump_node_id" binding:"required"` // 跳转至
}// 对话
type TalkData struct {Rule            []NodeRule `json:"rule" form:"rule" binding:"required,dive,required"`           // 跳转规则ExceptionTag    []string   `json:"exception_tag" form:"exception_tag"`                          // 异常标签Words           string     `json:"words" form:"words" binding:"required"`                       // 节点话术RepeatWords     string     `json:"repeat_words" form:"repeat_words"`                            // 重新播报话术ExceptionAnswer string     `json:"exception_answer" form:"exception_answer" binding:"required"` // 发生异常时,机器人回答ExceptionNum    int16      `json:"exception_num" form:"exception_num" binding:"required"`       // 异常会话次数ExceptionHand   int8       `json:"exception_hand" form:"exception_hand" binding:"required"`     // 异常处理方式 1、人工 2、挂机IsInterrupt     int8       `json:"is_interrupt" form:"is_interrupt" binding:"required"`         // 是否打断 1、是 2、否
}// 人工
type ArtificialData struct {Words          string `json:"words" form:"words" binding:"required"`                             // 机器人回答Phone          int32  `json:"phone" form:"phone" binding:"required_if=ArtificialType 1"`         // 呼叫转移Extension      int32  `json:"extension" form:"extension" binding:"required_if=ArtificialType 2"` // 分机号ArtificialType int8   `json:"artificial_type" form:"artificial_type" binding:"required"`         // 1、呼叫转移 2、转接分机
}// 短信
type NoteData struct {Words    string `json:"words" form:"words" binding:"required"`         // 机器人回答NoteWord string `json:"note_word" form:"note_word" binding:"required"` //短信内容
}// 按键
type KeyData struct {Rule            []KeyRule `json:"rule" form:"rule" binding:"required,dive,required"`           // 跳转规则ExceptionTag    []string  `json:"exception_tag" form:"exception_tag"`                          // 异常标签Words           string    `json:"words" form:"words" binding:"required"`                       // 节点话术RepeatWords     string    `json:"repeat_words" form:"repeat_words" binding:"required"`         // 重新播报话术ExceptionAnswer string    `json:"exception_answer" form:"exception_answer" binding:"required"` // 发生异常时,机器人回答ExceptionNum    int16     `json:"exception_num" form:"exception_num" binding:"required"`       // 异常会话次数ExceptionHand   int8      `json:"exception_hand" form:"exception_hand" binding:"required"`     // 异常处理方式 1、人工 2、挂机IsInterrupt     int8      `json:"is_interrupt" form:"is_interrupt" binding:"required"`         // 是否打断 1、是 2、否
}// 跳转子流程
type JumpData struct {JumpNodeID string `json:"jump_node_id" form:"jump_node_id" binding:"required"` // 跳转至
}// 结束
type EndData struct {Words string `json:"words" form:"words" binding:"required"` // 机器人回答
}// 节点规则
type NodeRule struct {Conditions []Conditions `json:"conditions" form:"conditions" binding:"required,dive,required"` // 以下条件跳转Tag        []string     `json:"tag" form:"tag" `                                               // 标签JumpNodeID string       `json:"jump_node_id" form:"jump_node_id" binding:"required"`           // 跳转至JumpName   string       `json:"jump_name" form:"jump_name" binding:"required"`                 // 跳转名称Conform    int8         `json:"conform" form:"conform" binding:"required"`                     // 符合 1、任意 2、全部}// 条件
type Conditions struct {IntentionID string `json:"intention_id" form:"intention_id" binding:"required"` // 意图ID -1 全部异常意图If          int8   `json:"if" form:"if" binding:"required"`                     // 如果 1、意图Compare     int8   `json:"compare" form:"compare" binding:"required"`           // 比较方式 1、等于Content     int8   `json:"content" form:"content" binding:"required"`           // 内容 1、自定义意图 2、异常意图
}// 按键规则
type KeyRule struct {Conditions []KeyConditions `json:"conditions" form:"conditions" binding:"required,dive,required"` // 以下条件跳转Tag        []string        `json:"tag" form:"tag"`                                                // 标签JumpNodeID string          `json:"jump_node_id" form:"jump_node_id" binding:"required"`           // 跳转至JumpName   string          `json:"jump_name" form:"jump_name" binding:"required"`                 // 跳转名称Conform    int8            `json:"conform" form:"conform" binding:"required"`                     // 符合 1、任意 2、全部}type KeyConditions struct {Key     string `json:"key" form:"key" binding:"required"`         // 内容If      int8   `json:"if" form:"if" binding:"required"`           // 如果 1、按键Compare int8   `json:"compare" form:"compare" binding:"required"` // 比较方式 1、等于
}

gin 多结构体嵌套 效验范例相关推荐

  1. C 结构体嵌套一级指针 二级指针 动态分配内存

    https://blog.csdn.net/xielinhua88/article/details/51364623 点击打开链接 #define _CRT_SECURE_NO_WARNINGS #i ...

  2. c++结构体嵌套结构体_Go学习每日一问(13)-结构体嵌套

    每次学习并整理一个Golang的知识点,每天进步一点点.今天学习一个go结构体嵌套的知识点. 日省吾身 1.下面这段代码的输出结果? func main() { a := -7 b := +7 fmt ...

  3. c/c++教程 - 1.10 结构体 使用typedef定义struct结构体 结构体数组 结构体指针 结构体嵌套 结构体做函数参数 结构体const

    十二.结构体 (1)结构体定义和使用 基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型. 参考视频:https://www.bilibili.com/video/BV1et411b ...

  4. c语言嵌套结构体生日,第09天C语言(17):结构体嵌套

    #pragma mark 结构体嵌套 ###pragma mark 概念 ###pragma mark 代码 #include int main() { #warning 结构体嵌套 /* // st ...

  5. 结构体04:结构体嵌套结构体

    #include<iostream> #include<string> using namespace std;//定义结构体 学生 struct Student{string ...

  6. c中的结构体嵌套问题_C中的结构

    c中的结构体嵌套问题 Structures in C language are basically user-defined data types that enables the user to c ...

  7. 结构体学习笔记6——结构体嵌套

    结构体嵌套就是 在当前的结构体内的一个成员是另一个整体的结构体变量! struct Stu {char name[10];int age; }; struct Teach {char TeachNam ...

  8. C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例

    C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例 目录 一.简单介绍 二.结构体定义和使用 三. ...

  9. c语言嵌套结构体数组,第22节 C语言结构体之结构体嵌套、结构体指针与结构体数组的代码实现...

    结构体 #include //第一步 struct Student { //学号 int no; //姓名 char name[20]; //性别 char sex[10]; //成绩 double ...

最新文章

  1. LINUX网络状态工具SS命令使用详解
  2. c++ 常见问题之string
  3. CSS+js弹出居中的背景半透明div层
  4. 程序员的自我进化——补上最短的那块情商木板
  5. php artisan快捷命令
  6. 信息学奥赛一本通(2064:【例2.1】交换值)
  7. python获取网页源码被拒绝_Python3 请求网页源码 目标计算机积极拒绝,无法连接...
  8. Sklearn 与 TensorFlow 机器学习实用指南第二版
  9. idea打开hierarchy面板
  10. BZOJ2209 [Jsoi2011]括号序列 splay
  11. npm命令用于卸载或修剪Node.js中未使用的包
  12. ElasticSearch 入门总结
  13. 计算机维吾尔语键盘用法,超实用丨手机电脑如何安装、使用维吾尔语输入法
  14. 猿创征文|【FreeSwitch开发实践】使用sipp对FreeSwitch进行压力测试
  15. matlab中uigetfile的使用
  16. esp32 camera_ESP32操作L298N以及示例程序说明
  17. Mac谷歌浏览器添加JSONView的插件以提高开发的效率
  18. java 如何将word 转换为ftl_使用FreeMarker导出word文档(支持导出图片)
  19. 要有遥不可及的梦想,也要有脚踏实地的本事
  20. win10 SystemParametersInfo 设置屏保 不好使_Win10:Classic Shell是一款非常不错的系统UI定制工具...

热门文章

  1. KV存储-Aerospike之索引(Index)
  2. OpenAPI SDK组件介绍
  3. 【尚硅谷云原生Java架构师的第一课 4 2021-09-28】KubeSphere三种安装,docker,k8s,nfs安装,metrics。KubeKey一键单 多节点安装。
  4. 区块链难在落地,亟需补人才缺口迎爬升期
  5. Netty进阶 黏包与半包问题的处理,数据解码器详解
  6. 手把手教你用pandas处理缺失值
  7. PYTHON 打印三角形大全
  8. Microsoft Word 中如何自由移动图片
  9. iphone出现android文件夹,如何才能在iphone上看到文件,难道不能像android,塞班一样下个文件管理器,随意看文件吗...
  10. Tigase注册流程总结