最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

GO語言函數(shù)(func)的聲明與使用詳解

 更新時間:2022年12月20日 13:18:13   作者:astarblog  
這篇文章主要介紹了GO函數(shù)(func)的聲明與使用,包括了GO語言函數(shù)聲明與使用,GO語言遞歸函數(shù),GO語言內(nèi)置函數(shù),GO語言函數(shù)defer應(yīng)用,GO語言函數(shù)可變長度參數(shù)需要的朋友可以參考下

GO語言函數(shù)介紹

GO是編譯性語言,所以函數(shù)的順序是無關(guān)緊要的,為了方便閱讀,建議入口函數(shù)main寫在最前面,其余函數(shù)按照功能需要進行排列

GO的函數(shù)不支持嵌套,重載和默認參數(shù)GO的函數(shù)支持 無需聲明變量,可變長度,多返回值,匿名,閉包等GO的函數(shù)用func來聲明,且左大括號{不能另起一行

一個簡單的示例:

package main
import "fmt"
func main(){
    fmt.Println("調(diào)用函數(shù)前。。。")
    hello()
    fmt.Println("調(diào)用函數(shù)后。。。")
}
func hello() {
    fmt.Println("調(diào)用函數(shù)中...")
}

輸出為:

調(diào)用函數(shù)前。。。
調(diào)用函數(shù)中...
調(diào)用函數(shù)后。。。

GO語言函數(shù)參數(shù)與返回值

參數(shù):可以傳0個或多個值來供自己用

返回:通過用return 來進行返回

package main
import "fmt"
func main(){
    a, b, c := 1, 2, 3
    d, e, f := test(a, b, c)
    fmt.Println(a, b, c, d, e, f)
}
func test(a int, b int, c int) (d int, e int, f int) {
    d = a + 3
    e = b + 3
    f = c + 3
    return d, e, f
}

輸出為:

1 2 3 4 5 6

上面就是一個典型的多參數(shù)傳遞與多返回值
對例子的說明:

  • 首先定義了a,b,c三個變量,并進行賦值為1,2,3
  • 調(diào)用test()函數(shù),因為預(yù)先知道這個會返回三個值,所以我們用d,e,f進行接收返回的值
  • test函數(shù)中func test(a int, b int, c int)這一段是接收傳入的參數(shù),(d int, e int, f int) {這一段是定義返回的值
  • test里,對d,e,f變量分別在a,b,c的基礎(chǔ)上加上了3,并返回
  • 打印所有變量

按值傳遞與按引用傳遞

按值傳遞:是對某個變量進行復制,不能更改原變量的值
引用傳遞:相當于按指針傳遞,可以同時改變原來的值,并且消耗的內(nèi)存會更少,只有4或8個字節(jié)的消耗

命名的返回值

在上例中,返回值(d int, e int, f int) {是進行了命名,如果不想命名可以寫成(int,int,int){,返回的結(jié)果都是一樣的,但要注意:

  • 寫成后面這種形式時,在函數(shù)內(nèi)剖,像d,e,f這些變量就不能直接使用,要先定義才能使用;
  • 返回值return d,e,f 一定要跟返回的值,前一種方式是可以不寫返回值,可以直接return
  • 在正常工作,當然是建意第一種寫法,這樣會讓代碼的可讀性更高

返回空白符

當返回了多個值,我們某些變量不想要,或?qū)嶋H用不到,我們可以使用_來補位,例如上例的返回我們可以寫成d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來舍棄掉

GO語言函數(shù)傳遞可變長度的參數(shù)

在參數(shù)后面以變量 ... type這種形式的,我們就要以判斷出這是一個可變長度的參數(shù)

package main
import "fmt"
func main(){
    ke("a", "b", "c", "d", "e")
}
func ke(a string, strs ...string) {
    fmt.Println(a)
    fmt.Println(strs)
    for _, v := range strs {
        fmt.Println(v)
    }
}

輸出為:

a
[b c d e]
b
c
d
e

在上例中,strs ...string中,strs的實際值是b,c,d,e,這就是一個最簡單的傳遞可變長度的參數(shù)的例子,更多一些演變的形式,都非常類似

GO語言函數(shù)defer 的應(yīng)用

在GO中defer關(guān)鍵字非常重要,相當于面相對像中的析構(gòu)函數(shù),也就是在某個函數(shù)執(zhí)行完成后,GO會自動這個;
如果在多層循環(huán)中函數(shù)里,都定義了defer,那么它的執(zhí)行順序是先進后出;
當某個函數(shù)出現(xiàn)嚴重錯誤時,defer也會被調(diào)用

package main
import "fmt"
func main(){
    defers("a", "b")
}
func defers(a string, b string) {
    fmt.Println(a)
    defer fmt.Println("最后調(diào)用...")
    fmt.Println(b)
}

輸出為

a
b
最后調(diào)用...

這是一個最簡單的測試了,當然還有更復雜的調(diào)用,比如調(diào)試程序時,判斷是哪個函數(shù)出了問題,完全可以根據(jù)defer打印出來的內(nèi)容來進行判斷,非??焖伲@種留給你們?nèi)崿F(xiàn)

GO語言遞歸函數(shù)

一個函數(shù)在函數(shù)體內(nèi)自己調(diào)用自己我們稱之為遞歸函數(shù),在做遞歸調(diào)用時,經(jīng)常會將內(nèi)存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調(diào)用

GO語言內(nèi)置函數(shù)

append -- 用來追加元素到數(shù)組、slice中,返回修改后的數(shù)組、slice
close -- 主要用來關(guān)閉channel delete -- 從map中刪除key對應(yīng)的value
panic -- 停止常規(guī)的goroutine (panic和recover:用來做錯誤處理)
recover -- 允許程序定義goroutine的panic動作
imag -- 返回complex的實部 (complex、real imag:用于創(chuàng)建和操作復數(shù))
real -- 返回complex的虛部 make -- 用來分配內(nèi)存,返回Type本身(只能應(yīng)用于slice, map, channel)
new -- 用來分配內(nèi)存,主要用來分配值類型,比如int、struct。返回指向Type的指針
cap -- capacity是容量的意思,用于返回某個類型的最大容量(只能用于切片和 map)
copy -- 用于復制和連接slice,返回復制的數(shù)目 len -- 來求長度,比如string、array、slice、map、channel ,返回長度
print、println -- 底層打印函數(shù),在部署環(huán)境中建議使用 fmt 包

本篇重點介紹了GO函數(shù)(func)的聲明與使用,更多關(guān)于GO語言函數(shù)知識請查看下面的相關(guān)鏈接

相關(guān)文章

  • Go 并發(fā)讀寫 sync.map 詳細

    Go 并發(fā)讀寫 sync.map 詳細

    閱讀本文你將會明確 sync.Map 和原生 map +互斥鎖/讀寫鎖之間的性能情況。標準庫 sync.Map 雖說支持并發(fā)讀寫 map,但更適用于讀多寫少的場景,因為他寫入的性能比較差,使用時要考慮清楚這一點。
    2021-10-10
  • go?doudou開發(fā)gRPC服務(wù)快速上手實現(xiàn)詳解

    go?doudou開發(fā)gRPC服務(wù)快速上手實現(xiàn)詳解

    這篇文章主要為大家介紹了go?doudou開發(fā)gRPC服務(wù)快速上手實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 詳解Go-JWT-RESTful身份認證教程

    詳解Go-JWT-RESTful身份認證教程

    這篇文章主要介紹了詳解Go-JWT-RESTful身份認證教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • golang實現(xiàn)LRU緩存淘汰算法的示例代碼

    golang實現(xiàn)LRU緩存淘汰算法的示例代碼

    這篇文章主要介紹了golang實現(xiàn)LRU緩存淘汰算法的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Go初學者踩坑之go?mod?init與自定義包的使用

    Go初學者踩坑之go?mod?init與自定義包的使用

    go?mod是go的一個模塊管理工具,用來代替?zhèn)鹘y(tǒng)的GOPATH方案,下面這篇文章主要給大家介紹了關(guān)于Go初學者踩坑之go?mod?init與自定義包的使用,需要的朋友可以參考下
    2022-10-10
  • 一文帶你了解Go語言中函數(shù)設(shè)計的實踐示例

    一文帶你了解Go語言中函數(shù)設(shè)計的實踐示例

    良好設(shè)計的函數(shù)具有清晰的職責和邏輯結(jié)構(gòu),提供準確的命名和適當?shù)膮?shù)控制,下面我們將一一描述函數(shù)設(shè)計時能夠遵循的最佳實踐,希望對大家有所幫助
    2023-06-06
  • go build 通過文件名后綴實現(xiàn)不同平臺的條件編譯操作

    go build 通過文件名后綴實現(xiàn)不同平臺的條件編譯操作

    這篇文章主要介紹了go build 通過文件名后綴實現(xiàn)不同平臺的條件編譯操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言開發(fā)k8s之Service操作解析

    Go語言開發(fā)k8s之Service操作解析

    這篇文章主要為大家介紹了Go語言開發(fā)k8s之Service操作解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Go語言中日志統(tǒng)一處理詳解

    Go語言中日志統(tǒng)一處理詳解

    在現(xiàn)代軟件開發(fā)中,日志記錄是一項至關(guān)重要的任務(wù),它不僅幫助開發(fā)人員診斷問題,還有助于監(jiān)控和維護應(yīng)用程序,本文主要來和大家聊聊日志的統(tǒng)一處理,感興趣的小伙伴可以了解下
    2024-01-01
  • Go程序性能優(yōu)化及pprof使用方法詳解

    Go程序性能優(yōu)化及pprof使用方法詳解

    這篇文章主要為大家詳細介紹了Go程序性能優(yōu)化及pprof的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論

西城区| 大丰市| 定襄县| 嵩明县| 屏南县| 巴东县| 岑溪市| 云阳县| 隆回县| 松滋市| 拉孜县| 凌云县| 手机| 河东区| 新疆| 舒兰市| 木兰县| 达日县| 新龙县| 云霄县| 怀安县| 凤山县| 渑池县| 怀集县| 土默特右旗| 绥芬河市| 罗山县| 张家港市| 个旧市| 泰兴市| 万山特区| 高碑店市| 屯门区| 黎平县| 自治县| 武安市| 义乌市| 始兴县| 宜宾市| 南涧| 保靖县|