1. 程式人生 > >2、語法&變常量

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 print
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等編譯時可以確定的函式返回值