一起來學Go go的變數

2022-01-29 15:28:47 字數 4389 閱讀 4789

變數是幾乎所有程式語言中最基本的組成元素,從根本上說,變數相當於是一塊資料儲存空間的命名,程式可以通過定義乙個變數來申請一塊資料儲存空間,之後可以通過引用變數名來使用這塊儲存空間。go語言中的變數使用方式與c語言接近,但具備更大的靈活性。

變數的宣告

go語言引入了關鍵字ver,而型別資訊放在變數名之後。示例如下:

var v1 int

var v2 string

var v3 [10]int //陣列

var v4 int //陣列切片

var v5 struct

var v6 *int // 指標

var v7 map[strint]int //map,key為string型別,value為int型別

var v8 func(a int) int

變數宣告語句不需要使用分號作為結束語,與c語言相比,go語言摒棄了語句必須以分號作為語句結束標記的習慣。

var關鍵字的另一種用法是可以將若干個需要宣告的變數放置在一起,免得程式設計師需要重複寫var關鍵字,如下圖:

var (

v1 int

v2 string

)

變數初始化

對於宣告變數時需要進行初始化的場景,var關鍵字可以保留,但不再是必要的元素,如下所示:

//正確的使用方式1

var v1 int =10

//正確的使用方式2,編譯器可以自動推導出v2的型別

var v2 = 10

//正確的使用方式3,編譯器可以自動推導出v3的型別

v3 := 10

以上三種用法的效果是一樣的,與第一種用法相比,第三種用法需要輸入的字元數大大減少,這裡go語言也引入了另乙個c和c++中沒有的符號(冒號和等號的組合:=),用於明確表達同時進行變數宣告和初始化的工作。

指定型別已不再是必須得,go編譯器可以從初始化表示式的右值推導出該變數應該宣告為那種型別,這讓go語言看起來有點像 動態型別語言,儘管go語言實際上是不折不扣的強型別語言(靜態型別語言)

當然,出現  :=左側的變數不應該是已經被宣告過的,否則會導致編譯錯誤,比如下面這個:

var i int

i := 2

會導致類似如下的編譯錯誤

no new variables on left side of :=

變數賦值

在go語法中,變數初始化和變數賦值是兩個不同的概念,下面為宣告乙個變數之後的賦值過程:

var  v10  int

v10 = 123

go語言的變數賦值與多數語言一直,但go語言中 提供了c/c++程式設計師期盼多年的多重賦值功能,比如下面這個交換  i  和  j   變數的語句:

i , j = j , i

在不支援多重賦值的語言中,互動兩個變數的內容需要 引入乙個中間變數。

t = i; i = j; j = t;

多重賦值的特性在go語言庫的實現中也被使用得相當充分,在介紹函式的多重返回值時,將對其進行更加深入的介紹 ,總而言之 ,多重賦值功能讓go語言與c/c++語言相比非常明顯地減少**行數 。

匿名變數

我們在使用傳統的強型別語言程式設計時,經常會出現這種情況,即在呼叫函式 時為了獲取乙個值,卻應為該函式返回多個值而不得不定義一堆沒用的變數,在go中這種情況可以通過結合使用多重返回和匿名變數來避免這種醜陋的寫法,讓**看起來更加優雅。

假設:getnmae()函式的定義如下,它返回三個值,分別為 firstname、lastname和nickname:

func getname() (firstname, lastname, nickname string)

若只想獲得nickname,則函式呼叫語句可以用如下方式編寫:

_, _, nickname := getname()

這種用法可以讓**非常清晰,基本上遮蔽掉了可能混淆大家實現的內容,從而大幅度降低溝通的複雜度和**為何的難度。

常量

在go語言中常量是指編譯期間就已知且不可改變的值。常量可以是數值型別(包括整型、浮點型和複數型)、布林型別、字串型別等。

字面常量

所謂字面常亮(literal),是指程式中硬編碼的常量,如:

-12

3.14159265358979323856 //浮點型別的常量

3.2+12i //複數型別常量

true //布林型別常量

"foo" //字串常量

只要這個常量在響應型別的值域範圍內,就可以作為該型別的常量。

常量的定義

通過const關鍵字,你可以給字面常亮指定乙個很友好的名字:

const pi float64 = 3.14159265358979323846

const zero = 0.0 //無型別浮點常量

const (

size int64 = 1024

eof = -1 //無型別整數常量

)const u, v float32 = 0, 3 // u = 0.0, v = 3.0, 常量的多場賦值

const a, b, c = 3, 4, "foo"

// a = 3, b = 4, c = "foo" ,無型別整型和字串常量

go的常量定義可以限定型別,但不是必須的,如果定義常量時沒有指定型別,那麼它與字面常量一樣,是無型別常量。

預定義常量

go的語言預定義了這些常量: true ,  false和iota。

iota比較特殊,可以認為是乙個可被編譯器修改的常量,在每乙個const關鍵字出現時被重置為0,然後在下乙個const出現之前,每出現一次iota,其 所代表的數字會自動增1。

從以下列子當中可以基本理解iota的用法:

const(                     // iota被重設為0

c0 = iota // c0 == 0

c1 = iota // c1 == 0

c2 = iota // c2 == 0

)const (

a = 1 << iota // a ==1 (iota在每個const開頭被重設為0)

b = 1 << iota // b == 2

c = 1 << iota // c == 4

)const (

u = iota * 42 // u == 0 iota在每個const開頭被重設為0

v float64 = iota * 42 // b == 2

c = 1 << iota // c == 4

)const(

u = iota * 42 // u == 0

v float64 = iota * 42 // v == 42.0

w = iota * 42 // w == 84

)const x = iota // x == 0 itao又被重設為0

const y = iota // y == 0 同上

如果兩個const的賦值語句的表示式是一樣的,那麼可以省略後乙個賦值表示式,因此,上面的前兩個const語句可簡寫為:

const (

c0 = iota // iota被重設為0

c1 // c1 == 1

c2 // c2 == 2

)

const (

a = 1 << iota // a == 1

b // b == 2

c // c == 4

)

小結: 本章只是學習go的基本的變數,變數的定義,常量等。

定義變數關鍵字:    var

定義常量關鍵字 :   const

一起來學Go go的變數

變數是幾乎所有程式語言中最基本的組成元素,從根本上說,變數相當於是一塊資料儲存空間的命名,程式可以通過定義乙個變數來申請一塊資料儲存空間,之後可以通過引用變數名來使用這塊儲存空間。go語言中的變數使用方式與c語言接近,但具備更大的靈活性。變數的宣告 go語言引入了關鍵字ver,而型別資訊放在變數名之...

一起來學SQL(二)

insert into 語句用於向 中插入新的行。語法 insert into 表名稱 values 值1,值2,也可以指定所要插入資料的列 insert into table name 列1,列2,values 值1,值2,e.g.1 插入新的行 insert into persons value...

一起來學SQL(三)

create database 用於建立資料庫。sql create database 語法 create database database name create table 語句用於建立資料庫中的表。sql create table 語法 create table 表名稱 列名稱1 資料型別,...