<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之旅 廣告
                [TOC] >[success] ## **1:Golang面向對象思想基本介紹** 1)Golang也支 持面向對象編程(OOP),但是和傳統的面向對象編程有區別,并不是**純粹的面向對象語言**。所以我們說**Golang支持面向對象編程特性**是比較準確的 2)Golang沒有 類(class),Go語言的結構體(struct)和其它編程語言的類(class)有同等的地位,你可以理解Golang是基于struct來實現0OP特性的。 3)Golang面向對 象編程非常簡潔,去掉了傳統OOP語言的繼承、方法重載、構造函數和析構函數、隱藏的this指針等等 4)Golang仍然有 面向對象編程的繼承,封裝和多態的特性,只是實現的方式和其它0OP語言不一樣,比如繼承: Golang沒有 extends關鍵字,繼承是通過匿名字段來實現 5)Golang面向對象(OOP)很優雅,OOP本身就是語言類型系統(type system)的一部分,通過接口(interface)關聯,耦合性低,也非常靈活。后面同學們會充分體會到這個特點。也就是說在Golang中面向接口編程是非常重要的特性。 <br> <br> ### **1.1:案例演示** **養貓案例:** ![](https://img.kancloud.cn/cf/32/cf32e0a66a2478078102c016d4579668_982x720.png) <br> <br> ### **1.2:結構體和結構體變量區別和聯系** 通過:上面的案例和講解我們可以看出: 1)結構體是自定義的數據類型,代表一類事物. 2)結構體變量(實例)是具體的, 實際的,代表一個具體變量 **注意:sum就是一個具體的實例** <br> <br> ### **1.3:結構體變量在內存中的布局** ![](https://img.kancloud.cn/2f/64/2f64a2c9a0a973a7e129373929285a65_1153x720.png) <br> <br> ### **1.4:結構體聲明** ``` type Cat struct{ Name string Age ?int Color string } ``` 注意:**type和struct是關鍵字,Cat是結構體名稱(也叫結構體變量),如果結構體的名稱大寫那么可以在其他包中使用,結構體里面的部分 Name 是(字段)變量名 string是變量名的類型,如果變量名大寫,也可以在其他程序或包中使用** <br> <br> ### **1.5:字段/屬性** 基本介紹 1)從概念或叫法上看結構體字段\=屬性\=field (即授課中, 統一叫字段)案例演示 2)字段是結構體的一個組成部分,一般是基本數據類型、數組,也可是引用類型。比如我們前面定義貓結構體的Name string就是屬性 <br> <br> ### **1.6:字段/屬性注意事項** 1)如果結構體里面的也可以是,**指針**,**slice**,和map都是零值都是nil,即還沒分配空間(需要make一下) 初始值如下: ![](https://img.kancloud.cn/09/08/0908e2057d38c18645f120be8793e8ad_1238x720.png) 2)在創建一個結構體變量后,如果沒有給字段賦值,都對應一個**零值**(默認值),規則同前面講的一樣: . 布爾類型是false,數值是0,字符串是""。 數組類型的默認值和它的元素類型相關,比如score \[3\]int則為\[0, 0, 0\] **指針,slice, 和map的零值都是nil,即還沒有分配空間。** 案例演示: ![](https://img.kancloud.cn/80/3f/803f16e98d2d26f40c7b6cde45e87fe9_761x720.png) <br> <br> 3)不同結構體變量的字段是獨立,互不影響,一個結構體變量字段的更改,不影響另外一個。\[案例演示+圖(Monster\] ![](https://img.kancloud.cn/c5/c6/c5c6b2c3848b0b431dd3bc855948fbd4_1032x720.png) 上面代碼,內存示意圖,下面的示意圖是**值拷貝** ![](https://img.kancloud.cn/97/dd/97dd1c01916f18c7169eaa1c22d5b53a_1280x446.png) <br> <br> ### **1.7:創建結構體變量即使用訪問字段** 1. 第一種方式在上面已經寫過了 2. 第二種方式如下: ![](https://img.kancloud.cn/91/b8/91b882b47bddd821c619a2500b9aefba_1280x630.png) <br> 3. 第三種方式3-& var person \*Person = new (Person) ![](https://img.kancloud.cn/6a/44/6a443642a58e5f555ca2f45bc117a931_1280x645.png) 4. 第四種方式4-{} var person \*Person = &Person\[\] ![](https://img.kancloud.cn/3f/69/3f69d390ffe8a87b90259ebf07a5a9fe_1220x720.png) **說明:** 1)第3種和第4種方式返回的是結構體指針。 2)結構體指針訪問字段的標準方式應該是: (\*結 構體指針).字段名,比如 (\*person).Name = "tom" 3)但go做了一個簡化,也支持結構體指針.字段名,比如person.Name = "tom"。 更加符合程序員使用的習慣,go編譯器底層對person.Name做了轉化(\*person).Name <br> ### **1.8:匿名結構體** 在定義一些臨時數據結構等場景下還可以使用匿名結構體。 ![](https://img.kancloud.cn/e0/a7/e0a7ac299168ed98ad083b86282648fa_1280x417.png) <br> ### **1.9:結構體的細節** 1)結構體的所有字段是連續的 ![](https://img.kancloud.cn/85/44/8544129e7204bb2ce305743fae3416e0_1280x630.png) <br> 2)結構體是用戶單獨定義的類型,和其它類型進行轉換時需要有完全相同的字段名字、個數和類型) ![](https://img.kancloud.cn/05/e3/05e347d6071f94d54d9dede467cc582f_1205x720.png) <br> 3)結構體進行type重新定義(相當于取別名)golang認為是新的數據類型,**但是互相可以強轉** ![](https://img.kancloud.cn/21/5d/215d4e77eaad3e2527739bacb2e7100d_1280x622.png) 4)struct 的每個字段上,可以寫上一個tag,該tag可以通過反射機制獲取,常見的使用場景就是序列化和反序列化。 * 序列化應用場景 ![](https://img.kancloud.cn/19/15/1915a9d0fc62b75c1865da7d61b9cc38_1280x320.png) <br> * 應用案例 ![](https://img.kancloud.cn/ef/45/ef45872097f8cfc4feb19ab55534b1f4_1280x481.png)
                  <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>

                              哎呀哎呀视频在线观看