How to Handle Errors from Goroutines via Channels in Go?

Patricia Arquette
Release: 2024-11-13 01:01:01
Original
175 people have browsed it

How to Handle Errors from Goroutines via Channels in Go?

Handling Errors from Goroutines via Channels

In Go, functions commonly return a value and an error to indicate the outcome of an operation. However, when executing such functions within goroutines and communicating results through channels, handling errors efficiently becomes crucial.

To address this, a common approach is to encapsulate both the value and the error within a custom struct. This struct is then passed through the channel, allowing the caller to retrieve both the result and any potential errors.

Consider the following code snippet:

type Result struct {
    Message string
    Error error
}

ch := make(chan Result)
Copy after login

In this example, the Result struct holds both the Message (a string) and the Error. A channel ch is created to transmit this struct between the goroutine and the caller.

When invoking the createHashedPassword function within a goroutine, the result can be sent over the channel ch using the following syntax:

go func() {
  result, err := createHashedPassword(password)
  
  //If error occurred send error
  if err != nil {
      errorResult := Result{Err:err}
      ch <- errorResult
         
  }    
}() 
Copy after login

In the receiving end of the channel, the caller can retrieve the Result struct and handle both the message and any potential errors:

result := <-ch
if result.Error != nil {
  // Handle error
} else {
  // Use result.Message
}
Copy after login

By utilizing this technique, it becomes possible to seamlessly handle errors generated within goroutines while still maintaining a clean and efficient channel-based communication mechanism.

The above is the detailed content of How to Handle Errors from Goroutines via Channels in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template