草庐IT

go - 找到两组数据之间的匹配

coder 2024-07-09 原文

我有一个请求两组数据的函数。我想在两组数据中找到匹配项,并使用主数据集中的数据更新我们的数据库。

问题在于数据是接口(interface)类型。我的想法是遍历它们并找到一个匹配项,但我不确定是否有更好的主意。

如何在 Go 中迭代接口(interface)并在 BackfillMissingData 函数中匹配这些数据点?

这就是我目前所拥有的。

type Account struct {
    SalesForceAccountId string
}

func FindIncompleteAccounts(qExec *database.PostgresDB) interface{} {
    var salesForceAccountId string
    rows, err := qExec.Query(
        `query string`)

    if err != nil {
        log.Fatal(err)
    }

    defer rows.Close()
    var accounts []Account

    for rows.Next() {
        err := rows.Scan(&salesForceAccountId)
        if err != nil {
            log.Fatal(err)
        }
        accounts = append(accounts, Account{SalesForceAccountId: salesForceAccountId})
    }

    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }
    return accounts
}

var client = &http.Client{Timeout: 10 * time.Second}

type Payload struct {
    Companies []Companies `json:"companies"`
}

type Companies struct {
    CompanyId int `json:"companyId"`
    Properties struct {
        SalesForceAccountId struct {
            Value string `json:"value"`
        }
    }
}

func RequestCompanies() interface{} {
    url := fmt.Sprintf("external api", apiKey)

    client := http.Client{
        Timeout: time.Second * 2,
    }

    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        log.Fatal(err)
    }

    req.Header.Set("User-Agent", "fetching-companies")

    res, getErr := client.Do(req)
    if getErr != nil {
        log.Fatal(getErr)
    }

    body, readErr := ioutil.ReadAll(res.Body)
    if readErr != nil {
        log.Fatal(readErr)
    }

    companies := Payload{}

    jsonErr := json.Unmarshal([]byte(body), &companies)

    if jsonErr != nil {
        log.Fatal(err)
    }

    return companies
}

func BackfillMissingData(qExec *database.PostgresDB) error {
    companies := RequestCompanies()
    incompleteAccounts := FindIncompleteAccounts(qExec)

}

主数据集

{[{837002081 {{0012a00000IO7ToAAL}}} {837404922 {{001U000000i0xngIAA}}} {840907652 {{0012a00000Icl6gAAB}}}]}

本地数据集

[{0010B00001qY5GoRAS}]

主数据集中的第一个数字是公司 ID,我想用我的本地数据检查主数据集中的第二个项目。

最佳答案

问题是 RequestCompanies()FindIncompleteAccounts(...) 函数返回“空接口(interface)”接口(interface){},这意味着您实际上无法按原样使用这些值做任何事情。

这些方法不应返回空接口(interface),而应返回它们实际表示的结构类型(例如 []AccountPayload)或抽象操作的接口(interface)那些与您的任务相关的数据。

这样您就可以比较两个数据集中元素之间的属性(例如假设的 Account.IDPayload.Result.AccountID)并执行您的集合交集和最终更新。

关于go - 找到两组数据之间的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53103742/

有关go - 找到两组数据之间的匹配的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  3. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  4. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

  5. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  6. ruby - 匹配大写字母并用后续字母填充,直到一定的字符串长度 - 2

    我有一个驼峰式字符串,例如:JustAString。我想按照以下规则形成长度为4的字符串:抓取所有大写字母;如果超过4个大写字母,只保留前4个;如果少于4个大写字母,则将最后大写字母后的字母大写并添加字母,直到长度变为4。以下是可能发生的3种情况:ThisIsMyString将产生TIMS(大写字母);ThisIsOneVeryLongString将产生TIOV(前4个大写字母);MyString将生成MSTR(大写字母+tr大写)。我设法用这个片段解决了前两种情况:str.scan(/[A-Z]/).first(4).join但是,我不太确定如何最好地修改上面的代码片段以处理最后一种

  7. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  8. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  9. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  10. ruby-on-rails - capybara ::ElementNotFound:无法找到 xpath "/html" - 2

    我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'

随机推荐