From c6ca18ff0705150338c2b910820d18ed9124d8b9 Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Sat, 11 Jul 2015 14:51:54 -0500 Subject: [PATCH] Prefer anonymous functions with return status for defers --- cmd/dlv/main.go | 69 ++++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/cmd/dlv/main.go b/cmd/dlv/main.go index 16c75330..37309c3d 100644 --- a/cmd/dlv/main.go +++ b/cmd/dlv/main.go @@ -59,22 +59,24 @@ The goal of this tool is to provide a simple yet powerful interface for debuggin Long: `Compiles your program with optimizations disabled, starts and attaches to it, and enables you to immediately begin debugging your program.`, Run: func(cmd *cobra.Command, args []string) { - const debugname = "debug" - goBuild := exec.Command("go", "build", "-o", debugname, "-gcflags", "-N -l") - goBuild.Stderr = os.Stderr - err := goBuild.Run() - if err != nil { - os.Exit(1) - } - fp, err := filepath.Abs("./" + debugname) - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - os.Exit(1) - } + status := func() int { + const debugname = "debug" + goBuild := exec.Command("go", "build", "-o", debugname, "-gcflags", "-N -l") + goBuild.Stderr = os.Stderr + err := goBuild.Run() + if err != nil { + return 1 + } + fp, err := filepath.Abs("./" + debugname) + if err != nil { + fmt.Fprintf(os.Stderr, err.Error()) + return 1 + } + defer os.Remove(fp) - processArgs := append([]string{"./" + debugname}, args...) - status := execute(0, processArgs) - os.Remove(fp) + processArgs := append([]string{"./" + debugname}, args...) + return execute(0, processArgs) + }() os.Exit(status) }, } @@ -87,23 +89,25 @@ starts and attaches to it, and enables you to immediately begin debugging your p Long: `Compiles a test binary with optimizations disabled, starts and attaches to it, and enable you to immediately begin debugging your program.`, Run: func(cmd *cobra.Command, args []string) { - wd, err := os.Getwd() - if err != nil { - fmt.Fprintf(os.Stderr, err.Error()) - os.Exit(1) - } - base := filepath.Base(wd) - goTest := exec.Command("go", "test", "-c", "-gcflags", "-N -l") - goTest.Stderr = os.Stderr - err = goTest.Run() - if err != nil { - os.Exit(1) - } - debugname := "./" + base + ".test" - processArgs := append([]string{debugname}, args...) + status := func() int { + wd, err := os.Getwd() + if err != nil { + fmt.Fprintf(os.Stderr, err.Error()) + return 1 + } + base := filepath.Base(wd) + goTest := exec.Command("go", "test", "-c", "-gcflags", "-N -l") + goTest.Stderr = os.Stderr + err = goTest.Run() + if err != nil { + return 1 + } + debugname := "./" + base + ".test" + defer os.Remove(debugname) + processArgs := append([]string{debugname}, args...) - status := execute(0, processArgs) - os.Remove(debugname) + return execute(0, processArgs) + }() os.Exit(status) }, } @@ -138,8 +142,7 @@ func execute(attachPid int, processArgs []string) int { defer listener.Close() // Create and start a debugger server - var server service.Server - server = rpc.NewServer(&service.Config{ + server := rpc.NewServer(&service.Config{ Listener: listener, ProcessArgs: processArgs, AttachPid: attachPid,