#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

我們稍後會見到更多關於類型的內容,但你應該知道有很多不同類型的數據類型,從intstringbool

我們還可以聲明一個沒有現有值的變量,但在這種情況下,我們必須像這樣設置類型:

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中你會看到一個警告:

Screen Shot 2022-07-28 at 15.45.31.png

以及來自編譯器的錯誤:

Screen Shot 2022-07-28 at 15.45.44.png

如果你聲明一個變量而沒有將其初始化為一個值,它將自動被賦予一個值,這個值根據類型而定,例如整數是0,字符串是一個空字符串。

Go是一種靜態類型語言。

我們已經看到你可以聲明一個變量指定其類型:

var age int

或者讓Go從分配的初始值中推斷該類型:

var age = 10

Go中的基本類型有:

  • 整數(intint8int16int32runeint64uintuintptruint8uint16uint64
  • 浮點數(float32float64),用於表示十進制數
  • 複雜類型(complex64complex128),用於數學計算
  • 字節(byte),表示單個ASCII字符
  • 字符串(string),一組byte
  • 布爾值(bool),true或false

我們有很多不同類型來表示整數,你大部分時間都會使用int,而當你需要進行優化時,你可能會選擇一個更專業化的類型(在初學時不需要考慮這些)。

int類型在64位系統上使用時,默認為64位,32位系統上為32位,以此類推。

uint是一個無符號的int,如果你知道數字不會是負數,你可以使用它來將可以存儲的值翻倍。

以上所有基本類型都是值類型,這意味著當作為參數傳遞給函數時,或從函數返回時,它們都是按值傳遞的。