haonly / Go-go-go

Golang study for 카린이
2 stars 1 forks source link

[STUDY_LOG] 2021.03.09 #15

Open haonly opened 3 years ago

haonly commented 3 years ago

TITLE


CONTENTS defer와 panic()

import "fmt"

func main() { var a, b int = 10, 0 defer fmt.Println("Done")

result := a / b
fmt.Println(result) 

}

- 위의 경우 0으로 나누면서 에러가 발생하는데 `defer` 구문을 에러가 발생하는 코드 위에 선언하면 이 구문이 마지막으로 실행되고 종료됨
- 에러가 발생하는 코드 뒤에 선언하면 호출되지 않고 종료됨
- 여러 `defer` 구문이 있을 때는 지연 호출된 함수 중 제일 나중에 지연 호출한 함수가 제일 먼저 실행됨 
- 파일 입출력에 꼭 필요한 용법
```go
file, err := os.Open("test.txt")
defer file.Close()

panic(), recover()

import "fmt"

func main() { defer func() { if r := recover(); r != nil{ fmt.Println(r)

        main()
    }       
}()

var num1, num2 int
fmt.Scanln(&num1, &num2)

result := num1 / num2

fmt.Println(result)

}



---

**Additional context**
Add any other context or screenshots about the feature request here.
haonly commented 3 years ago

15. defer와 panic()

엘리베이터 코드

package main

import "fmt"

func main() {
    var people = make([]string, 3, 3)
    var name string

    for {
        fmt.Scanln(&name)
        if name == "0" {
            break
        } else {
            people = append(people, name)
        }
    }

    for _, val := range people {
        defer fmt.Println(val)
    }   
}