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

                # 2.6 組合 go支持組合,即一種結構體包含另外一個結構體。在一些語言中,這叫混入類或者特性。語言總是不能實現簡明的組合機制。在java中: ```java public class Person { private String name; public String getName() { return this.name; } } public class Saiyan { // 這表明`Saiyan`有一個`person` private Person person; // 可以使用`person`調用方法 public String getName() { return this.person.getName(); } ... } ``` 這樣語法太繁瑣了。每個`Person`的方法在`Saiyan`中都被復寫一遍。go避免這樣繁瑣的方式: ```go type Person struct { Name string } func (p *Person) Introduce() { fmt.Printf("Hi, I'm %s\n", p.Name) } type Saiyan struct { *Person Power int } // 使用: goku := &Saiyan{ Person: &Person{"Goku"}, Power: 9001, } goku.Introduce() ``` 結構體`Saiyan`有一個字段時`*Persion`類型。因此我們沒有明確的給它一個字段名,我們可以間接的使用這個組合類型的字段和方法。然而,go編譯器給會給該字段一個名字,認為這是完全有效的。 ```go goku := &Saiyan{ Person: &Person{"Goku"}, } fmt.Println(goku.Name) fmt.Println(goku.Person.Name) ``` 上面代碼都將打印`Goku`。 組合優于繼承嗎?很多人都認為組合是一種更健壯的共享代碼的方式。當你使用繼承,你的類將和你的超類緊耦合,并且你最終更關注繼承,而不是行為。 ## 2.6.1 重載 雖然重載不是針對結構體,但是也值得提及。簡單來說,go不支持重載。因此你會看見(和寫)很多函數諸如`Load`、`LoadById`和 `LoadByName`等等。 然而,因為匿名組合只是一個編譯技巧,我們能“重寫”一個組合類型的方法。例如,我們的結構體`Saiyan`可以定義自己的`Introduce`方法: ```go func (s *Saiyan) Introduce() { fmt.Printf("Hi, I'm %s. Ya!\n", s.Name) } ``` 這種組合版本總是可以通過`s.Person.Introduce()`調用`Introduce()`方法。 ## 鏈接
                  <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>

                              哎呀哎呀视频在线观看