<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] >[success] ## **1:基本介紹** 在某些情況下,我們要需要聲明(定義)方法。比如Person結構體:除了有一些字段外( 年齡,姓名.),Person結構體還有一些行為比如:可以說話、跑步..通過學習,還可以做算術題。這時就要用方法才能完成。 Golang中的方法是**作用在指定的數據類型上**?的(即:和**指定的數據類型綁定**),因此**自定義類型,都可以有方法**,而不僅僅是struct >[success] ## **2:方法聲明和調用** ``` Type A struct{ Num int } func (a A)test(){ fmt.Println(a.Num) } ``` **上面語法說明:** 1)func(a.A)test(){} 表示A結構體有一個方法,方法名為test 2)(a A)體現test方法是和A類型綁定的 <br> ### **2.1:案例演示** ![](https://img.kancloud.cn/45/48/454816ee9236d161726db03c9375eac3_1047x720.png) <br> **上面代碼總結** 1)test方法和Person類型綁定 2)test方法只能通過Person類型的變量來調用,而不能直接調用,也不能使用其他變量來調用 ### **2.2:方法快速入門** 1)給Person結構體添加speak方法輸出xxx是一個好人 ![](https://img.kancloud.cn/38/e8/38e86094d36a6ea6f1186e03f8a652d7_1280x643.png) <br> 2)給Person結構體添加sum方法,可以計算從1+..+1000的結果 ![](https://img.kancloud.cn/0d/e3/0de3be8c71a4e93693f953f3cb6e575c_1095x720.png) <br> 3)給Person結構體jisuan2方法,該方法可以接收一個數n,計算從1+....+n的結 ![](https://img.kancloud.cn/70/d6/70d6ddc61def3c754d26bbd4ecb8d23c_1204x720.png) <br> 4)給Person結構體添加getSum方法,可以計算兩個數的和,并返回結果。 ![](https://img.kancloud.cn/4c/ff/4cff9e870b139ec472911dfa25974787_1280x707.png) >[success] ## **3:方法調用和傳參機制** **方法的調用和傳參機制原理: (重要! )** 說明:方法的調用和傳參機制和函數基本一樣,不一樣的地方是方法調用時,會將調用方法的變量,當做實參也傳遞給方法。下面我們舉例說明: **案例1:** 畫出前面getsum方法的執行過程+說明 ![](https://img.kancloud.cn/71/82/7182d3d27826eeb5a0d304df75769207_1280x534.png) <br> <br> **說明:** 1)在通過一個變量去調用方式時,其調用機制和函數一樣 2)不一樣的地方時,變量調用方法時,該變量本身也會作為一個參數傳遞到方法(如果變量是值類型,則進行值拷貝,如果變量是引用類型,則進行地址拷貝) **案例2:** 請編寫一個程序,要求如下: 1)聲明一個結構體Circle,字段為radius 2)聲明一個方法area和Circle綁定, 可以返回面積。 3)提示:畫出area執行過程+說明 ![](https://img.kancloud.cn/97/0b/970b8f05a49d7fa1ae440968406b6ddd_1032x720.png) >[success] ## **4:方法的定義** ### **4.1:理解1:** ![](https://img.kancloud.cn/27/42/27423f933b1db3a91cc8951f1fd1a33a_1280x222.png) 1)參數列表:表示方法輸入 2)recevier type :表示這個方法和type這個類型進行綁定,或者說該方法作用于type類型 3)receiver type : type可以是結構體,也可以其它的自定義類型 4)receiver :就是type類型的一個變量(實例),比如: Person結構體 的一個變量(實例 5)參數列表:表示方法輸入 6)返回值列表:表示返回的值,可以多個 7)方法主體:表示為了實現某一功能代碼塊 8)return 語句不是必須的。 <br> <br> ### **4.2:理解2** ![](https://img.kancloud.cn/e7/ad/e7adc3a57112fab81b3b346ec9ea38d3_1280x143.png) 1. 接收者變量:接收者中的參數變量名在命名時,官方建議使用接收者類型名稱首字母的小寫,而不是self、this之類的命名。例如,Person類型的接收者變量應該命名為?p,Connector類型的接收者變量應該命名為c等。 2. 接收者類型:接收者類型和參數類似,可以是指針類型和非指針類型。 3. 方法名、參數列表、返回參數:具體格式與函數定義相同。 ### **4.3:方法的注意事項** 1)結構體類型是值類型,在方法調用中,遵守值類型的傳遞機制,是值拷貝傳遞方式 2)如程序員希望在方法中,修改結構體變量的值,可以通過結構體指針的方式來處理 3)Golang中 的方法作用在指定的數據類型上的(即:和指定的數據類型綁定),因此自定義類型,都可以有方法,而不僅僅是struct,比如int , float32等都可以有方法 ![](https://img.kancloud.cn/57/59/57592f1295cbf05bf425158e9a93a461_1280x550.png) 4)**方法的訪問范圍控制的規則,和函數一樣。方法名首字母小寫,只能在本包訪問,方法首字母大寫,可以在本包和其它包訪問。[講解]** 5)如果一個變量實現了String()這個方法,那么fmt.Println默認會調用這個變量的String()進行輸出 ![](https://img.kancloud.cn/11/dc/11dc070ae176d6f846890e4266ca5bd7_1280x609.png) <br> <br> ### **4.4:方法和接收者** ![](https://img.kancloud.cn/40/dd/40dda3629aeec69ca93bf465f5a53125_1280x657.png) <br> <br> **案例如下:** ![](https://img.kancloud.cn/b4/0b/b40b4c86a4152c6593e9cb4dd5c57b3a_948x720.png) <br> <br> ### **4.5:方法的練習** 1)編寫結構體(MethodUtils),編程一個方法, 方法不需要參數,在方法中打印一個10\*8的矩形,在main方 法中調用該方法 ![](https://img.kancloud.cn/75/e3/75e3c688d16658c2fa12f2bf03e8afc6_895x720.png) <br> 2)編寫一個方法,提供m和n兩個參數,方法中打印一個m\*n的矩形 ![](https://img.kancloud.cn/16/dc/16dc16b3bb49665fbf34fab52bd2b858_1233x720.png) <br> 3)編寫一個方法算該矩形的面積(可以接收長len,和寬width), 將其作為方法返回值。在main方法中調用該方法,接收返回的面積值并打印 ![](https://img.kancloud.cn/c4/a7/c4a77e1db707715cf184c13e8ec02217_1280x452.png) <br> 4)編寫一個方法,判斷一個數是奇數還是偶數 ![](https://img.kancloud.cn/0c/3a/0c3a3a5f0c0a585a4b9b0071d3924507_1280x586.png) <br> 5)編寫一個方法,傳入的參數可以進行計算 ![](https://img.kancloud.cn/0d/58/0d58851849d379372fb77a354c9d69c2_828x720.png) <br> ### **4.6:方法和函數的區別** 1)調用方式不一樣 函數的調用方式:函數名(實參列表) 方法的調用方式:變量.方法名(實參列表) 2)對于普通函數,接收者為值類型時,不能將指針類型的數據直接傳遞,反之亦然 ![](https://img.kancloud.cn/44/34/44346bc0353a6451bcd931d5fd7dbc0e_1280x625.png) <br> 3)對于方法(如struct的方法),接收者為值類型時,可以直接用指針類型的變量調用方法,反過來同樣也可以 ![](https://img.kancloud.cn/33/d1/33d18b7df6773d7caf0bc093595c1f78_1209x720.png) <br> ### **4.7:總結** ??1)不管調用形式如何,真正決定是值拷貝還是地址拷貝,看這個方法是和哪個類型綁定 2)如果是和值類型,比如(p Person).則是值拷貝,如果和指針類型,比如是(p \*Person)則是地址拷貝。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看