記錄筆記---go語言的順序程式設計:
1. 變數
變數是幾乎所有程式語言中最基本的組成元素。從根本上說,變數相當於是對一塊資料儲存
空間的命名,程式可以通過定義乙個變數來申請一塊資料儲存空間,之後可以通過引用變數名來
使用這塊儲存空間。
go語言中的變數使用方式與c語言接近,但具備更大的靈活性。
1.1 變數宣告
go語言的變數宣告方式與c和c++語言有明顯的不同。對於純粹的變數宣告,go語言引入了
關鍵字 var ,而型別資訊放在變數名之後,示例如下:
var v1 int
var v2 string
var v3 [10]int // 陣列
var v4 int // 陣列切片
var v5 struct
var v6 *int // 指標
var v7 map[string]int // map,key為string型別,value為int型別
var v8 func(a int) int
變數宣告語句不需要使用分號作為結束符。與c語言相比,go語言摒棄了語句必須以分號作
為語句結束標記的習慣。
var 關鍵字的另一種用法是可以將若干個需要宣告的變數放置在一起,免得程式設計師需要重複
寫 var 關鍵字,如下所示:
var (
v1 int
v2 string)
1.2 變數初始化
對於宣告變數時需要進行初始化的場景, var 關鍵字可以保留,但不再是必要的元素,如下
所示:var v1 int = 10 // 正確的使用方式1
var v2 = 10 // 正確的使用方式2,編譯器可以自動推導出v2的型別
v3 := 10 // 正確的使用方式3,編譯器可以自動推導出v3的型別
以上三種用法的效果是完全一樣的。在與第一種用法相比,第三種用法需要輸入的字元數大大
減少。這裡go語言也引入了另乙個c和c++中沒有的符號(冒號和等號的組合 := ),用於明確表達同時進行變數宣告和初始化的工作。指定型別已不再是必需的,go編譯器可以從初始化表示式的右值推導出該變數應該宣告為
哪種型別,這讓go語言看起來有點像動態型別語言,儘管go語言實際上是不折不扣的強型別語言(靜態型別語言)。
當然,出現在 := 左側的變數不應該是已經被宣告過的,否則會導致編譯錯誤,比如下面這個
寫法:var i int
i := 2
這是就會導致類似如下的編譯錯誤:no new variables on left side of :=
1.3 變數賦值
在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++語言相比可以非常明顯地減少**行數。
1.4 匿名變數
我們在使用傳統的強型別語言程式設計時,經常會出現這種情況,即在呼叫函式時為了獲取乙個
值,卻因為該函式返回多個值而不得不定義一堆沒用的變數。在go中這種情況可以通過結合使
用多重返回和匿名變數來避免這種寫法,讓**看起來更加優雅。
假設 getname() 函式的定義如下,它返回3個值,分別為 firstname 、 lastname 和nickname :
func getname() (firstname, lastname, nickname string)
若只想獲得 nickname ,則函式呼叫語句可以用如下方式編寫:
_, _, nickname := getname()
這種用法可以讓**非常清晰,用「_」作為佔位符,基本上遮蔽掉了可能混淆**閱讀者視線的內容,從而大幅
降低溝通的複雜度和**維護的難度。
好了,今天的筆記就寫到這裡,記錄一下go語言中的變數特性。
程式語言(1) Go 語言環境安裝
go 語言支援以下系統 各個系統對應的包名 作業系統 包名windows 以下介紹了在unix linux mac os x,和 freebsd系統下使用原始碼安裝方法 tar c usr local xzf go1 4.linux amd64 tar gz3 將 usr local go bin ...
Go 語言程式設計
課程名稱 go 語言程式設計 課程時間 2014年7月30日 週三 20 50 22 00 課程安排 20 50 21 00 通過郵件位址登入網路課堂 21 00 22 00 主題演講 徐立 與qa ps 課程諮詢 入qq群 csdn技術交流 群號是303806405 課程名稱 go 語言程式設計 ...
01 Go 順序程式設計
go 的 bool 型別不支援 其他型別的強制轉換 int型別和int32被認為是兩種不同的型別。編譯器不會做自動轉換 複數的表示 var value1 complex64 value1 3.2 12i real 實部 imag 虛部 字元型別 rune 代表單個unicode字元 byte 代表u...