溫馨提示×

溫馨提示×

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

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

golang特有程序結構的示例分析

發布時間:2021-06-03 10:15:55 來源:億速云 閱讀:237 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關golang特有程序結構的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Go語言的由來

Go語言亦叫Golong語言,是由谷歌Goggle公司推出。Go語言的主要開發者有:肯.湯姆遜(Ken Thompson)、羅布.派克(Rob Pike)和羅伯特.格里澤默(Robert Griesemer)。這三個都是大神,稍介紹一下他們的貢獻:
肯.湯姆遜(Ken Thompson):圖靈獎得主,Uinx發明人,B語言作者(C語言前身),還做飛行員,后來被谷歌挖走。
羅布.派克(Rob Pike):Unix團隊和Plan 9操作系統計劃的成員,與Ken老爺子共事多年,并共創出廣泛使用的UTF-8 字元編碼。
羅伯特.格里澤默(Robert Griesemer):曾協助制作Java的HotSpot編譯器,和Chrome瀏覽器的JavaScript引擎V8。

Go語言的特點

Go語言保證了既能到達靜態編譯語言的安全和性能,又達到了動態語言開發速度和易維護性,有人形容Go語言:Go = C + Python , 說明Go語言既有C靜態語言程序的運行速度,又能達到Python動態語言的快速開發。

提示:本系列文章適合對Go有持續沖動的讀者

閱前須知:在程序結構這章,更多會關注golang中特有結構,與其他語言如C、python中相似結構(命名、聲明、賦值、作用域等)不再贅述。

一、golang類型別名

在go1.9中引入類型別名的特性,其中兩個內置類型byte、 runeuint8int32的別名。類型別名即字面意思換個名字,兩者是相同類型。

類型聲明語句一般出現在包一級,因此如果新創建的類型名字的首字符大寫,則在包外部也可以使用。

解決問題:大規模重構期間啟用漸進式代碼修復,特別是將類型從一個包移動到另一個包,以便引用舊名稱的代碼與引用新名稱的代碼互操作。類型別名對于允許使用單個頂級導出 API 將大型包拆分為多個實現包,以及對現有包的擴展版本進行試驗也可能很有用。

定義方法:

type T1 = T2

提案地址:18130-type-alias

二、變量初始化

1.如果初始化表達式被省略,那么將用零值初始化該變量,即如下:

int -->0

bool -->false

string-->""

接口類型:slice、指針、map、chan、函數 -->nil

數組或結構體: 每個元素或字段初始為對應類型零值

零值初始化機制可以確保每個聲明的變量總是有一個良好定義的值,這個特性可以減少許多額外工作

2.函數返回值初始化變量,比如err的獲取。在賦值語句左邊的變量和右邊最終的求到的值必須有相同的數據類型。

if err:=http.Get(addr),err{
	//
}

3.初始化表達式可以是字面量或任意的表達式。在包級別聲明的變量會在main入口函數執行前完成初始化,局部變量將在聲明語句被執行到的時候完成初始化

4.簡短式(:=)局部變量聲明只可用于局部變量聲明。并且簡短變量聲明語句對這些已經聲明過的變量具有賦值行為。如下第二個聲明只聲明了out一個變量。

in, err := os.Open(infile)
// ...
out, err := os.Create(outfile)

5.函數內生命的變量必須使用,不過可以使用下劃線_ 丟棄。

三、變量生命周期

對于在包一級聲明的變量來說,它們的生命周期和整個程序的運行周期是一致的。

而相比之下,局部變量的生命周期則是動態的:每次從創建一個新變量的聲明語句開始,直到該變量不再被引用為止,然后變量的存儲空間可能被回收。

函數的參數變量和返回值變量都是局部變量。它們在函數每次被調用的時候創建。

四、golang package(包)與golang Module(模塊)

1. package:對一組函數或功能的封裝,即避免重復造輪子。

在1.12之后版本(引入了module)安裝后,會在用戶目錄下創建一個 go 文件夾作為默認的 GOPATH,go get 會將遠程的軟件包下載到GOPTH目錄下 pkg/mod 里。GOROOT為go文件和安裝目錄。$GOROOT/src為內置標準庫。

golang特有程序結構的示例分析

GOPATH目錄已下載的package

golang特有程序結構的示例分析

$GOROOT/src目錄內置package

golang特有程序結構的示例分析

在沒有使用 golang module 前導入他人分享的 package 需要先使用 go get 下載到本地,然后才可以通過import引用此 package

2. module:對package進行管理,即管理應用的依賴和package版本。

引入module后項目目錄不再只限制在GOPATH/src,你可以在任意文件夾下創建你的項目,再使用go mod init初始化即可。如下初始化一個module為github.com/csgo 在當前文件夾下產生go.mod文件。

[root@VM-0-5-centos water_man]# ls
go.mod  water_man.go
[root@VM-0-5-centos water_man]# cat go.mod 
module github.com/csgo   //文件名稱

go 1.15   //go版本

replace github.com/csgo/rush_b => ../rush_b  //重定向package到../rush_b文件夾下

require github.com/csgo/rush_b v0.0.0-00010101000000-000000000000  //非標準庫依賴包和版本

上層目錄下自定義的package:

golang特有程序結構的示例分析

go module會根據 go.mod 的依賴引用關系導入三方包。如果發現本地cache沒有,就會從遠程拉取。即如果github.com/csgo/rush_b未重定向到本地就會使用 go get 。當 go module下載了遠程包后,同時會自動更新 go.mod 。

需要注意自定義的package函數、變量如果需要被外部引用則首字母應大寫,即包級別的名字都是以大寫字母開頭。

關于“golang特有程序結構的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女