Go 其一 基礎內容

  藝多不壓身,學習一下最近蠻火的Go語言,整理一下筆記。相關Code和筆記也放到了Git上,傳送門linux

 

1.從Hello world開始git

  1.  GOPATH 1.8版本默認在%USERPROFILE%/go
  2.  命令build命令 go build xxx.go, 運行命令go run xxx.go
  3.  Go默認狀況下會使用靜態連接, 編譯好的文件能夠直接運行
  4.  應用程序入口必須是main包, package main 必須是main方法:func main()  文件名不必定是main.go
  5.  Go中main函數不支持任何返回值,經過os.Exit來返回狀態 
  6. main函數不支持傳入參數,在程序中直接經過os.Args獲取命令行參數

 

 

2.測試程序,變量,常量github

  1.  源碼文件必須以_test結尾: xxx_test.go
  2. 測試方法名以Test開頭: func TestXXX(t *testing.T) {...}
  3. 運行命令 go test -v .\first_test.go
  4.  Go支持多種複製關係以及必定的類型推斷,但在2.0版本後將會不推薦甚至禁用一部分寫法,目的是code的風格統一
  5.  同一個文件夾下不一樣go文件的package要相同,不然會報錯 can't load package: package...
  6.  在一個賦值語句中能夠對多個變量進行同時賦值 例如: a,b=b,a

 

  常量定義方面windows

// 1.快速設置連續值
const (
Monday = iota + 1
Tuseday
Wednesday
...
Sunday
)

// 2. 表狀態的bite位也能夠這麼玩
Const (
Open = 1 << iota
Close
Pending
)

  

 

3.基本數據類型數組

bool
string
int int8 int16 int32 int64
uint unit8 unit16 unit32 unit64 uintptr
byte // alias for unit8
rune // alias for int32, represents a Unicode code point !!!這個類型之後會詳詳細介紹,暫且放一放
float32 float64
complex64 complex128函數

  1. 默認類型根據運行的機器的位數決定使用多少位。
  2. Go語言不容許任何隱式類型轉換
  3. 別名和原有類型也不能進行隱式類型轉換

類型的預約義值
  例如:
    math.MaxInt64
    math.MaxFloat64
    math.MaxUnit32學習

指針類型 於其餘主要變成語言的差別
  1. 不支持指針運算
  2. string是值類型,其默認的初始化值爲空字符串,而不是nil測試

 

 

4.運算符ui

算術運算符spa

  1. 經常使用運算符如 + - * / % ++(後置) --(後置)與別的語言沒什麼差別
  2. Go語言中沒有前置的 ++ -- (先自增,再引用)

比較運算符
  經常使用運算符與別的語言沒什麼差別,但什麼對象能夠比較稍有差別,往後補充

  例:用==比較數組
    相同維數且含有相同個數元素的數組纔可比較
  每一個元素都相等才相等

邏輯運算符
與別的語言沒由什麼差別

位運算符
&    |   ^    <<    >>沒什麼差別
  與其餘語言的差別 &^ 按位置零 (按位清零) 運算符
    1 &^ 0 -- 1
    1 &^ 1 -- 0
    0 &^ 1 -- 0
    0 &^ 0 -- 0
  該運算符這樣計算, 只要操做符右邊的運算數上的位置爲1,不管左邊對應位置上的運算數是多少都清零。
右邊操做符上的操做數爲0時則左邊原來是什麼就顯示什麼。


注意,使用Go語言就要使用Go的特色,寫出真正的Go程序而不是將其餘語言翻譯成Go.

 

5.條件和循環

循環
  Go語言僅支持循環關鍵字for
  例 for j:= 7; j <= 9; j++ (不須要括號括起來)

while條件循環 while (n < 5)
Go版本
n := 0
for n < 5 {
n++
fmt.Println(n)
}

無限循環 while(true)
Go版本
n := 0
for {
...
}

  

if條件

例:
if condition {
...
} else {
...
}

if condition - 1 {
...
} else if condition - 2 {
...
} else {
...
}

  

區別:

  1. condition表達式結果必須爲布爾值(沒有隱式轉換,int是不能夠的)
  2. 支持變量賦值:
if vardeclaration; condition {
// code to be executed if condition is true
}

  

switch條件與其餘語言的差別

  1. 條件表達式不限制爲常量或者整數
  2. 單個case中,能夠出現多個結果選項,使用逗號分隔
  3. 與C語言等規則相反,Go語言中不須要使用break來明確退出一個case
  4. 能夠不設定switch以後的條件表達式,在此種狀況下,整個switch結構與多個if...else...的邏輯做用等同
寫法舉例:
1.
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
//break
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.", os)
}

2.
switch {
case 0 <= Num && Num <= 3:
fmt.Prinft("0-3")
case 4 <= Num && Num <= 6:
fmt.Prinft("4-6")
case 7 <= Num && Num <= 9:
fmt.Prinft("7-9")
}
相關文章
相關標籤/搜索