使用 ApplyMethodSeq方法 mock 方法时 outputs的个数必须大于或者等于后面调用的次数 否则会报 `double seq is less than call seq`的错误


https://github.com/agiledragon/gomonkey

omitempty的作用是当字段为零值时 则不进行后续判断,当字段不为零值时 进行后续判断

如果字段是指针类型 则认为 nil为零值  如果字段不是指针类型 则认为 0 空字符串 空数据 等为零值

type User struct {
	Sex int `binding:"omitempty,oneof=1 2"`
}

此时 Sex 传0时可以通过检测 

type User struct {
	Sex *int `binding:"omitempty,oneof=1 2"`
}

此时 Sex 传0时不能通过检测 不传Sex字段 或者Sex字段传NULL时可以通过检测

go-playground/validator

type User struct {
	ID int
	Sex int
}

想要的效果:

        当ID为0值时 sex可以为0值

        当ID不为0值时 sex必须是 1和2之间的一个

type User struct {
	ID int 
	Sex int `binding:"required_with=ID,oneof=1 2"`}

ID为0时 Sex为0时 按循序先执行required_with判断

required_with的判断不会影响oneof判断所以会继续执行oneof判断

因为Sex为0所以会返回错误 Sex必须是 1和2之间的一个

type User struct {
	ID int
	Sex int `binding:"required_with=ID,omitempty,oneof=1 2"`
}

我们可以在required_with后面加上omitempty判断 ,omitempty判断的作用是当值为0值时,后续判断将不再执行

此时 ID为0时 Sex为0时 按循序先执行required_with判断

然后执行omitempty判断, 因为Sex为0 所以后续判断将不在执行  

go-playground/validator