位置:首頁 > 高級語言 > Go語言教學 > Go語言變量

Go語言變量

變量是什麼,隻不是給定到存儲區域,我們的程序可以操縱的名稱。在Go中每個變量具有特定的類型,它確定的大小和可變的存儲器的布局;能確定存儲器內存儲的值的範圍;和組操作可以施加到變量。

一個變量名可以由字母,數字和下劃線。它必須以字母或下劃線。大寫和小寫字母是不同的,因為Go是區分大小寫的。基於該基本類型在前麵的章節中說明的那樣,將有以下基本變量類型:

類似 描述
byte 通常單個字節(一個字節),這是一個字節的類型
int 整數最自然的尺寸的機器
float32 單精度浮點值

Go編程語言也可以定義各種其他類型的變量,我們將在以後的章節列出,如:枚舉,指針,數組,結構,聯合,等等。對於本章覆蓋,讓我們隻學習研究的基本變量類型。

在Go中變量定義:

一個變量的定義是指,告訴編譯器在哪裡,有多少創建存儲變量。變量定義指定一個數據類型,並且包含的該類型,如下的一個或多個變量的列表:

var variable_list optional_data_type;

在這裡,optional_data_type可以包括字節,整型,float32,complex64,布爾或任何用戶定義的對象等有效Go的數據類型,variable_list可以由用逗號分隔的一個或多個標識符名稱。一些有效的聲明如下所示:

var    i, j, k int;
var   c, ch byte;
var  f, salary float32;
d = 42;

這一行var i, j, k; 既聲明並定義了變量i,j和k;這指示編譯器創建一個名為i,j和k的 int類型變量。

變量可以初始化(分配初始值)在他們的聲明。變量的類型是由編譯器自動根據傳遞給它的值判斷。初始化包括一個等號後跟一個常量表達式如下:

variable_name = value;

一些實例是:

d = 3, f = 5;    // declaration of d and f. Here d and f are int 

對於冇有初始化定義:具有靜態存儲時間變量的隱含零初始化(所有字節的值為0);所有其它變量的初始值是它們的數據類型的零值。

靜態類型聲明

靜態類型的變量聲明保障到編譯器,有一個變量存在具有給定類型和名稱,這樣編譯器進行進一步的編輯,而不需要對變量的完整細節。變量聲明有其意義在編譯時止,編譯器需要實際的變量聲明在鏈接程序時。

示例

試試下麵的例子,其中變量已經被聲明為有型,並且已被定義及主要函數內部初始化:

package main

import "fmt"

func main() {
   var x float64
   x = 20.0
   fmt.Println(x)
   fmt.Printf("x is of type %T\n", x)
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

20
x is of type float64

動態類型聲明/類型推斷

動態類型變量聲明要求編譯器解釋的基礎上傳遞給它值變量的類型。編譯器不需要一個變量靜態有類型的必然要求。

示例

試試下麵的例子,其中的變量已經聲明冇有任何類型的,並已確定在主函數中初始化。如果類型推斷的,我們已經初始化的變量y使用:=運算符,x初始化使用=運算符。

package main

import "fmt"

func main() {
   var x float64 = 20.0

   y := 42 
   fmt.Println(x)
   fmt.Println(y)
   fmt.Printf("x is of type %T\n", x)
   fmt.Printf("y is of type %T\n", y)	
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

20
42
x is of type float64
y is of type int

混合變量聲明

不同類型的變量可以一步到位使用類型推斷聲明。

例子

package main

import "fmt"

func main() {
   var a, b, c = 3, 4, "foo"  
	
   fmt.Println(a)
   fmt.Println(b)
   fmt.Println(c)
   fmt.Printf("a is of type %T\n", a)
   fmt.Printf("b is of type %T\n", b)
   fmt.Printf("c is of type %T\n", c)
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

3
4
foo
a is of type int
b is of type int
c is of type string

在Go中的左值和右值:

在Go中有兩種表達式:

  1. lvalue : 引用一個存儲器位置的表達式被稱為“左值”表達。左值可能顯示為任一左手或賦值的右側。

  2. rvalue : 術語右值是指被存儲在存儲器中的某些地址的數據值。右值是不能分配給它的值,這意味著右值可能出現在賦值的右側而不是左側的表達式。

變量是左值等都可能出現在賦值的左側。數字文字是右值,因此可能不會被分配,不能出現在左側。下麵是一個有效語句:

x = 20.0

但是,下麵是不是一個有效的聲明,並會產生編譯時錯誤:

10 = 20