Teswirler (0)

Ýüklenýär...
User Avatar

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:

```go
func 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:

```go
func 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:


```go
func 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

|