程式設計最簡單的演算法之一,莫過於變數交換。交換變數的常見演算法需要乙個中間變數進行變數的臨時儲存。用傳統方法編寫變數交換**如下:
var a int = 100
var b int = 200
var t int
t = a
a = b
b = t
fmt.println(a, b)
在計算機剛發明時,記憶體非常「精貴」。這種變數交換往往是非常奢侈的。於是計算機「大牛」發明了一些演算法來避免使用中間變數:
var a int = 100
var b int = 200
a = a ^ b
b = b ^ a
a = a ^ b
fmt.println(a, b)
這樣的演算法很多,但是都有一定的數值範圍和型別要求。
到了 go 語言時,記憶體不再是緊缺資源,而且寫法可以更簡單。使用 go 的「多重賦值」特性,可以輕鬆完成變數交換的任務:
var a int = 100
var b int = 200
b, a = a, b
fmt.println(a, b)
多重賦值時,變數的左值和右值按從左到右的順序賦值。
多重賦值在 go 語言的錯誤處理和函式返回值中會大量地使用。
例如,使用 go 語言進行排序時就需要使用交換,**如下:
type intslice int
func (p intslice) len() int
func (p intslice) less(i, j int) bool
func (p intslice) swap(i, j int)
**說明如下:
本小節主要講解如何對多個變數進行同時賦值。
Go語言從入門到精通 匿名變數
在使用多重賦值時,如果不需要在左值中接收變數,可以使用匿名變數 anonymous variable 匿名變數的表現是乙個下畫線 使用匿名變數時,只需要在變數宣告的地方使用下畫線替換即可。例如 func getdata int,int a,getdata b getdata fmt.println ...
Go語言從入門到精通 變數的宣告
變數 variable 的功能是儲存使用者的資料。不同的邏輯有不同的物件型別,也就有不同的變數型別。經過半個多世紀的發展,程式語言已經形成一套固定的型別,這些型別在不同的程式語言中基本是相通的。常見變數的資料型別有 整型 浮點型 布林型 結構體等。go 語言作為c語言家族的新派代表,在c語言的定義方...
Go語言從入門到精通 變數的宣告
變數 variable 的功能是儲存使用者的資料。不同的邏輯有不同的物件型別,也就有不同的變數型別。經過半個多世紀的發展,程式語言已經形成一套固定的型別,這些型別在不同的程式語言中基本是相通的。常見變數的資料型別有 整型 浮點型 布林型 結構體等。go 語言作為c語言家族的新派代表,在c語言的定義方...