#Go中的變數和類型
在Go中,我們使用var
來定義變數:
var age = 20
變量可以在包層級進行定義:
package main
import "fmt"
var age = 20
func main() {
fmt.Println("Hello, World!")
}
也可以在函數內進行定義:
package main
import "fmt"
func main() {
var age = 20
fmt.Println("Hello, World!")
}
在包層級定義的變量在組成包的所有文件中都可見。一個包可以由多個文件組成,只需要創建另一個文件並在頂部使用相同的包名。
在函數層級定義的變量只在該函數內可見。當調用函數時,它被初始化,當函數結束執行時,它被銷毀。
在我們的示例中,我們使用:
var age = 20
將值20
分配給age
。這使得Go確定變量age
的類型為int
。
我們稍後會見到更多關於類型的內容,但你應該知道有很多不同類型的數據類型,從int
、string
到bool
。
我們還可以聲明一個沒有現有值的變量,但在這種情況下,我們必須像這樣設置類型:
var age int
var name string
var done bool
當你知道值時,你通常會使用短變量聲明和:=
運算符:
age := 10
name := "Roger"
對於變量的名稱,你可以使用字母、數字和下劃線_
,只要名稱以字母或下劃線開頭即可。
名稱是區分大小寫的。
如果名稱很長,通常使用駝峰命名法(camelCase),所以用於指示汽車名稱的名稱我們使用carName
。
你可以使用賦值運算符=
將新值賦給變量:
var age int
age = 10
age = 11
如果你有一個在程序中從不改變的變量,你可以使用const
將其聲明為常量:
const age = 10
你可以在一行上聲明多個變量:
var age, name
同時也可以對它們進行初始化:
var age, name = 10, "Roger"
//或者
age, name := 10, "Roger"
在程序中聲明但未使用的變量會引發錯誤,程序無法編譯。
在VS Code中你會看到一個警告:
以及來自編譯器的錯誤:
如果你聲明一個變量而沒有將其初始化為一個值,它將自動被賦予一個值,這個值根據類型而定,例如整數是0
,字符串是一個空字符串。
Go是一種靜態類型語言。
我們已經看到你可以聲明一個變量指定其類型:
var age int
或者讓Go從分配的初始值中推斷該類型:
var age = 10
Go中的基本類型有:
- 整數(
int
、int8
、int16
、int32
、rune
、int64
、uint
、uintptr
、uint8
、uint16
、uint64
) - 浮點數(
float32
、float64
),用於表示十進制數 - 複雜類型(
complex64
、complex128
),用於數學計算 - 字節(
byte
),表示單個ASCII字符 - 字符串(
string
),一組byte
- 布爾值(
bool
),true或false
我們有很多不同類型來表示整數,你大部分時間都會使用int
,而當你需要進行優化時,你可能會選擇一個更專業化的類型(在初學時不需要考慮這些)。
int
類型在64位系統上使用時,默認為64位,32位系統上為32位,以此類推。
uint
是一個無符號的int
,如果你知道數字不會是負數,你可以使用它來將可以存儲的值翻倍。
以上所有基本類型都是值類型,這意味著當作為參數傳遞給函數時,或從函數返回時,它們都是按值傳遞的。