亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

for循環中的索引超出范圍

for循環中的索引超出范圍

Go
繁華開滿天機 2023-05-15 14:33:09
我正在嘗試將字符串值與切片中的值進行比較,在我的例子中切片是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請幫我解決這個問題。我知道我犯了一些愚蠢的邏輯錯誤,但我無法弄清楚問題所在。如果我能得到工作代碼,那將非常有幫助。
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

這個代碼塊中有幾個錯誤,所以讓我們開始吧:

  • 首先你需要在這一行之后taglistlength?再次tagsList = [{ID00001 Band 9 B PERMANENT}{ID00002 Band 8 C PERMANENT}{ID00003 Band 7 C Temporary}]定義你的。我相信該行在錯誤的位置,因為您甚至tagList在那行之后定義,如果是這樣,請編輯您的問題。

  • 您必須做i<taglistLength,而不是<=。在 Go 中,數組是從 0 開始索引的,因此等于數組長度的索引是越界的。

  • 如果您想安全起見,可以這樣做for _,tag:= range tagsList{ ...}。這是一個foreach塊?,F在你可以使用taginstead of 了。tagList[i]很多人反對使用它,但它仍然是一個選擇。它還可以防止越界錯誤。

  • 您不需要檢查tagListLength>0每個else if塊。第一個足以滿足您的邏輯。這只是一個建議。

所以最后,要么使用foreachgolang 版本,要么將你的條件修改為i<taglistLength,并確保你taglistLength在正確的行初始化。


查看完整回答
反對 回復 2023-05-15
  • 1 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號