Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang berfungsi sebagai nilai untuk mengendalikan parsing

Golang berfungsi sebagai nilai untuk mengendalikan parsing

王林
王林asal
2023-05-16 12:21:101219semak imbas

Golang ialah pilihan popular di kalangan bahasa pengaturcaraan moden Ia mempunyai sintaks yang mudah dan kecekapan pembangunan yang tinggi Ia digunakan secara meluas dalam aplikasi web, pelayan rangkaian, sistem teragih dan bidang lain. Fungsi Golang adalah salah satu ciri terasnya Di sini kita akan meneroka penggunaan dan kelebihan fungsi Golang sebagai nilai.

Fungsi Golang berfungsi sebagai nilai

Fungsi dalam Golang ialah nilai kelas pertama, yang bermaksud fungsi boleh diluluskan, dibandingkan, diberikan kepada pembolehubah, dsb. seperti nilai biasa. Jenis nilai fungsi ialah func, dan jenis fungsi termasuk jenis parameter dan jenis nilai pulangan. Sebagai contoh, kod berikut mengisytiharkan jenis fungsi yang menerima dua pembolehubah jenis int dan mengembalikan jumlahnya:

type calculator func(int, int) int

Dengan cara ini, kita boleh menentukan berbilang fungsi yang melaksanakan jenis fungsi yang sama seperti pembolehubah jenis ini, seperti sebagai:

func add(a, b int) int {
    return a + b
}

func multiply(a, b int) int {
    return a * b
}

var calc calculator

calc = add
fmt.Println(calc(1, 2))  //输出:3

calc = multiply
fmt.Println(calc(3, 5))  //输出:15

Di sini kami mengisytiharkan jenis fungsi yang dipanggil kalkulator, yang menerima dua parameter jenis int dan mengembalikan nilai jenis int. Kemudian tentukan dua fungsi yang melaksanakan jenis fungsi ini: tambah dan darab, dan tetapkan fungsi tersebut kepada pembolehubah calc masing-masing. Kita dapat melihat bahawa apabila dipanggil, calc tidak berkaitan dengan nama fungsi yang dilaksanakan sebenar, tetapi dengan jenis yang sama dengan fungsi yang ditunjukkannya Ini kerana fungsi dianggap sebagai nilai dan nama pembolehubah hanya merujuk kepada fungsi.

Kelebihan Golang berfungsi sebagai nilai

Ciri-ciri fungsi Golang sebagai nilai membawa kelebihan berikut:

1 Parameter fleksibiliti

Fungsi ialah dianggap sebagai nilai, dan fungsi boleh dihantar sebagai parameter kepada fungsi lain, yang membolehkan kombinasi fungsi yang lebih fleksibel dan cekap. Sebagai contoh, kita boleh menulis fungsi tertib lebih tinggi yang mengambil hujah fungsi dan menggunakan fungsi itu pada setiap elemen dalam kepingan.

func mapFunc(a []int, f func(int) int) []int {
    b := make([]int, len(a))
    for i, v := range a {
        b[i] = f(v)
    }
    return b
}

func double(x int) int {
    return x * 2
}

a := []int{1, 2, 3}
b := mapFunc(a, double)
fmt.Println(b)  //输出:[2 4 6]

Di sini kami mentakrifkan fungsi tertib lebih tinggi yang dipanggil mapFunc, yang mengambil dua parameter: kepingan integer dan fungsi, menggunakan fungsi itu pada setiap elemen dalam kepingan dan mengembalikan kepingan integer yang baharu. Kemudian fungsi berganda ditakrifkan, yang menggandakan nilai input. Akhir sekali, kami menghantar fungsi berganda kepada fungsi mapFunc dan mendapatkan kepingan b baharu yang elemennya ialah nilai dua kali ganda bagi setiap elemen dalam kepingan asal a. Seperti yang anda lihat, cara menggunakan fungsi sebagai nilai ini membolehkan kami menggabungkan fungsi dengan lebih fleksibel untuk mencapai fungsi yang lebih kompleks dan cekap.

2. Permudahkan kod

Ciri-ciri fungsi sebagai nilai boleh memudahkan kod dalam senario tertentu. Sebagai contoh, kita boleh mentakrifkan fungsi umum yang dipanggil invoke yang menerima fungsi sebagai parameter dan memanggil fungsi melalui refleksi.

func invoke(fn interface{}, args ...interface{}) []interface{} {
    val := reflect.ValueOf(fn)
    t := val.Type()
    in := make([]reflect.Value, len(args))
    for k, v := range args {
        in[k] = reflect.ValueOf(v)
    }
    out := val.Call(in)
    ret := make([]interface{}, len(out))
    for i, v := range out {
        ret[i] = v.Interface()
    }
    return ret
}

func add(a, b int) int {
    return a + b
}

func double(x int) int {
    return x * 2
}

fmt.Println(invoke(add, 1, 2))  //输出:[3]
fmt.Println(invoke(double, 3))  //输出:[6]

Seperti yang anda lihat, kami mentakrifkan fungsi umum yang dipanggil invoke, yang menerima fungsi sebagai parameter dan memanggil fungsi melalui mekanisme pantulan. Dengan cara ini, kita tidak perlu melaksanakan logik panggilan berasingan untuk setiap fungsi, dan boleh terus menghantar fungsi sebagai parameter kepada fungsi invoke. Pendekatan ini sangat memudahkan kod dan menjadikan pelaksanaan lebih fleksibel.

3. Laksanakan fungsi panggil balik

Ciri-ciri fungsi sebagai nilai juga boleh digunakan untuk melaksanakan fungsi panggil balik. Fungsi panggil balik merujuk kepada fungsi yang dipanggil secara automatik dengan menghantar fungsi sebagai parameter apabila peristiwa tertentu berlaku. Sebagai contoh, kita boleh mentakrifkan fungsi lelaran yang dinamakan untukSetiap yang secara automatik memanggil fungsi panggil balik yang diluluskan apabila nilai tertentu ditemui semasa lelarannya.

type callback func(int)

func forEach(a []int, f callback) {
    for _, v := range a {
        if v == 0 {
            f(v)
        }
    }
}

func printZero(x int) {
    fmt.Printf("Found zero: %d
", x)
}

a := []int{1, 0, 3, 0, 5}
forEach(a, printZero)  //输出:Found zero: 0 Found zero: 0

Di sini kami mentakrifkan fungsi berulang yang dipanggil forEach, yang menerima dua parameter: kepingan integer dan fungsi panggil balik. Semasa lelaran, jika 0 ditemui, fungsi panggil balik yang diluluskan f dipanggil secara automatik dan 0 diluluskan sebagai parameter kepada fungsi panggil balik. Kemudian fungsi panggil balik bernama printZero ditakrifkan, yang akan mengeluarkan 0 yang ditemui apabila dipanggil. Akhir sekali, kami menghantar slice a dan fungsi panggil balik printZero kepada fungsi forEach, yang secara automatik melintasi keseluruhan kepingan dan secara automatik memanggil fungsi panggil balik apabila 0 ditemui.

Ringkasan

Ciri-ciri Golang berfungsi sebagai nilai meningkatkan fleksibiliti dan kebolehbacaan kod dan memastikan kod fungsi tidak dikelilingi dalam ruang namanya sendiri. Pendekatan ini membolehkan cara pengaturcaraan berorientasikan objek yang lebih baik, membolehkan kami menganggap fungsi sebagai ketulan bebas dan dengan itu mengarangnya dengan mudah. Jika digunakan dengan betul, pendekatan ini boleh memudahkan kod menjadi keadaan yang lebih mudah dibaca. Oleh itu, ciri fungsi sebagai nilai di Golang adalah salah satu alat penting untuk membangunkan kod yang cekap dan teratur.

Atas ialah kandungan terperinci Golang berfungsi sebagai nilai untuk mengendalikan parsing. 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:Cara program dalam golangArtikel seterusnya:Cara program dalam golang