1 go語言介紹的簡單的示例

Go語言的語言特性

1.2.1 併發編程

Go 語言引入了goroutine,它是 Go 實現快速高效的併發編程的關鍵。通過調用 go 關鍵字,我們就可以讓函數以 goroutine 的方式進行運行,也就是以協程爲單位進行運行。協程比線程更加的輕量級,也更節省系統資源,這使得我們可以創建大量的 goroutine,從而進行輕鬆且高質量的併發編程。同時,goroutine 內部採用管道channel進行消息傳遞,從而實現共享內存。

1.2.2 錯誤處理

Go 語言中的錯誤處理的哲學和 C 語言一樣,函數通過返回錯誤類型(error)或者bool類型(不需要區分多種錯誤狀態時)表明函數的執行結果,調用檢查返回的錯誤類型值是否是nil來判斷調用結果。並引入了 defer 關鍵字用於標準的錯誤處理流程,並提供了內置函數panicrecover完成異常的拋出與捕捉。

f := func(x,y int) int {
    return x+y
}

第一個hello world程序

package main


import (
    "fmt" //導入fmt包,調用其中的Println()函數
)
​

func main() {
    fmt.Println("Hello,world!")
}
運行的時候
go run hello.go

1.2.3 內存回收GC

內存自動回收不需要開發人員擔心,自動回收垃圾

GC過程:

  1. 首先stop the world
  2. 掃描所有對象進行判活
  3. 把可回收對象在一段bitmap裏面標記下來
  4. 接着立即start the world恢復服務
  5. 同時起一個線程goroutine
  6. 將回收內存放到空閒的list中進行備用
  7. 不進行物理釋放,物理釋放由專門的線程來執行

GC的瓶頸

在於每次都要收集所有的對象進行判活,收集的對象越多,速度越慢,隨着版本會不斷優化

內存分配

  • 首先分配一個大內存區域
  • 大內存會被企鵝分爲各個大小等級的塊,放入不同的空閒list中
  • 對象分配空間是從空閒的list中取出大小合適的內存塊
  • 內存回收時,會把不用的內存從放回空閒的list
  • 空閒內存會按照一定的策略合併,以減少碎片

1.2.4 編譯

目前的golang的編譯器是有兩種,一種是基於gcc的Gccgo,還有一種是針對於64位x64和32位x86計算機的一套編譯器

庫的引入

go的很多第三方庫都在github上面,所以只需要引入github上的路徑就可以,庫就會下載到工程的pkg目錄下面,說明需要go編程的時候需要聯網,但是也是很方便的。

1.2.5 網絡編程接口

go語言的網絡編程接口十分的豐富

  • socket: net,Dial(基於tcp/udp ,封裝了傳統的connect 、listen、accept等接口)
  • http: 使用http.Get / Post
  • rpc使用client.Call 

函數多返回值

支持多個返回值,可以簡化編程

語言交互性

Go語言可以和c程序的交互,開發者完全可以忽略c語言和go之間的差異

異常處理

go不支持try catch 因爲可能會被濫用,導致代碼量的增加

go裏面的異常處理是如果是普通異常,查看返回的error對象

如果是比較嚴重的異常,比如除零等,重點性panic。使用defer panic recover

來修復異常

其他的有趣類型特性

1.go語言是強類型的,但是支持類型的自動推導

2.go是有interface的機制,只需要實現這個接口裏面的函數就可以,不需要顯示的寫出繼承關係。go推薦interface只提供一到兩個方法

3.defer機制

可以使用改關鍵字制定需要延遲執行的邏輯體,也就是說在函數體return前或者出現panic之前使用。對defer引用可以簡化編程,提高可讀性。

4.包的機制 main只有一個

5.交叉編譯 源碼都是utf-8的格式編碼 國際化!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章