Closed. This question is not reproducible or was caused by typos。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
2年前关闭。
Improve this question
我正在尝试将字符串值与 slice 中的值进行比较,在我的情况下, slice 为 tagsList 。我必须在此比较中做一些功能。请找到我下面的代码。
在执行此代码时,出现以下错误:
它在第一个循环中正确执行,并且在第二个时间循环中显示错误。
请在下面找到我的输出:
请帮助我解决这个问题。我知道我在犯一些愚蠢的逻辑错误,但我无法弄清楚问题所在。如果我能获得工作代码,这将非常有帮助。 首先,您需要在 如@icza在评论中所述,您必须执行 如果您想安全起见,可以执行 您不需要在每个
因此,最后,请使用golang的
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
2年前关闭。
Improve this question
我正在尝试将字符串值与 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
,如果是这样,请编辑您的问题。 i<taglistLength
,而不是<=
。在Go中,数组的索引为0,因此等于数组长度的索引超出范围。 for _,tag:= range tagsList{...}
。这是一个foreach
块。现在您可以使用tag
而不是tagList[i]
。许多人反对使用它,但这仍然是一个选择。它还可以防止出现错误。 tagListLength>0
块中检查else if
。第一个足以满足您的逻辑。这只是一个建议。 因此,最后,请使用golang的
foreach
版本,或将条件固定为i<taglistLength
,并确保在正确的行上初始化taglistLength
。10-07 19:42