Go語言中變數是什麼

2022-12-02 22:00:54

在Go語言中,變數是程式執行過程中,內容可以變化(修改)的量; 變數是程式的基本組成單位,是記憶體中一個資料儲存空間的表示,可以通過變數名找到變數值。變數的功能是儲存使用者的資料,是計算機語言中能儲存計算結果或能表示值抽象概念。

php入門到就業線上直播課:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

1、概述

變數(Variable)是程式執行過程中,內容可以變化(修改)的量; 變數是程式的基本組成單位,是記憶體中一個資料儲存空間的表示,可以通過變數名找到變數值。

變數的功能是儲存使用者的資料,是計算機語言中能儲存計算結果或能表示值抽象概念。

變數,是通過變數的識別符號定位值的過程。變數的記憶體模擬演示:

1.png

2、定義:宣告和初始化

定義變使用var關鍵字,需要指定其型別,可以同時初始化,如果沒有指定初始化值,則使用型別的預設值,語法如下:

// 宣告變數,未初始化(預設值初始化)
var name string
// 宣告變數,特定值初始化
var user string = "Hank"
登入後複製

Go語言中的變數必須宣告後才可以使用,不能直接使用未定義的變數。

3、型別預設值(零值)

Go語言的型別預設值如下所示: 整型和浮點型變數的預設值為 0。 字串變數的預設值為空字串。 布林型變數預設為 bool。 切片、函數、指標變數的預設為 nil。

4、強型別

Go語言是強型別語言,變數必須有型別,同時變數僅僅可以儲存特定型別的資料。【相關推薦:Go視訊教學

5、型別推導

定義變數時,如果指定了初始值,則可以省略型別的定義,Go語言可以自己由資料推匯出型別。 語法為:

// 宣告變數,特定值初始化,型別推匯出user為字串string型
var user = "Hank"
登入後複製

6、短宣告(定義)

為了簡化定義變數,使用運運算元 := 配合型別推導,可以快速完成變數的定義,語法為:

user := "hank"
登入後複製

7、批次定義

使用var或:=都可以一次性定義多個變數,語法為:

var

var (
  v1 = 42
  v2 = "hank"
  )
也可以
var v1, v2 = 42, "hank"
登入後複製

:=

v1, v2 := 42, "hank"
登入後複製

推薦使用 var() 宣告塊語法,因為程式碼維護容易。

8、批次賦值

一次性為多個變數進行賦值。(類似短定義。v1, v2, v3 := 42, "hank", false) 當變數定義完畢後,再批次對其賦值,沒有定義功能! 語法為:

var (
  v1 int
  v2 int
)
// 批次賦值
v1, v2 = 42, 1024
登入後複製

該語法,通常配合函數的批次返回來使用,一次性接收多個返回值,語法為:

func main() {
  var (
    v1 int
    v2 int
  )
  // 呼叫函數,接收其返回值
  v1, v2 = getData()
}
// 返回兩個值的函數
func getData() (int, int) {
  // 返回了兩個值(假設42為最小值,1024為最大值)
  return 42, 1024
}
登入後複製

非常方便的可以交換兩個變數的值:

var (
  v1 = 42
  v2 = 1024
)
// 交換
v1, v2 = v2, v1
登入後複製

執行後,v1==1024, v2==42

9、匿名變數

識別符號為_(下劃線)的變數,是系統保留的匿名變數,在賦值後,會被立即釋放,稱之為匿名變數。其作用是變數預留位置,對其變數賦值結構。通常會在批次賦值時使用。 例如,函數返回多個值,我們僅僅需要其中部分,則不需要的使用_來佔位,演示:

func main() {
  var (
    v int
  )
  // 呼叫函數,僅僅需要第二個返回值,第一,三使用匿名變數佔位
  _, v, _ = getData()
}
// 返回兩個值的函數
func getData() (int, int, int) {
  // 返回3個值
  return 42, 1024, 2012
}
登入後複製

10、變數作用域

Go語言中的變數是塊作用域。 塊,指的是使用{}定義的程式碼段,包括函數,if/switch/for語句,或獨立的{}都是塊。在塊內定義的變數僅僅在本塊內可用。 定義,指的是 var 或者 := 定義的變數。 Go語言的作用域是層疊的,就是說內層塊可以直接存取到外層塊的變數,前提是內層塊沒有定義同名的外層變數。 演示如下:

// 全域性(函數外)定義3個變數
var (
  v1 = 1
  v2 = 2
  v3 = 3
)
func main() {

  // main{}函數塊,定義2個變數
  var (
    v2 = 22
    v3 = 33
  )
  fmt.Println(v1, v2, v3)
  // 結果 1 22 33

  {
    // main()函數內部{}塊,定義1個變數
    var (
      v3 = 333
    )
    fmt.Println(v1, v2, v3)
    // 結果 1 22 333
  }
}
登入後複製

上面程式碼中: 在main()中,v2,v3被重新定義,則在main()中,v1是外部,而v2, v3是main函數區域性的。 在main()內部的{}中,v3被重新定義,則在main()內部的{}中,v1是外部,而v2是main()定義的, v3是main()內部{}定義的的。

變數可以沿內部作用域向外部作用域查詢變數的過程。

帶有{}的語句,其中的變數也僅僅在內部有效,例如for,if,switch等,演示:

for i := 0; i < 10; i++ {
  fmt.Println(i)
}
fmt.Println(i)
// 會提示變數i未定義, undefined: i
登入後複製

注意i,是通過短宣告在for內部定義的變數,僅僅在for內部有意義。

互不巢狀的{}見作用域不可見,不可互相存取。

func main() {
  {
    v := 42
  }
  {
    fmt.Println(v)
    // 會提示變數v未定義, undefined: v
  }
}
登入後複製

更多程式設計相關知識,請存取:!!

以上就是Go語言中變數是什麼的詳細內容,更多請關注TW511.COM其它相關文章!