首頁  >  文章  >  後端開發  >  Go語言中變數是什麼

Go語言中變數是什麼

青灯夜游
青灯夜游原創
2022-12-02 19:53:365651瀏覽

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

Go語言中變數是什麼

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

1、概述

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

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

變量,是透過變數的識別碼定位值的過程。變數的記憶體模擬示範:

Go語言中變數是什麼

2、定義:宣告與初始化

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語言中變數是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn