一個能夠最簡單的可運行的go程序須要知足下面兩個條件:數組
例如: 在go語言中的 hello world 程序以下:函數
// main.go package main func main() { println("hello world"); }
程序中的 package
關鍵字,用來聲明文件所屬的包(文件所屬的包跟文件名是沒有關係的),每個go文件都須要有一個包聲明; 而 func 關鍵字用來定義函數, 這裏咱們定義了一個main函數(main函數的形式是固定的)。println 函數是用來向標準輸出打印數據的,不過咱們通常狀況下是不使用它的。ui
go在編譯程序時,會自動在語句的結尾加上分號,全部這裏函數的第一的大括號,必須與()在同一行,不然返回就會加在()以後,就會出現錯誤,後面的一些流程控制語句也是如此code
運行程序:索引
go build main.go // 編譯程序 ./main // 運行程序
咱們能夠將兩步合成一步:字符串
go run main.go // 不會生成中間文件
在運行go程序時的入口就是 main 包下的 main 函數。編譯器
go語言使用 var 聲明或者定義變量,它能夠用在函數以外定義,此時就是全局變量;而在函數內聲明時,就是局部變量。string
還有一種簡略的定義方式,使用 := 來定義,這種方式只能用在函數中,即定義局部變量it
且局部變量聲明以後必須使用for循環
package main import "fmt" var age int = 10 // 顯式的聲明變量的類型 int var name = "Tom" // go也能夠自動推斷處變量類型,這裏是 string func main() { var sex = "man" hello := "hello" // 簡略聲明方式 fmt.Println(sex) fmt.Println(hello + "world") }
這裏咱們定義了兩個全局變量 name 和 age, 還定義了兩個局部變量 sex 和 hello, 在 go 語言中,全局變量能夠聲明以後不是有,可是局部變量一旦聲明必須使用,不然編譯器會報錯;
注意: 這裏咱們使用 import 關鍵字引入了一個 fmt 的包,在go程序中咱們通常都應該使用 fmt 包中的函數來打印數據,而不是前面的println
基本數據類型:
類型 | 含義 | 默認值 |
---|---|---|
bool | 布爾值 | false |
byte | 字節,uint8 | 0 |
rune | Unicode碼點,int32 | 0 |
int,uint | 與系統相關的有/無符號整數 | 0 |
int8,uint8 | 8位有/無符號整數 | 0 |
int16,uint16 | 16位有/無符號整數 | 0 |
int32,uint32 | 32位有/無符號整數 | 0 |
int64,uint64 | 64位有/無符號整數 | 0 |
float32 | 32位浮點數 | 0.0 |
float64 | 64位浮點數 | 0.0 |
complex64 | 64位複數 | 0+0i |
complex128 | 128位複數 | 0+0i |
string | 字符串 | 「」 |
這些是比較基本的類型,還有一些類型,後面用到了再說
常量的定義方式與變量類型,不過使用的是 const
關鍵字:
const PI float32 = 3.14159 const USERNAME = "root" // 自動類型推斷
常量必須在定義時,就初始化,而且一經定義便不可更改。
package main import "fmt" func main() { a := 10 if a > 5 { fmt.Println("a 大於 5") } else { fmt.Println("a 小於 5") } }
一樣的這裏的 左大括號「{」必須與 if 或者 else 在同一行, 且這裏 else 必須與 if 的右大括號「}」在同一行。
go語言中沒有三元運算符
switch (n){ case 1: fmt.Println("n == 1") case 2: fmt.Println("n == 2") default: fmt.Println("n is default") }
go中的 switch 是不須要 break 語句的,默認自動終止一個case; 若是須要繼續執行下一個,使用fallthrough,此時不會判斷條件
這裏switch語句還能夠包含初始化語句,使用分號」;」分隔,且case的條件,不單單能夠是常量值,還能夠是比較表達式;
go語言支持三種循環方式:
// 1. 常見的for循環,相似於C語言的循環,不過條件能夠不用括號 for i := 0; i < 10; i++ { fmt.Println(i); } // 2. 類while語法 i := 10 for i > 0 { fmt.Println(i) i-- } // 一樣的,無限循環是這樣,省略條件 for { //... } // 3. for .. range,能夠用來循環字符串,數組,map,channel等等 // range返回 (索引值, 值)或者(鍵, 值); 若是隻有一個接收參數,則會忽略第二個返回值 s := "hello" for i := range s { // 這裏循環的是string的索引 fmt.Println(s[i]) }
go還支持標籤(區分大小寫),可使用goto跳轉到標籤,break 可⽤於 for、 switch、 select,⽽ continue 僅能⽤於 for 循環。