<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] # 方法 方法總是綁定對象實例,并隱式的將實例作為第一實參(receiver),方法的語法如下 ~~~ func(receiver ReceiverType) funcName(parameters) (results) ~~~ * 參數receiver可重新命名.如方法中未曾使用,可省略參數名 * **參數receiver類型可以是T或*T.基類型T不能是接口或指針** * 不支持重載方法,也就是說,不能定義名字相同但是不同參數的方法 ## 給某個類型綁定函數 ~~~ type long int //面向對象,方法:某個類型綁定一個函數 func (tmp long) Add02(other long) long { return tmp + other } func main() { //定義一個變量 var a long = 2 //調用方式: 變量名.函數(所需參數) r := a.Add02(3) fmt.Println("r = ", r) } ~~~ 輸出 ~~~ r = 5 ~~~ ~~~ type Person struct { name string sex byte age int } func (tmp Person) PrintInfo() { fmt.Println("tmp = ", tmp) } func main() { p := Person{"mike", 'm', 18} p.PrintInfo() } ~~~ ~~~ type Person struct { name string sex byte age int } func (p *Person) setInfo(n string, s byte, a int) { p.name = n p.sex = s p.age = a } func main() { var p2 Person //第二個參數會轉ascii碼 (&p2).setInfo("111", 'f', 22) fmt.Println(p2) } ~~~ **調用著,指針和非指針都會自動轉換** 用實例value和pointer調用方法(含匿名字段)不受方法約束,編譯器總是查找全部方法,并自動轉換receiver實參 ## 方法的繼承 ~~~ type Person struct { name string sex byte age int } type Student struct { Person //匿名字段 id int addr string } func (p *Person) PrintInfo() { fmt.Println(*p) } func main() { s := Student{Person{"mike", 'm', 18}, 66, "111"} //繼承性 s.PrintInfo() } ~~~ 輸出 ~~~ {mike 109 18} ~~~ 子方法把父方法給繼承過來了,但是是父方法調用的 ## 方法重寫 Student也實現了一個方法,這個方法和person同名,這種叫重寫 ~~~ type Person struct { name string sex byte age int } type Student struct { Person //匿名字段 id int addr string } func (s *Student) PrintInfo() { fmt.Println(*s) } func (p *Person) PrintInfo() { fmt.Println(*p) } func main() { s := Student{Person{"mike", 'm', 18}, 66, "111"} //父類調用的 s.PrintInfo() //顯式調用 s.Person.PrintInfo() } ~~~ ## 方法值 ~~~ type Person struct { name string sex byte age int } func (p *Person) PrintInfo() { fmt.Println(*p) } func main() { p := Person{"mike", 'm', 18} //傳統調用方式 p.PrintInfo() //保存方法入口地址,不帶() PFunc := p.PrintInfo PFunc()//等價于p.PrintInfo() } ~~~ ## 方法表達式 顯示把接收者傳遞過去 ~~~ type Person struct { name string sex byte age int } func (p *Person) PrintInfo() { fmt.Println(*p) } func main() { p := Person{"mike", 'm', 18} //方法表達式,這邊沒接收者 f := (*Person).PrintInfo f(&p) //顯示把接收者傳遞過去 } ~~~
                  <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>

                              哎呀哎呀视频在线观看