Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah maksud fungsi dalam bahasa go?

Apakah maksud fungsi dalam bahasa go?

青灯夜游
青灯夜游asal
2022-12-08 19:48:396061semak imbas

Dalam bahasa Go, fungsi ialah segmen kod (blok) tersusun yang boleh digunakan semula yang digunakan untuk melaksanakan satu fungsi khusus atau berkaitan tujuan utamanya adalah untuk meningkatkan modulariti aplikasi dan kecekapan kod Guna semula, pengurusan kod yang lebih baik, pembangunan modular. Fungsi biasanya menggunakan parameter dan nilai pulangan untuk berinteraksi dengan pemanggil, parameter menghantar data ke fungsi, mengembalikan nilai, dan fungsi menghantar data yang diproses kepada pemanggil.

Apakah maksud fungsi dalam bahasa go?

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

Fungsi ialah segmen kod yang boleh diguna semula yang teratur yang digunakan untuk melaksanakan fungsi tunggal atau berkaitan, yang boleh meningkatkan modulariti aplikasi dan kadar penggunaan semula kod.

Gambaran keseluruhan fungsi

Fungsi, fungsi, blok kod bebas yang digunakan untuk melaksanakan fungsi tertentu. Tujuan utama ialah penggunaan semula kod (penggunaan semula), pengurusan kod yang lebih baik, dan pembangunan modular. Fungsi biasanya menggunakan parameter dan mengembalikan nilai untuk berinteraksi dengan pemanggil. Parameter menghantar data ke fungsi, mengembalikan nilai, dan fungsi menghantar data yang diproses kepada pemanggil. Fungsi dalam bahasa Go dipanggil warga kelas pertama. Ini bermakna ia menyokong fungsi tertib tinggi, fungsi tanpa nama, penutupan dan ciri lain serta boleh memenuhi ciri fungsi lanjutan seperti antara muka.

Definisi fungsi

Fungsi membentuk struktur logik pelaksanaan kod Dalam bahasa Go, komposisi asas fungsi ialah: fungsi kata kunci, Fungsi nama, senarai parameter, nilai pulangan, badan fungsi dan pernyataan pulangan Setiap program mengandungi banyak fungsi, dan fungsi adalah blok kod asas.

Sintaks:

  • Definisi:

func 函数名(形参列表)(返回值类型列表) {
  函数体,通常会有return语句,返回值
}
  • panggilan :

函数名(实参列表)

Nama fungsi: Pengecam fungsi, digunakan untuk mencari fungsi dan secara dalaman ialah alamat yang menunjuk kepada kod fungsi. Senarai parameter formal: terdiri daripada pembolehubah dan jenis Senarai jenis nilai pulangan: jenis nilai pulangan berbilang perlu ditentukan. Badan fungsi: pernyataan khusus yang melaksanakan fungsi. penyataan pulangan: Penyataan nilai pulangan

Di atas ialah fungsi bernama dan tidak boleh ditakrifkan di dalam fungsi lain.

Parameter fungsi

digunakan untuk menghantar data ke fungsi apabila memanggil fungsi. Parameter sebenar, parameter sebenar. Parameter diberikan semasa memanggil. Merujuk kepada parameter dengan data sebenar tertentu. Parameter formal, parameter formal. Parameter yang digunakan semasa mentakrifkan. Ini bermakna bahawa fungsi memerlukan parameter, tetapi parameter tidak mempunyai sebarang data sebenar apabila ia ditakrifkan. Apabila memanggil, proses memberikan nilai kepada pembolehubah parameter formal menggunakan parameter sebenar berlaku, yang dipanggil lulus parameter. Semasa pelaksanaan fungsi, parameter formal mempunyai data khusus, dan parameter formal adalah bersamaan dengan pembolehubah yang diisytiharkan dalam fungsi.

Pemindahan parameter terbahagi kepada dua kaedah: pemindahan nilai dan pemindahan alamat. Apabila alamat dihantar, parameter formal perlu ditakrifkan sebagai jenis penunjuk, dan parameter alamat perlu diperoleh semasa membuat panggilan. Kod sampel:

func funcTest(p1 int, p2 *int) {
  p1++
  *p2++
  fmt.Println(p1, *p2)
}
func main() {
  var (
    a1 = 42
    a2 = 42
  )
  funcTest(a1, &a2)
  // 参数赋值过程
  fmt.Println(a1, a2)
}

Di atas akan mengeluarkan

43 43
42 43

lulus nilai, fungsi akan mendapat salinan parameter sebenar. Apabila alamat diluluskan, fungsi akan mendapat alamat parameter sebenar, supaya pengubahsuaian pembolehubah melalui alamat dalam fungsi juga akan mempengaruhi parameter sebenar.

Go menyokong rehat... bilangan parameter tidak tentu Apabila mentakrifkan, letakkan nombor tidak tentu parameter formal pada penghujung senarai parameter formal, menggunakan...Kaedah jenis, tunjuk cara:

定义:
func funcTest(op string, nums ...int) {
  fmt.Println(nums) // [4, 1, 55, 12], slice切片型数据
}
调用
funcTest("someOp", 4, 1, 55, 12)
Parameter yang diterima ialah jenis kepingan.

Nilai pulangan fungsi

Penyata pulangan digunakan untuk menjana nilai pulangan. Jenis nilai pulangan perlu ditentukan apabila fungsi ditakrifkan dan pulangan berbilang nilai disokong. Sintaks tunjuk cara:

func funcTest() (int, string) {
  return 42, "Hank"
}
Anda boleh mengisytiharkan pembolehubah yang dikembalikan apabila mentakrifkannya. Kaedah ini dipanggil pulangan, dan demonstrasinya ialah:

func funcTest() (num int, title string) {
  num = 42
  title = "Hank"
  return
}
Tidak perlu memulangkan sebarang data, hanya kembalikan terus!

Pembolehubah fungsi

Fungsi boleh dianggap sebagai jenis penunjuk khas, yang boleh disimpan dalam pembolehubah seperti jenis lain. Fungsi boleh diakses melalui pengecam fungsi dan pembolehubah Demonstrasi adalah seperti berikut:

func funcTest() {
  fmt.Println("func() type")
}
func main() {
  fmt.Printf("%T, (%v)\n", funcTest, funcTest)
  fn := funcTest
  fmt.Printf("%T, (%v)\n", fn, fn)
  funcTest()
  fn()
}
Hasil pelaksanaan:

func(), (0x48fe20)
func(), (0x48fe20)
func() type
func() type
Ia boleh dilihat bahawa pengecam fungsi adalah penunjuk kepada. fungsi. Boleh diberikan kepada pembolehubah lain.

Parameter fungsi

Fungsi juga boleh digunakan sebagai parameter fungsi lain Demonstrasi adalah seperti berikut:

func funcSuccess() {
}
func funcAsync(handle func()) {
  // 调用函数参数
  handle()
}
// 传递函数到其他函数
funcAsync(success)
Ini Sintaks untuk menggunakan fungsi panggil balik ini sangat berguna apabila berurusan dengan logik tak segerak.

Fungsi tanpa nama

boleh mentakrifkan fungsi tanpa nama. Fungsi tanpa nama boleh disimpan ke pembolehubah, diluluskan sebagai hujah, atau dipanggil serta-merta. Jika fungsi digunakan buat sementara waktu, fungsi tanpa nama adalah pilihan yang baik. Contoh sintaks:

赋值给变量
fn := func() {
}
fn()

// 作为参数
someFunc(func() {
  })

// 立即调用
func() {
  }()

Penutupan

由于匿名函数可以定义在其他函数内,同时变量的作用域为层叠的,也就是匿名函数可以会访问其所在的外层函数内的局部变量。当外层函数运行结束后,匿名函数会与其使用的外部函数的局部变量形成闭包。示例代码:

var fn func()
func outer() {
  v := 42
  fn = func() {
    v ++
    fmt.Print(v)
  }
}

outer()
fn() // 43

此例中,fn 对应的匿名函数与 outer() 的局部变量 v,就形成了闭包。

函数调用示意图

var v = "global"
func funcTest(v) {
  v = "funcTest"
  fmt.Println(v)
}
func main() {
  v := "main"
  funcTest(v)
}

代码编译期间,会将函数代码存放在内存代码区。 函数被调用时,在运行期间会在函数运行栈区开辟函数栈,内部由局部变量标识符列表(就是局部变量),上层标识符列表引用等信息。直到运行结束,此空间才会被出栈,释放。 函数内部调用了新函数,新函数的执行空间入栈,要等到新函数执行空间出栈,调用他的函数才会被出栈。 以上代码的运行逻辑图如下:

Apakah maksud fungsi dalam bahasa go?

递归调用

函数内部调用函数本身。称之为递归调用。示例代码:

func funcTest() {
  fmt.Println("run")
  funcTest()
}

定义实现递归调用函数时,通常需要定义一个出口。用来确定何时不再进行递归调用了。一旦满足条件,则调用停止。例如:

func funcTest(v) {
  fmt.Println(v, "run")
  v ++
  if v <= 10 {
    funcTest()
  }
}

典型的应用有,树状菜单的处理,遍历目录,快速排序等。 递归调用的优势是编码简单,与描述的业务逻辑保持一致。

【相关推荐:Go视频教程

Atas ialah kandungan terperinci Apakah maksud fungsi dalam bahasa go?. 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