package main必須首先出現,緊跟着的是import(引入不是main的其他的包)。在GO中,package總是首先出現的,然後是import,然後是其他的內容。當GO程序開始執行時,首先調用的函數是main.main(),這是從C語言中繼承來的,GO語言是一種類C的語言。示例程序如下:
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
變量.類型和關鍵字
1:go支持單條語句一行不需要加分號,如果是兩條語句在一行的話就需要在中間加上分號。
2:定義變量時是變量名在前變量類型在後面,例如:var a int
3:在函數中也可以直接定義加賦值一條語句搞定,例如: a := 15(變量a賦值爲15, 根據賦值的類型推測變量a爲整型int)。這個語句相當於 var a int ; a = 15;
4:如果是多個則可以用圓括號包住,放在一起。注意圓括號!在引用(import)多個包時也可以用圓括號。常量同時定義多個也可以用圓括號放在一起。
var (
a int
b bool
)
5:GO的編譯器會對聲明瞭但是沒有使用的變量進行報錯,和C不同。
6:除了常規的類型以外,go還包含可以明確長度的類型例如int32, unit32, int8, int16, float32,float64等,請注意這些類型都是獨立的,只能這種類型之間進行復制,算術運算。如果混用那麼就會引起編譯的錯誤!
7:枚舉值:用iota生成枚舉值,按順序其值依次遞增。例如:
const (
a = iota
b = iota
)
第一個iota表示0所以a爲0, b爲1,如果在使用iota那麼其值會繼續在原來的基礎上面加1。
8:字符串:在GO中字符串是由雙引號""包裹的字符序列。如果是單引號包裹的那麼只是一個字符。並且在GO中一旦給變量賦值,字符串就不能修改了,在GO中字符串是不可變的。需要用到中間者進行轉換纔可以。
9:複數:GO的原生是支持複數的。變量類型是complex128。複數寫爲re + im,其中re是實數, im是虛數。例如如下:
var a complex64 = 5 + 5i; fmt.printf("Value is : %v", a);
打印:5 + 5i (其中%V的含義是用默認的格式去打印這個值)
控制結構
在GO中只有很少的幾個控制結構,沒有do, while, 只有for。有switch和if 語句還有select。語法和C語言相比有所不同:無需圓括號,而且語句必須總是得包含在大括號裏面才行。
1:if-eles:沒有圓括號,判斷語句緊跟在if的後面,而且第一個大括號{必須和if在同一行,不然程序會自動添加分號出現錯誤。例如:
if x > 0 {
return y;
} else {
return x;
}
也可以在判斷語句中加入初始化,初始化語句和判斷語句中間用分號隔開即可。其判斷語句和C中一樣,也可以使用邏輯運算符&&, !等。其中的continue, break和return都和C不同,唯一不同是加了一個goto。goto調到一個當前函數定義好的標籤。
2:for:有下面三種情況
for init; condition; post { } //和C的for是一樣的,只不過沒有圓括號
for condition { } //和while一樣
for { } //死循環
注意:GO沒有逗號表達式,所以如果想要執行多個變量,應使用平行賦值。
3:可以使用break終止當前的循環,並且循環嵌套時,可以在break後面制定標籤,用標籤指定哪個循環被終止。用continue來停止當前的循環進入下一個循環。例如:
J: for j := 0; j < 5; j++ {
for i := 0; i < 4; i++ {
if(i > 5) {
break J //現在終止的是j循環,而不是i的那個
}
}
println(i)
}
4:switch:GO的switch非常靈活,表達式不必是常量或整數,執行的過程從上到下,直到找到匹配項,而如果switch沒有匹配項,那麼它會匹配true。可以用default去匹配其他都不匹配的情況。例如:
switch i {
case 0:
case 1:
f()
default:
g()
}
其中的分支可以使用逗號分隔的列表,例如:
func shouldEscape(c byte) bool {
switch(c) {
case ' ', ', ', '?', '=', '&', '+': //分支上面的各種情況可以用逗號進行隔開,只要是在:之前
return true
}
return false
}