Go語言中的運算符

## 1 概述
Go語言提供了,算術,關係,邏輯,位,指針,賦值運算符。本篇整體說明一下。


## 2 算術運算

* \+ 相加
* \- 相減
* \* 相乘
* / 相除
* % 求餘
* ++ 自增
* \-\- 自減

幾個細節,需要留意一下。
* 整數與浮點數進行運算,會將整數轉化爲浮點數,再運算。
* 兩個整數相除,結果是整數,取整數部分。5/3 結果會是 1。
* 求餘,如果被除數或除數存在負數,那麼餘數與被除數保持一致。此處是求餘不是取模。
* ++/--,不區分前後,只有變量後的語法,就是 v++。同時++/--構成語句而不是表達式,意味着不能直接賦值。

## 3 字符串連接運算 +
+運算符,也可以完成字符串的連接運算。
```
"Hello" + " " + "Hank!"
```

## 4 關係運算

* == 檢查兩個值是否相等
* != 檢查兩個值是否不相等
* \> 檢查左邊值是否大於右邊值
* < 檢查左邊值是否小於右邊值
* \>= 檢查左邊值是否大於等於右邊值
* <= 檢查左邊值是否小於等於右邊值

關係運算時用於判斷兩個運算數的關係是否成立。返回布爾值。

## 5 邏輯運算

* && 邏輯與,參與運算的兩個關係必須同時成立,結果爲true,否則爲false
* || 邏輯或,參與運算的兩個關係成立一個(或都成立)結果爲true,全部關係爲false,結果爲false。
* ! 邏輯非,用於取反某個關係。非真既假,非假既真。只有一個運算數參與運算

用來判斷多個關係是否成立。運算結果爲:
&&
true && true = true
true && false = false
false && true = false
false && false = false
||
true || true = true
true || false = true
false || true = true
false || false = false
!
!true = false
!false = true

## 6 指針運算

* & 取得變量的內存地址。pv := &v
* \* 獲取指針地址對應的值。\*pv
示例爲:
```
  v:=42
  pv:=&v
  fmt.Printf("%T(%v)", pv, pv)// *int 0xc000048b68,*int就是指針類型 值爲一個類似規則的地址,就是一個號碼,標識內存的一個空間區域
  fmt.Println(*pv)// 42,通過地址獲取對應的變量值
  *pv ++ // 通過地址更改對應變量
  fmt.Println(*pv, v)// 42 42變量和指針操作的同一變量(內存地址)。
```
Go語言的指針不可以操作。不能執行偏移這類的操作.

理解指針的幾個概念:
變量:標識符與值(內存中存儲空間)引用。
地址:內存中存儲空間的位置(門牌號)
指針:一種類型,其值爲某個地址。

一個數據(變量),我們可以通過變量標識符找到他。也可以將他的地址記錄下來,通過這個地址找到他。能夠記錄地址的數據類型就是指針。指針通過&運算符來獲取變量的地址。

## 7 位運算

* & 按位與運算
* | 按位或運算
* ^ 按位異或運算
* <<  左移運算符,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0。左移n位就是乘以2的n次方。
* \>>  右移運算符,">>"右邊的數指定移動的位數,低位捨棄,高位補0。右移n位就是除以2的n次方。

用於運算構成整數的每個二進制位,就是位上0,1的運算。

## 8 賦值運算

* = 簡單的賦值運算符,將一個表達式的值賦給一個左值
* +=  相加後再賦值
* -=  相減後再賦值
* \*=  相乘後再賦值
* /=  相除後再賦值
* %=  求餘後再賦值
* <<= 左移後賦值
* \>>= 右移後賦值
* &=  按位與後賦值
* ^=  按位異或後賦值
* |=  按位或後賦值

變量 = 表達式
=左邊的變量,稱之爲左值。通常只能是變量。
=右邊的表達式,稱之爲右值。表達式是右值。

自賦值運算,一些運算符,可以與賦值運算符結合,完成快捷自運算賦值,就是上面的+=....|=,邏輯是:
v += 1 相當於 v = v + 1
其他的邏輯相同!

## 9 運算符優先級

由高到低,列表如下:
* ^ !
* \* / % << >> & &^
* \+ - | ^
* == != < <= >= >
* <-
* &&
* ||

建議使用()小括號,明確調整優先級。


## 10 類型轉換

類型不同的數據不能完成運算。如果需要,則要將類型轉換爲一致的類型。
自動轉換,有些轉換Go語言自動完成,例如 `5/4.0` 5整型會被自動轉換爲浮點數。
強制轉換,使用語法 `type(數據)` 的形式轉換,例如:`float64(5)`。

Go語言對類型要求比較嚴格,類型可以相互轉換的場景不多,主要集中在數值上。就是要類型兼容,纔可以轉換。

完!
原文出自:[小韓說課](http://www.hellokang.net/go/go-operator/)
微信關注:小韓說課
![小韓說課](http://www.hellokang.net/images/wechat_subscription.jpg)

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