搜索结构数组

I have a struct defined like this :

type Issues struct {
    RedmineIssue string
    GitlabIssue string
}

Then I get the list from the DB

    database.Find(&Issues)

Then I have another array

   redmineIssues []redmine.Issue

Is there any way to search issues in my array Issues that are also in the array redmineIssues base on field RedmineIssue ( string ) ?


Today here is what I'm doing

    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)
    }

Then I can compare with another array I have

for _, issueR := range IssueFromRedmineWS {
    inArray, _ := in_array(issueR.Id, redmineIssue)
    if !inArray {
        // The issue is not in the DB
    }
}

Any idea on how to optimize this and to make it cleaner?

A for loop is the right way to go. Assuming the code you pasted actually works, you can merge those into a single for loop, the way you have it written.

database.Find(&Issues)
redmineIssue := []string{}
gitlabissues := []string{}
for _, issue := range Issues {
    redmineIssue = append(redmineIssue, issue.RedmineIssue)
    gitlabissues = append(gitlabissues, issue.GitlabIssue)
}

But this assumes that Issues is an array. Which doesn't match the rest of your question. According to your stated definition of Issues, the code you posted won't even compile, though. So I don't know if this code will work for you, either.

You can provide another micro-optimization by pre-allocating the arrays:

database.Find(&Issues)
redmineIssue := make([]string{}, 0, len(Issues))
gitlabissues := make([]string{}, 0, len(Issues))