1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      go語言函數(shù)的方法 go 函數(shù) 方法

      GO語言學(xué)習(xí)系列八——GO函數(shù)(func)的聲明與使用

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

      漣源ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

      GO的函數(shù) 不支持嵌套,重載和默認(rèn)參數(shù)

      GO的函數(shù) 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等

      GO的函數(shù)用 func 來聲明,且左大括號 { 不能另起一行

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

      輸出為:

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

      返回:通過用 return 來進(jìn)行返回

      輸出為:

      上面就是一個(gè)典型的多參數(shù)傳遞與多返回值

      對例子的說明:

      按值傳遞:是對某個(gè)變量進(jìn)行復(fù)制,不能更改原變量的值

      引用傳遞:相當(dāng)于按指針傳遞,可以同時(shí)改變原來的值,并且消耗的內(nèi)存會(huì)更少,只有4或8個(gè)字節(jié)的消耗

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

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

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

      輸出為:

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

      在GO中 defer 關(guān)鍵字非常重要,相當(dāng)于面相對像中的析構(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)用

      輸出為

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

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

      本篇重點(diǎn)介紹了GO函數(shù)(func)的聲明與使用,下一篇將介紹GO的結(jié)構(gòu) struct

      淺談Go語言函數(shù)與方法的區(qū)別

      前段時(shí)間,我們實(shí)驗(yàn)室用go作為后臺(tái)開發(fā)語言開發(fā)了一個(gè)web項(xiàng)目,由于這是自己第一次使用go語言進(jìn)行開發(fā),在開發(fā)過程中,一味著追求完成任務(wù),在編碼的時(shí)候沒有太注重性能,雖然勉強(qiáng)實(shí)現(xiàn)了功能,但是對go語言的理解還是比較淺顯的。下面來談?wù)勛约簩o語言中函數(shù)與方法的理解。

      普通函數(shù):

      go函數(shù)可以返回多個(gè)值

      值傳遞: 值傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)復(fù)制一份傳遞到函數(shù)中,這樣函數(shù)中如果對參數(shù)進(jìn)行修改,將不會(huì)影響到實(shí)際參數(shù)

      引用傳遞: 引用傳遞是指在調(diào)用函數(shù)將實(shí)際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對參數(shù)進(jìn)行的修改,將影響到實(shí)際參數(shù)。

      一般來說go語言函數(shù)的 接收者(也就是形參)一般放在函數(shù)名后面 ,不能將指針類型的數(shù)據(jù)直接傳遞,也就是說函數(shù)形參如果是值類型,調(diào)用者必須使用值作為實(shí)參過來,如果函數(shù)形參是指針類型,則函數(shù)調(diào)用者需使用指針作為實(shí)參來調(diào)用。

      普通方法:

      接收者是在func關(guān)鍵字后面,而不是在函數(shù)名稱后面,接收者可以是自己定義的一個(gè)類型,這個(gè)類型可以是struct、interface,一個(gè)方法就是一個(gè)包含了接收者的函數(shù),接收者可以是命名類型或者是結(jié)構(gòu)體類型的一個(gè)值或者是一個(gè)指針。

      下面是一個(gè)例子來說明方法和函數(shù)的區(qū)別(重點(diǎn))

      go語言語法(基礎(chǔ)語法篇)

      import "workname/packetfolder"

      導(dǎo)入多個(gè)包

      方法調(diào)用 包名.函數(shù)//不是函數(shù)或結(jié)構(gòu)體所處文件或文件夾名

      packagename.Func()

      前面加個(gè)點(diǎn)表示省略調(diào)用,那么調(diào)用該模塊里面的函數(shù),可以不用寫模塊名稱了:

      當(dāng)導(dǎo)入一個(gè)包時(shí),該包下的文件里所有init()函數(shù)都會(huì)被執(zhí)行,然而,有些時(shí)候我們并不需要把整個(gè)包都導(dǎo)入進(jìn)來,僅僅是是希望它執(zhí)行init()函數(shù)而已。下劃線的作用僅僅是為了調(diào)用init()函數(shù),所以無法通過包名來調(diào)用包中的其他函數(shù)

      import _ package

      變量聲明必須要使用否則會(huì)報(bào)錯(cuò)。

      全局變量運(yùn)行聲明但不使用。

      func 函數(shù)名 (參數(shù)1,參數(shù)2,...) (返回值a 類型a, 返回值b 類型b,...)

      func 函數(shù)名 (參數(shù)1,參數(shù)2,...) (返回值類型1, 返回值類型2,...)

      func (this *結(jié)構(gòu)體名) 函數(shù)名(參數(shù) string) (返回值類型1, 返回值類型2){}

      使用大小來區(qū)分函數(shù)可見性

      大寫是public類型

      小寫是private類型

      func prifunc int{}

      func pubfunc int{}

      聲明靜態(tài)變量

      const value int

      定義變量

      var value int

      聲明一般類型、接口和結(jié)構(gòu)體

      聲明函數(shù)

      func function () int{}

      go里面所有的空值對應(yīng)如下

      通道類型

      內(nèi)建函數(shù) new 用來分配內(nèi)存,它的第一個(gè)參數(shù)是一個(gè)類型,不是一個(gè)值,它的返回值是一個(gè)指向新分配類型零值的指針

      func new(Type) *Type

      [這位博主有非常詳細(xì)的分析]

      Go 語言支持并發(fā),我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。

      goroutine 是輕量級線程,goroutine 的調(diào)度是由 Golang 運(yùn)行時(shí)進(jìn)行管理的。

      同一個(gè)程序中的所有 goroutine 共享同一個(gè)地址空間。

      語法格式如下:

      通道(channel)是用來傳遞數(shù)據(jù)的一個(gè)數(shù)據(jù)結(jié)構(gòu)。

      通道的聲明

      通道可用于兩個(gè) goroutine 之間通過傳遞一個(gè)指定類型的值來同步運(yùn)行和通訊。操作符 - 用于指定通道的方向,發(fā)送或接收。如果未指定方向,則為雙向通道。

      [這里有比較詳細(xì)的用例]

      go里面的空接口可以指代任何類型(無論是變量還是函數(shù))

      聲明空接口

      go里面的的強(qiáng)制類型轉(zhuǎn)換語法為:

      int(data)

      如果是接口類型的強(qiáng)制轉(zhuǎn)成其他類型的語法為:

      go里面的強(qiáng)制轉(zhuǎn)換是將值復(fù)制過去,所以在數(shù)據(jù)量的時(shí)候有比較高的運(yùn)行代價(jià)

      怎么樣使用Go語言中函數(shù)的參數(shù)傳遞與調(diào)用

      按值傳遞函數(shù)參數(shù),是拷貝參數(shù)的實(shí)際值到函數(shù)的形式參數(shù)的方法調(diào)用。在這種情況下,參數(shù)在函數(shù)內(nèi)變化對參數(shù)不會(huì)有影響。

      默認(rèn)情況下,Go編程語言使用調(diào)用通過值的方法來傳遞參數(shù)。在一般情況下,這意味著,在函數(shù)內(nèi)碼不能改變用來調(diào)用所述函數(shù)的參數(shù)。考慮函數(shù)swap()的定義如下。

      代碼如下:

      /* function definition to swap the values */

      func swap(int x, int y) int {

      var temp int

      temp = x /* save the value of x */

      x = y /* put y into x */

      y = temp /* put temp into y */

      return temp;

      }

      現(xiàn)在,讓我們通過使實(shí)際值作為在以下示例調(diào)用函數(shù)swap():

      代碼如下:

      package main

      import "fmt"

      func main() {

      /* local variable definition */

      var a int = 100

      var b int = 200

      fmt.Printf("Before swap, value of a : %d\n", a )

      fmt.Printf("Before swap, value of b : %d\n", b )

      /* calling a function to swap the values */

      swap(a, b)

      fmt.Printf("After swap, value of a : %d\n", a )

      fmt.Printf("After swap, value of b : %d\n", b )

      }

      func swap(x, y int) int {

      var temp int

      temp = x /* save the value of x */

      x = y /* put y into x */

      y = temp /* put temp into y */

      return temp;

      }

      讓我們把上面的代碼放在一個(gè)C文件,編譯并執(zhí)行它,它會(huì)產(chǎn)生以下結(jié)果:

      Before swap, value of a :100

      Before swap, value of b :200

      After swap, value of a :100

      After swap, value of b :200

      這表明,參數(shù)值沒有被改變,雖然它們已經(jīng)在函數(shù)內(nèi)部改變。

      通過傳遞函數(shù)參數(shù),即是拷貝參數(shù)的地址到形式參數(shù)的參考方法調(diào)用。在函數(shù)內(nèi)部,地址是訪問調(diào)用中使用的實(shí)際參數(shù)。這意味著,對參數(shù)的更改會(huì)影響傳遞的參數(shù)。

      要通過引用傳遞的值,參數(shù)的指針被傳遞給函數(shù)就像任何其他的值。所以,相應(yīng)的,需要聲明函數(shù)的參數(shù)為指針類型如下面的函數(shù)swap(),它的交換兩個(gè)整型變量的值指向它的參數(shù)。

      代碼如下:

      /* function definition to swap the values */

      func swap(x *int, y *int) {

      var temp int

      temp = *x /* save the value at address x */

      *x = *y /* put y into x */

      *y = temp /* put temp into y */

      }

      現(xiàn)在,讓我們調(diào)用函數(shù)swap()通過引用作為在下面的示例中傳遞數(shù)值:

      代碼如下:

      package main

      import "fmt"

      func main() {

      /* local variable definition */

      var a int = 100

      var b int= 200

      fmt.Printf("Before swap, value of a : %d\n", a )

      fmt.Printf("Before swap, value of b : %d\n", b )

      /* calling a function to swap the values.

      * a indicates pointer to a ie. address of variable a and

      * b indicates pointer to b ie. address of variable b.

      */

      swap(a, b)

      fmt.Printf("After swap, value of a : %d\n", a )

      fmt.Printf("After swap, value of b : %d\n", b )

      }

      func swap(x *int, y *int) {

      var temp int

      temp = *x /* save the value at address x */

      *x = *y /* put y into x */

      *y = temp /* put temp into y */

      }

      讓我們把上面的代碼放在一個(gè)C文件,編譯并執(zhí)行它,它會(huì)產(chǎn)生以下結(jié)果:

      Before swap, value of a :100

      Before swap, value of b :200

      After swap, value of a :200

      After swap, value of b :100

      這表明變化的功能以及不同于通過值調(diào)用的外部體現(xiàn)的改變不能反映函數(shù)之外。


      當(dāng)前名稱:go語言函數(shù)的方法 go 函數(shù) 方法
      網(wǎng)頁地址:http://www.ef60e0e.cn/article/hichee.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        温宿县| 陆川县| 盘山县| 保亭| 旺苍县| 临朐县| 晋江市| 安丘市| 兰西县| 怀来县| 阿拉善左旗| 大足县| 普安县| 思南县| 芷江| 湖南省| 广河县| 长宁县| 满洲里市| 旅游| 叶城县| 福鼎市| 双桥区| 平顺县| 无锡市| 垦利县| 威海市| 颍上县| 高州市| 杭州市| 怀仁县| 法库县| 都昌县| 青海省| 顺义区| 新和县| 长兴县| 手游| 温泉县| 离岛区| 丰台区|