程序?qū)嶓w
Go語言中的程序?qū)嶓w包括變量停局、常量伴箩、函數(shù)、結(jié)構(gòu)體和接口。
代碼塊
在Go語言中推汽,代碼塊一般就是一個由花括號括起來的區(qū)域喧伞,里面開業(yè)包含表達式和語句法挨。
Go語言本身以及我們編寫的代碼共同形成了一個非常大的代碼塊纳账,即全域代碼塊。
相對小一些的代碼塊是代碼包刹泄,一個代碼包可以包含許多子代碼包外里。
每個源碼文件也是一個代碼塊,每個函數(shù)也是一個代碼塊特石,每個if語句盅蝗、for語句、switch語句姆蘸、select語句都是一個代碼塊墩莫,甚至switch語句中的case語句也是一個代碼塊。
只有兩個花括號乞旦,里面沒有內(nèi)容也是一個代碼塊贼穆,即空代碼塊。
Go語言的代碼塊是一層套一層的兰粉,一個代碼塊可以有若干個子代碼塊故痊,但對于每個代碼塊,最多只會有一個直接包含它的代碼塊玖姑,后者簡稱為前者的外層代碼塊愕秫。
作用域
代碼塊的劃分間接的決定了其中的程序?qū)嶓w的作用域慨菱。
一個變量(常量、類型或函數(shù))在程序中都有一定的作用范圍戴甩,稱之為作用域符喝。
Go的作用域是通過代碼塊來標記的
一個程序?qū)嶓w的作用域總是會被限定在某個代碼塊中,而這個作用域最大的作用甜孤,就是對程序?qū)嶓w的訪問權(quán)限的控制协饲。
全局變量
如果一個變量在代碼塊外聲明,則被認為是全局變量缴川,可以在整個包甚至外部包(被導(dǎo)出后)使用茉稠,不管你聲明在哪個源文件里或在哪個源文件里調(diào)用該變量。
局部變量
在代碼塊內(nèi)聲明的變量稱之為局部變量把夸,它們的作用域只在代碼塊內(nèi)而线,函數(shù)的參數(shù)和返回值變量也是局部變量。
不同的作用域允許使用相同的變量名恋日。同名的局部作用域的變量代碼執(zhí)行完后會釋放變量名膀篮。
程序?qū)嶓w的訪問權(quán)限規(guī)則
包級私有的、模塊級私有的岂膳、公開的誓竿。
在語言層面依據(jù)代碼塊對程序?qū)嶓w的作用域進行的定義。
前兩種訪問權(quán)限對應(yīng)的都是代碼包代碼塊闷营,最后一種訪問權(quán)限對應(yīng)的是全域代碼塊烤黍。
規(guī)則1
名稱首字母為大寫的程序?qū)嶓w才可以被其他代碼包所使用。否則它就只能被當前包內(nèi)其他代碼使用傻盟。
首字母大寫的程序?qū)嶓w相當于其他語言中聲明為public修飾符的實體
其他情況相當于聲明為private修飾符的實體
規(guī)則2
internal代碼包中聲明的公開程序?qū)嶓w只能被該代碼包的直接父包及其父包的子包中的代碼引用。引用前需要先導(dǎo)入此internal包嫂丙。
對于其他代碼包娘赴,導(dǎo)入該internal包都是非法的,無法通過編譯跟啤。