Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penerokaan amalan terbaik fungsi dan penutupan tanpa nama golang

Penerokaan amalan terbaik fungsi dan penutupan tanpa nama golang

WBOY
WBOYasal
2024-05-02 12:33:02691semak imbas

Dalam Go, fungsi dan penutupan tanpa nama ialah alat yang berkuasa untuk bekerja dengan fungsi dan mengikut amalan terbaik boleh meningkatkan kualiti kod anda. Fungsi tanpa nama harus disimpan ringkas, elakkan daripada menangkap pembolehubah luaran dan menggunakan parameter pembolehubah. Penutupan harus mengehadkan penangkapan pembolehubah bebas dan mengelakkan pengubahsuaian pembolehubah bebas Jika sejumlah besar pembolehubah bebas ditangkap, fungsi yang dinamakan boleh digunakan untuk meningkatkan kebolehbacaan.

Penerokaan amalan terbaik fungsi dan penutupan tanpa nama golang

Amalan Terbaik untuk Fungsi dan Penutupan Tanpa Nama di Golang

Di Golang, fungsi dan penutupan tanpa nama ialah alat yang berkuasa apabila berfungsi dengan fungsi. Mengikuti amalan terbaik meningkatkan kebolehbacaan kod, kebolehselenggaraan dan prestasi.

Fungsi Tanpa Nama

Fungsi tanpa nama ialah fungsi tanpa nama, biasanya digunakan sebagai panggilan balik atau operasi sekali sahaja.

Gunakan amalan terbaik:

  • Pastikan ia mudah: Fungsi tanpa nama hendaklah pendek dan melaksanakan satu tugasan.
  • Elakkan menangkap pembolehubah luaran: Menangkap pembolehubah luaran dengan fungsi tanpa nama mewujudkan penutupan, yang mungkin membawa kepada tingkah laku yang tidak dijangka.
  • Gunakan parameter pembolehubah: Menangkap semua parameter yang tinggal dengan ... memberikan fleksibiliti. . (pembolehubah diisytiharkan di luar fungsi tetapi boleh diakses di dalam fungsi). ... 捕获所有剩余参数可以提供灵活性。

实战案例:

下面的匿名函数将文件行数计数传递给 ioutil.ReadDir 函数:

import (
    "fmt"
    "io/ioutil"
)

func main() {
    numLines := func(path string) int {
        bytes, err := ioutil.ReadFile(path)
        if err != nil {
            return 0
        }
        return len(bytes)
    }
    entries, _ := ioutil.ReadDir(".")
    for _, entry := range entries {
        fmt.Println(numLines(entry.Name()))
    }
}

闭包

闭包是一种包含自由变量(在函数外部声明但可以在函数内部访问的变量)的函数。

遵循最佳实践:

  • 限制自由变量: 捕获尽可能少的自由变量,以避免不必要的耦合。
  • 避免修改自由变量: 修改自由变量可能产生意外后果。
  • 使用命名函数: 如果闭包需要捕获大量自由变量,请考虑使用命名函数来改善可读性。

实战案例:

下面的闭包使用 count

Ikuti amalan terbaik: 🎜🎜🎜🎜Hadkan pembolehubah bebas: 🎜 Tangkap sesedikit mungkin pembolehubah bebas untuk mengelakkan gandingan yang tidak perlu. 🎜🎜🎜Elakkan mengubah suai pembolehubah bebas: 🎜 Mengubah suai pembolehubah bebas boleh mendatangkan akibat yang tidak diingini. 🎜🎜🎜Gunakan fungsi bernama: 🎜 Jika penutupan perlu menangkap sejumlah besar pembolehubah bebas, pertimbangkan untuk menggunakan fungsi bernama untuk meningkatkan kebolehbacaan. 🎜🎜🎜Kes praktikal: 🎜🎜🎜Penutupan berikut menggunakan pembolehubah count untuk menjejaki bilangan panggilan fungsi: 🎜
func createCounter() func() int {
    count := 0
    return func() int {
        count++
        return count
    }
}

func main() {
    counter := createCounter()
    fmt.Println(counter()) // 1
    fmt.Println(counter()) // 2
    fmt.Println(counter()) // 3
}

Atas ialah kandungan terperinci Penerokaan amalan terbaik fungsi dan penutupan tanpa nama golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn