Go之包,函數,方法

1.首先要了解Go的分級機制

       Go是以包的形式來分級的在上面的圖中,同一目錄下的文件只能是相同的package,package名字可與目錄不一樣,Go的封裝十分簡單,若函數名,變量名是大寫字母開頭的,那這個變量或者函數是在各個包都是可見的,若是小寫,那麼只能在同一個包是可見。

2.Go導入自定義的包

我們可以看出,如果我們想導入自定義的包,只需要項目名加目錄名,我們就可以導入改目錄下的所有文件,如果我們想調用文件裏面的內容並不是文件名加方法名,而是我們所定義的包名+函數名或者變量名的方法來調用。

3.包的初始化流程

我們可以看出,初始化可以分爲2部分來看,首先包的初始化順序,然後是單個包初始化順序,首先包的初始化順序和包的導入方式有關,如果一個包被導入多次,只會初始化一次,然後單個包的初始化順序是const常量,變量,然後是init()函數。

4.函數之參數

Go支持可變的輸入參數,可變數量的輸入參數

如圖,該函數接收2到任意個參數,但是要注意 ... type只能放在最後的位置

5.函數之defer

defer相當於python中try catch finally中的finally,不管程序有沒有執行defer的函數都會執行,一個函數裏面可以定義多個defer,若定義多個defer,defer的執行順序就是先進後出,其實就是一個棧,一般如下圖定義:

主要用匿名函數,一般用途可用於鎖的釋放

6.函數之參數

go的參數只有值傳遞一種方式,不過我們可以用指針來進行引用傳遞

7.方法

方法其實就是定義在類裏面的方法,我們可以給任何自定義類型添加一個或多個方法。每種類型對應的方法必須和類型的定義在同一個包中,因此是無法給int這類內置類型添加方法的(因爲方法的定義和類型的定義不在一個包中,對於給定的類型,每個方法的名字必須是唯一的,同時方法和函數一樣也不支持重載。

方法的定義有2種方式,f1這種方法會對對象進行一次拷貝,再進行運算,所以修改不會影響原來的對象,方法二相當於引用對象的指針,所以修改會影響到原來的對象

 

    

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