中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Google Go語言基礎知識有哪些

發布時間:2021-11-17 17:01:15 來源:億速云 閱讀:149 作者:iii 欄目:web開發

這篇文章主要講解了“Google Go語言基礎知識有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Google Go語言基礎知識有哪些”吧!

先來個hello world

hello.go

package main //聲明本文件的package名    import "fmt" //import語言的fmt庫——用于輸出    func main() { var str string = "hello world" //str := "hello world" //var str = "hello word"    fmt.Println(str)  }

運行

有兩種方式可以解釋運行

1、先編譯:go build hello.go

再運行:./hello

2、也可以直接進行編譯運行(其實下面這個命令實際是編譯成hello.out再執行):go run hello.go

對于習慣了C系列語言的同學來說,會對go的語法很不習慣。***,go沒有使用“;”作為語句結束標志;第二,go是變量在類型前面,變量初始化還可以如注釋的那兩行語句,不用指定類型,go編譯器可以從初始化表達式的右值導出該變量應該聲明為哪種類型,這讓go看起來有點像動態語言,這也可能為什么有人說它是python 4.0的原因吧。

go很可能是***個將代碼風格進行強制統一的語言,例如go語言要求public的變量名必須以大寫字母開頭,private變量則以小寫字母開關,這種做法不僅免除了public,private關鍵字,更重要的是統一了風格。還有,對于判斷語句,如果你寫成這樣:

if str == "descur"{     .... } else{     .... }

是不能編譯通過的,一定要寫成這樣:

if str == "descusr"{     ... }else{     ... }

這可能對那些在微軟懷抱中長大的孩子來會很痛苦,但對像我這些有代碼潔癖的人來說未嘗不是好事。其實統一了代碼風格,進行團隊合作時是很有益的。

編程哲學

C語言是純過程式的,這和它產生的歷史背景有關。C#/JAVA語言則是高度的面向對象語言,典型表現是它們的體系里不存在孤立的方法,這些方法必須是屬于某個類。而go沒有去否認任何一方,而是用批判吸收的眼光,綜合了各種編程思想,融合眾家之長,極力維持語言特性的簡潔,力求小而精,越深入go,你就會發現go真的是太簡潔了。

從編程范式的角度看,go是變革派,不是改良派。

雖然go屬于面向對象語言,但在go的概念里沒有面向對象這個概念,只有結構體。go的類具有高度的粒子性,如下面的代碼:

type rect struct {       width, height int  }    func (r *rect) area() int { //求面積       return r.width * r.height   }       func (r *rect) perimeter() int{ //求周長       return 2*(r.width + r.height)   }       func main() {       r := rect{width: 10, height: 15}       fmt.Println("面積: ", r.area())       fmt.Println("周長: ", r.perimeter())        rp := &r       fmt.Println("面積: ", rp.area())       fmt.Println("周長: ", rp.perimeter())   }

類和類方法完全分開,只有在初始化對象后才進行調用,減少了耦合度。go沒有構造函數和析構函數。由于go語言中沒有虛函數,也就沒有vptr,支持構造函數和析構函數就沒有太大價值。

其次,go語言反對函數和操作符重載,而C#,C++,和JAVA允許同名函數或者操作符,只要它們的參數列表不同。雖然重載解決了一小部分OOP問題,但卻給這些語言帶來了極大的負擔,并且這種方法對解決問題問題并沒有帶來多大價值,所以go就不提供重載。

再次,go反對繼承,反對虛函數和虛函數重載。其實,go也提供了繼承,只不過采用了組合的方法來提供:

type Car struct{      Base      ...  }    func (color *Car) Drive(){      ...  }

放棄了大量的OOP特性后,go提供了一份相當棒的功能:接口。你可能會有疑問,所有面向對象語言也有接口啊?但那些面向對象語言的接口都基本上一樣,而go的卻跟它們不一樣。

go語言中的接口與其他語言***的一點區別是它的非侵入性。在C#等面向對象語言中,為了實現接口,你需要從接口繼承,如:

public interface IBankAccount {     void PayIn(decimal amount); }
class SaverAccount : IBankAccount {      public void PayIn(decimal amount)     {         Console.WriteLine("This is PayIn");     }  }

在go語言中,實現類的時候無需從接口派生,如:

type SaverAccount  struct{   //go     ... }  var saveAccount IBankAccount = new(SaveAccount)

只要實現了IBankAccount要求的所有方法,就實現了該接口,可以進行賦值,相當原子性。

感謝各位的閱讀,以上就是“Google Go語言基礎知識有哪些”的內容了,經過本文的學習后,相信大家對Google Go語言基礎知識有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐梓县| 宁波市| 莎车县| 鞍山市| 五大连池市| 洮南市| 胶南市| 文安县| 乐山市| 海安县| 芦山县| 伊川县| 玛多县| 常州市| 枝江市| 措美县| 遵化市| 凤台县| 浦北县| 葵青区| 东乌珠穆沁旗| 淳安县| 浏阳市| 岗巴县| 奇台县| 平安县| 临洮县| 皮山县| 云安县| 江陵县| 平定县| 大港区| 宜兰县| 大埔县| 微山县| 长宁区| 阿克| 四会市| 故城县| 贺州市| 淳化县|