Go語言的程式結構
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。# Go語言的程式結構 #***## 命名規則 **Go 語言的命名規則和C語言的命令沒什麼不同,都是由數字,底線,字母組成,且必須以底線或者字母開頭。大小寫敏感(var a int 和 var A int是不同變數)**GO語言的關鍵字主要包括25個:<table class="table table-bordered table-striped table-condensed"> <tr> <td>break</td><td>default</td> <td>func</td><td>interface</td> <td>select</td> </tr> <tr> <td>case</td><td>defer</td> <td>go</td><td>map</td> <td>struct</td> </tr> <tr> <td>chan</td><td>else</td> <td>goto</td><td>package</td> <td>switch</td> </tr> <tr> <td>const</td><td>fallthrough</td> <td>if</td><td>range</td> <td>type</td> </tr> <tr> <td>continue</td><td>for</td> <td>import</td><td>return</td> <td>var</td> </tr></table>**如果一個變數是在函數內部定義的,那麼只能函數內部訪問,這個C語言的局部變數是一個概念,go語言的包一般採用小寫,對於封裝問題,如果你想將某個函數暴露給外面,那麼函數名字首字母需要大寫,如果不想那麼函數名字是小寫。就像fmt包裡面的Println()函數。**Go 語言的一般採用 **駝峰式** 賦值,也就是一般採用大小寫間隔而不用_來隔開單詞。eg: parseMemoryAllocate. ***##變數定義### 變數 ###Go 語言的變數的定義是跟其它語言很不同的,GO語言的變數定義格式如下:var 變數名字 資料類型 = 運算式其中 資料類型,=運算式 可以去掉其中之一,當去掉資料類型的時候,變數會根據後面的運算式的值來推導變數類型,去掉=運算式的時候,會採用系統的預設的值。var a,b,c = 3.14,3,true (a是float,b是int,c是bool)var a,b,c int (a,b,c預設值都是0)### 簡短變數 ###簡短變數的定義是一個很方便的功能,它的結構如下名字 := 運算式簡短變數定義方便簡潔,被廣泛的應用在了大部分的局部變數的聲明和初始化中。**var 的定義方法一般是用於需要顯式的定義資料類型或者初始值不重要的地方。**簡短變數定義也支援組定義:x, y := 10,20簡短變數的聲明中必須有一個新的變數:x,y := 10,20x,y := 10,30這種賦值方式是錯誤的,必須有新的變數的引入:x,y := 10,20z,y := 10,30這樣的話就是想當於第二次聲明了一個新的變數z,並且對已經聲明的y進行了賦值。### 指標 ###Go語言的指標和C語言的操作基本是沒什麼不同的,但Go語言的一個指標有一個很大的變動就是***函數可以返回局部變數的地址***。Go語言的局部變數返回: func f() *int{a := 3return &a}var p = f()C語言的局部變數的返回:int* func(){int a =1000000;return &a;}int *sss = func();對於C語言的寫法編譯的時候就會有warning,然後列印SSS和p的值,會發現go語言是一直保留局部變數的地址的值得,但C語言中,記憶體裡的值就是不可預測的。### new 函數還有一個建立變數的方法是調用內建的new 函數,返回的是T類型的指標。定義模型為:x := new(T)eg:p := new(int)fmt.Println(*p)*p = 2fmt.Println(*p)上述的例子建立了p指標,並且返回了p的值0,然後對*p的值進行賦值,最後輸出2.###變數的生命週期對於Go語言的變數的生命週期,全域變數和程式的生命週期是一樣的,但局部變數的周期是動態:從每次建立變數,直到變數不再被引用為止,變數的儲存空間才會被回收。這個就是前面的指標講的代碼,直到沒有引用才會去回收記憶體。case1:var globle *intfunc test1(){x := 1globle = &x}case2:func test2(){y := 2*y = 3}func main(){test1()test2()}對於上述的例子x 記憶體因為被globle引用所以生存周期是伴隨整個代碼的,但y的記憶體是在test2結束之後就會自動釋放。***##賦值操作賦值操作基本和C語言沒啥區別,有個元組賦值比較新穎,比如你要交換兩個數值的值,用C語言的寫法int x = 10; int y = 20;int m = 0;m = x;x = y;y = m;對於GO:x,y = y,x這個特性和函數的多傳回值還是很有關係的。func f() (*int, *int) {v := 2a := 10return &v, &a}p, q := f()***##包包是GO語言裡面很重要的一個概念,它和其它語言的庫概念累死,主要為實現模組化,封裝,單獨編譯,代碼重用。通常包的名字和包的路徑的最後一層目錄名字是一樣的eg:目錄名/src/test/hello/包名hello<font size=6 color = red > 當你想把變數暴露給包外面的時候,只需要將首字母大寫即可,反之則小寫</font><font size=6 color = red >需要注意的是當你Import 引入一個包的時候,這個包是必須被使用的,如果不被使用,在編譯期間就會報錯</font>當然你可以使用內建goimports工具,該工具可以自動去除掉未用到的包和添加用到的包。嘗試過多種官方的安裝方式,但貌似都有問題,下面這個網址可以安裝。218 次點擊