golang-運算符、條件語句

運算符

算術運算符

+    -    *     /    %    ++    --

 

關係運算符

==     !=     >=    <=   >   <       # 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 型

 

如果對你有幫助,可否在文章右側點個贊再走呢~~

 

本文爲原創,轉載請註明出處

 

文章目錄

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