變量聲明
var v1 int var v2 string var v3 [10]int var v4 []int var v5 struct { f int } var v6 *int var v7 map[string] int var v8 func(a int) int
基本變量類型分爲:int、string、數組、切片數據(動態長度數組)、結構體、指針、Map、函數等。
var 簡化寫法,例子:編程
var ( v1 int v2 string )
變量初始化
var v1 int = 10 var v2 = 10 v3 := 10
v1 爲正常方式。v2 & v3 能夠自動推導類型。v3的方式不能做用於全局變量。
警告::= 左側的變量不能夠提早聲明,好比 var v1 = 10; v1 := 10;該寫法會致使編譯器報錯。segmentfault
匿名變量
package helloworld func getName() (string, string, string, string) { firstName := "firstName" lastName := "lastName" nickName := "nickName" middleName := "middleName" return firstName, lastName, nickName, middleName }
package main import ( "fmt" ) func main(){ _, _, _, middle := getName() fmt.Println(middle) } // print -> "middleName"
常量
package main import ( "fmt" ) func main(){ const NAME = "name" fmt.Println(NAME) }
常量是指編譯期間就已知且不可改變的值。常量能夠是數值類型(包括整型、浮點型和複數類型)、布爾類型、字符串類型等。數組
預約義常量閉包
true false iota // 常量計數器
枚舉
const ( Sunday = iota Monday Tuesday Wednesday Thursday Friday Saturday numberOfDays // 這個常量沒有導出 )
Go 語言中,以大寫字母開頭的常量在包外可見。numberOfDays 該常量只能在包內可用。函數
數據類型
基礎數據類型學習
布爾類型:bool 整型:int八、byte、int1六、int、uint、uintptr等 浮點類型:float3二、float64 複數類型:complex6四、complex128 字符串:string 字符類型:rune 錯誤類型:error
int8:取值範圍爲 -128~127ui
複合數據類型this
指針(pointer) 數組(array) 切片(slice) 字典(map) 通道(chan) 結構體(struct) 接口(interface)
數值運算
+ - * / %
比較運算符
> >= < <= == !=
位運算
x << y 左移 124 << 2 // 結果爲496 x >> y 右移 124 >> 2 // 結果爲31 x ^ y 異或 124 ^ 2 // 結果爲126 x & y 與 124 & 2 // 結果爲0 x | y 或 124 | 2 // 結果爲126 ^x 取反 ^2 // 結果爲-3
遍歷字符串
package main import ( "fmt" ) func main() { str := "hello 世界!" for _, s := range str { fmt.Println(string(s)) } }
數組及數組切片
arr1 := [5]int{1,2,3,4,5} arr2 := []int{}
數組長度在定義以後,不能更改。數組切片能夠。指針
流程控制
條件語句:if-else & else-if 選擇語句:switch & case & select 循環語句:for & range 跳轉語句:goto 其餘關鍵字:break & continue & fallthrough
條件語句 if-elsecode
package main import ( "fmt" ) func main() { a := 1 if a > 3 { fmt.Println("a > 3") } else { fmt.Println("a > 3 is fail") } }
警告:有返回值的函數中,if-else控制語句中不容許直接return
選擇語句 switch
package main import ( "fmt" ) func main() { i := 0 switch i { case 0: fmt.Println("0") case 1: fmt.Println("1") case 2: fmt.Println("2") } } // print -> "0"
循環語句 for
package main import ( "fmt" ) func main() { for i := 0; i < 10; i++ { fmt.Println(i) } } // print -> 1 ~ 9
函數
func (參數列表)(返回值列表) { 函數體 & 返回語句 }
不定參數
package main import ( "fmt" ) func myFunc(args ...int) { for _, i := range args { fmt.Println(i) } } func main() { myFunc(1, 2, 3, 4) } // print -> 1 2 3 4
警告:...type格式的類型只能做爲函數的參數類型存在,而且必須是最後一個參數
匿名函數
func(a, b int) int{} // 執行匿名函數 func(a,b int) int{}(1, 2) // 賦值 f := func(a ,b int) int{}
閉包
package main import ( "fmt" ) func main() { i := 5 f := func() func() { j := 10 return func() { fmt.Println(i, j) } }() f() i = 10 f() } // print -> 5 10 // print -> 10 10
錯誤處理
package main import ( "errors" "fmt" ) func main() { err := errors.New("this is a bug") fmt.Println(err) } // print -> "this is a bug"