標籤:忽略 uil 標準 基本資料 string 位元組 傳回值 全域變數 ons
go程式的基本結構
一個可以最簡單的可啟動並執行go程式需要滿足下面兩個條件:
- 有一個main()函數
- main()函數在main包中
例如: 在go語言中的 hello world 程式如下:
// main.gopackage mainfunc main() { println("hello world");}
程式中的 package
關鍵字,用來聲明檔案所屬的包(檔案所屬的包跟檔案名稱是沒有關係的),每一個go檔案都需要有一個包聲明; 而 func 關鍵字用來定義函數, 這裡我們定義了一個main函數(main函數的形式是固定的)。println 函數是用來向標準輸出列印資料的,不過我們一般情況下是不使用它的。
go在編譯器時,會自動在語句的結尾加上分號,所有這裡函數的第一的大括弧,必須與()在同一行,否則返回就會加在()之後,就會出現錯誤,後面的一些流程式控制制語句也是如此
運行程式:
go build main.go // 編譯器./main // 運行程式
我們可以將兩步合成一步:
go run main.go // 不會產生中間檔案
在運行go程式時的入口就是 main 包下的 main 函數。
變數
go語言使用 var 聲明或者定義變數,它可以用在函數之外定義,此時就是全域變數;而在函數內聲明時,就是局部變數。
還有一種簡略的定義方式,使用 := 來定義,這種方式只能用在函數中,即定義局部變數
且局部變數聲明之後必須使用
package mainimport "fmt"var age int = 10 // 顯式的聲明變數的類型 intvar name = "Tom" // go也可以自動推斷處變數類型,這裡是 stringfunc main() { var sex = "man" hello := "hello" // 簡略聲明方式 fmt.Println(sex) fmt.Println(hello + "world")}
這裡我們定義了兩個全域變數 name 和 age, 還定義了兩個局部變數 sex 和 hello, 在 go 語言中,全域變數可以聲明之後不是有,但是局部變數一旦聲明必須使用,否則編譯器會報錯;
注意: 這裡我們使用 import 關鍵字引入了一個 fmt 的包,在go程式中我們一般都應該使用 fmt 包中的函數來列印資料,而不是前面的println
基礎資料型別 (Elementary Data Type):
類型 |
含義 |
預設值 |
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" // 自動類型推斷
常量必須在定義時,就初始化,並且一經定義便不可更改。
流程式控制制語句if語句
package mainimport "fmt"func main() { a := 10 if a > 5 { fmt.Println("a 大於 5") } else { fmt.Println("a 小於 5") }}
同樣的這裡的 左大括弧“{”必須與 if 或者 else 在同一行, 且這裡 else 必須與 if 的右大括弧“}”在同一行。
go語言中沒有三元運算子
switch語句
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的條件,不僅僅可以是常量值,還可以是比較運算式;
for迴圈
go語言支援三種迴圈方式:
// 1. 常見的for迴圈,類似於C語言的迴圈,不過條件可以不用括弧for i := 0; i < 10; i++ { fmt.Println(i);}// 2. 類while文法i := 10for i > 0 { fmt.Println(i) i--}// 同樣的,無限迴圈是這樣,省略條件for { //...}// 3. for .. range,可以用來迴圈字串,數組,map,channel等等// range返回 (索引值, 值)或者(鍵, 值); 如果只有一個接收參數,則會忽略第二個傳回值s := "hello"for i := range s { // 這裡迴圈的是string的索引 fmt.Println(s[i]) }
標籤,goto, break, continue
go還支援標籤(區分大小寫),可以使用goto跳轉到標籤,break 可?於 for、 switch、 select,? continue 僅能?於 for 迴圈。
go語言學習-基礎知識