日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《Go语言实战》读书笔记——关于Go语言的介绍

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Go语言实战》读书笔记——关于Go语言的介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1.1 用Go解決現代編程難題

1.1.1 開發速度

1.1.2 并發

1.goroutine

2.通道

1.1.3 Go語言的類型系統

1.類型簡單

2.Go 接口對一組行為建模

1.1.4 內存管理

1.2 小結


1.1 用Go解決現代編程難題

C 和 C++這類語言提供了很快的執行速度,而 Ruby 和 Python 這類語言則擅長快速開發。 Go 語言在這兩者間架起了橋梁,不僅提供了高性能的語言,同時也讓開發更快速。

1.1.1 開發速度

編譯 Go 程序時,編譯器只會關注那些直接被引用的庫,而不是像 Java、 C 和 C++那樣,要遍歷依賴鏈中所有依賴的庫。因此,很多 Go 程序可以在 1 秒內編譯完。在現代硬件上,編譯整個 Go語言的源碼樹只需要 20 秒。

缺點:因為沒有從編譯代碼到執行代碼的中間過程,用動態語言編寫應用程序可以快速看到輸出。代價是,動態語言不提供靜態語言提供的類型安全特性,不得不經常用大量的測試套件來避免在運行的時候出現類型錯誤這類 bug。

1.1.2 并發

Go 語言對并發的支持是這門語言最重要的特性之一。 goroutine 很像線程,但是它占用的內存遠少于線程,使用它需要的代碼更少。通道( channel)是一種內置的數據結構,可以讓用戶在不同的 goroutine 之間同步發送具有類型的消息。這讓編程模型更傾向于在 goroutine之間發送消息,而不是讓多個 goroutine 爭奪同一個數據的使用權。

1.goroutine

goroutine 是可以與其他 goroutine 并行執行的函數,同時也會與主程序(程序的入口)并行執行。在其他編程語言中,你需要用線程來完成同樣的事情,而在 Go 語言中會使用同一個線程來執行多個 goroutine。例如,用戶在寫一個 Web 服務器,希望同時處理不同的 Web 請求,如果使用 C 或者 Java,不得不寫大量的額外代碼來使用線程。在 Go 語言中, net/http 庫直接使用了內置的 goroutine。每個接收到的請求都自動在其自己的 goroutine 里處理。 goroutine 使用的內存比線程更少, Go 語言運行時會自動在配置的一組邏輯處理器上調度執行 goroutine。每個邏輯處理器綁定到一個操作系統線程上。

2.通道

通道是一種數據結構,可以讓 goroutine 之間進行安全的數據通信。通道可以幫用戶避免其他語言里常見的共享內存訪問的問題。

并發的最難的部分就是要確保其他并發運行的進程、線程或 goroutine 不會意外修改用戶的數據。當不同的線程在沒有同步保護的情況下修改同一個數據時,總會發生災難。在其他語言中,如果使用全局變量或者共享內存,必須使用復雜的鎖規則來防止對同一個變量的不同步修改。

為了解決這個問題,通道提供了一種新模式,從而保證并發修改時的數據安全。通道這一模式保證同一時刻只會有一個 goroutine 修改數據。通道用于在幾個運行的 goroutine 之間發送數據。

1.1.3 Go語言的類型系統

Go 語言提供了靈活的、無繼承的類型系統,無需降低運行性能就能最大程度上復用代碼。這個類型系統依然支持面向對象開發,但避免了傳統面向對象的問題。Go 開發者使用組合( composition)設計模式,只需簡單地將一個類型嵌入到另一個類型,就能復用所有的功能。其他語言也能使用組合,但是不得不和繼承綁在一起使用,結果使整個用法非常復雜,很難使用。在 Go 語言中,一個類型由其他更微小的類型組合而成,避免了傳統的基于繼承的模型。

Go 語言還具有獨特的接口實現機制,允許用戶對行為進行建模,而不是對類型進行建模。在 Go 語言中,不需要聲明某個類型實現了某個接口,編譯器會判斷一個類型的實例是否
符合正在使用的接口。 Go 標準庫里的很多接口都非常簡單,只開放幾個函數。

1.類型簡單

Go 語言不僅有類似 int 和 string 這樣的內置類型,還支持用戶定義的類型。在 Go 語言中,用戶定義的類型通常包含一組帶類型的字段,用于存儲數據。 Go 語言的用戶定義的類型看起來和 C 語言的結構很像,用起來也很相似。不過 Go 語言的類型可以聲明操作該類型數據的方法。傳統語言使用繼承來擴展結構——Client 繼承自 User, User 繼承自 Entity, Go 語言與此不同,Go 開發者構建更小的類型——Customer 和 Admin,然后把這些小類型組合成更大的類型。

2.Go 接口對一組行為建模

接口用于描述類型的行為。如果一個類型的實例實現了一個接口,意味著這個實例可以執行一組特定的行為。你甚至不需要去聲明這個實例實現某個接口,只需要實現這組行為就好。其他的語言把這個特性叫作鴨子類型。

下面是一個 Java 接口的例子:

interface User {public void login();public void logout(); }

在Java 中要實現這個接口,要求用戶的類必須滿足 User 接口里的所有約束,并且顯式聲明這個類實現了這個接口。而 Go 語言的接口一般只會描述一個單一的動作。在 Go 語言中,最常使用的接口之一是 io.Reader。這個接口提供了一個簡單的方法,用來聲明一個類型有數據可以讀取。標準庫內的其他函數都能理解這個接口。這個接口的定義如下:

type Reader interface {Read(p []byte) (n int, err error) }

為了實現 io.Reader 這個接口,你只需要實現一個 Read 方法,這個方法接受一個 byte切片,返回一個整數和可能出現的錯誤。

Go 語言的接口更小,只傾向于定義一個單一的動作。實際使用中,這更有利于使用組合來復用代碼。

1.1.4 內存管理

在其他系統語言(如 C 或者 C++)中,使用內存前要先分配這段內存,而且使用完畢后要將其釋放掉。追蹤內存是否還被使用本身就是十分艱難的事情,而要想支持多線程和高并發,更是難上加難。雖然 Go 語言的垃圾回收會有一些額外的開銷,但是編程時,能顯著降低開發難度。

1.2 小結

1、Go 語言是現代的、快速的,帶有一個強大的標準庫。

2、Go 語言內置對并發的支持。

3、Go 語言使用接口作為代碼復用的基礎模塊。

總結

以上是生活随笔為你收集整理的《Go语言实战》读书笔记——关于Go语言的介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。