Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perbincangan mengenai perincian penggunaan jenis fungsi dalam fungsi Golang

Perbincangan mengenai perincian penggunaan jenis fungsi dalam fungsi Golang

王林
王林asal
2023-05-16 16:51:111488semak imbas

Golang, sebagai bahasa pengaturcaraan moden, mempunyai beberapa ciri unik dalam reka bentuk bahasa, yang paling menonjol ialah sokongannya untuk jenis fungsi. Jenis fungsi merujuk kepada fungsi yang sendiri boleh digunakan sebagai parameter, atau yang boleh mengembalikan fungsi lain. Ciri ini menyediakan Golang dengan pendekatan pengaturcaraan yang lebih fleksibel dan pelbagai. Dalam artikel ini, kita akan menyelidiki butiran penggunaan jenis fungsi di Golang.

1. Definisi dan penggunaan jenis fungsi

Dalam Golang, jenis fungsi ialah jenis, yang ditentukan oleh jenis parameter dan jenis nilai pulangan fungsi. Sebagai contoh, takrifan jenis fungsi boleh seperti berikut:

type FuncType func(int) string

Di sini jenis fungsi ditakrifkan sebagai FuncType, yang menerima parameter int dan mengembalikan nilai jenis rentetan. Kita boleh menggunakan jenis fungsi ini untuk mentakrifkan pembolehubah fungsi:

var foo FuncType

Di sini pembolehubah bernama foo ditakrifkan melalui kata kunci var, dan jenisnya ialah FuncType. Sekarang kita boleh menetapkan fungsi yang mematuhi jenis fungsi FuncType kepada foo:

func bar(param int) string {
    return strconv.Itoa(param)
}

foo = bar

Sekarang bahawa pembolehubah foo memegang rujukan kepada fungsi bar, kita boleh terus menggunakan pembolehubah foo untuk memanggil fungsi bar:

result := foo(123)

di sini Fungsi bar akan dilaksanakan dan nilai pulangan akan disimpan dalam pembolehubah hasil.

2. Jenis fungsi sebagai parameter

Ciri penting jenis fungsi ialah ia boleh digunakan sebagai parameter fungsi. Ini membolehkan kami melepasi pelbagai jenis fungsi secara dinamik pada masa jalan mengikut keperluan. Kita boleh melihat contoh di bawah:

func add(foo FuncType, bar FuncType) {
    fmt.Println(foo(10), bar(20))
}

func multiply(value int) string {
    return strconv.Itoa(value * 2)
}

func main() {
    add(bar, multiply)
}

Fungsi tambah ditakrifkan di sini, yang menerima dua parameter fungsi yang mematuhi jenis fungsi FuncType. Dalam fungsi utama, kami memanggil fungsi tambah dengan menghantar dalam bar dan mendarabkan fungsi sebagai parameter. Dalam fungsi tambah, kami melaksanakan dua fungsi yang diluluskan dan mencetak nilai pulangannya ke konsol.

3. Penutup jenis fungsi

Satu lagi ciri penting jenis fungsi ialah ia boleh digunakan untuk membuat penutupan. Penutupan merujuk kepada menentukan fungsi lain di dalam fungsi Fungsi dalaman ini boleh mengakses pembolehubah fungsi luaran. Kita boleh membuat penutupan melalui jenis fungsi, seperti yang ditunjukkan di bawah:

func getMultiplier(multiplier int) FuncType {
    return func(value int) string {
        return strconv.Itoa(value * multiplier)
    }
}

func main() {
    timesTwo := getMultiplier(2)
    timesThree := getMultiplier(3)

    fmt.Println(timesTwo(10))
    fmt.Println(timesThree(10))
}

Fungsi getMultiplier ditakrifkan di sini, yang mengembalikan fungsi tanpa nama ini boleh mengakses pembolehubah pengganda dalam fungsi getMultiplier. Dalam fungsi utama, kami memperoleh dua fungsi tanpa nama yang berbeza dengan memanggil fungsi getMultiplier, yang masing-masing mewakili operasi darab dengan 2 dan darab dengan 3. Kita boleh terus menggunakan kedua-dua fungsi ini untuk melakukan pengiraan yang sepadan dan mendapatkan hasil darab 10 dengan 2 dan 3 masing-masing.

4. Kaedah jenis fungsi

Di Golang, jenis fungsi boleh digunakan sebagai sebahagian daripada kaedah. Kaedah ini dipanggil kaedah jenis fungsi. Ini membolehkan kami menentukan kaedah jenis fungsi tersuai dalam jenis struktur. Contohnya:

type Student struct {
    Name  string
    Grade int
}

type StudentFilter func(Student) bool

func (s StudentFilter) Filter(students []Student) []Student {
    var result []Student
    for _, student := range students {
        if s(student) {
            result = append(result, student)
        }
    }
    return result
}

Jenis fungsi bernama StudentFilter ditakrifkan di sini dan salah satu kaedahnya Penapis ditakrifkan. Kaedah ini menerima kepingan pelajar jenis dan menggunakan StudentFilter sebagai parameter untuk menapis pelajar dalam kepingan. Kita boleh memanggil kaedah jenis StudentFilter dalam keadaan jenis Student. Contohnya:

func main() {
    students := []Student{
        {"Lucas", 85},
        {"Eric", 90},
        {"Zhang", 100},
    }

    filterGrade70 := StudentFilter(func(s Student) bool {
        return s.Grade >= 70
    })

    result := filterGrade70.Filter(students)
    fmt.Println(result)
}

Di sini, fungsi jenis StudentFilter digunakan untuk menentukan penapis untuk pelajar dengan skor 70 atau ke atas, dan dalam fungsi utama, penapisan bersyarat bagi kepingan pelajar dilaksanakan dengan memanggil kaedah Penapis .

5. Butiran pelaksanaan jenis fungsi

Apabila menggunakan jenis fungsi, kita perlu memberi perhatian kepada beberapa butiran pelaksanaan. Yang pertama ialah penamaan jenis fungsi Apabila menamakan jenis fungsi, adalah disyorkan untuk menggunakan nama deskriptif, yang boleh menjadikan kod lebih jelas dan lebih mudah difahami. Kedua, terdapat parameter jenis fungsi dan nilai pulangan Parameter ini dan nilai pulangan perlu sebagai jenis yang selamat dan munasabah. Akhir sekali, terdapat susunan parameter jenis fungsi dan nilai pulangan Pesanan ini perlu mematuhi sintaks pengisytiharan fungsi Golang.

6. Ringkasan

Jenis fungsi ialah ciri yang sangat berkuasa dalam Golang Ia membolehkan kami menulis kod dengan lebih fleksibel dan pelbagai dengan menyokong fungsi merawat sebagai satu jenis. Apabila menggunakan jenis fungsi, anda perlu memberi perhatian kepada satu siri butiran seperti definisi dan penggunaan jenis fungsi, menggunakan jenis fungsi sebagai parameter fungsi, menggunakan jenis fungsi untuk membuat penutupan dan menggunakan kaedah definisi jenis fungsi. Dengan memberi perhatian dan menguasai butiran ini, kami boleh menggunakan jenis fungsi dengan lebih cekap dan membawa kemudahan yang lebih besar kepada kerja pengaturcaraan Golang kami.

Atas ialah kandungan terperinci Perbincangan mengenai perincian penggunaan jenis fungsi dalam fungsi 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
Artikel sebelumnya:pakej golang ditukar namaArtikel seterusnya:pakej golang ditukar nama