運算符
算術運算符
+ - * / % ++ --
關係運算符
== != >= <= > < # bool
邏輯運算符(相當於python中的and ,or ,not)
&& || !
賦值運算符(=都在右邊)
= += -= /= *= %= <<=(左移後賦值) >>=(右移後賦值) &=(按位與後賦值) |=(按位或後賦值) ^=(按位異或後賦值)
其他運算符
& | 返回變量存儲地址 | &a; 將給出變量的實際地址。 |
* | 指針變量。 | *a; 是一個指針變量 |
示例
func main() {
var a int = 4
var ptr *int
/* & 和 * 運算符實例 */
ptr = &a /* 'ptr' 包含了 'a' 變量的地址 */ // 如果之前聲明的ptr不是指針類型,則無法被&a賦值
fmt.Printf("a 的值爲 %d\n", a); // 4
fmt.Printf("*ptr 爲 %d\n", *ptr); // 4
}
指針變量 * 和地址值 & 的區別:指針變量保存的是一個地址值,會分配獨立的內存來存儲一個整型數字。當變量前面有 * 標識時,才等同於 & 的用法,否則會直接輸出一個整型的內存地址。
func main() {
var a int = 4
var ptr *int
ptr = &a
println("a的值爲", a); // 4
println("*ptr爲", *ptr); // 4
println("ptr爲", ptr); // 824633794744
}
運算符優先級
由上至下代表優先級由高到低
7 | ^ ! |
6 | * / % << >> & &^ |
5 | + - | ^ |
4 | == != < <= >= > |
3 | <- |
2 | && |
1 | || |
當然,也可以通過使用括號來臨時提升某個表達式的整體運算優先級,比如(a+b)* 2
條件語句
go中的條件語句與其他語言用法類似
if-else
示例:
if a < 20 {
/* 如果條件爲 true 則執行以下語句 */
fmt.Printf("a 小於 20\n" );
} else {
/* 如果條件爲 false 則執行以下語句 */
fmt.Printf("a 不小於 20\n" );
}
fmt.Printf("a 的值爲 : %d\n", a);
不過go的if-else有一種縮寫形式,如下:
func main() {
var a interface{}
newA := a
if v, ok :=newA.(string); ok {
fmt.Println(v,ok)
}
}
// 相當於下面這種寫法的縮寫
func main() {
var a interface{}
newA := a
v, ok :=newA.(string)
if ok {
fmt.Println(v,ok)
}
}
注意這種縮寫形式必須符合2個返回值,且有一個爲bool類型,才能使用。所以多用在判斷interface類型(以後會寫)
switch
用法:
switch 語句執行的過程從上至下,直到找到匹配項,匹配項後面也不需要再加 break。
switch 默認情況下 case 最後自帶 break 語句,匹配成功後就不會執行其他 case,如果我們需要執行後面的 case,可以使用 fallthrough。
fallthrough不能用在switch的最後一個分支。
當所以case都不滿足條件時,執行default分支。
示例
switch var1 {
case val1:
...
case val2:
...
default:
...
}
tips,var1與var2類型不限於常量或整數,但必須是相同的類型;或者最終結果爲相同類型的表達式
var grade string
switch grade = "A"; {
case grade == "A" :
fmt.Printf("優秀!\n" )
fallthrough
case grade == "B", grade == "C" :
fmt.Printf("良好\n" )
case grade == "D" :
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" );
}
fmt.Printf("你的等級是 %s\n", grade );
結果爲:
優秀!
良好
你的等級是 A
switch 語句還可以被用於 type-switch 來判斷某個 interface 變量中實際存儲的變量類型。
var x interface{}
x = 5
switch i := x.(type) { // x.(type)只能用在switch
case nil:
fmt.Printf(" x 的類型 :%T",i)
case int:
fmt.Printf("x 是 int 型")
case float64:
fmt.Printf("x 是 float64 型")
case func(int) float64:
fmt.Printf("x 是 func(int) 型")
case bool, string:
fmt.Printf("x 是 bool 或 string 型" )
default:
fmt.Printf("未知型")
}
結果:
x 是 int 型
如果對你有幫助,可否在文章右側點個贊再走呢~~
本文爲原創,轉載請註明出處