go語言學習筆記3------變量

1.什麼叫變量?

所謂的變量簡單地理解就是用來存儲數據的。計算機通過變量來保存數據實際上將數據存儲到計算機的內存中,這裏我們可以畫一個圖給大家理解一下。
這裏寫圖片描述
計算機將內存劃分成不同的區域,數據就是存儲在這些區域中,那麼怎樣從這些區域中將數據取出來呢?計算機將每塊區域都加上了一串數字,作爲編號。通過該編號就可以將數據取出來了,但是問題是,這一串數字對我們程序員來說是非常難記憶的,
爲了解決這個問題,我們可以通過變量的方式來表示存儲的數據,如下圖:
這裏寫圖片描述
我們給每個存儲區域加上了Number1,Number2,Name等符號,這樣通過這些符號來存儲數據,然後通過這些符號取出數據就非常容易,方便了。這些符號就是變量。

2.變量類型

①布爾類型:用bool關鍵字來進行定義,可用於條件判斷, 布爾類型變量取值要麼是真(true),要麼是假(false),。
②浮點型:float64,float32等
③字符類型:’ ’ 單引號,字符
④字符串類型:” ” 雙引號,字符串
⑤ASCII表:
這裏寫圖片描述
這裏寫圖片描述

3.變量聲明:

變量初始化:變量的初始化。示例如下:

package main
import "fmt"
func main(){
var a int
fmt.Print("a=",a)
}

變量初始化:變量的初始化。示例如下:

package main
import "fmt"
func main(){
var b int=10 //定義變量b同時將整數10賦值給b
fmt.Print(b)
}

注意:在這裏我們將”=”符號,讀作“賦值號”,不能讀作“等號”。

4.變量賦值

除了在定義變量時,完成初始化以外,我們也可以在變量定義完後,再給變量賦值,也就是先聲明後賦值,示例如下:

package main
import "fmt"
func main(){
var b,c int //聲明變量a,b
b=10    //賦值b
c=20    //賦值c
fmt.Print(b)  //輸出b
fmt.Print(c)  //輸出c
}

注意:上面的輸出語句也可以只使用一個Println函數,具體如下:fmt.Println(a,b),中間用逗號進行分割。
結論:變量可以重複賦值,一旦給一個變量賦了新值,那麼變量中的老值就不復存在了。
5.自動推導類型
在給變量賦值時,我們感覺非常麻煩,有沒有更簡單的給變量賦值的方式,我們可以使用自動推導類型,具體示例如下:

package main
import "fmt"
func main(){
num:=30
fmt.Print(num)
}

所謂自動推導類型,就是不用通過var 聲明變量,不用指定類型,直接在變量名後面跟”:”號,同時完成賦值。那麼GO會根據所賦的值自動推導出變量的類型。如果給num變量賦值爲小數,那麼該變量的類型爲小數類型(浮點)。
通過比較,我們發現這種方式比前面的賦值方式要簡單方便。這種方式,也是我們以後開發過程中最常用的方式。

6:多重賦值匿名變量

(1)多重賦值
我們給變量num賦值,採用了自動推導的方式,如果想一次使用自動推導的方式,給多個變量賦值,應該怎樣實現呢?具體如下:

package main
import "fmt"
func main(){
a:=10
b:=20
c:=30
fmt.Print(a,b,c)
}

但是這種方式寫起來非常的複雜,可以用如下的方式進行簡化:

package main
import "fmt"
func main(){
a,b,c:=10,20,30
fmt.Print(a,b,c)
}

將10的值賦值給a,將10的值賦值給b,將30的值賦值給c.
(2)匿名變量
匿名變量,丟棄數據不進行處理, 匿名變量配合函數返回值使用纔有價值,目前大家只需要知道其語法,後面學到函數時,我們在強調匿名變量的使用場景。
現在我們先看一下匿名變量的語法:

_,i,_j:=1,2,3,4

7:數據置換
到目前爲止,我們已經瞭解了什麼是變量,變量的定義,以及變量的賦值。那麼下面大家思考如下問題:
有兩個變量a和b, a的值爲10,b的值爲20,交換兩個變量的值?
(有兩個杯子,都盛滿了水,怎樣交換兩個杯子中的水)
(1)使用傳統方式實現

package main
import "fmt"
func main(){
var a int =10
var b int=20
var temp int
temp=a
a=b
b=temp
fmt.Print(a,b)
}

(2)使用多重賦值的方式實現

package main
import "fmt"
func main(){
a,b:=10,20
a,b=b,a
fmt.Print(a,b)
}

多重賦值的方式交換兩個變量的值,比通過第三個變量來進行變量交換更簡單,代碼也少。

8:輸出格式

關於輸出這裏有兩個問題,需要給大家強調清楚。
(1)我們前面的程序中,已經多次用到輸出,不管是採用Print(),還是Println(),但是問題是,每次輸出的數據結構不清晰,比較混亂。
例如如下程序:

package main
import "fmt"
func main(){
a:=1
b:=2
c:=20
fmt.Print(a,b,c)
}

該程序輸出的結果是 1,10,20 .如果我們現在讓另外一個程序員查看該結果,該程序員很難分清楚,1是來自哪個變量,2是來自哪個變量,3來自哪個變量,除非該程序員閱讀代碼。但是,大家想一下,如果該程序的代碼量非常大,那麼該程序員閱讀代碼是否要花費很長的時間呢?所以,建議採用如下輸出:

package main
import "fmt"
func main(){
a:=1
fmt.Print("a=",a)
}

雙引號內的內容會原樣輸出。這樣結構比較清晰,注意與變量名之間用逗號分隔。
(3)除了使用Println()函數換行輸出以外,還有另外一個函數Printf()也可以實現換行輸出。示例如下:

package main
import "fmt"
func main(){
a:=1
b:=2
fmt.Printf("a=%d\n,b=%d",a,b)
}

運行以後,發現確實換行了。這種輸出方式,就是格式化輸出,%d,表示輸出的是一個整數,第一個%d會被變量a的值替換,第二個%d會被變量b替換,其它類型的輸出用什麼去表示後面會給大家講解。 “\n” 表示換行。
有同學可能就問了,這種換行輸出方式比較麻煩,但是如果一次性有結構的輸出多個變量的值,Println()輸出就會比較麻煩,並且結構也會感覺比較混亂,還是以上面的代碼爲例,如下:

package main
import "fmt"
func main(){
a:=1
b:=2
c:=3
fmt.Println("a=",a,"b=",b,"c=",c)
}

下面我們在給大家演示函數Printf()的輸出:

package main
import "fmt"
func main(){
a:=1
b:=2
c:=33
fmt.Printf("a=%d,b=%d,c=%d\n",a,b,c)
}

通過對比發現Printf()函數一次性換行輸出多個變量值,結構清晰。
9:接收輸入
前面我們所寫的所有的程序,都是直接給變量賦值,但是很多情況下,我們希望用戶通過鍵盤輸入一個數值,存儲到某個變量中,然後將該變量的值取出來,進行操作。
我們日常生活中也經常用到輸入的場景:
咱們在銀行ATM機器前取錢時,肯定需要輸入密碼,那麼怎樣才能讓程序知道咱們剛剛輸入的是什麼呢?大家應該知道了,如果要完成ATM機取錢這件事情,需要先從鍵盤中輸入一個數據,然後用一個變量來保存。

那麼我們GO語言怎樣接收用戶的鍵盤輸入呢?如下:

package main
import "fmt"
func main(){
var age int
fmt.Println("請輸入你的年齡“)
fmt.scanf("%d",&age)
fmt.Print("a=%d",a)
}

在GO中我們用到了“fmt”這個包中的Scanf()函數來接收用戶鍵盤輸入的數據。當程序執行到Scanf()函數後,會停止往下執行,等待用戶的輸入,輸入完成後程序繼續往下執行。在這裏重點要注意的是Scanf()函數的書寫格式,首先也要用“%d”,來表示輸入的是一個整數,輸入完整數後存儲到變量age中,注意這裏age變量前面一定要加上“&”符號,表示獲取內存單元的地址(前面我們說的內存存儲區域的編號),然後才能夠存儲。
還有另外一種獲取用戶輸入數據的方式,如下:

package main
import "fmt"
func main(){
var age int
fmt.Print("請輸入你的年齡")
fmt.Scan(&age)
fmt.Print(age)
}

通過Scan函數接收用戶輸入,這時可以省略掉%d,這種寫法更簡單。

10:變量命名規範

在我們前面的編程中,我們定義變量時都是隨意進行命名,但是在GO語言中,對變量的命名有一些規範性的要求,下面我們看一下具體的要求。
(1)變量命名規範要求
名字必須以一個字母(Unicode字母)或下劃線開頭,後面可以跟任意數量的字母、數字或下劃線。大寫字母和小寫字母是不同的:heapSort和Heapsort是兩個不同的名字。
除了上面提到的規範要求以外,GO語言自己特有的,具有一定含義的一些字符,也不能作爲變量名稱。例如,前面我們接觸到的func, fmt,print等等,這些都是GO自帶的,具有特殊含義的字符,我們稱爲關鍵字。
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
以上關鍵字都不能作爲變量的名稱。
此外,還有大約30多個預定義的名字,比如int和true等

     true false iota nil

     int int8 int16 int32 int64

     uint uint8 uint16 uint32 uint64 uintptr

     float32 float64 complex128 complex64

     bool byte rune string error

     make len cap new append copy close delete

     complexrealimag

     panic recover

(2)見名知意
起一個有意義的名字,儘量做到看一眼就知道是什麼意思(提高代碼可 讀性) 比如: 名字 就定義爲 name , 定義學生 用 student
(3)駝峯命名法
小駝峯式命名法(lower camel case): 第一個單詞以小寫字母開始;第二個單詞的首字母大寫,例如:myName、aDog
大駝峯式命名法(upper camel case): 每一個單字的首字母都採用大寫字母,例如:FirstName、LastName
不過在程序員中還有一種命名法比較流行,就是用下劃線“_”來連接所有的單詞,比如send_buf

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