2、語法&變常量
1、語法
格式化:
go語言編碼有固定的格式,甚至為此提供了格式化工具format。
註釋:
//單行註釋
/*多行註釋*/
識別符號:
可以是任何 UTF-8 編碼的字元或下劃線開頭(可以使用中文)。由於區分大小寫(可見性規則),識別符號Sb與sb是兩個不同的變數,前者可以匯出(相當於public),為其他包所用,而後者不可,中文識別符號亦是後者。與其他語言類似,不能使用數字及其關鍵字作為識別符號。Go語言約定命名應該使用駝峰法。
分號:
一行代表一個語句的結束,編譯器會在語句的末尾插入分號,如果使用類似for迴圈語句或者將多條語句寫在同一行,必須人為分隔開來。
fmt.Println ("末尾已自動插入分號")
for i<f(){fmt.Println("單個語句")}//沒有問題
for i<f(){fmt.Println("多個語句");fmt.Println("人為使用分號")}
for i<f()//括號末尾已插入,引發語法錯誤,左大括號應在此行
{
}
關鍵字:
25個關鍵字
break | case | chan | const | continue |
---|---|---|---|---|
default | defer | else | fallthrough | for |
func | go | goto | if | import |
interface | map | package | range | return |
select | struct | switch | type | var |
預定義字元:
可重新定義,例如重新定義new函式,但定義之後不可以使用內建new函式。
append | bool | byte | cap | close | complex |
---|---|---|---|---|---|
complex64 | complex128 | copy | false | float32 | float64 |
imag | uint | int | uint8 | int8 | uint16 |
int16 | uint32 | int32 | uint64 | int64 | iota |
len | make | new | nil | panic | |
println | real | recover | string | true | uintptr |
error | rune | delete |
2、變數&常量
資料型別
☆基本資料型別:整數型(int)、浮點型(float)、複數型(complex)、布林型(bool)、字串型別(string)
☆複合資料型別:指標型別(pointer)、陣列型別(array)、切片型別(slice)、結構化型別(struct)、Channel型別(channel)、Map型別(map)、函式型別(func)、介面型別(interface)
☆自定義型別
宣告語句:
var——變數
const——常量
type——自定義型別
func——函式
變數:
☆宣告:
//宣告時不賦值則用零值初始化該值,數值型別為0(浮點數為0.0),布林為false,字串為空字串"",介面或
//引用型別(slice/map/chan/函式/指標)為nil。陣列或結構體等聚合型別對應的零值是每個元素對應的零值
var i int//初始化零值為0
var i,j,k int//宣告多個變數
var(
i int
s string
)//宣告多個不同型別變數
var i int=2//初始化i值為2
var i=2//初始化i值為2,變數型別自動推導
var i,s,b = 2,"s的初始值",false//多個變數對應賦值
name := "白起"//函式內部即區域性變數簡短宣告,變數型別自動推導
i,j :=0,"中原"
i,j = j,i//交換兩者的值,僅僅是賦值操作,兩者型別必須一樣,承接上句會報錯
f,err:=os.Open(file)//可以使用函式返回值賦值
f,err:=os.Open(file)//與上句相同,報錯,必須用一個新的變數,剩餘變數重新賦值,如改為f,er。_
_,err:=os.Open(file)//下劃線用於拋棄其值,在這裡,函式返回兩個值,而我們只需要返回後者
☆轉換:
具有相同底層型別的變數之間可以相互轉換,go語言無隱式轉換(常量中有例外),必須顯示轉換,如a :=int(33.0)
☆指標:
變數又被稱為可定址的值。每個變數都對應一個儲存其型別值的記憶體空間。指標則是指向這個變數的記憶體空間的地址,通過&x即可取得x的記憶體地址即x的指標,如果x為int資料型別,則其指標型別則是*int(指向int型別的指標),若p=&x,則*p(等同於x的別名)讀取指標指向變數的值。
☆語法糖之new函式:建立一指定型別的變數並返回其值(指標)
☆變數的生命週期:
包一級:與程式執行週期一樣長
區域性變數:(一般指函式內部),從宣告語句開始,直到其不再被引用,函式的引數變數及其返回值都是區域性變數。
常量:
常量在編譯時計算,其值必須在編譯時就能夠確定,值是不可修改的。常量的資料型別只能是基本型別。常量的宣告使用const關鍵字,和變數的宣告語法相似。
☆iota常量生成器:(列舉)
//在第一次宣告iota的地方,被置為0,然後遞增
type week int
const(
sunday week=iota//iota=0,可理解為const語句中的行索引
monday//iota=1
tuesday
wednesday
thursday
friday
saturday
)
//遇到const關鍵字iota重置為0
const(//無型別常量,未宣告具體型別,編譯器為此提供更高精度的算術運算
_=1<<(10*iota)
KB//1024
MB//1024*1024
GB
TB
PB
EB
ZB//超出go語言整數表示範圍
YB//超出go語言整數表示範圍,但YB/ZB表示式有效
)
☆隱式轉換
var f float64=2//無型別整數轉換為float64
f='a'//無型別rune轉換為float64
//以上兩句相當於
var f float64=float64(2)
f=float64('a')
☆其他:
const (
a=1
b//省略初始化表示式,b的值也是1
)
const(
a=iota
c="斷點"//獨立值
d=iota//iota必須顯示恢復,此時iota為2
e=len(c)//常量值還可以是len、cap、unsafe.Sizeof等編譯時可以確定的函式返回值
)