變量和常量
Go語言文件的基本結構
package main
// 導入語句
import "fmt"
// 函數外只能放置標識符(變量、常量、函數、類型)的聲明
// 程序的入口函數 main函數沒有參數也沒有返回值
func main(){
fmt.Println("Hello world")
}
標識符與關鍵字
標識符
在編程語言中標識符就是程序員定義的具有特殊意義的詞,比如變量名、常量名、函數名等等。 Go語言中標識符由字母數字和_(下劃線)組成,並且只能以字母和_開頭。 舉幾個例子:abc, _, _123, a123。
關鍵字
關鍵字是指編程語言中預先定義好的具有特殊含義的標識符。 關鍵字和保留字都不建議用作變量名。
Go語言中有25個關鍵字:
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語言中還有37個保留字。
Constants: true false iota nil
Types: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
Functions: make len cap new append copy close delete
complex real imag
panic recover
變量(Variable)的功能是存儲數據。
常見變量的數據類型有:整型、浮點型、布爾型等。
Go語言中的每一個變量都有自己的類型,並且變量必須經過聲明才能開始使用。
Go語言中的變量必須先聲明再使用
Go語言中的變量需要聲明後才能使用,同一作用域內不支持重複聲明。 並且Go語言的變量聲明後必須使用。
聲明變量
標準聲明
Go語言的變量聲明格式為:
var 變量名 變量類型
變量聲明以關鍵字var開頭,變量類型放在變量的後面,行尾無需分號。 舉個例子:
var name string
var age int
var isOk bool
批量聲明
每聲明一個變量就需要寫var關鍵字會比較繁瑣,go語言中還支持批量變量聲明:
var (
a string
b int
c bool
d float32
)
變量的初始化
Go語言在聲明變量的時候,會自動對變量對應的內存區域進行初始化操作。每個變量會被初始化成其類型的默認值,例如: 整型和浮點型變量的默認值為0。 字符串變量的默認值為空字符串。 布爾型變量默認為false。 切片、函數、指針變量的默認為nil。
var 變量名 類型 = 表達式
類型推導
var name = "Q1mi"
var age = 18
匿名變量
在使用多重賦值時,如果想要忽略某個值,可以使用匿名變量(anonymous variable)。 匿名變量用一個下劃線_表示,例如:
func foo() (int, string) {
return 10, "Q1mi"
}
func main() {
x, _ := foo()
_, y := foo()
fmt.Println("x=", x)
fmt.Println("y=", y)
}
匿名變量不佔用命名空間,不會分配內存,所以匿名變量之間不存在重複聲明。 (在Lua等編程語言裏,匿名變量也被叫做啞元變量。)
注意事項:
函數外的每個語句都必須以關鍵字開始(var、const、func等)
:=不能使用在函數外。
_多用於佔位,表示忽略值。
代碼:
package main
import "fmt"
// Go語言中推薦使用駝峯式命名
var student_name string
var studentName string // 推薦小駝峯
var StudentName string
// go fmt main.go 格式化 main.go
// 聲明變量
// var name string
// var age int
// var isOk bool
// 批量聲明
var (
name string
age int
isOk bool
)
func main(){
name = "理想"
age = 16
isOk = true
// Go語言中非全局變量聲明必須使用,不使用就編譯不過去
fmt.Print(isOk) // 在終端中輸出要打印的內容
fmt.Println()
fmt.Printf("name:%s\n",name) // %s:佔位符 使用name這個變量的值去替換佔位符
fmt.Println(age) // 打印完指定的內容之後會在後面加一個換行符
// 聲明變量同時賦值
var s1 string = "whb"
fmt.Println(s1)
// 類型推導(根據值判斷該變量是什麼類型)
var s2 = "20"
fmt.Println(s2)
// 簡短變量聲明 只能在函數裏面使用
s3 := "哈哈"
fmt.Println(s3)
// s1 := "10" // 同一個作用域({})中不能重複聲明同名的變量
// 匿名變量是一個特殊的變量:_
}
常量
常量是程序運行中恆定不變的量
常量的聲明和變量聲明非常類似,只是把var換成了const,常量在定義的時候必須賦值。
const同時聲明多個常量時,如果省略了值則表示和上面一行的值相同。
iota是go語言的常量計數器,只能在常量的表達式中使用。
iota在const關鍵字出現時將被重置為0。const中每新增一行常量聲明將使iota計數一次(iota可理解為const語句塊中的行索引)。 使用iota能簡化定義,在定義枚舉時很有用。
package main
import "fmt"
// 常量
// 定義了常量之後不能修改
// 在程序運行期間不會改變的值
const pi = 3.1415926
const (
statusOk = 200
notFound = 404
)
// 批量聲明常量時,如果某一行聲明後沒有賦值,默認就和上一行一致
const(
n1 = 100
n2
n3
)
// iota 類似枚舉
const (
a1 = iota // 0
a2 // 1
a3 // 2
)
const(
b1 = iota // 0
b2 // 1
_ // 2
b3 // 3
)
// 插隊
const (
c1 = iota // 0
c2 = 100 // 100
c3 = iota // 2
c4 // 3
)
// 多個常量聲明在一行
const(
d1, d2 = iota + 1, iota + 2 // d1:1 d2:2
d3, d4 = iota + 1, iota + 2 // d3:2 d4:3
)
// 定義數量級
const (
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
PB = 1 << (10 * iota)
)
func main(){
// pi = 123
fmt.Println("n1:", n1)
fmt.Println("n2:", n2)
fmt.Println("n3:", n3)
fmt.Println("a1:", a1)
fmt.Println("a2:", a2)
fmt.Println("a3:", a3)
fmt.Println("b1:", b1)
fmt.Println("b2:", b2)
fmt.Println("b3:", b3)
fmt.Println("c1:", c1)
fmt.Println("c2:", c2)
fmt.Println("c3:", c3)
fmt.Println("c4:", c4)
fmt.Println("d1:", d1)
fmt.Println("d2:", d2)
fmt.Println("d3:", d3)
fmt.Println("d4:", d4)
}