Perbincangan mengenai perincian penggunaan jenis fungsi dalam fungsi Golang

王林
Lepaskan: 2023-05-16 16:51:11
asal
1524 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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

result := foo(123)
Salin selepas log masuk

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)
}
Salin selepas log masuk

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))
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!