在golang裡實作類別似try catch 的異常處理機制

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。本文出自:http://golang.so/

此文介紹的並非 使用panic/recover. 因為實際使用中不建議使用panic/recover.
 但try catch finally 的編程方式 還是會經常用到的。

代碼如下:

package main
  
import (
   "fmt"
   "runtime"
   "os"
)
  
   // Try to open a file named dummy.one
   // for input. Return the error if it won't open.
func dummy1() error {
   f,err:= os.Open("dummy.one")
   if(err!=nil) {
      return err
   } else {
      f.Close()
      return nil
   }
}
  
   // Try to open a file named dummy.two
   // for input. Return the error if it won't open.
func dummy2() error {
   f,err:= os.Open("dummy.two")
   if(err!=nil) {
      return err
   } else {
      f.Close()
      return nil
   }
}
  
   // If the error value is not nil,
   // display the caller's filename and
   // calling line-number. Then, display
   // the error object. Return true
   // if the err parameter was true.
   // Otherwise, return false.
func dispErr(err error) bool {
   if(err!=nil) {
      _,file,line,_:=runtime.Caller(1)
      fmt.Fprintf(os.Stderr,"File: %s\nLine: %d\nErr: %v\n",file,line,err)
      return true
   }
   return false
}
  
func main() {
   var err error
  
      // Create an anonymous function and
      // invoke it.
      //
      // Use conditional returns to drop out
      // of the function block to simulate falling
      // out of a "try" block.
      //
   (func() {
      fmt.Println("Attempt #1")
      err=dummy1()
      if dispErr(err) { return }
  
      fmt.Println("Attempt #2")
      err=dummy2()
      if dispErr(err) { return }
   })()
  
   if(err!=nil) {
         // catch block equivalent
      fmt.Println("In 'catch' block")
   }
      // finally block equivalent
   fmt.Println("Done!")
}

具體請看原文 :http://golang.so/thread-18-1-1.html
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.