『Go基礎』第7節 變量

1. 什麼是變量?

我們應該怎麼去理解變量? 在這裏我要舉一個例子:

大家應該都知道王者榮耀這個遊戲. 當我們在玩王者榮耀的時候, 我們操控的英雄的血量是不斷變化的, 這個血量是存在內存中的. 那麼這個血量就是一個變量.

在程序運行的過程中, 其值可以改變的量, 我們就稱爲變量.

通過上面例子可以發現:

  • 變量是存儲在內存中的
  • 變量是可以改變的

我們說變量是存儲在內存中, 那麼內存又是什麼呢?

內存是一個連續的數據集合, 每一個內存存儲區域都有一個唯一的地址標識, 稱爲內存地址. 就好比我們的身份證一樣, 每個人都有一個唯一的身份證.

我們知道了變量是什麼, 那麼在Go語言中, 變量應該如何定義呢?

2. 變量

2.1 變量的定義

Go最基本的變量定義方式是使用 var 關鍵字, 其基本格式爲:

var 變量名 數據類型

變量的聲明以關鍵字var 開頭, 行尾不需要分號

比如說, 我們定義一個名稱爲 hp , 類型爲 int 的變量:

var hp int  // int表示爲整型

我們來聲明一個變量並打印一下看看:

package main

import "fmt"

func main() {
    // 使用 var 定義一個變量, 注意: 變量類型要放在變量名後面
    var hp int
    fmt.Println(hp)
}

// 結果:
0

奇怪? 我都沒有給hp一個具體的值, 怎麼打印出來爲0呢?

其實, 這是Go的一個特點: 當我們在聲明一個變量的時候, 如果沒有初始值, Go會給其一個對應類型的默認值.

既然這樣, 我們就給hp一個值吧.

package main

import "fmt"

func main() {
    // 使用 var 定義一個變量, 注意: 變量類型要放在變量名後面
    var hp int
    hp = 100  // 賦值操作
    fmt.Println(hp)
}

// 結果:
100

當然了, 我們也可以在聲明的時候直接給 hp 一個值:

var hp int = 100  // 定義變量並初始化值

如果我們僅僅定義一個變量而沒有去使用它, 那麼Go就會報錯.

2.2 定義多個變量

// 定義兩個個類型都是int的變量
var hp, mp int

既然可以同時定義多個變量, 那麼也能同時初始化多個變量

/*定義兩個類型都是"int"的變量, 並且分別初始化爲相應的值
hp爲100, mp爲260
*/
var hp, mp int = 100, 260

2.3 自動推導類型

有沒有發現當我們定義變量時有一些繁瑣, 需要寫類型 , Go允許我們不寫 類型 , 它會自動幫我們推導出數據對應的類型:

var hp, mp = 100, 260

有人說了, 那個 var 能不能也去了, 每次都要寫, 好麻煩的. 沒問題, Go也允許你:

/*定義兩個變量,它們分別初始化爲相應的值
hp爲100, mp爲260
編譯器會根據初始化的值自動推導出相應的類型
*/
hp, mp := 100, 260  // 注意這裏有個冒號 :

現在是不是感覺非常簡潔了. := 這個符號直接代替了變量的定義及賦值.

hp := 100
// 等價於下面兩行
var hp int
hp = 100

不過它有一個限制, 那就是它只能用在函數內部; 在函數外部使用則會無法編譯通過, 所以一般用var方式來定義全局變量.

2.4 匿名變量

_ (下劃線)爲匿名變量, 它會丟棄對應數據不進行處理. 匿名變量配合函數的返回值使用纔有價值, 目前大家先知道其語法即可.

在下面的例子中, 我們將值 2 賦予 b , 丟棄 3

_, b := 3, 2

匿名變量不佔用命名空間, 不會分配內存.

匿名變量與匿名變量之間也不會因爲多次聲明而無法使用.

2.5 變量命名規範

  1. 變量只能由字母、數字、下劃線組成。
  2. 不能以數字開頭。
  3. 不能是Go中的關鍵字及保留字
  4. 大小寫區分,a := 1A := 1是兩個變量。

以上要求是必須滿足的,下面的要求要儘量做到

  1. 變量名要有描述性,要簡潔、易讀,不宜過長。
  2. 變量名不能使用中文以及拼音。
  3. 推薦使用的變量名:
    • 下劃線:my_name = 'Conan'
    • 駝峯體:MyName = 'Conan'

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章