Software Engineer | Creator
DEFER HIÇ HAÇAN ŞEÝLE ÝEŇIL BOLMADY (şonda-da kynyrak bolup biler) Yza süýşürilen çagyryşlar barada.
2 minut alar

### **Defer (Yza süýşürilen çagyryş) mehanizmi Go dilinde**
Go dilinde `defer` operatory bilen yza süýşürilen funksiýa çagyrylyşy bar. Bu esasan, resurslary (fayllary, maglumatlar bazasy bilen arabaglanyşyklary) boşatmak üçin ulanylýar. Funksiýanyň içinde birnäçe gezek `return` operatoryny ulansaňyz, defer işiňizi ýeňilleşdirer. Her `return` öňünde şol bir işi gaýtalap ýazmagyň ýerine, `defer` bilen bir gezek ýazyp, ähli `return` üçin işjeňleşdirip bilersiňiz.
Mysal üçin, aşakdaky kodda fayl bilen işlenilýär:
```gofunc main() { path := “f.txt” getFile(path)}
func getFile(path string) { f, _ := os.Open(path) defer f.Close()
s := bufio.NewScanner(f) for s.Scan() { fmt.Println(s.Text()) }}
```
Bu mysalda, `defer f.Close()` diýlip, fayl açylandan soň ony ýapmak üçin goýulýar. Bu gowy tejribe, sebäbi resurslary ulananyňdan soň, olary hökman boşatmaly. `defer` bolsa muny awtomatiki edýär.
Mundan başga-da, `defer` bilen birnäçe çagyryşy yza süýşürip bolýar, we olar ters tertipde ýerine ýetirilýär.
Mysal:
```gofunc main() { log()}
func log() { defer fmt.Println(1) defer fmt.Println(2) defer fmt.Println(3)}
```
Bu programmanyň çykyşy şeýle bolar:
```
3
2
1
```
`defer` funksiýasy yglan edilende, oňa geçirilen argumentler şol wagt hasaplanýar. Mysal:
```go
func main() { i := 1 defer prt(i)
i++ fmt.Printf(“Main func execution: %d\n”, i)}
func prt(i int) { fmt.Printf(“Deferred func call: %d\n”, i)}
```
Bu kodyň netijesi:
Main func execution: 2
Deferred func call: 1
Bu ýerde `defer` çagyrylanda, `i` 1-e deňdi. Eger soňky `i` bahasyny ulanmak isleseňiz, aşakdaky ýaly “closure” ulanyp bilersiňiz:
```gofunc main() { i := 1 defer func() { prt(i) }()
i++ fmt.Printf(“Main func execution: %d\n”, i)}
func prt(i int) { fmt.Printf(“Deferred func call: %d\n”, i)}
```
Netije:
Main func execution: 2
Deferred func call: 2
— — —
Keywords Defer Go language Resource management Function calls Closure Error handling Programming best practices File handling Memory management Go functions Hashtags #GoLang #Defer #Programming #CodeQuality #ResourceManagement #SoftwareDevelopment #FunctionCalls #ErrorHandling #GoProgramming #TechTips Turkmenche Golang, Türkmençe, Programmirleme
Подпишись на Erkin Ugur! Мы готовим кое-что грандиозное, не все так быстро, но не пропусти обновления!
https://www.youtube.com/channel/UCBTSaWdftFazyyFMcCRya0Q