Rumah pembangunan bahagian belakang Golang Apakah maksud fungsi dalam bahasa go?

Apakah maksud fungsi dalam bahasa go?

Dec 08, 2022 pm 07:48 PM
go golang pergi bahasa fungsi

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语句,返回值
}
Salin selepas log masuk
  • panggilan :

函数名(实参列表)
Salin selepas log masuk

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

Di atas akan mengeluarkan

43 43
42 43
Salin selepas log masuk

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)
Salin selepas log masuk
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"
}
Salin selepas log masuk
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
}
Salin selepas log masuk
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()
}
Salin selepas log masuk
Hasil pelaksanaan:

func(), (0x48fe20)
func(), (0x48fe20)
func() type
func() type
Salin selepas log masuk
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)
Salin selepas log masuk
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() {
  }()
Salin selepas log masuk

Penutupan

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

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

outer()
fn() // 43
Salin selepas log masuk

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

函数调用示意图

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

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

Apakah maksud fungsi dalam bahasa go?

递归调用

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

func funcTest() {
  fmt.Println("run")
  funcTest()
}
Salin selepas log masuk

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

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

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

【相关推荐: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 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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Bagaimana menyelesaikan masalah penukaran jenis user_id semasa menggunakan aliran redis untuk melaksanakan beratur mesej dalam bahasa Go? Apr 02, 2025 pm 04:54 PM

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apr 02, 2025 pm 05:09 PM

Apa yang perlu saya lakukan jika label struktur tersuai di Goland tidak dipaparkan? Apabila menggunakan Goland untuk Pembangunan Bahasa GO, banyak pemaju akan menghadapi tag struktur tersuai ...

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Bagaimana untuk menyelesaikan masalah kekangan jenis fungsi generik Golang yang dipadamkan secara automatik dalam vscode? Bagaimana untuk menyelesaikan masalah kekangan jenis fungsi generik Golang yang dipadamkan secara automatik dalam vscode? Apr 02, 2025 pm 02:15 PM

Penghapusan automatik Golang Generik Jenis Kekangan Jenis dalam Pengguna VSCode mungkin menghadapi masalah yang aneh ketika menulis kod Golang menggunakan vscode. Bila ...

See all articles