您好,登錄后才能下訂單哦!
這篇文章的內(nèi)容主要圍繞如何分析Go語(yǔ)言的類(lèi)型系統(tǒng)進(jìn)行講述,文章內(nèi)容清晰易懂,條理清晰,非常適合新手學(xué)習(xí),值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過(guò)這篇文章有所收獲!
對(duì)于面向?qū)ο缶幊痰闹С?,Go 語(yǔ)言的實(shí)現(xiàn)可以說(shuō)是完全顛覆了以往我們對(duì)面向?qū)ο缶幊痰恼J(rèn)知,下面我們先通過(guò)對(duì) Go 語(yǔ)言類(lèi)型系統(tǒng)的介紹讓你有一個(gè)整體的認(rèn)知。
Go 語(yǔ)言面向?qū)ο缶幊淘O(shè)計(jì)得簡(jiǎn)潔而優(yōu)雅。
簡(jiǎn)潔之處在于,Go 語(yǔ)言并沒(méi)有沿襲傳統(tǒng)面向?qū)ο缶幊讨械闹T多概念,比如類(lèi)的繼承、接口的實(shí)現(xiàn)、構(gòu)造函數(shù)和析構(gòu)函數(shù)、隱藏的 this 指針等,也沒(méi)有 public、protected、private 之類(lèi)的可見(jiàn)性修飾符。
優(yōu)雅之處在于,Go 語(yǔ)言對(duì)面向?qū)ο缶幊痰闹С质钦Z(yǔ)言類(lèi)型系統(tǒng)中的天然組成部分,整個(gè)類(lèi)型系統(tǒng)通過(guò)接口串聯(lián),渾然一體。
很少有編程類(lèi)的書(shū)談及類(lèi)型系統(tǒng)這個(gè)話(huà)題,實(shí)際上類(lèi)型系統(tǒng)才是一門(mén)編程語(yǔ)言的地基,它的地位至關(guān)重要。因此,這里我們將從類(lèi)型系統(tǒng)入手介紹 Go 語(yǔ)言的面向?qū)ο缶幊烫匦浴?/p>
顧名思義,類(lèi)型系統(tǒng)是指一個(gè)語(yǔ)言的類(lèi)型體系結(jié)構(gòu)。一個(gè)典型的類(lèi)型系統(tǒng)通常包含如下基本內(nèi)容:
基礎(chǔ)類(lèi)型,如 byte
、int
、bool
、float
、string
等;
復(fù)合類(lèi)型,如數(shù)組、切片、 字典、結(jié)構(gòu)體、指針等;
可以指向任意對(duì)象的類(lèi)型(Any
類(lèi)型);
值語(yǔ)義和引用語(yǔ)義;
面向?qū)ο?,即所有具備面向?qū)ο筇卣鳎ū热绯蓡T方法)的類(lèi)型;
接口。
類(lèi)型系統(tǒng)描述的是這些內(nèi)容在一個(gè)語(yǔ)言中如何被關(guān)聯(lián)。因?yàn)?Java 語(yǔ)言自誕生以來(lái)被稱(chēng)為最純正的面向?qū)ο笳Z(yǔ)言,所以我們就先以 Java 語(yǔ)言為例講一講類(lèi)型系統(tǒng)。
在 Java 語(yǔ)言中,存在兩套完全獨(dú)立的類(lèi)型系統(tǒng):一套是值類(lèi)型系統(tǒng),主要是基本類(lèi)型,如 byte
、int
、boolean
、char
、double
等,這些類(lèi)型基于值語(yǔ)義;一套是以 Object
類(lèi)型為根的對(duì)象類(lèi)型系統(tǒng),這些類(lèi)型可以定義成員變量和成員方法,可以有虛函數(shù),基于引用語(yǔ)義,只允許在堆上創(chuàng)建(通過(guò)使用關(guān)鍵字 new
)。Java 語(yǔ)言中的 Any
類(lèi)型就是整個(gè)對(duì)象類(lèi)型系統(tǒng)的根 —— java.lang.Object
類(lèi)型,只有對(duì)象類(lèi)型系統(tǒng)中的實(shí)例才可以被 Any
類(lèi)型引用。值類(lèi)型想要被 Any
類(lèi)型引用,需要裝箱 (boxing)過(guò)程,比如 int
類(lèi)型需要裝箱成為 Integer
類(lèi)型。另外,只有對(duì)象類(lèi)型系統(tǒng)中的類(lèi)型才可以實(shí)現(xiàn)接口,具體方法是讓該類(lèi)型從要實(shí)現(xiàn)的接口繼承。
相比之下,Go 語(yǔ)言中的大多數(shù)類(lèi)型都是值語(yǔ)義,并且都可以包含對(duì)應(yīng)的操作方法。在需要的時(shí)候,你可以給任何類(lèi)型(包括內(nèi)置類(lèi)型)增加新方法。而在實(shí)現(xiàn)某個(gè)接口時(shí),無(wú)需從該接口繼承(事實(shí)上,Go 語(yǔ)言根本就不支持面向?qū)ο笏枷胫械睦^承、實(shí)現(xiàn)語(yǔ)法),只需要實(shí)現(xiàn)該接口要求的所有方法即可。任何類(lèi)型都可以被 Any
類(lèi)型引用。在 Go 語(yǔ)言中,Any
類(lèi)型就是空接口,即 interface{}
。
注:這里的值語(yǔ)義和引用語(yǔ)義等價(jià)于之前介紹類(lèi)型時(shí)提到的值類(lèi)型和引用類(lèi)型。
go是什么
golang是一種編譯語(yǔ)言,可以將代碼編譯為機(jī)器代碼,編譯后的二進(jìn)制文件可以直接部署到目標(biāo)機(jī)器而無(wú)需額外的依賴(lài),所以golang的性能優(yōu)于其他的解釋性語(yǔ)言,且可以在golang中使用goroutine來(lái)實(shí)現(xiàn)并發(fā)性,它提供了一個(gè)非常優(yōu)雅的goroutine調(diào)度程序系統(tǒng),可以很容易地生成數(shù)百萬(wàn)個(gè)goroutine。
感謝你的閱讀,相信你對(duì)“如何分析Go語(yǔ)言的類(lèi)型系統(tǒng)”這一問(wèn)題有一定的了解,快去動(dòng)手實(shí)踐吧,如果想了解更多相關(guān)知識(shí)點(diǎn),可以關(guān)注億速云網(wǎng)站!小編會(huì)繼續(xù)為大家?guī)?lái)更好的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。