我正在尝试将字符串值与切片中的值进行比较,在我的情况下,切片为 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
请帮助我解决此问题。我知道我在犯一些愚蠢的逻辑错误,但我无法弄清楚问题所在。如果我能获得工作代码,那将非常有帮助。
答案 0 :(得分:0)
此代码块中有几个错误,因此让我们开始:
首先,您需要在此行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
。