主頁(yè) > 知識(shí)庫(kù) > 深入理解GO語(yǔ)言的面向?qū)ο?/div>

深入理解GO語(yǔ)言的面向?qū)ο?/h1>

熱門標(biāo)簽:成都呼叫中心外呼系統(tǒng)平臺(tái) ?兓? 電銷機(jī)器人可以補(bǔ)救房產(chǎn)中介嗎 谷歌便利店地圖標(biāo)注 最短的地圖標(biāo)注 騰訊外呼系統(tǒng)價(jià)格 百度地圖標(biāo)注搜索關(guān)鍵詞 電梯外呼訪客系統(tǒng) 浙江人工智能外呼管理系統(tǒng)

前言

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

作為集大成者的Go語(yǔ)言,自然不會(huì)在面向?qū)ο笊厦鏌o(wú)所作為。相比較C++、Java、C#等面向?qū)ο笳Z(yǔ)言而言,它的面向?qū)ο蟾?jiǎn)單,也更容易理解。

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

下面,說(shuō)所面向?qū)ο笤趃o中的寫(xiě)法:

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

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

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

type Rect struct {
 x, y int
}

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

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

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

go語(yǔ)言提供了很多方式:

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

那么,一遍情況下,如果沒(méi)有指定成員變量的大小,go語(yǔ)言會(huì)默認(rèn)初始化成員變量為0,bool類型的為false。

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

我們可以這么來(lái)寫(xiě):

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

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

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

一個(gè)變量以大寫(xiě)字母開(kāi)頭則表示對(duì)其他包可見(jiàn),如果想要不可見(jiàn),那么使用小寫(xiě)字母即可,但是go語(yǔ)言中的可見(jiàn)性控制只是針對(duì)包的,并不針對(duì)類,也就是,同一個(gè)包下的類都是可見(jiàn)的。這個(gè)時(shí)候我們就可以知道了為什么輸出語(yǔ)句是這樣寫(xiě)的了吧:

fmt.Println("hello world")

因?yàn)榇撕瘮?shù)對(duì)其他包是可見(jiàn)的。

總結(jié)

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

您可能感興趣的文章:
  • Golang排列組合算法問(wèn)題之全排列實(shí)現(xiàn)方法
  • Go語(yǔ)言對(duì)字符串進(jìn)行SHA1哈希運(yùn)算的方法
  • GO語(yǔ)言運(yùn)行環(huán)境下載、安裝、配置圖文教程
  • go語(yǔ)言文件正則表達(dá)式搜索功能示例
  • Go語(yǔ)言正則表達(dá)式用法實(shí)例小結(jié)【查找、匹配、替換等】
  • Go語(yǔ)言中三種不同md5計(jì)算方式的性能比較
  • Go語(yǔ)言中反射的正確使用
  • PHP與Go語(yǔ)言之間的通信詳解
  • 利用Go語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單Ping過(guò)程的方法
  • Go語(yǔ)言如何并發(fā)超時(shí)處理詳解
  • Go語(yǔ)言實(shí)現(xiàn)的排列組合問(wèn)題實(shí)例(n個(gè)數(shù)中取m個(gè))

標(biāo)簽:宜昌 上海 七臺(tái)河 紹興 眉山 盤錦 邢臺(tái) 雅安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《深入理解GO語(yǔ)言的面向?qū)ο蟆?,本文關(guān)鍵詞  深入,理解,語(yǔ)言,的,面向,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《深入理解GO語(yǔ)言的面向?qū)ο蟆废嚓P(guān)的同類信息!
  • 本頁(yè)收集關(guān)于深入理解GO語(yǔ)言的面向?qū)ο蟮南嚓P(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章