我正在尝试将字符串值与切片中的值进行比较,在我的例子中切片是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
块。现在你可以使用tag
instead of 了。tagList[i]
很多人反对使用它,但它仍然是一个选择。它还可以防止越界错误。您不需要检查
tagListLength>0
每个else if
块。第一个足以满足您的逻辑。这只是一个建议。
所以最后,要么使用foreach
golang 版本,要么将你的条件修改为i<taglistLength
,并确保你taglistLength
在正确的行初始化。
- 1 回答
- 0 关注
- 121 浏览
添加回答
举报
0/150
提交
取消