中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang的匿名函數和普通函數的區別是什么

發布時間:2023-05-10 15:42:14 來源:億速云 閱讀:109 作者:iii 欄目:開發技術

今天小編給大家分享一下golang的匿名函數和普通函數的區別是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

golang的匿名函數和普通函數的區別

匿名函數是不具名的函數,可以在不定義函數名的情況下直接使用,通常用于函數內部的局部作用域中。而普通函數則是通過定義函數名,在任何地方都可以直接調用的函數。
在 Go 中,匿名函數與普通函數有以下區別:

  • 匿名函數可以在函數內部定義,普通函數只能在包級別定義;

  • 匿名函數可以在定義后立即調用,也可以賦值給一個變量后再調用,而普通函數只能通過函數名調用;

  • 匿名函數可以訪問并修改外部變量,即閉包特性,而普通函數只能訪問參數和全局變量;

  • 匿名函數可以作為函數參數傳遞,也可以作為函數返回值,而普通函數只能作為函數參數傳遞。

例如,以下代碼使用了匿名函數:

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

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

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

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

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

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

補充:Golang的匿名函數

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

golang中的匿名函數

1.匿名函數介紹

golang支持匿名函數,如果某些函數僅想在特定位置使用一次,那么可以考慮使用匿名函數。
匿名函數也可以實現多次調用。

2.匿名函數使用方式

2.1定義時直接調用

示例代碼:

package main
import (
	"fmt"
)

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

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

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

結果:

golang的匿名函數和普通函數的區別是什么

2.2將匿名函數賦值給一個變量

示例代碼:

package main
import (
	"fmt"
)

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

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

	//通過函數變量 調用函數。
	res := add(2,3)

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

結果:

golang的匿名函數和普通函數的區別是什么

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

2.3定義全局匿名函數
package main
import (
	"fmt"
)

//匿名函數使用方式3:將函數賦值給全局變量。
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)

}

結果:

golang的匿名函數和普通函數的區別是什么

以上就是“golang的匿名函數和普通函數的區別是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰考县| 汪清县| 敖汉旗| 日喀则市| 安仁县| 施甸县| 呼和浩特市| 毕节市| 雅安市| 东丰县| 高州市| 中方县| 尉氏县| 石台县| 彝良县| 富源县| 新昌县| 商丘市| 淮阳县| 龙游县| 新密市| 当雄县| 天峻县| 通河县| 林芝县| 阿图什市| 黄平县| 卓尼县| 全州县| 贞丰县| 牙克石市| 泰兴市| 扎鲁特旗| 甘肃省| 独山县| 顺昌县| 西充县| 侯马市| 南陵县| 广东省| 门头沟区|