2016-08-18 2 views
0

Iは同等のテストケースに主なくゼロから呼び出されたときにゼロでもパニックから回復するメインとテストの違いは?

エラー下に貼り付けられた範囲パニック

Playground、外インデックスから回復する次のコードを有しています。違いは何ですか?

type Foo struct { 
    Is []int 
} 

func main() { 
    fp := &Foo{} 
    if err := fp.Panic(); err != nil { 
     fmt.Errorf("Error: %v", err) 
    } 
    fmt.Println("ok") 
} 

func (fp *Foo) Panic() (err error) { 
    defer PanicRecovery(&err) 
    fp.Is[0] = 5 
    return nil 
} 

func PanicRecovery(err *error) { 

     if r := recover(); r != nil { 
       if _, ok := r.(runtime.Error); ok { 
      //fmt.Println("Panicing") 
        *err = r.(error) //panic(r) 
       } else { 
      *err = r.(error) 
     } 
    } 
} 

テストケース:

func TestPanic(t *testing.T) { 
    fp := &Foo{} 
    if err := fp.Panic(); err != nil { 
     t.Errorf("Panic: %v", err) 
    } 
} 

答えて

1

変更あなたの主な機能のネストされた行から:

fmt.Errorf("Error: %v", err) 

へ:

fmt.Printf("Error: %v", err) 

"Errorf"機能はdoesnのことに注意してください」何も印刷しないstdout。あなたが提供するテキストと引数を書式設定することによってエラーを作成し、単にそのエラーを返します。あなたが本当に欲しいのは"fmt.Printf"です。

関連する問題