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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                Golang方法集 :每個類型都有與之關聯的方法集,這會影響到接口實現規則。 ~~~ ? 類型 T 方法集包含全部 receiver T 方法。 ? 類型 *T 方法集包含全部 receiver T + *T 方法。 ? 如類型 S 包含匿名字段 T,則 S 和 *S 方法集包含 T 方法。 ? 如類型 S 包含匿名字段 *T,則 S 和 *S 方法集包含 T + *T 方法。 ? 不管嵌入 T 或 *T,*S 方法集總是包含 T + *T 方法。 ~~~ 用實例 value 和 pointer 調用方法 (含匿名字段) 不受方法集約束,編譯器總是查找全部方法,并自動轉換 receiver 實參。 Go 語言中內部類型方法集提升的規則: 類型 T 方法集包含全部 receiver T 方法。 ~~~ package main import ( "fmt" ) type T struct { int } func (t T) test() { fmt.Println("類型 T 方法集包含全部 receiver T 方法。") } func main() { t1 := T{1} fmt.Printf("t1 is : %v\n", t1) t1.test() } ~~~ 輸出結果: ~~~ t1 is : {1} 類型 T 方法集包含全部 receiver T 方法。 ~~~ 類型 *T 方法集包含全部 receiver T + *T 方法。 ~~~ package main import ( "fmt" ) type T struct { int } func (t T) testT() { fmt.Println("類型 *T 方法集包含全部 receiver T 方法。") } func (t *T) testP() { fmt.Println("類型 *T 方法集包含全部 receiver *T 方法。") } func main() { t1 := T{1} t2 := &t1 fmt.Printf("t2 is : %v\n", t2) t2.testT() t2.testP() } ~~~ 輸出結果: ~~~ t2 is : &{1} 類型 *T 方法集包含全部 receiver T 方法。 類型 *T 方法集包含全部 receiver *T 方法。 ~~~ 給定一個結構體類型 S 和一個命名為 T 的類型,方法提升像下面規定的這樣被包含在結構體方法集中: 如類型 S 包含匿名字段 T,則 S 和 *S 方法集包含 T 方法。 這條規則說的是當我們嵌入一個類型,嵌入類型的接受者為值類型的方法將被提升,可以被外部類型的值和指針調用。 ~~~ package main import ( "fmt" ) type S struct { T } type T struct { int } func (t T) testT() { fmt.Println("如類型 S 包含匿名字段 T,則 S 和 *S 方法集包含 T 方法。") } func main() { s1 := S{T{1}} s2 := &s1 fmt.Printf("s1 is : %v\n", s1) s1.testT() fmt.Printf("s2 is : %v\n", s2) s2.testT() } ~~~ 輸出結果: ~~~ s1 is : {{1}} 如類型 S 包含匿名字段 T,則 S 和 *S 方法集包含 T 方法。 s2 is : &{{1}} 如類型 S 包含匿名字段 T,則 S 和 *S 方法集包含 T 方法。 ~~~ 如類型 S 包含匿名字段 *T,則 S 和 *S 方法集包含 T + *T 方法。 這條規則說的是當我們嵌入一個類型的指針,嵌入類型的接受者為值類型或指針類型的方法將被提升,可以被外部類型的值或者指針調用。 ~~~ package main import ( "fmt" ) type S struct { T } type T struct { int } func (t T) testT() { fmt.Println("如類型 S 包含匿名字段 *T,則 S 和 *S 方法集包含 T 方法") } func (t *T) testP() { fmt.Println("如類型 S 包含匿名字段 *T,則 S 和 *S 方法集包含 *T 方法") } func main() { s1 := S{T{1}} s2 := &s1 fmt.Printf("s1 is : %v\n", s1) s1.testT() s1.testP() fmt.Printf("s2 is : %v\n", s2) s2.testT() s2.testP() } ~~~ 輸出結果: ~~~ s1 is : {{1}} 如類型 S 包含匿名字段 *T,則 S 和 *S 方法集包含 T 方法 如類型 S 包含匿名字段 *T,則 S 和 *S 方法集包含 *T 方法 s2 is : &{{1}} 如類型 S 包含匿名字段 *T,則 S 和 *S 方法集包含 T 方法 如類型 S 包含匿名字段 *T,則 S 和 *S 方法集包含 *T 方法 ~~~
                  <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>

                              哎呀哎呀视频在线观看