藝多不壓身,學習一下最近蠻火的Go語言,整理一下筆記,相關Code和筆記也放到了Git上,傳送門,
1.從Hello world開始
- GOPATH 1.8版本默認在%USERPROFILE%/go
- 命令build命令 go build xxx.go, 運行命令go run xxx.go
- Go默認情況下會使用靜態鏈接, 編譯好的檔案可以直接運行
- 應用程式入口必須是main包, package main 必須是main方法:func main() 檔案名不一定是main.go
- Go中main函式不支持任何回傳值,通過os.Exit來回傳狀態
- main函式不支持傳入引數,在程式中直接通過os.Args獲取命令列引數
2.測驗程式,變數,常量
- 原始碼檔案必須以_test結尾: xxx_test.go
- 測驗方法名以Test開頭: func TestXXX(t *testing.T) {...}
- 運行命令 go test -v .\first_test.go
- Go支持多種復制關系以及一定的型別推斷,但在2.0版本后將會不推薦甚至禁用一部分寫法,目的是code的風格統一
- 同一個檔案夾下不同go檔案的package要相同,否則會報錯 can't load package: package...
- 在一個賦值陳述句中可以對多個變數進行同時賦值 例如: a,b=b,a
常量定義方面
// 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
- 默認型別根據運行的機器的位數決定使用多少位,
- Go語言不允許任何隱式型別轉換
- 別名和原有型別也不能進行隱式型別轉換
型別的預定義值
例如:
math.MaxInt64
math.MaxFloat64
math.MaxUnit32
指標型別 于其他主要變成語言的差異
1. 不支持指標運算
2. string是值型別,其默認的初始化值為空字串,而不是nil
4.運算子
算術運算子
- 常用運算子如 + - * / % ++(后置) --(后置)與別的語言沒什么差異
- 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 {
...
}
區別:
- condition運算式結果必須為布林值(沒有隱式轉換,int是不可以的)
- 支持變數賦值:
if vardeclaration; condition {
// code to be executed if condition is true
}
switch條件與其他語言的差異
- 條件運算式不限制為常量或者整數
- 單個case中,可以出現多個結果選項,使用逗號分隔
- 與C語言等規則相反,Go語言中不需要使用break來明確退出一個case
- 可以不設定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")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/5023.html
標籤:Go
上一篇:go mod包管理 加代理下載
