1. 程式人生 > >Go學習筆記-go語言基礎

Go學習筆記-go語言基礎

Go 語言共有 25 個關鍵字,全部為小寫:


breakdefault funcinterfaceselect
casedefer gomap struct
chanelse gotopackage switch
constfallthroughifrangetype
continuefor importreturn var 
程式的一般結構:
通過 package 定義包名
只有名稱為 main 的包可以有 main 函式
通過 import 關鍵字匯入非 main 包
通過 const 關鍵字定義常量
通過 var 關鍵字宣告變數
通過 type 關鍵字和 struct 或 interface 搭配定義結構或介面
通過 func 關鍵字定義函式和方法


單行註釋:// 註釋內容
多行註釋:/* 註釋內容 */


匯入外部包的兩種方法:


import "fmt" 
import "os" 


import (
"fmt" 
"os" 
)
通過格式 <PackageName>.<ObjectName> 來對包中的物件進行呼叫
如果匯入包但未呼叫包中的任何物件,則會報出編譯錯誤
imported and not used
當兩個外部包的名稱過於相近或相同時,可以使用匯入別名來區分
import f "fmt"
還可以在呼叫某個外部包的內容時,省略包名直接呼叫
import . "fmt"
在 Go 語言中,使用 首字母大小 寫來決定該物件是否可以被外部包所呼叫
1)如果首字母為 小寫,則表示私有的
func privateFunc
2)如果首字母為 大寫,則表示公開的
func PublicFunc
該規則適用於 所有的 Go 語言物件,無論是內建的還是使用者自己建立的
###########
Go型別與變數


布林型:bool
長度:1 位
取值範圍:true – false
注意事項:不可以用數字表示
整型:int/uint
1) 根據平臺不同可以為 32 或 64 位
8 位整型:int8/uint8
1) 長度:1 位元組
2) 取值範圍:-128 - 127/0 - 255
位元組型:byte(uint8 的別名)
16 位整型:int16/uint16
長度:2 位元組
取值範圍:-32768 - 32767/0 – 65535
32 位整型:int32(rune)/uint32
1) 長度:4 位元組
2) 取值範圍:-232/2 - 232/2-1/0 - 233-1
64 位整型:int64/uint64
1) 長度:8 位元組
2) 取值範圍:-264/2 - 264/2-1/0 - 265-1
浮點型:float32/float64
長度:4/8 位元組
小數位:精確到 7/15 小數位
複數型:complex64/complex128
長度:8/16 位元組
 指標型:uintptr
足夠儲存指標的 32 或 64 位整型
 其它值型別:
陣列(array)
結構(struct)
字串(string)
引用型別(非傳統引用):
切片(slice)
類雜湊表(map)
管道(chan)
介面型(interface)
函式型(func)


零值並不等價於空值(NULL),是指在變數被宣告為某種型別之後自動獲得的預設值。


int-> 0
bool -> false
float64 ->0.0
string ->""(空字串)
結構->空結構
引用型別->nil(空指標)
##類型別名
類型別名可以為某個型別賦予新的合法名稱
類型別名並不是單純的重新命名或指向,而是用源型別作為底層型別,定義了一個全新的型別
新型別與源型別之間需要型別轉換,屬於相互相容的型別
新型別可以擁有屬於自己的一套方法
新型別不會繼承源型別的方法,而需要進行型別轉換後才可呼叫
##變數的宣告與賦值
單個變數的宣告與賦值:
宣告格式:var <變數名稱> <變數型別>
賦值格式:<變數名稱> = <表示式>
宣告並賦值(型別推斷):
var <變數名稱> [變數型別] = <表示式>
<變數名稱> := <表示式>
使用下劃線(_)拋棄賦值:_ = <表示式>
多個變數的宣告與賦值
可以使用 var() 的形式進行簡寫
可以使用並行賦值(變數的型別是相同的):
var <變數1>, <變數2> [變數型別] = <表示式1>, <表示式2>
<變數1>, <變數2> := <表示式1>, <表示式2>
##對變數進行型別轉換
Go 語言不存在隱式轉換,所有型別轉換必須顯式宣告
型別轉換隻能發生在兩種相互相容的型別之間(例如:整型和整型之間)
型別轉換的格式:
<變數2> [:]= <型別2>(<變數1>)
##常量與運算子
常量的值在編譯時就已經確定
常量的定義格式與變數基本相同
使用 const 關鍵字來定義常量
使用 const() 關鍵字來定義常量組
常量等號右側必須是常量或者常量表達式
常量表達式所涉及的函式必須是內建函式
##常量組的自動賦值特性
在定義常量組時,如果不提供初始值,則預設使用上一行的表示式
使用相同的常量表達式不代表具有相同的值


const(
a = "A"
b
)
##iota 計數器的使用
iota 是常量組的計數器
iota 從 0 開始,每行遞增 1
每個新的常量組都會將 iota 的值重置為 0
通過常量的初始化規則和 iota 計數可達到列舉的效果


const(
a = iota
b
)
##運算子的操作方法
Go 語言中的運算子均是從左至右結合
運算子具有優先順序(從高到底):


!(一元運算子)
* /%<<>> &&^
+ -|^
==   !=< <=>=>
<-(專門用於 channel)
&&(二元運算子)
||
1.  取反:!
1)!false
四則運算:+ - * /
1)1 + 2 * 3 / 4
取餘:%
1)8 % 5
左移/右移:<< / >>
1)1 << 10
2)1000 >> 2
按位與:&
1) 3 & 2
按位與非:&^
1)6 &^ 11
按位或:|
1)5 | 3
按位異或(XOR):^
1)5 ^ 2
邏輯運算子:
1)==   != <<=>=>
2)&&  ||

<-專門用於 channel
管道傳入/取出:<-
1)<-chan
2)chan<- true
###
Go語言控制語句
###
##Go語言控制語句 if
Go 語言中的判斷語句 if 包含以下特性:
條件表示式兩側不需要括號
左大括號必須和條件語句或 else 語句在同一行
支援一個初始化表示式(可以是並行賦值)
初始化語句中的變數為 block 級別(包括 else 程式碼塊)
##迴圈語句 for
Go 語言中的迴圈語句只有一個 for 關鍵字,其包含以下特性:
左大括號必須和條件語句在同一行
支援無限迴圈、條件迴圈和步進表示式
初始化和步進表示式可以是多個值
條件語句每次迴圈都會被檢查,因此建議儘量使用常量和變數代替函式
##選擇語句 switch
Go 語言中的選擇語句使用關鍵字 switch,其包含以下特性:
左大括號必須和條件語句在同一行
支援一個初始化表示式(可以是並行賦值)
可以使用任何型別或表示式作為條件語句
不需要顯示呼叫 break,一旦條件符合就會結束判斷
如果希望繼續執行下一個 case,則需要顯示呼叫 fallthrough 語句
##跳轉語句
Go 語言中的跳轉語句包括關鍵字 goto、break 和 continue,主要包含以下特性:
三種語法都可以配合標籤使用
標籤名區分大小寫,不適用標籤則會導致編譯錯誤
break 和 continue 關鍵字與標籤的組合可用於跳出多層迴圈
goto 關鍵字的作用是調整執行位置,與其它兩個關鍵字的原理並不相同