golang 循环创建闭包 问题排查

 

 

 

    var coupus = [][2][]string{
        {
            {
                "邀请码是什么","我没有邀请码","这个邀请码我可以随便填吗","邀请码可以填他的手机号吗","没有邀请码注册不了吗",},{
                "你好,邀请码是您推荐人的会员编号,如果您没有推荐人的话,可以选择系统推荐,随意选择一个编号完成注册",{
            {
                "我要注册账号,从哪里注册","从哪注册","我没有账号得怎么弄","登录不上去呀",{
                "没有账号的会员操作时系统会自行跳到登录页面,登陆页面用户注册的字样,您可以点击这里进行注册","进入注册页面之后填写您的基本信息,填写推荐人然后完成注册注册完成之后,需要记住您的会员编号 ,每个会员只有一个,当您推广会员时下级会员需要填写的推荐码就是您的会员编号。",}
  }

要将语料加工处理

方式一:

    list = append(list,CreateCranialNerve(coupus[0][0],func(chat *model.Chat,values map[string][]string,neure string) []string {
            return coupus[0][1]
        }))
    
    list = append(list,CreateCranialNerve(coupus[1][0],neure string) []string {
            return coupus[1][1]
        }))

方式二:结果不对,调用f()的时候每次都返回coupus最后一项的[1]值

    for _,v := range coupus {
        f := func(chat *model.Chat,neure string) []string {
            return v[1]
        }
        a := CreateCranialNerve(v[0],f)
        list = append(list,a)
    }

方式二修正:把v[1]给新的变量测试可以,想法:闭包返回的是对变量v的引用,循环每次都更新的是同一个v

    for _,v := range coupus {
        rsp := v[1]
        f := func(chat *model.Chat,neure string) []string {
            return rsp
        }
        a := CreateCranialNerve(v[0],a)
    }

相关文章

什么是Go的接口? 接口可以说是一种类型,可以粗略的理解为他...
1、Golang指针 在介绍Golang指针隐式间接引用前,先简单说下...
1、概述 1.1 Protocol buffers定义 Protocol buffe...
判断文件是否存在,需要用到"os"包中的两个函数: os.Stat(...
1、编译环境 OS :Loongnix-Server Linux release 8.3 CPU指...
1、概述 Golang是一种强类型语言,虽然在代码中经常看到i:=1...