package main
import "fmt"
//a:=5//错误定义,全局变量不能使用简短定义
var a = 5 //类型推导
var b int = 6
func getSum(a int) int { //递归函数
if a == 1 {
return 1
} else {
return getSum(a-1) + a
}
}
func feb(n int) int { //斐波那契数列
if n == 1 {
return 1
} else if n == 2 {
return 1
} else {
return feb(n-1) + feb(n-2)
}
}
func fun1(a, b int) {
fmt.Printf("a: %v\n", a)
fmt.Printf("b: %v\n", b)
}
func main() {
/*p
1.局部变量和全局变量:
局部变量:函数内部定义的变量,if/for语句中定义的变量作用域则仅限于此代码块
全局变量:函数外部定义的变量,所有函数都可以使用,如果不想它被改变,可以设置为常量(const)
2.defer语句:
使用defer关键词来延迟一个函数或者方法的执行,满足栈的结构
用法:
A:对象.close(),临时文件的删除,在文件打开时直接写close操作
B:go语言中关于异常的处理,使得panic()和recover(),pannic函数用于引起恐慌,导致程序中断执行
recover()函数用于恢复程序的执行,recover()语法上要求必须在defer中执行
3.函数:单纯打印函数名称,则为打印函数的地址,函数也是一个特殊的变量
4.定义一个函数变量:
var c func(int,int)
c=fun1
*/
fmt.Printf("a: %v\n", a)
defer fmt.Printf("\nb: %v\n", b) //使用defer延迟代码的执行
fmt.Println(getSum(100))
for i := 1; i <= 20; i++ {
fmt.Printf("%d\t", feb(i))
}
fmt.Printf("%T\n", feb)
var c func(int) int
c = getSum//将getSum函数地址赋值给c
fmt.Println(c(5))
}
package main
import "fmt"
//a:=5//错误定义,全局变量不能使用简短定义
var a = 5 //类型推导
var b int = 6
func getSum(a int) int { //递归函数
if a == 1 {
return 1
} else {
return getSum(a-1) + a
}
}
func feb(n int) int { //斐波那契数列
if n == 1 {
return 1
} else if n == 2 {
return 1
} else {
return feb(n-1) + feb(n-2)
}
}
func fun1(a, b int) {
fmt.Printf("a: %v\n", a)
fmt.Printf("b: %v\n", b)
}
func main() {
/*p
1.局部变量和全局变量:
局部变量:函数内部定义的变量,if/for语句中定义的变量作用域则仅限于此代码块
全局变量:函数外部定义的变量,所有函数都可以使用,如果不想它被改变,可以设置为常量(const)
2.defer语句:
使用defer关键词来延迟一个函数或者方法的执行,满足栈的结构
用法:
A:对象.close(),临时文件的删除,在文件打开时直接写close操作
B:go语言中关于异常的处理,使得panic()和recover(),pannic函数用于引起恐慌,导致程序中断执行
recover()函数用于恢复程序的执行,recover()语法上要求必须在defer中执行
3.函数:单纯打印函数名称,则为打印函数的地址,函数也是一个特殊的变量
4.定义一个函数变量:
var c func(int,int)
c=fun1
*/
fmt.Printf("a: %v\n", a)
defer fmt.Printf("\nb: %v\n", b) //使用defer延迟代码的执行
fmt.Println(getSum(100))
for i := 1; i <= 20; i++ {
fmt.Printf("%d\t", feb(i))
}
fmt.Printf("%T\n", feb)
var c func(int) int
c = getSum//将getSum函数地址赋值给c
fmt.Println(c(5))
}