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 型

 

如果对你有帮助,可否在文章右侧点个赞再走呢~~

 

本文为原创,转载请注明出处

 

文章目录

你可能感兴趣的:(go,golang)