最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解GO語言的面向?qū)ο?/h1>
 更新時間:2016年10月04日 10:44:02   作者:Summer7C  
相信很多人當初開發(fā)go語言的時候就是因為C++的特性太過于繁雜,從而使得很多C++的開發(fā)者因為C++的特性而頭疼,go語言成功的精簡了C++的特性,使其很簡潔,很少的特性,卻可以完成很多的事情。下面我們就來詳細理解下GO語言的面向?qū)ο蟆?/div>

前言

有過C++語言學習經(jīng)歷的朋友都知道,面向?qū)ο笾饕巳齻€基本特征:封裝、繼承和多態(tài)。封裝,就是指運行的數(shù)據(jù)和函數(shù)綁定在一起,C++中主要是通過this指針來完成的;繼承,就是指class之間可以相互繼承屬性和函數(shù);多態(tài),主要就是用統(tǒng)一的接口來處理通用的邏輯,每個class只需要按照接口實現(xiàn)自己的回調(diào)函數(shù)就可以了。

作為集大成者的Go語言,自然不會在面向?qū)ο笊厦鏌o所作為。相比較C++、Java、C#等面向?qū)ο笳Z言而言,它的面向?qū)ο蟾唵?,也更容易理解?/p>

go語言中并沒有像C++,Java語言中這類的Class,它只含有像C語言中的結(jié)構(gòu)體,用結(jié)構(gòu)體和指針等特性,完成一個類的作用,很巧妙的使用了指針和結(jié)構(gòu)體,不僅是go的面向?qū)ο?,包括go語言中的map等操作都是借助了結(jié)構(gòu)體。其實,說白了,C++、Java等面向?qū)ο蟮恼Z言中,類的底層實現(xiàn)就是結(jié)構(gòu)體,對象的引用就是指針,只是語言把他們封裝起來了而已。然而這使得很多人剛接觸面向?qū)ο蟮臅r候很不理解這些東西。

下面,說所面向?qū)ο笤趃o中的寫法:

如果我們要再Java中定義一個Rect,可以求其面積,我們應(yīng)該這么寫

public class Rect {
 public int x;
 public int y;
 public int Area() {
 return x*y;
 }
}

很簡單,那么Go語言中怎么做呢?Go中并不存在所謂的類,所有的類都是用結(jié)構(gòu)體表示的,所以要寫一個類,我們先得定義一個結(jié)構(gòu)體:

type Rect struct {
 x, y int
}

這是一個Rect的結(jié)構(gòu)體,那么一個類中,不僅要存在變量,還要有成員函數(shù),那么go的成員函數(shù)是這么寫的:

func (r *Rect) Area() int {
 return r.x*r.y
}

這個成員函數(shù)的功能是求面積的,顯然,這個成員函數(shù)值對Rect的結(jié)構(gòu)體適用,這樣就實現(xiàn)了所謂的封裝,那么,我們?nèi)绾稳?chuàng)建并初始化類的實例呢

go語言提供了很多方式:

rect :=new(Rect)
rect :=&Rect{}
rect :=&Rect{1,2}
rect :=&Rect{x:3,y:4}

那么,一遍情況下,如果沒有指定成員變量的大小,go語言會默認初始化成員變量為0,bool類型的為false

那么,構(gòu)造函數(shù)呢?

我們可以這么來寫:

func NewRect(x,y int) *Rect {
 return &Rect{x,y}
}

其實,這也是我們平時new一個對象時候的真正操作,只是go把他真正展現(xiàn)給我們了。

看到這里,我們似乎還有一個疑問,那就是,像java、C++中對于可見性的描述呢,go語言中不存在public等關(guān)鍵字,go語言中直接選擇用字母大小寫控制。

一個變量以大寫字母開頭則表示對其他包可見,如果想要不可見,那么使用小寫字母即可,但是go語言中的可見性控制只是針對包的,并不針對類,也就是,同一個包下的類都是可見的。這個時候我們就可以知道了為什么輸出語句是這樣寫的了吧:

fmt.Println("hello world")

因為此函數(shù)對其他包是可見的。

總結(jié)

以上就是GO語言面向?qū)ο蟮娜績?nèi)容,希望這篇文章的內(nèi)容對大家學習或者使用GO語言能有所幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Go語言標準庫flag的具體實現(xiàn)

    Go語言標準庫flag的具體實現(xiàn)

    Go語言的flag庫提供了一套簡單而強大的接口,用于解析命令行參數(shù),本文主要介紹了Go語言標準庫flag的具體實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Golang time.Sleep()用法及示例講解

    Golang time.Sleep()用法及示例講解

    Go語言中的Sleep()函數(shù)用于在至少規(guī)定的持續(xù)時間d內(nèi)停止最新的go-routine,這篇文章主要介紹了Golang time.Sleep()用法及示例講解,需要的朋友可以參考下
    2023-02-02
  • Golang請求fasthttp實踐

    Golang請求fasthttp實踐

    本文主要介紹了Golang請求fasthttp實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • go語言中的json與map相互轉(zhuǎn)換實現(xiàn)

    go語言中的json與map相互轉(zhuǎn)換實現(xiàn)

    本文主要介紹了go語言中的json與map相互轉(zhuǎn)換實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • GoLang中的加密方法小結(jié)

    GoLang中的加密方法小結(jié)

    這篇文章主要介紹了GoLang中的加密方法。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解Go語言中iota的應(yīng)用

    詳解Go語言中iota的應(yīng)用

    在本文中,小編將帶著大家深入探討?iota?的神奇力量,包括?iota?的介紹和應(yīng)用場景以及使用技巧和注意事項,準備好了嗎,準備一杯你最喜歡的飲料或茶,隨著本文一探究竟吧
    2023-07-07
  • golang常用庫之gorilla/mux-http路由庫使用詳解

    golang常用庫之gorilla/mux-http路由庫使用詳解

    這篇文章主要介紹了golang常用庫之gorilla/mux-http路由庫使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • GO實現(xiàn)跳躍表的示例詳解

    GO實現(xiàn)跳躍表的示例詳解

    跳表全稱叫做跳躍表,簡稱跳表,是一個隨機化的數(shù)據(jù)結(jié)構(gòu),實質(zhì)就是一種可以進行二分查找的有序鏈表。本文將利用GO語言編寫一個跳表,需要的可以參考一下
    2022-12-12
  • 深入解析golang編程中函數(shù)的用法

    深入解析golang編程中函數(shù)的用法

    這篇文章主要介紹了golang編程中函數(shù)的用法,是Go語言入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • Golang處理gRPC請求/響應(yīng)元數(shù)據(jù)的示例代碼

    Golang處理gRPC請求/響應(yīng)元數(shù)據(jù)的示例代碼

    前段時間實現(xiàn)內(nèi)部gRPC框架時,為了實現(xiàn)在服務(wù)端攔截器中打印請求及響應(yīng)的頭部信息,便查閱了部分關(guān)于元數(shù)據(jù)的資料,因為中文網(wǎng)絡(luò)上對于該領(lǐng)域的信息較少,于是在這做了一些簡單的總結(jié),需要的朋友可以參考下
    2024-03-03

最新評論

阿克陶县| 房产| 莱芜市| 新化县| 宣汉县| 舞钢市| 甘孜| 蛟河市| 广安市| 巴林右旗| 道真| 平潭县| 尖扎县| 深圳市| 黄龙县| 卢氏县| 松潘县| 墨江| 桦川县| 随州市| 红原县| 长武县| 莱芜市| 保康县| 凌云县| 西贡区| 鄂伦春自治旗| 酒泉市| 沁阳市| 铜鼓县| 时尚| 老河口市| 扶风县| 伊通| 丰原市| 无极县| 瓦房店市| 南昌市| 厦门市| 诸城市| 临高县|