Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rbrahul/exception
A simple utility package for exception handling with try-catch in Golang
https://github.com/rbrahul/exception
exception-handling go golang golang-library golang-package try-catch
Last synced: about 2 months ago
JSON representation
A simple utility package for exception handling with try-catch in Golang
- Host: GitHub
- URL: https://github.com/rbrahul/exception
- Owner: rbrahul
- License: mit
- Created: 2022-05-15T02:16:49.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-11-21T04:49:30.000Z (about 2 years ago)
- Last Synced: 2024-07-31T20:51:24.067Z (5 months ago)
- Topics: exception-handling, go, golang, golang-library, golang-package, try-catch
- Language: Go
- Homepage:
- Size: 105 KB
- Stars: 29
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go - exception - A simple utility package for exception handling with try-catch in Golang. (Error Handling / Search and Analytic Databases)
- awesome-go-extra - exception - catch in Golang|15|1|0|2022-05-15T02:16:49Z|2022-05-30T14:30:19Z| (Error Handling / Advanced Console UIs)
README
![Exception](gopher.png)
![Go test workflow](https://github.com/rbrahul/exception/actions/workflows/go.yaml/badge.svg)
[![Go Report Card](https://goreportcard.com/badge/github.com/rbrahul/exception)](https://goreportcard.com/report/github.com/rbrahul/exception)
[![codecov](https://codecov.io/gh/rbrahul/exception/branch/main/graph/badge.svg?token=CW54A6HWS6)](https://codecov.io/gh/rbrahul/exception)
[![Go Reference](https://pkg.go.dev/badge/github.com/rbrahul/exception.svg)](https://pkg.go.dev/github.com/rbrahul/exception)## Go Try Catch Exception Handler
By design, Go doesn't offer any mechanism for Exception handling. But Programmers from different backgrounds like Java, C++, Php can be sceptical about the decision. Exception handling with *Try Catch Finally* is well adapted in all the modern languages. To ease the pain, this library offers utility functions for Exception Handling, which will help programmers to write Go code with *Try-Catch-Finally* approach.### This is how you can throw Exception and handle within Catch:
```go
import(
e "github.com/rbrahul/exception"
)...
e.Try(func() {
data := getValue() // get me the value from Allions
if data != 100 {
e.Throw(e.AssertionError("Expected value is not same as 100"))
}
})
.Catch(e.In(e.AssertionErrorType, e.ValueErrorType), func(excep *Exception) {
fmt.Println("Message:",excep.Message)
fmt.Println("Exception Type:",excep.Type)
fmt.Println("Here is the Stack Trace:",excep.StackTrace)
})
.Catch(nil, func(excep *Exception) {
fmt.Println("I'll be executed as fallback:",excep.Message)
})
.Finally(func() {
fmt.Println("I have been executing always to clean the world!")
})
.Run()
...
```### Throwing a custom exception
You have to define a exception variable with ExceptionType.
```go
const SomethingWentWrongError e.ExceptionType = "SomethingWentWrongError"
```Now you have to initialize and throw your exception via e.New constructor. You can pass a proper error message as optional argument.
```go
e.Try(func() {
e.Throw(e.New(SomethingWentWrongError, "Something went worng!"))
})
.Catch(e.In(SomethingWentWrongError), func(excep *Exception) {
fmt.Println("Message:",excep.Message)
fmt.Println("Exception Type:",excep.Type)
})
.Finally(func() {
fmt.Println("I'm Gonna fix it!")
})
.Run()
```### You can wrap any panic with try-catch and recover it elegently
```go
e.Try(func() {
panic("I'm gonna panic but don't worry")
})
.Catch(nil, func(excep *Exception) {
fmt.Println("I knew you are gonna catch me :p", excep.Message)
})
.Run()
```