<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 方法和接收者 Go語言中的方法(Method)是一種作用于特定類型變量的函數。這種特定類型變量叫做接收者(Receiver)。接收者的概念就類似于其他語言中的this或者 self。 方法的定義格式如下: ~~~ func (接收者變量 接收者類型) 方法名(參數列表) (返回參數) { 函數體 } ~~~ 特性: ? 只能為當前包內命名類型定義方法; ? 參數 receiver 可任意命名,如方法中未曾使用 ,可省略參數名; ? 參數 receiver 類型可以是 T 或 *T。基類型 T 不能是接口或指針; ? 不支持方法重載,receiver 只是參數簽名的組成部分; ? 接收者變量:接收者中的參數變量名在命名時,官方建議使用接收者類型名的第一個小寫字母,而不是self、this之類的命名。例如,Person類型的接收者變量應該命名為 p,Connector類型的接收者變量應該命名為c等; ? 接收者類型:接收者類型和參數類似,可以是指針類型和非指針類型(編譯器自動轉換); ~~~ //Person 結構體 type Person struct { name string age int8 } //NewPerson 構造函數 func NewPerson(name string, age int8) *Person { return &Person{ name: name, age: age, } } func (p Person) Dream() { fmt.Printf("%s的夢想是學好Go語言!\n", p.name) } // 指針調用,為避免內存拷貝,通常使用該方式 func (p *Person) Running() { fmt.Printf("%s在跑步!", p.name) } func main() { p1 := NewPerson("測試", 25) p1.Dream() } ~~~ ### 指針類型接收者適用場景 ~~~ 1. 適用于對方法內部的接收器所做的改變應該對調用者可見時 2. 接收者是拷貝代價比較大的大對象 3. 保證一致性,如果有某個方法使用了指針接收者,那么其他的方法也應該使用指針接收者 ~~~ ### 匿名字段的方法 屬于結構體的匿名字段的方法可以被直接調用,就好像這些方法是屬于定義了匿名字段的結構體一樣 ~~~go type address struct { city string state string } func (a address) fullAddress() { fmt.Printf("Full address: %s, %s", a.city, a.state) } type person struct { firstName string lastName string address } func main() { p := person{ firstName: "Elon", lastName: "Musk", address: address { city: "Los Angeles", state: "California", }, } p.fullAddress() //訪問 address 結構體的 fullAddress 方法 } ~~~ ### 在非結構體上的方法 到目前為止,我們只在結構體類型上定義方法。也可以在非結構體類型上定義方法,但是有一個問題。為了在一個類型上定義一個方法,方法的接收器類型定義和方法的定義應該在同一個包中。到目前為止,我們定義的所有結構體和結構體上的方法都是在同一個`main`包中,因此它們是可以運行的 ~~~go package main func (a int) add(b int) { } func main() { } // 在上面程序中,我們嘗試把一個`add`方法添加到內置的類型`int`。這是不允許的,因為`add`方法的定義和`int`類型的定義不在同一個包中。該程序會拋出編譯錯誤`cannot define new methods on non-local type int` ~~~ 讓該程序工作的方法是為內置類型 int 創建一個類型別名,然后創建一個以該類型別名為接收器的方法。 ~~~go package main import "fmt" type myInt int func (a myInt) add(b myInt) myInt { return a + b } func main() { num1 := myInt(5) num2 := myInt(10) sum := num1.add(num2) fmt.Println("Sum is", sum) } ~~~
                  <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>

                              哎呀哎呀视频在线观看