第 8 节:函数-函数类型与作用域
6: 函数类型
package main
import "fmt"
func demo1(a int, b int) {
fmt.Println(a + b)
}
//func (int,int)int函数类型
func demo2(s1 int, s2 int) {
fmt.Println(s1 + s2)
}
//定义函数类型 为已存在的数据类型起别名
type FUNCDEMO func(int, int)
func main() {
//demo1(10, 20)
//函数的名字表示一个地址 函数在代码区的地址
fmt.Println(demo1)
//f是func (int,int)函数类型定义的变量
//var f func(int, int)
var f FUNCDEMO
//函数类型定义的变量结束函数的地址
f = demo1
fmt.Println(f)
//通过f调用函数
f(10, 20)
f = demo2
f(1, 2)
fmt.Printf("%T", f)
}
7: 07函数的作用域
package main
import "fmt"
//在函数外部定义的变量 成为全局变量
//作用域是在项目中整个文件去使用
//定义的全局变量名不能和其他文件中的全局变量重名
//全局变量名可以和局部变量名重名
//全局变量储存在内存的数据区
//如果全局变量定义时有值 存储在初始化数据区 没有值存储在为初始化数据区
var a int = 10
func main0701() {
//变量先定义后使用 在函数内部变量名是唯一的
//在函数内部定义的变量 成为局部变量
//局部变量的作用域在函数内部
//a := 10
//fmt.Println(a)
//var i int = 10
//for i = 0; i < 5; i++ {
// fmt.Println(i)
//}
//fmt.Println(i)
//在go语言中会采用就进原则 如果在函数内部定义局部变量 和全局变量名重名 会使用局部变量
a := 123
//修改全局变量的值
//如果全局变量的值修改 会影响其他位置使用全局变量的值
a = 110
fmt.Println(a)
demo3()
}
func demo3() {
fmt.Println(a)
}
func main() {
//打印代码区的地址 代码区
fmt.Println(demo3)
//打印全局变量的地址 数据区
fmt.Println(&a)
a := 10
//打印局部变量的地址 栈区
fmt.Println(&a)
}
本作品采用《CC 协议》,转载必须注明作者和本文链接