亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

GO語(yǔ)言函數(shù)介紹

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

GO的函數(shù)不支持嵌套,重載和默認(rèn)參數(shù)GO的函數(shù)支持 無(wú)需聲明變量,可變長(zhǎng)度,多返回值,匿名,閉包等GO的函數(shù)用func來(lái)聲明,且左大括號(hào){不能另起一行

一個(gè)簡(jiǎn)單的示例:

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語(yǔ)言函數(shù)參數(shù)與返回值

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

返回:通過(guò)用return 來(lái)進(jìn)行返回

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

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

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

按值傳遞與按引用傳遞

按值傳遞:是對(duì)某個(gè)變量進(jìn)行復(fù)制,不能更改原變量的值
引用傳遞:相當(dāng)于按指針傳遞,可以同時(shí)改變?cè)瓉?lái)的值,并且消耗的內(nèi)存會(huì)更少,只有4或8個(gè)字節(jié)的消耗

命名的返回值

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

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

返回空白符

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

GO語(yǔ)言函數(shù)傳遞可變長(zhǎng)度的參數(shù)

在參數(shù)后面以變量 ... type這種形式的,我們就要以判斷出這是一個(gè)可變長(zhǎng)度的參數(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的實(shí)際值是b,c,d,e,這就是一個(gè)最簡(jiǎn)單的傳遞可變長(zhǎng)度的參數(shù)的例子,更多一些演變的形式,都非常類(lèi)似

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

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

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

GO語(yǔ)言遞歸函數(shù)

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

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

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

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

相關(guān)文章

  • 聊聊Golang中很好用的viper配置模塊

    聊聊Golang中很好用的viper配置模塊

    這篇文章主要介紹了Golang中很好用的viper配置模塊用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go uuid庫(kù)的具體使用

    Go uuid庫(kù)的具體使用

    在現(xiàn)代軟件開(kāi)發(fā)中,全球唯一標(biāo)識(shí)符(UUID)在許多場(chǎng)景中發(fā)揮著重要的作用,本文主要介紹了Go uuid庫(kù)的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Go 請(qǐng)求兔子識(shí)別接口實(shí)現(xiàn)流程示例詳解

    Go 請(qǐng)求兔子識(shí)別接口實(shí)現(xiàn)流程示例詳解

    這篇文章主要為大家介紹了Go 請(qǐng)求兔子識(shí)別接口實(shí)現(xiàn)流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Golang?template?包基本原理分析

    Golang?template?包基本原理分析

    這篇文章主要為大家介紹了Golang?template?包基本原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Go?easyjson使用及反射原理

    Go?easyjson使用及反射原理

    這篇文章主要介紹了Go?easyjson使用技巧,詳細(xì)介紹了go自帶JSON庫(kù)使用的反射原理,性能相對(duì)較差,可以使用easyjson代替,需要的朋友可以參考下
    2022-04-04
  • 淺析Go 字符串指紋

    淺析Go 字符串指紋

    這篇文章主要介紹了Go 字符串指紋的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)go語(yǔ)言,感興趣的朋友可以了解下
    2020-09-09
  • golang的串行處理和并行處理區(qū)別

    golang的串行處理和并行處理區(qū)別

    golang對(duì)比其它語(yǔ)言最大的優(yōu)勢(shì)就是并行計(jì)算(一個(gè)go就能實(shí)現(xiàn)并發(fā)),工作中經(jīng)常遇到并發(fā)的場(chǎng)景, 本文主要介紹了golang的串行處理和并行處理,感興趣的可以了解一下
    2021-07-07
  • Golang字符串的拼接方法匯總

    Golang字符串的拼接方法匯總

    字符串拼接在日常開(kāi)發(fā)中是很常見(jiàn)的需求,今天我們來(lái)探討下如何用golang來(lái)實(shí)現(xiàn)字符串的拼接
    2018-10-10
  • Go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單Web服務(wù)器的方法

    Go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單Web服務(wù)器的方法

    這篇文章主要介紹了Go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單Web服務(wù)器的方法,實(shí)例分析了Web服務(wù)器的實(shí)現(xiàn)原理與相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go中time.RFC3339 時(shí)間格式化的實(shí)現(xiàn)

    Go中time.RFC3339 時(shí)間格式化的實(shí)現(xiàn)

    這篇文章主要介紹了Go中time.RFC3339 時(shí)間格式化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評(píng)論