私はスクレイプURLのGoアプリケーションを持っています。問題は、それが時々あり、このエラーがクラッシュし、リターン:これ以上のアプリケーションをクラッシュしないようにアプリケーションをクラッシュさせないように保護する代替手段を試す
294: // try our list of substitutions, if one works return it
295: func sub(str string, xs []subs, u string, p string, h string) string {
296: for _, x := range xs {
297: if strings.Contains(str, x.pattern) {
298: return strings.Replace(str, x.pattern, x.fn(u, p, h), 1)
299: }
300: }
301: return str
302:}
がどのように私は私の問題を解決することができます:ライン298上の
panic: runtime error: slice bounds out of range
goroutine 1 [running]:
main.dom6(0x187d4140, 0x8, 0x187d4179, 0x5, 0x187c0800, 0x6, 0x13, 0x83007cb)
/root/sswork.go:326 +0x6b
main.sub(0x187d4140, 0x8, 0x84464e0, 0x6, 0x6, 0x187d4140, 0x8, 0x187d4179, 0x5, 0x187c0800, ...)
/root/sswork.go:298 +0xb3
main.main()
/root/sswork.go:615 +0xccb
がこの機能ですか?
324: // the first 6 characters of the above
325: func dom6(u string, p string, d string) string {
326: return domfull(u, p, d)[0:6]
327: }
をエラーが行326であります298ではなく、このようなパニックを避けるために、スライスまたはアレイのインデックスまたはスライスを試みる前に、手動によるインデックスチェックを実行します。上記 FUNCのdom6の – icza
//最初の6つの文字(U列、P列、D列)列{ \t戻りdomfull(U、P、D)[0:6] }変化関数dom6後 –