我有一个这样定义的结构:
type Issues struct {
RedmineIssue string
GitlabIssue string
}
然后我从数据库中获取列表
database.Find(&Issues)
然后我有另一个数组
redmineIssues []redmine.Issue
有什么方法可以在我的数组中搜索问题吗?同样基于字段RedmineIssue(string)的数组redmineIssues中的问题吗?
今天这是我在做什么
database.Find(&Issues)
redmineIssue := []string{}
for _, issueRedmine := range Issues {
redmineIssue = append(redmineIssue, issueRedmine.RedmineIssue)
}
gitlabissues := []string{}
for _, issueGitlab := range Issues {
gitlabissues = append(gitlabissues, issueGitlab.GitlabIssue)
}
然后我可以与我拥有的另一个数组进行比较
for _, issueR := range IssueFromRedmineWS {
inArray, _ := in_array(issueR.Id, redmineIssue)
if !inArray {
// The issue is not in the DB
}
}
关于如何优化它并使它更清洁的任何想法?
答案 0 :(得分:1)
for循环是正确的方法。假设您粘贴的代码实际上有效,则可以将其合并为一个for循环,即编写方式。
database.Find(&Issues)
redmineIssue := []string{}
gitlabissues := []string{}
for _, issue := range Issues {
redmineIssue = append(redmineIssue, issue.RedmineIssue)
gitlabissues = append(gitlabissues, issue.GitlabIssue)
}
但这假设Issues
是一个数组。哪个与您的其余问题不符。根据您对Issues
的定义,尽管如此,您发布的代码甚至无法编译。因此,我也不知道这段代码是否也适合您。
您可以通过预分配数组来提供另一种微优化:
database.Find(&Issues)
redmineIssue := make([]string{}, 0, len(Issues))
gitlabissues := make([]string{}, 0, len(Issues))