在对象切片内搜索关键属性的简洁Golang方法

问题描述 投票:0回答:1

我创建了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.NameSuperWorkflow.Workflow.NamePermission.URNstring唯一键。Golang中有没有一种简洁的方法,使用函数指针或其他方法,仅使用一个函数而不是3 containsRole()containsWorkflow()containsPermission()并减少重复?

function go slice function-pointers functor
1个回答
1
投票

在泛型出现之前,这些是最干净,最有效的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.