go语言的控制语句
1.表达式和运算符
(1)表达式:必须是一个值
(2)运算符号:
-算数
-比较
-逻辑
-赋值
2.控制语句
(1)if
if expression1 {
}else if expression2 { //满足条件匹配停止
}else if expression3 {
}else {
}
(2)switch
switch 变量 {
case 常量1:
statement1
case 常量2:
statement2
default:
default statement
}
(3)for
for i := 0; i < 5; i++ {
fmt.Println(i)
}
for i :=range s{ //s为一个数组
}
(4)break和continue
break:用于立即退出循环。
continue:用于跳过当前循环的剩余部分,并开始下一次迭代
3.函数
(1)基本语法
func Div(a int, b float64) (float64, string) {
//函数名(参数1,参数2) (返回值1,返回值2)
return 遇到return程序结束
}
(2)可变参数函数
func sum(nums ...int) {
//得到的返回值[100 200 300]
}
(3)匿名和具名返回值
func div(a int ,b int)(int,string){
return res,err
}
func div(a int ,b int)(res int, err string){
res =0
err =""
return
}
(4)匿名函数:没有变量或者没有名字的函数
func (){
}
将匿名函数赋给一个变量(函数整体当作变量)
add := func(a, b int) int {
return a + b
}
fmt.Println(add(5, 3)) // 输出 8
匿名函数自调用()
add :=func (a,b int){
return a+b
}()
匿名函数作为“参数变量的类型”
//f:参数,func(int, int):类型,int:函数的返回值类型,int:整体的返回值类型
func main() {
d :=DoSum(1, 2, func(a int, b int) int {
return a+b //函数参数的返回值
})
fmt.Println(d)
}
func DoSum(a, b int, f func(int, int) int) int { //函数作为参数类型自己内部必须调用,调用结果位主函数的计算值
return a+b+f(a, b) //整体的返回值 //f(a,b)通过上面的return得到结果
}
4.作用域:全局(短变量无法定义在全局作用域),函数级,块级(for,if,{}),包级
查找原则:就近原则
5.闭包:解决作用域变量的访问,防止全局变量污染
经常与匿名函数一起使用,闭包可以在一个内层函数中访问到其外层函数的作用域。(先访问外层函数,然后访问函数内部)
缺点:闭包函数被调用会返回一个新的函数,新的函数不会释放,造成闭包函数不会释放,过多使用闭包会过度占用内存,造成内存泄漏。
例子:
// fn 函数是一个“返回值为匿名函数”的函数
func fn() func () int { //func ()返回值,int返回值类型(具名返回)
var m float64 = 100
return func () int {// 返回匿名函数,int返回值类型
return m;
}
}
func main() {
// 调用 fn 函数,将返回的匿名函数赋值给变量 f
f := fn()
// 调用匿名函数 f,函数内的函数
f()
}
6.延迟调用(defer):最后执行,但是在return之前。
func main() {
defer fmt.Println("Bye~")
fmt.Println("hello world")
}
// 运行结果
hello world
Bye~
7.init函数:在main函数之前被调用,完成一些初始化操作
func init() {
fmt.Println("init")
}
1.表达式和运算符
(1)表达式:必须是一个值
(2)运算符号:
-算数
-比较
-逻辑
-赋值
2.控制语句
(1)if
if expression1 {
}else if expression2 { //满足条件匹配停止
}else if expression3 {
}else {
}
(2)switch
switch 变量 {
case 常量1:
statement1
case 常量2:
statement2
default:
default statement
}
(3)for
for i := 0; i < 5; i++ {
fmt.Println(i)
}
for i :=range s{ //s为一个数组
}
(4)break和continue
break:用于立即退出循环。
continue:用于跳过当前循环的剩余部分,并开始下一次迭代
3.函数
(1)基本语法
func Div(a int, b float64) (float64, string) {
//函数名(参数1,参数2) (返回值1,返回值2)
return 遇到return程序结束
}
(2)可变参数函数
func sum(nums ...int) {
//得到的返回值[100 200 300]
}
(3)匿名和具名返回值
func div(a int ,b int)(int,string){
return res,err
}
func div(a int ,b int)(res int, err string){
res =0
err =""
return
}
(4)匿名函数:没有变量或者没有名字的函数
func (){
}
将匿名函数赋给一个变量(函数整体当作变量)
add := func(a, b int) int {
return a + b
}
fmt.Println(add(5, 3)) // 输出 8
匿名函数自调用()
add :=func (a,b int){
return a+b
}()
匿名函数作为“参数变量的类型”
//f:参数,func(int, int):类型,int:函数的返回值类型,int:整体的返回值类型
func main() {
d :=DoSum(1, 2, func(a int, b int) int {
return a+b //函数参数的返回值
})
fmt.Println(d)
}
func DoSum(a, b int, f func(int, int) int) int { //函数作为参数类型自己内部必须调用,调用结果位主函数的计算值
return a+b+f(a, b) //整体的返回值 //f(a,b)通过上面的return得到结果
}
4.作用域:全局(短变量无法定义在全局作用域),函数级,块级(for,if,{}),包级
查找原则:就近原则
5.闭包:解决作用域变量的访问,防止全局变量污染
经常与匿名函数一起使用,闭包可以在一个内层函数中访问到其外层函数的作用域。(先访问外层函数,然后访问函数内部)
缺点:闭包函数被调用会返回一个新的函数,新的函数不会释放,造成闭包函数不会释放,过多使用闭包会过度占用内存,造成内存泄漏。
例子:
// fn 函数是一个“返回值为匿名函数”的函数
func fn() func () int { //func ()返回值,int返回值类型(具名返回)
var m float64 = 100
return func () int {// 返回匿名函数,int返回值类型
return m;
}
}
func main() {
// 调用 fn 函数,将返回的匿名函数赋值给变量 f
f := fn()
// 调用匿名函数 f,函数内的函数
f()
}
6.延迟调用(defer):最后执行,但是在return之前。
func main() {
defer fmt.Println("Bye~")
fmt.Println("hello world")
}
// 运行结果
hello world
Bye~
7.init函数:在main函数之前被调用,完成一些初始化操作
func init() {
fmt.Println("init")
}