為什么說Go的函數(shù)是“一等公民”?
大家好,我是陽哥。
這期內(nèi)容給大家分享一個(gè)很有意思的概念:Go語言中的“一等公民”。
有問必答
先安利一下我的「有問必答」欄目:
這周的主題是回答這位星友的提問:如何提高工作效率?
大家有什么想聊的話題,想提的問題歡迎在評(píng)論區(qū)留言。
我每周六晚上8點(diǎn)都會(huì)在視頻號(hào)直播,回答大家的留言和星球中的提問。
什么是一等公民?
我們先來看下相關(guān)概念
A language construct is said to be a FirstClass value in that language when there are no restrictions on how it can be created and used: when the construct can be treated as a value without restrictions.
翻譯:如果對(duì)如何創(chuàng)建和使用它沒有任何限制:當(dāng)該結(jié)構(gòu)可以被視為沒有限制的值時(shí),該語言結(jié)構(gòu)被稱為該語言中的 FirstClass 值。(即”一等公民“)
FirstClass features can be stored in variables, passed as arguments to functions, created within functions and returned from functions. In dynamically typed languages, a FirstClass feature can also have its type examined at run-time.
翻譯:“一等公民”的特性是可以存儲(chǔ)在變量中,可以作為參數(shù)傳遞給函數(shù),可以在函數(shù)中創(chuàng)建并作為返回值從函數(shù)返回。
Go的函數(shù)滿足了“一等公民”的特性定義,所以說Go的函數(shù)是”一等公民“。
下面帶大家先了解下函數(shù)基本定義,然后再通過案例來論證下這些特性:
函數(shù)基本定義
- 函數(shù)名:由字母、數(shù)字、下劃線組合。注意數(shù)字不要作為開頭;
- 參數(shù):非必填??芍付▍?shù)名稱和類型,也可以使用可變參數(shù)...的寫法,接收一個(gè)切片;
- 返回值:非必填。只返回一個(gè)值時(shí)直接定義返回類型,返回多個(gè)值或者給返回值命名,這需要使用()和,進(jìn)行定義。
簡(jiǎn)單示例:
特性1:可以存儲(chǔ)在變量中
提供兩種寫法:
寫法1:定義函數(shù)類型的變量
備注:只要滿足接收兩個(gè)int?類型參數(shù)和返回一個(gè)int?類型值的函數(shù),都可以認(rèn)為是calcFoo類型的函數(shù)
寫法2:使用匿名函數(shù),賦值給變量(備注:匿名函數(shù)即沒有函數(shù)名的函數(shù),有兩種使用方式)
特性2:可以作為參數(shù)傳遞給函數(shù)
可以先定義好對(duì)應(yīng)函數(shù),也可以直接使用匿名函數(shù),然后作為參數(shù)傳遞給函數(shù)
特性3:可以在函數(shù)中創(chuàng)建并作為返回值從函數(shù)返回
這個(gè)其實(shí)就是閉包的用法?,獲取到返回來的func,然后傳入?yún)?shù),進(jìn)行操作
總結(jié)
這篇文章介紹了”一等公民“的定義和特性,并且通過案例論證了Go的函數(shù)是符合”一等公民“特性的。
可以存儲(chǔ)在變量中、可以作為參數(shù)傳遞給函數(shù)、可以在函數(shù)中創(chuàng)建并作為返回值從函數(shù)返回。
使用好這些特性,可以讓我們業(yè)務(wù)代碼更加簡(jiǎn)潔,提高代碼的健壯性和可讀性。
本文轉(zhuǎn)載自微信公眾號(hào)「程序員升職加薪之旅」,作者「王中陽Go」,可以通過以下二維碼關(guān)注。
轉(zhuǎn)載本文請(qǐng)聯(lián)系「 程序員升職加薪之旅」公眾號(hào)。