欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解GO語言的面向對象

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

前言

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

作為集大成者的Go語言,自然不會在面向對象上面無所作為。相比較C++、Java、C#等面向對象語言而言,它的面向對象更簡單,也更容易理解。

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

下面,說所面向對象在go中的寫法:

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

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

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

type Rect struct {
 x, y int
}

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

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

這個成員函數(shù)的功能是求面積的,顯然,這個成員函數(shù)值對Rect的結構體適用,這樣就實現(xiàn)了所謂的封裝,那么,我們如何去創(chuàng)建并初始化類的實例呢

go語言提供了很多方式:

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

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

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

我們可以這么來寫:

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

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

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

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

fmt.Println("hello world")

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

總結

以上就是GO語言面向對象的全部內容,希望這篇文章的內容對大家學習或者使用GO語言能有所幫助,如果有疑問大家可以留言交流。

相關文章

  • Go語言文件操作的方法

    Go語言文件操作的方法

    這篇文章主要介紹了Go語言文件操作的方法,涉及文件的讀寫及關閉等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 構建go鏡像實現(xiàn)過程全面講解

    構建go鏡像實現(xiàn)過程全面講解

    這篇文章主要為大家介紹了構建go鏡像實現(xiàn)過程全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • gorm update傳入struct對象,零值字段不更新的解決方案

    gorm update傳入struct對象,零值字段不更新的解決方案

    這篇文章主要介紹了gorm update傳入struct對象,零值字段不更新的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 掌握GoLang Fiber路由和中間件技術進行高效Web開發(fā)

    掌握GoLang Fiber路由和中間件技術進行高效Web開發(fā)

    這篇文章主要為大家介紹了GoLang Fiber路由和中間件進行高效Web開發(fā),本文將深入探討 Fiber 中的路由細節(jié),學習如何創(chuàng)建和處理路由,深入了解使用路由參數(shù)的動態(tài)路由,并掌握在 Fiber 應用程序中實現(xiàn)中間件的藝術
    2024-01-01
  • Go的固定時長定時器和周期性時長定時器

    Go的固定時長定時器和周期性時長定時器

    本文主要介紹了Go的固定時長定時器和周期性時長定時器,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • GO語言框架快速集成日志模塊的操作方法

    GO語言框架快速集成日志模塊的操作方法

    zap是一個可以在go項目中進行快速,?結構化且分級的日志記錄包,?git?star數(shù)高達16.3k,?Git?項目地址,?在各大公司項目中被廣泛使用,這篇文章主要介紹了GO語言框架中如何快速集成日志模塊,需要的朋友可以參考下
    2022-07-07
  • 深入解析Go語言中crypto/subtle加密庫

    深入解析Go語言中crypto/subtle加密庫

    本文主要介紹了深入解析Go語言中crypto/subtle加密庫,詳細介紹crypto/subtle加密庫主要函數(shù)的用途、工作原理及實際應用,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 從零封裝Gin框架實現(xiàn)日志初始化及切割歸檔功能

    從零封裝Gin框架實現(xiàn)日志初始化及切割歸檔功能

    這篇文章主要為大家介紹了從零封裝Gin框架實現(xiàn)日志初始化及切割歸檔功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • 一文帶你了解Golang中reflect反射的常見錯誤

    一文帶你了解Golang中reflect反射的常見錯誤

    go?反射的錯誤大多數(shù)都來自于調用了一個不適合當前類型的方法,?而且,這些錯誤通常是在運行時才會暴露出來,而不是在編譯時,如果我們傳遞的類型在反射代碼中沒有被覆蓋到那么很容易就會?panic。本文就介紹一下使用?go?反射時很大概率會出現(xiàn)的錯誤,需要的可以參考一下
    2023-01-01
  • Go 面向包新提案透明文件夾必要性分析

    Go 面向包新提案透明文件夾必要性分析

    這篇文章主要為大家介紹了Go 面向包新提案,透明文件夾必要性分析,看看是否合適加進 Go 特性中,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11

最新評論