欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang的匿名函數(shù)和普通函數(shù)的區(qū)別解析

 更新時間:2023年03月28日 16:23:17   作者:Deng_Xian_Sheng  
匿名函數(shù)是不具名的函數(shù),可以在不定義函數(shù)名的情況下直接使用,通常用于函數(shù)內(nèi)部的局部作用域中,這篇文章主要介紹了golang的匿名函數(shù)和普通函數(shù)的區(qū)別,需要的朋友可以參考下

golang的匿名函數(shù)和普通函數(shù)的區(qū)別

匿名函數(shù)是不具名的函數(shù),可以在不定義函數(shù)名的情況下直接使用,通常用于函數(shù)內(nèi)部的局部作用域中。而普通函數(shù)則是通過定義函數(shù)名,在任何地方都可以直接調(diào)用的函數(shù)。
在 Go 中,匿名函數(shù)與普通函數(shù)有以下區(qū)別:

  • 匿名函數(shù)可以在函數(shù)內(nèi)部定義,普通函數(shù)只能在包級別定義;
  • 匿名函數(shù)可以在定義后立即調(diào)用,也可以賦值給一個變量后再調(diào)用,而普通函數(shù)只能通過函數(shù)名調(diào)用;
  • 匿名函數(shù)可以訪問并修改外部變量,即閉包特性,而普通函數(shù)只能訪問參數(shù)和全局變量;
  • 匿名函數(shù)可以作為函數(shù)參數(shù)傳遞,也可以作為函數(shù)返回值,而普通函數(shù)只能作為函數(shù)參數(shù)傳遞。

例如,以下代碼使用了匿名函數(shù):

package main
import "fmt"
func main() {
    func() {
        fmt.Println("Hello, World!")
    }()
}

在這個例子中,我們定義了一個匿名函數(shù),并在函數(shù)定義后立即調(diào)用。該匿名函數(shù)沒有名稱,沒有參數(shù),沒有返回值,僅僅打印 “Hello, World!”。由于該函數(shù)是在 main 函數(shù)內(nèi)部定義的,因此只能在 main 函數(shù)內(nèi)部調(diào)用,外部無法訪問。

匿名函數(shù)可以訪問并修改外部變量,即閉包特性

	s := []string{"我喜歡", "鄧文怡"}
	func(){
		s[1] = "編程"
		s = append(s, "和", "寫作")
	}()
	for _, v := range s {
		print(v, " ")
	}
	// 我喜歡 編程 和 寫作

在這個例子中,我們定義了一個字符串切片 s,包含兩個元素 “我喜歡” 和 “鄧文怡”。然后定義了一個匿名函數(shù),并在函數(shù)定義后立即調(diào)用。在該匿名函數(shù)中,我們將 s 切片的第二個元素修改為 “編程”,并將 “和” 和 “寫作” 兩個元素添加到 s 切片的末尾。最后,通過使用 range 循環(huán)遍歷 s 切片的每個元素,并將其打印出來。因此,打印輸出的結(jié)果為 “我喜歡 編程 和 寫作”。值得注意的是,由于該匿名函數(shù)是在 main 函數(shù)內(nèi)部定義的,因此只能在 main 函數(shù)內(nèi)部調(diào)用,外部無法訪問。

由于該匿名函數(shù)是在 main 函數(shù)內(nèi)部定義的,因此可以訪問和修改 s 切片。在該匿名函數(shù)定義時,它引用了變量 s,因此它形成了一個閉包,即該匿名函數(shù)“捕獲”了在其定義范圍內(nèi)聲明的變量 s。所以,在匿名函數(shù)中修改 s 切片的值也影響到了 main 函數(shù)中 s 切片的值。 這就是匿名函數(shù)的閉包特性:函數(shù)可以訪問并修改其定義范圍內(nèi)的變量。

補充:Golang的匿名函數(shù)

golang中的匿名函數(shù) golang中的匿名函數(shù)1.匿名函數(shù)介紹2.匿名函數(shù)使用方式2.1定義時直接調(diào)用2.2將匿名函數(shù)賦值給一個變量2.3定義全局匿名函數(shù)

golang中的匿名函數(shù)

1.匿名函數(shù)介紹

golang支持匿名函數(shù),如果某些函數(shù)僅想在特定位置使用一次,那么可以考慮使用匿名函數(shù)。
匿名函數(shù)也可以實現(xiàn)多次調(diào)用。

2.匿名函數(shù)使用方式

2.1定義時直接調(diào)用

示例代碼:

package main
import (
	"fmt"
)

func main() {
	fmt.Println("Hello World!");

	//匿名函數(shù)使用方式1:定義時直接調(diào)用。
	//(num1 int,num2 int),形參前不寫函數(shù)名,并在函數(shù)后直接調(diào)用。
	res := func (num1 int,num2 int) int {
		return num1 + num2
	}(2,3)

	fmt.Printf("res的值為:%v",res)
}

結(jié)果:

在這里插入圖片描述

2.2將匿名函數(shù)賦值給一個變量

示例代碼:

package main
import (
	"fmt"
)

func main() {
	fmt.Println("Hello World!");

	//匿名函數(shù)使用方式2:將匿名函數(shù)賦值給變量,使用變量調(diào)用。
	add := func (num1 int,num2 int) int {
		return num1 + num2
	}

	//通過函數(shù)變量 調(diào)用函數(shù)。
	res := add(2,3)

	fmt.Printf("add的類型為:%T,res的值為:%v",add,res)
}

結(jié)果:

在這里插入圖片描述

add的類型為 函數(shù) func(int,int) int 類型。

2.3定義全局匿名函數(shù)

package main
import (
	"fmt"
)

//匿名函數(shù)使用方式3:將函數(shù)賦值給全局變量。
var Add = func (num1 int,num2 int) int{
	return num1 + num2
}

func main() {
	fmt.Println("Hello World!");

	res := Add(2,3)
	fmt.Printf("Add全局變量的類型:%T,res的類型:%T,res的值為:%v",Add,res,res)

}

結(jié)果:

在這里插入圖片描述

到此這篇關(guān)于golang的匿名函數(shù)和普通函數(shù)的區(qū)別的文章就介紹到這了,更多相關(guān)go匿名函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go中數(shù)組傳參的幾種方式小結(jié)

    Go中數(shù)組傳參的幾種方式小結(jié)

    本文主要介紹了Go中數(shù)組傳參的幾種方式小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Golang中的內(nèi)存泄漏你真的理解了嗎

    Golang中的內(nèi)存泄漏你真的理解了嗎

    內(nèi)存泄漏是編程中常見的問題,會對程序的性能和穩(wěn)定性產(chǎn)生嚴重影響,本文將深入詳解?Golang?中的內(nèi)存泄漏的原因、檢測方法以及避免方法,希望對大家有所幫助
    2023-12-12
  • 入門學(xué)習(xí)Go的基本語法

    入門學(xué)習(xí)Go的基本語法

    這篇文章主要介紹了Go語法的基本概念,本文講解了Golang的基本知識、基礎(chǔ)語法、相關(guān)術(shù)語等,需要的朋友可以參考下,希望能幫助到你
    2021-07-07
  • go如何終止多個for select循環(huán)嵌套的方法

    go如何終止多個for select循環(huán)嵌套的方法

    當(dāng)您想從嵌套循環(huán)中中斷,從select內(nèi)部終止循環(huán)時,標記的中斷非常有用,本文主要介紹了go如何終止多個for select循環(huán)嵌套的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • go語言實現(xiàn)并發(fā)網(wǎng)絡(luò)爬蟲的示例代碼

    go語言實現(xiàn)并發(fā)網(wǎng)絡(luò)爬蟲的示例代碼

    本文主要介紹了go語言實現(xiàn)并發(fā)網(wǎng)絡(luò)爬蟲的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang時間處理工具箱now的使用詳解

    golang時間處理工具箱now的使用詳解

    這篇文章主要介紹了golang時間處理工具箱now的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用golang,感興趣的朋友可以了解下
    2021-02-02
  • Go語言內(nèi)置包的使用

    Go語言內(nèi)置包的使用

    本文主要介紹了Go語言內(nèi)置包的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Go語言的文件操作代碼匯總

    Go語言的文件操作代碼匯總

    本文給大家匯總介紹了go語言中的文件操作的代碼,包括文件的讀寫,文件的新建打開和刪除等,希望對大家學(xué)習(xí)go語言能夠有所幫助
    2018-10-10
  • Golang的循環(huán)中break和continue語句的用法講解

    Golang的循環(huán)中break和continue語句的用法講解

    這篇文章主要介紹了Golang的循環(huán)中break和continue語句的用法講解,是Go語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • OpenTelemetry-go的SDK使用方法詳解

    OpenTelemetry-go的SDK使用方法詳解

    這篇文章主要介紹了OpenTelemetry-go的SDK使用方法,OpenTelemetry幫我們實現(xiàn)了相應(yīng)語言的SDK,所以我們只需要進行調(diào)用即可,本文根據(jù)官方文檔實例講解,需要的朋友可以參考下
    2022-09-09

最新評論