算术运算符
+ - * / % ++ --
关系运算符
== != >= <= > < # 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 型
如果对你有帮助,可否在文章右侧点个赞再走呢~~
本文为原创,转载请注明出处
文章目录