golang學習筆記2:基本結構與數(shù)據類型

下面列舉了 Go 代碼中會使用到的 25 個關鍵字或保留字:


除了以上介紹的這些關鍵字,Go 語言還有 36 個預定義標識符,其中包含了基本類型的名稱和一些基本的內置函數(shù)。


程序一般由關鍵字、常量、變量、運算符、類型和函數(shù)組成。


程序中可能會使用到這些分隔符:括號?(),中括號?[]?和大括號?{}。


程序中可能會使用到這些標點符號:.?,? ; :?和?…


程序的代碼通過語句來實現(xiàn)結構化。每個語句不需要像 C 家族中的其它語言一樣以分號;結尾,因為這些工作都將由 Go 編譯器自動完成。


如果你打算將多個語句寫在同一行,它們則必須使用;人為區(qū)分,但在實際開發(fā)中我們并不鼓勵這種做法。


如果對一個包進行更改或重新編譯,所有引用了這個包的客戶端程序都必須全部重新編譯。


Go 中的包模型采用了顯式依賴關系的機制來達到快速編譯的目的,編譯器會從后綴名為.go?的對象文件(需要且只需要這個文件)中提取傳遞依賴類型的信息。


如果?A.go?依賴?B.go,而?B.go?又依賴?C.go:


編譯?C.go,?B.go, 然后是?A.go.


為了編譯?A.go, 編譯器讀取的是?B.go?而不是?C.go.


這種機制對于編譯大型的項目時可以顯著地提升編譯速度。


每一段代碼只會被編譯一次


一個 Go 程序是通過 import 關鍵字將一組包鏈接在一起。


import "fmt" 告訴 Go 編譯器這個程序需要使用 fmt 包(的函數(shù),或其他元素),fmt 包實現(xiàn)了格式化 IO(輸入/輸出)的函數(shù)。包名被封閉在半角雙引號 "" 中。如果你打算從已編譯的包中導入并加載公開聲明的方法,不需要插入已編譯包的源代碼。


函數(shù)


這是定義一個函數(shù)最簡單的格式:


func functionName()


在程序開始執(zhí)行并完成初始化后,第一個調用(程序的入口點)的函數(shù)是 main.main()(如:C 語言),該函數(shù)一旦返回就表示程序已成功執(zhí)行并立即退出。


函數(shù)里的代碼(函數(shù)體)使用大括號 {} 括起來。


Go 語言雖然看起來不使用分號作為語句的結束,但實際上這一過程是由編譯器自動完成.


類型


可以包含數(shù)據的變量(或常量),可以使用不同的數(shù)據類型或類型來保存數(shù)據。使用 var 聲明的變量的值會自動初始化為該類型的零值。類型定義了某個變量的值的集合與可對其進行操作的集合。


類型可以是基本類型,如:int、float、bool、string;結構化的(復合的),如:struct、array、slice、map、channel;只描述類型的行為的,如:interface。


結構化的類型沒有真正的值,它使用 nil 作為默認值(在 Objective-C 中是 nil,在 Java 中是 null,在 C 和 C++ 中是NULL或 0)。值得注意的是,Go 語言中不存在類型繼承。


Go 程序的一般結構

下面的程序可以被順利編譯但什么都做不了,不過這很好地展示了一個 Go 程序的首選結構。這種結構并沒有被強制要求,編譯器也不關心 main 函數(shù)在前還是變量的聲明在前,但使用統(tǒng)一的結構能夠在從上至下閱讀 Go 代碼時有更好的體驗。


總體思路如下:


  • 在完成包的 import 之后,開始對常量、變量和類型的定義或聲明。


  • 如果存在 init 函數(shù)的話,則對該函數(shù)進行定義(這是一個特殊的函數(shù),每個含有該函數(shù)的包都會首先執(zhí)行這個函數(shù))。


  • 如果當前包是 main 包,則定義 main 函數(shù)。


  • 然后定義其余的函數(shù),首先是類型的方法,接著是按照 main 函數(shù)中先后調用的順序來定義相關函數(shù),如果有很多函數(shù),則可以按照字母順序來進行排序。




Go 程序的執(zhí)行(程序啟動)順序如下:

按順序導入所有被 main 包引用的其它包,然后在每個包中執(zhí)行如下流程:

如果該包又導入了其它的包,則從第一步開始遞歸執(zhí)行,但是每個包只會被導入一次。

然后以相反的順序在每個包中初始化常量和變量,如果該包含有 init 函數(shù)的話,則調用該函數(shù)。

在完成這一切之后,main 也執(zhí)行同樣的過程,最后調用 main 函數(shù)開始執(zhí)行程序。?




關注置頂走一波~



?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容