文章目錄
- 標識符的組成規則
- Go語言關鍵字
- 預定義標識符
- 標識符命名慣例
- 特殊標識符
- 標識符訪問權限控制
在Go語言中,標識符(Identifier)是用來命名變量、函數、類型、常量等程序實體的名稱。
標識符的組成規則
1、必須以字母或下劃線(_)開頭:
字母包括Unicode字符集中的任何字母字符。可以使用中文等非ASCII字符作為標識符(但不推薦)。
2、后續字符可以是字母、數字或下劃線
例如:name, age, _count, x1都是合法的標識符。
3、區分大小寫
Name和name是不同的標識符。
4、不能是Go語言的關鍵字
Go有25個保留關鍵字,不能用作標識符。
Go語言關鍵字
以下是Go語言的保留關鍵字,不能用作標識符:
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
預定義標識符
Go還有一些預定義的標識符,雖然它們不是關鍵字,但最好避免使用它們作為自己的標識符:
true false iota nilint int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string errormake len cap new append copy close delete
complex real imag
panic recover
如果定義一個變量名字為int,會顯的很怪異,并且也是很容易出錯的,可讀性也不強,但是在Go語言中是允許的,這是一件很雞賊的事情。其實我很不理解,Go語言有如此之多的強制性要求,為什么不把這個點修改了?是沒必要還是修改起來困難呢?
標識符命名慣例
1、駝峰命名法(CamelCase)
公開的標識符(首字母大寫):GetName, ServerAddr非公開的標識符(首字母小寫):getName, serverAddr
2、簡短而有意義
Go傾向于使用短小但有描述性的名稱例如用i而不是index作為循環變量
3、避免使用下劃線
除非是特殊用途(如測試文件_test.go)
4、包名應簡短
通常使用小寫單數名詞,如http, time, json
特殊標識符
空白標識符(_): 用于忽略值
go
_, err := someFunction() // 忽略第一個返回值
標識符訪問權限控制
大小寫決定標識符的可見性(導出規則):
1、首字母大寫:表示該標識符是可導出的(exported/public),可以被其他包訪問
go
type Person struct { // 可被其他包使用Name string // 可被其他包訪問age int // 不可被其他包訪問
}func SayHello() { // 可被其他包調用fmt.Println("Hello")
}
首字母小寫:表示該標識符是包私有的(unexported/private),只能在當前包內使用
go
type internalStruct struct { // 只能在當前包使用field string
}func helperFunc() { // 只能在當前包調用fmt.Println("helper")
}