https://github.com/hongjungwan/go-goroutine-panic-recover
π
’π
π
π
π
π
β‘ v.1.0.1
https://github.com/hongjungwan/go-goroutine-panic-recover
channel go panic recover
Last synced: 4 months ago
JSON representation
π ’π π π π π β‘ v.1.0.1
- Host: GitHub
- URL: https://github.com/hongjungwan/go-goroutine-panic-recover
- Owner: HongJungWan
- License: mit
- Created: 2024-08-24T02:14:17.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-26T10:34:03.000Z (about 1 year ago)
- Last Synced: 2025-01-22T12:45:02.614Z (9 months ago)
- Topics: channel, go, panic, recover
- Language: Go
- Homepage:
- Size: 270 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# safego
[](https://golang.org)

## π μ λ§λ€μλκ° ?
Goμμ κ³ λ£¨ν΄ λ΄μμ panicμ΄ λ°μνλ©΄, μ΄ panicμ κ³ λ£¨ν΄μ μμ±ν λΆλͺ¨ ν¨μλ‘ μ νλμ§ μμ΅λλ€.
λΆλͺ¨ ν¨μμ recover λ‘μ§μ΄ μ‘΄μ¬ν΄λ κ³ λ£¨ν΄ λ΄μμ λ°μν panicμ μ‘μ§ λͺ»νκ³ νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’ λ£λ©λλ€.
μ΄λ¬ν νμμ΄ λ°μνλ μ΄μ λ κ³ λ£¨ν΄ λ΄μμ panicμ΄ λ°μν κ²½μ°, panicking μνκ° λΆλͺ¨ κ³ λ£¨ν΄μ μ νλμ§ μκΈ° λλ¬Έμ λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
κ° κ³ λ£¨ν΄λ§λ€ panicμ κ°λ³μ μΌλ‘ μ²λ¦¬νκ³ μ μ ν 볡ꡬνλ©΄ λ©λλ€.
νμ§λ§, κ³ λ£¨ν΄λ§λ€ recover λ‘μ§μ ꡬννλ κ²μ λ²κ±°λ‘μ΅λλ€. κ·Έλμ safego ν¨ν€μ§λ₯Ό λ§λ€μμ΅λλ€.
safego ν¨ν€μ§λ κ³ λ£¨ν΄ λ΄μμ λ°μν panicμ λΆλͺ¨ ν¨μλ‘ μμ νκ² μ λ¬ν μ μλ λ°©λ²μ μ 곡ν©λλ€.
## β ν΅μ¬ λμ μ리
μλ λ€μ΄μ΄κ·Έλ¨μ `safego.WaitGroup`μ ν΅μ¬ λμ μ리λ₯Ό μκ°μ μΌλ‘ μ€λͺ ν©λλ€.
* safego ν¨ν€μ§λ₯Ό μ¬μ©νλ©΄ panic λ°μ μ WaitGroupκ³Όμ μ°λ λ¬Έμ λ₯Ό μμ νκ² μ²λ¦¬ν μ μμ΅λλ€.
* wg.Done() νΈμΆ μ νμ λ°μνλ panic μν© λͺ¨λμμ κ³ λ£¨ν΄μ΄ μ μμ μΌλ‘ μ’ λ£λλλ‘ λ³΄μ₯ν©λλ€.
* λͺ¨λ κ³ λ£¨ν΄μ΄ μ’ λ£λ λκΉμ§ κΈ°λ€λ¦¬κ³ , λ°μν panicμ ν λ²μ μ²λ¦¬ν μ μμ΅λλ€.
## π safego μ¬μ©λ²
* SafeGo λ©μλλ μλ‘μ΄ κ³ λ£¨ν΄μ μμνκ³ , κ³ λ£¨ν΄ λ΄μμ panicμ΄ λ°μνλ©΄ μ΄λ₯Ό μ±λμ ν΅ν΄ μμ§ν©λλ€.
* Wait λ©μλλ λͺ¨λ κ³ λ£¨ν΄μ΄ μλ£λ λκΉμ§ λκΈ°νκ³ , μ±λμ ν΅ν΄ μμ§λ λͺ¨λ panicμ λ€μ panicμΌλ‘ λ°μμν΅λλ€.
* ν μ€νΈ μΌμ΄μ€λ panic λ°μ μ¬λΆμ λ°λΌ Wait λ©μλμ λμμ κ²μ¦ν©λλ€.
```go
package safegoimport (
"testing""github.com/stretchr/testify/assert"
)func TestWaitGroup_NoError_Case(t *testing.T) {
// Given
as := assert.New(t)
var wg WaitGroup// When
wg.SafeGo(func() {
// μ μμ μΌλ‘ μ€νλλ ν¨μ, ν¨λ μμ
})// Then
as.NotPanics(wg.Wait)
}func TestWaitGroup_WithPanic_Case(t *testing.T) {
// Given
as := assert.New(t)
var wg WaitGroup// When
wg.SafeGo(func() {
panic("test panic") // μ¬κΈ°μ ν¨λ λ°μ
})// Then
as.Panics(wg.Wait) // Wait νΈμΆ μ ν¨λμ΄ λ°μνλμ§ ν μ€νΈ
}
```
## βΌ μ£Όμμ¬ν
* `Done λ©μλ μ§μ νΈμΆ κΈμ§`, SafeGoλ₯Ό μ¬μ©νλ κ³ λ£¨ν΄ λ΄μμλ wg.Done()μ μ§μ νΈμΆνμ§ μλλ‘ μ£ΌμνμΈμ.
* SafeGoκ° μ΄λ₯Ό μλμΌλ‘ μ²λ¦¬νκΈ° λλ¬Έμ μ€λ³΅ νΈμΆ μ WaitGroup μΉ΄μ΄ν°κ° μλͺ» κ΄λ¦¬λ μ μμ΅λλ€.