我创建了3个搜索功能:
func containsRole(x string, a []Role) bool {
for _, n := range a {
if x == n.Name {
return true
}
}
return false
}
func containsWorkflow(x string, a []SuperWorkflow) bool {
for _, n := range a {
if x == n.Workflow.Name {
return true
}
}
return false
}
func containsPermission(x string, a []Permission) bool {
for _, n := range a {
if x == n.URN {
return true
}
}
return false
}
我在其他3个不同的函数中循环调用它们,例如:
// In function 1
for _, leftRole := range leftRoles {
if !containsRole(leftRole.Name, rightRoles) {
createRoleReport(leftRole))
}
}
// In function 2
for _, leftWF := range leftWorkflows {
if !containsWorkflow(leftWF.Workflow.Name, rightWorkflows) {
createWorkflowReport(leftWF)
}
}
// In function 3
for _, leftPerm := range leftPermissions {
if !containsPermission(leftPerm.URN, rightPermissions) {
createPermissionReport(leftPerm)
}
}
结构的属性:Role.Name
,SuperWorkflow.Workflow.Name
和Permission.URN
是string
唯一键。Golang中有没有一种简洁的方法,使用函数指针或其他方法,仅使用一个函数而不是3 containsRole()
,containsWorkflow()
和containsPermission()
并减少重复?
在泛型出现之前,这些是最干净,最有效的解决方案。