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