[英]slice bounds out of range error and i don't have any slice variable
我在一個項目上工作,我遇到了一個錯誤,說切片范圍超出范圍,但是與該錯誤有關的行似乎不是有效變量:
bt.blockDateTime =bt.getDate(bt.getDateBlockHeader(header[10:22]))
serviceType := hex2decimal(record[56:58])
這是我使用的函數:
func(bt *Hc34) getDateBlockHeader(input string) string{
year := input[0:2]
quant:= hex2decimal(input[3:6])
hour := input[6:len(input)];
/*if err!=nil{
panic(err)
}*/
return "20" + year + bt.getQuantDate(quant) + "" + hour
}
func(bt *Hc34) getDate(date string) string{
year := date[0:4]
month := date[4:6]
day := date[6:8]
hour := date[8:10]
minute := date[10:12]
second := date[12:14]
return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second;
}
func(bt *Hc34) getQuantDate(quant int) string{
nanoDayOfYear:=strconv.FormatInt(int64(quant)*24*60*60*1000*1000*1000, 10) + "ns"
durt,err:=time.ParseDuration(nanoDayOfYear)
t := time.Date(2009, time.January, 01, 00, 0, 0, 0, time.UTC)
t=t.Add(durt)
if err!=nil{
panic(err)
}
return string(t.Month())+""+string(t.Day())
}
func hex2decimal(hexStr string) int{
integer,_:=strconv.ParseInt(hexStr,0,64)
return int(integer)
}
這是錯誤行:緊急情況:運行時錯誤:切片范圍超出范圍
goroutine 1 [running]:
github.com/bob96/hc34/beater.(*Hc34).hc34decoderfunc(0xc420238380, 0xc4202cc000, 0x2d128)
/home/hp/src/github.com/bob96/hc34/beater/hc34.go:190 +0xb60
github.com/bob96/hc34/beater.(*Hc34).hc34DataHolderfunc(0xc420238380, 0xc42016e3c0, 0x5e)
/home/hp/src/github.com/bob96/hc34/beater/hc34.go:141 +0xd3
github.com/bob96/hc34/beater.(*Hc34).Run(0xc420238380, 0xc420176000, 0xc4201760a8, 0xb)
/home/hp/src/github.com/bob96/hc34/beater/hc34.go:105 +0x109
github.com/bob96/hc34/vendor/github.com/elastic/beats/libbeat/beat.(*Beat).launch(0xc420176000, 0x9a84e8, 0x0, 0x0)
/home/hp/src/github.com/bob96/hc34/vendor/github.com/elastic/beats/libbeat/beat/beat.go:211 +0x706
github.com/bob96/hc34/vendor/github.com/elastic/beats/libbeat/beat.Run(0x9855d5, 0x4, 0x0, 0x0, 0x9a84e8, 0xc4200001a0, 0xc4200001a0)
/home/hp/src/github.com/bob96/hc34/vendor/github.com/elastic/beats/libbeat/beat/beat.go:136 +0x65
main.main()
/home/hp/src/github.com/bob96/hc34/main.go:12 +0x54
有人可以幫我嗎,這將是一個祝福!
字符串是Go語言中的一部分字符。 這就是為什么您可以對諸如record[56:58]
類的字符串進行切片的record[56:58]
。
在切片之前,您需要檢查字符串的長度,以免出現恐慌。
就像是
if len(string)<requiredLen{
return
}
a := string[requiredLen-2:requiredLen]
好吧,每當您編寫類似
x := y[a:b]
您正在有效地切片。 我建議您在對其進行任何處理之前,先檢查“標頭”和“記錄”的長度。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.