共计 2384 个字符,预计需要花费 6 分钟才能阅读完成。
Go 基本语法
[TOC]
1、运算符
Go 语言内置的运算符有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符。
(1)算数运算符
运算符
描述
+
相加
–
相减
*
相乘
/
相除
%
求余
++
自增
—
自减
(2)关系运算符
运算符
描述
==
检查两个值是否相等,如果相等返回 True 否则返回 False。
!=
检查两个值是否不相等,如果不相等返回 True 否则返回 False。
>
检查左边值是否大于右边值,如果是返回 True 否则返回 False。
<
检查左边值是否小于右边值,如果是返回 True 否则返回 False。
>=
检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
<=
检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。
(3)逻辑运算符
运算符
描述
&&
逻辑 AND 运算符。如果两边的操作数都是 True,则条件 True,否则为 False。
\
\
逻辑 OR 运算符。如果两边的操作数有一个 True,则条件 True,否则为 False。
!
逻辑 NOT 运算符。如果条件为 True,则逻辑 NOT 条件 False,否则为 True。
(4)位运算符
运算符
描述
&
按位与运算符 ”&” 是双目运算符。其功能是参与运算的两数各对应的二进位相与。
\
按位或运算符 ”\
“ 是双目运算符。其功能是参与运算的两数各对应的二进位相或。
^
按位异或运算符 ”^” 是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为 1。
<<
左移运算符 ”<<“ 是双目运算符。左移 n 位就是乘以 2 的 n 次方。其功能把 ”<<“ 左边的运算数的各二进位全部左移若干位,由 ”<<“ 右边的数指定移动的位数,高位丢弃,低位补 0。
>>
右移运算符 ”>>” 是双目运算符。右移 n 位就是除以 2 的 n 次方。其功能是把 ”>>” 左边的运算数的各二进位全部右移若干位,”>>” 右边的数指定移动的位数。
(5)赋值运算符
运算符
描述
=
简单的赋值运算符,将一个表达式的值赋给一个左值
+=
相加后再赋值
-=
相减后再赋值
*=
相乘后再赋值
/=
相除后再赋值
%=
求余后再赋值
<<=
左移后赋值
>>=
右移后赋值
&=
按位与后赋值
^=
按位异或后赋值
\
=
按位或后赋值
(6)其他运算符
运算符
描述
&
取地址符,返回变量存储地址
*
取值符,返回指针的变量
特殊标识符 ‘_’
“_”是特殊标识符,又称占位符(空标识符号),用来忽略结果。
2、流程控制
(1)IF
条件表达式没有括号
支持一个初始化表达式(可以是并行方式)
左大括号必须和条件语句或 else 在同一行
初始化语句中的变量为 block 级别,同时隐藏外部同名变量(也就是类似 java 中的就近原则)
func main(
a:=true
if a,b,c :=1,2,3;a+b+c>6{
fmt.Println(“ 大于 6 ”)
}else{
fmt.Println(“ 小于等于 6 ”)
}
)
(2)For
go 语言没有 while,因为 for 可以替代 while,⽀持三种循环⽅式,包括类 while 语法。
Go 只有 for 一个循环语句关键字,但支持 3 种形式
初始化和步进表达式可以是多个值
条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量提前计算好条件并以变量或常量代替
左大括号必须和条件语句在同一行
s := “abc”
for i, n := 0, len(s); i < n; i++ {// 常⻅的 for 循环,⽀持初始化语句可以多个值。
println(s[i])
}
n := len(s)
for n > 0 {// 替代 while (n > 0) {}
println(s[n]) // 替代 for (; n > 0;) {}
n–
}
for {// 替代 while (true) {}
println(s) // 替代 for (;;) {}
}
(3)switch
可以使用任何类型或表达式作为条件语句
不需要写 break,一旦条件符合自动终止
如希望继续执行下一个 case,需使用 fallthrough 语句
支持一个初始化表达式(可以是并行方式),右侧需跟分号
左大括号必须和条件语句在同一行
func main(){
a:=1
switch a{// 方式一
case 0:
fmt.Println(“111”)
case 1:
fmt.Println(“222”)
default:
fmt.Println(“default”)
}
switch {// 方式二
case a>=0:
fmt.Println(“111”)
case a>=1:
fmt.Println(“222”)
default:
fmt.Println(“default”)
}
switch a:=1;{// 方式三
case a>=0:
fmt.Println(“111”)
case a>=1:
fmt.Println(“222”)
default:
fmt.Println(“default”)
}
}
3、Goto, Break, Continue
GO 语言支持 goto、break、continue 三种循环控制语句,三个语句都可以配合标签(label)使用,标签名区分大小写,定义后不使用会造成编译错误。
func main() {
var i int
for {
println(i)
i++
if i > 2 {goto BREAK}
}
BREAK:
println(“break”)
EXIT: // Error: label EXIT defined and not used
}
注意,goto、continue、break 语句跳出到标签,一定要注意标签的位置,避免死循环。
注意:goto 语句与标签之间不能有变量声明,否则编译错误。
func main() {
fmt.Println(“start”)
goto Loop
var say = “hello oldboy”
fmt.Println(say)
Loop:
fmt.Println(“end”)
}// 会引发编译错误
break 语句跳出当前循环。可以配合标签使用跳出多层循环。
continue : 跳过当前循环的剩余语句, 然后继续进行下一轮循环。。也可以配合标签跳出多层。