3.3. 第 3节:函数-函数类型与作用域

未匹配的标注
本文档最新版为 2023,旧版本可能放弃维护,推荐阅读最新版!

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)
}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~