注意:如果在处理程序中保留“is-valid”条件,并将条件分离到另一个函数或方法中,您可以使用下面的解决方案。
您可以创建一个简单的帮助函数,它具有可变参数,并且您可以使用任意数量的string
值调用它:
func containsEmpty(ss ...string) bool {
for _, s := range ss {
if s == "" {
return true
}
}
return false
}
使用它的示例:
if containsEmpty("one", "two", "") {
fmt.Println("One is empty!")
} else {
fmt.Println("All is non-empty.")
}
if containsEmpty("one", "two", "three") {
fmt.Println("One is empty!")
} else {
fmt.Println("All is non-empty.")
}
尝试在Go Playground上运行以上代码的输出结果为:
One is empty!
All is non-empty.
你的示例代码将会是这样的:
if containsEmpty(registerRequest.Email,
registerRequest.PhoneNumber,
registerRequest.NachName,
registerRequest.VorName,
registerRequest.Password,
registerRequest.VerificationId) {
}
此外,registerRequest
有点长,可以缩短为r
。如果您不能或不想在周围的代码中重命名它,并且想要缩短条件,则也可以这样做:
如果registerRequest
是一个指针(或接口),您也可以这样写:
if r := registerRequest; containsEmpty(r.Email,
r.PhoneNumber,
r.NachName,
r.VorName,
r.Password,
r.VerificationId) {
}
即使 registerRequest
不是一个指针,你仍然可以这样做,但这时结构体将会被复制。如果 registerRequest
是一个 struct
,那么你可以取它的地址来避免像这样复制它:
if r := ®isterRequest; containsEmpty(r.Email,
r.PhoneNumber,
r.NachName,
r.VorName,
r.Password,
r.VerificationId) {
}
http.StatusBadRequest
而不是自定义的变量/常量UNABLE_TO_PROCEED
。这样做有以下两个好处:1. 这是标准用法,更易于阅读(任何人阅读您的代码都会知道它的含义);2. 您的变量违反了 Go 语言的两个惯用法:变量名中不要使用下划线_
,并且不要全部使用大写字母。 - Jonathan Hall