golang-运算符、条件语句

mac2026-06-12  12

运算符

算术运算符

+    -    *     /    %    ++    --

 

关系运算符

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

 

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

 

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

 

文章目录

最新回复(0)