loops - for循环中的索引超出范围(重复)

标签 loops for-loop go iteration

<分区>

我正在尝试将字符串值与 slice 中的值进行比较,在我的例子中, slice 是 tagsList。我必须在这个比较上做一些功能。请找到我的以下代码。

        var taglistlength = len(tagsList)
        var tagFlag bool
        var i int
        var reEmplKey string
        type saveDetails struct {
            BankID           string  `json:"bankID"`    
            LocalGradeDescr  string  `json:"localGradeDescr"`   
            RegularTemporary string  `json:"regularTemporary"`
        }
        var tagsList = make([]saveDetails, 0) 

        reEmplKey = "ID00001"
        tagsList = [{ID00001 Band 9 B PERMANENT}{ID00002 Band 8 C PERMANENT}{ID00003 Band 7 C Temporary}] 

        fmt.Println("taglistlength : ",taglistlength)
        for i = 0; i <= taglistlength; i++{ 
            fmt.Println("tagsList : ",tagsList)
            if (taglistlength == 0){
                tagFlag = true
                fmt.Println("1st condition : ",tagFlag)
            } else if (taglistlength > 0 && tagsList[i].BankID ==reEmplKey){
                tagFlag = false
                fmt.Println("2nd condition : ",tagFlag)
            } else if (taglistlength > 0 && tagsList[i].BankID !=reEmplKey){
                tagFlag = false
                fmt.Println("3rd condition : ",tagFlag)
            }else{
                fmt.Println("error")
            }
        }

        if (tagFlag == true){
         //do some operation
        }

执行此代码时出现以下错误:

    panic: runtime error: index out of range
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0x8ca606]

它在第一个循环中正确执行并在第二个时间循环中显示错误。 请在下面找到我的输出:

      taglistlength :  0
      tagsList : []
      1st condition :  true

      taglistlength :  1
      tagsList :  [{1000000 Band 9 B PERMANENT }]
      3rd condition :  false
      tagsList :  [{1000000 Band 9 B PERMANENT }]
      panic: runtime error: index out of range
      panic: runtime error: invalid memory address or nil pointer dereference

请帮我解决这个问题。我知道我犯了一些愚蠢的逻辑错误,但我无法弄清楚问题所在。如果我能得到工作代码,那将非常有帮助。

最佳答案

这个代码块中有几个错误,所以让我们开始吧:

  • 首先你需要定义你的taglistlength 再次在此行之后 tagsList = [{ID00001 Band 9 B PERMANENT}{ID00002 Band 8 C PERMANENT}{ID00003 Band 7 C Temporary}] .我相信那条线在错误的地方,因为你甚至定义了 tagList在该行之后,如果是,请编辑您的问题。

  • 正如@icza 在评论中所述,您必须做 i<taglistLength , 不是 <= .在 Go 中,数组是从 0 开始索引的,因此索引等于数组长度是越界的。

  • 如果您想安全起见,可以这样做for _,tag:= range tagsList{ ...} .这是 foreach堵塞。现在你可以使用 tag而不是 tagList[i] .许多人反对使用它,但它仍然是一种选择。它还可以防止越界错误。

  • 你不需要检查tagListLength>0在每个else if堵塞。第一个足以满足您的逻辑。 这只是一个建议。

所以最后,要么使用foreach golang 版本,或将您的条件修复为 i<taglistLength ,并确保您正在初始化 taglistLength在正确的行。

关于loops - for循环中的索引超出范围(重复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53614348/

相关文章:

java - 如何打破 Java 中的嵌套循环?

c - 程序查找字符串中最长的单词

python - 数组的for循环

int64 中 []byte 的 Golang 大小

r - 循环数据以将值 > 或 < 变量设置为 R 中的 NA

for-loop - Julia 中并行 for 循环中的数据管理

Javascript 和 for 循环不起作用

python - pandas dataframe上的for-if循环语句操作问题

go - 使用Gorm模型为可空TIMESTAMP建模的首选方法?

go - 每次请求后关闭 http2 客户端连接